UNPKG

@tedcryptoorg/cosmos-signer

Version:

Cosmos Signer - A library for signing transactions for Cosmos SDK chains

59 lines (58 loc) 2.62 kB
import { ChainDirectory, CosmosDirectory } from '@tedcryptoorg/cosmos-directory'; import { GasPrice } from "@cosmjs/stargate"; import BigNumber from 'bignumber.js'; export class Network { data; constructor(data) { this.data = data; } static async createFromChain(chain, txTimeout = 1000, restUrl = undefined, rpcUrl = undefined) { if (typeof chain === 'string') { chain = (await (new ChainDirectory().getChainData(chain))).chain; } return new Network({ ...chain, chain_name: chain.name, prettyName: chain.name, name: chain.name, authzAminoSupport: chain.params.authz, prefix: chain.bech32_prefix, txTimeout, coinType: chain.slip44, chainId: chain.chain_id, rpcUrl: rpcUrl ?? new CosmosDirectory().rpcUrl(chain.name), restUrl: restUrl ?? new CosmosDirectory().restUrl(chain.name), gasPriceStep: this.getGasPriceStep(chain), decimals: chain.decimals, coinGeckoId: chain.coingecko_id, authzAminoGenericOnly: true, aminoPreventTypes: [], authzAminoExecPreventTypes: [], authzAminoLiftedValues: true, data: {} }); } static getGasPriceStep(chain, gasPrice) { const feeConfig = chain.fees.fee_tokens?.find(el => el.denom === chain.denom); let gasPriceNumber = 0; if (gasPrice) { gasPriceNumber = Number(GasPrice.fromString(gasPrice).amount.toString()); return { low: gasPriceNumber, average: feeConfig?.average_gas_price ?? gasPriceNumber, high: feeConfig?.high_gas_price ?? new BigNumber(gasPriceNumber).multipliedBy(2).toNumber(), }; } const minimumGasPrice = feeConfig?.low_gas_price ?? feeConfig?.fixed_min_gas_price; let defaultGasPrice = new BigNumber(0.000000025).multipliedBy(new BigNumber(10).pow(chain.decimals || 6)).toFixed(14); if (minimumGasPrice !== undefined && new BigNumber(minimumGasPrice).isGreaterThan(new BigNumber(defaultGasPrice))) { defaultGasPrice = String(minimumGasPrice); } gasPriceNumber = feeConfig?.average_gas_price ?? Number(defaultGasPrice); return { low: minimumGasPrice ?? new BigNumber(gasPriceNumber).multipliedBy(0.5).toNumber(), average: gasPriceNumber, high: feeConfig?.high_gas_price ?? new BigNumber(gasPriceNumber).multipliedBy(2).toNumber(), }; } }