diff --git a/package.json b/package.json index f67f3d0..5c4fd4a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@cerc-io/registry-sdk", - "version": "0.2.10", + "version": "0.2.11", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "git@github.com:cerc-io/registry-sdk.git", diff --git a/src/index.ts b/src/index.ts index 29c9721..ad5c40a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -588,3 +588,4 @@ export { LaconicClient }; export * from './constants'; export * from './types/cerc/bond/message'; export * from './types/cerc/onboarding/message'; +export { getGasPrice, parseGasAndFees } from './util'; diff --git a/src/util.ts b/src/util.ts index 809337e..11bc5a7 100644 --- a/src/util.ts +++ b/src/util.ts @@ -1,6 +1,8 @@ import * as Block from 'multiformats/block'; import { sha256 as hasher } from 'multiformats/hashes/sha2'; +import assert from 'assert'; +import { GasPrice, StdFee, parseCoins } from '@cosmjs/stargate'; import * as dagCBOR from '@ipld/dag-cbor'; import * as dagJSON from '@ipld/dag-json'; @@ -22,7 +24,7 @@ export class Util { let keys = Object.keys(obj); keys = keys.sort(); - const newObject: {[key: string]: any} = {}; + const newObject: { [key: string]: any } = {}; for (let i = 0; i < keys.length; i++) { newObject[keys[i]] = Util.sortJSON(obj[keys[i]]); @@ -77,7 +79,7 @@ export class Util { * Unmarshal attributes array to object. */ static fromGQLAttributes (attributes: any[] = []) { - const res: {[key: string]: any} = {}; + const res: { [key: string]: any } = {}; attributes.forEach(attr => { res[attr.key] = (attr.value === null) ? null : this.fromGQLValue(attr.value); @@ -119,3 +121,33 @@ export class Util { return block.cid.toString(); } } + +/** + * Get gas in proper format + */ +export const parseGasAndFees = (gas?: string, fees?: string): StdFee | undefined | number => { + // If fees is not given or a number, treat it as a gas estimation multiplier + if (fees === null || fees === undefined) { + return undefined; + } + + const isFeesANumber = !isNaN(Number(fees)); + if (isFeesANumber) { + return Number(fees); + } + + // If fees is not a gas estimation multiplier, gas is required + assert(gas, 'Invalid gas.'); + + return { + amount: parseCoins(String(fees)), + gas: String(gas) + }; +}; + +/** + * Get gas price in proper format + */ +export const getGasPrice = (gasPrice: string | null): GasPrice | undefined => { + return gasPrice != null ? GasPrice.fromString(String(gasPrice)) : undefined; +};