github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/std/gasprice.go (about)

     1  package std
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/gnolang/gno/tm2/pkg/errors"
     7  )
     8  
     9  // minimum gas price is Price/Gas per gas unit.
    10  type GasPrice struct {
    11  	Gas   int64 `json:"gas"`
    12  	Price Coin  `json:"price"`
    13  }
    14  
    15  func ParseGasPrice(gasprice string) (GasPrice, error) {
    16  	parts := strings.Split(gasprice, "/")
    17  	if len(parts) != 2 {
    18  		return GasPrice{}, errors.New("invalid gas price: %s", gasprice)
    19  	}
    20  	price, err := ParseCoin(parts[0])
    21  	if err != nil {
    22  		return GasPrice{}, errors.Wrap(err, "invalid gas price: %s (invalid price)", gasprice)
    23  	}
    24  	gas, err := ParseCoin(parts[1])
    25  	if err != nil {
    26  		return GasPrice{}, errors.Wrap(err, "invalid gas price: %s (invalid gas denom)", gasprice)
    27  	}
    28  	if gas.Denom != "gas" {
    29  		return GasPrice{}, errors.New("invalid gas price: %s (invalid gas denom)", gasprice)
    30  	}
    31  	return GasPrice{
    32  		Gas:   gas.Amount,
    33  		Price: price,
    34  	}, nil
    35  }
    36  
    37  func ParseGasPrices(gasprices string) (res []GasPrice, err error) {
    38  	parts := strings.Split(gasprices, ";")
    39  	if len(parts) == 0 {
    40  		return nil, errors.New("invalid gas prices: %s", gasprices)
    41  	}
    42  	res = make([]GasPrice, len(parts))
    43  	for i, part := range parts {
    44  		res[i], err = ParseGasPrice(part)
    45  		if err != nil {
    46  			return nil, errors.Wrap(err, "invalid gas prices: %s", gasprices)
    47  		}
    48  	}
    49  	return res, nil
    50  }