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 }