UNPKG

@xchainjs/xchain-bsc

Version:

Binance Smart Chain EVM client for XChainJS

172 lines (162 loc) 6.97 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var xchainClient = require('@xchainjs/xchain-client'); var xchainEvm = require('@xchainjs/xchain-evm'); var xchainEvmProviders = require('@xchainjs/xchain-evm-providers'); var xchainUtil = require('@xchainjs/xchain-util'); var ethers = require('ethers'); var BigNumber = require('bignumber.js'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var BigNumber__default = /*#__PURE__*/_interopDefault(BigNumber); /** * Module providing configuration parameters and providers for the Binance Smart Chain (BSC) client. */ /** * Lower fee bound for BSC transactions. */ const LOWER_FEE_BOUND = 99000000; /** * Upper fee bound for BSC transactions. */ const UPPER_FEE_BOUND = 1000000000000; /** * Decimal precision for BSC gas asset. */ const BSC_GAS_ASSET_DECIMAL = 18; /** * Chain identifier for Binance Smart Chain (BSC). */ const BSCChain = 'BSC'; /** * Base "chain" asset of Binance Smart Chain (BSC). */ const AssetBSC = { chain: BSCChain, symbol: 'BNB', ticker: 'BNB', type: xchainUtil.AssetType.NATIVE, }; // Ankr api key const ankrApiKey = process.env.ANKR_API_KEY; // Ethers providers const BSC_MAINNET_ETHERS_PROVIDER = new ethers.JsonRpcProvider(`https://rpc.ankr.com/bsc/${ankrApiKey}`); const BSC_TESTNET_ETHERS_PROVIDER = new ethers.JsonRpcProvider('https://bsc-testnet.public.blastapi.io'); const ethersJSProviders = { [xchainClient.Network.Mainnet]: BSC_MAINNET_ETHERS_PROVIDER, [xchainClient.Network.Testnet]: BSC_TESTNET_ETHERS_PROVIDER, [xchainClient.Network.Stagenet]: BSC_MAINNET_ETHERS_PROVIDER, }; // ONLINE providers const BSC_ONLINE_PROVIDER_TESTNET = new xchainEvmProviders.EtherscanProviderV2(BSC_TESTNET_ETHERS_PROVIDER, 'https://api.etherscan.io/v2', process.env.ETHERSCAN_API_KEY || '', BSCChain, AssetBSC, BSC_GAS_ASSET_DECIMAL, 97); const BSC_ONLINE_PROVIDER_MAINNET = new xchainEvmProviders.EtherscanProviderV2(BSC_MAINNET_ETHERS_PROVIDER, 'https://api.etherscan.io/v2', process.env.ETHERSCAN_API_KEY || '', BSCChain, AssetBSC, BSC_GAS_ASSET_DECIMAL, 56); const bscProviders = { [xchainClient.Network.Mainnet]: BSC_ONLINE_PROVIDER_MAINNET, [xchainClient.Network.Testnet]: BSC_ONLINE_PROVIDER_TESTNET, [xchainClient.Network.Stagenet]: BSC_ONLINE_PROVIDER_MAINNET, }; // Explorers const BSC_MAINNET_EXPLORER = new xchainClient.ExplorerProvider('https://bscscan.com/', 'https://bscscan.com/address/%%ADDRESS%%', 'https://bscscan.com/tx/%%TX_ID%%'); const BSC_TESTNET_EXPLORER = new xchainClient.ExplorerProvider('https://testnet.bscscan.com/', 'https://testnet.bscscan.com/address/%%ADDRESS%%', 'https://testnet.bscscan.com/tx/%%TX_ID%%'); const bscExplorerProviders = { [xchainClient.Network.Mainnet]: BSC_MAINNET_EXPLORER, [xchainClient.Network.Testnet]: BSC_TESTNET_EXPLORER, [xchainClient.Network.Stagenet]: BSC_MAINNET_EXPLORER, }; // Default parameters const ethRootDerivationPaths = { [xchainClient.Network.Mainnet]: "m/44'/60'/0'/0/", [xchainClient.Network.Testnet]: "m/44'/60'/0'/0/", [xchainClient.Network.Stagenet]: "m/44'/60'/0'/0/", }; const defaults = { [xchainClient.Network.Mainnet]: { approveGasLimit: new BigNumber__default.default(200000), transferGasAssetGasLimit: new BigNumber__default.default(23000), transferTokenGasLimit: new BigNumber__default.default(100000), gasPrice: new BigNumber__default.default(30 * Math.pow(10, 9)), }, [xchainClient.Network.Testnet]: { approveGasLimit: new BigNumber__default.default(200000), transferGasAssetGasLimit: new BigNumber__default.default(23000), transferTokenGasLimit: new BigNumber__default.default(100000), gasPrice: new BigNumber__default.default(30 * Math.pow(10, 9)), }, [xchainClient.Network.Stagenet]: { approveGasLimit: new BigNumber__default.default(200000), transferGasAssetGasLimit: new BigNumber__default.default(23000), transferTokenGasLimit: new BigNumber__default.default(100000), gasPrice: new BigNumber__default.default(30 * Math.pow(10, 9)), }, }; /** * Default parameters for the BSC client. */ const defaultBscParams = { chain: BSCChain, gasAsset: AssetBSC, gasAssetDecimals: BSC_GAS_ASSET_DECIMAL, defaults, providers: ethersJSProviders, explorerProviders: bscExplorerProviders, dataProviders: [bscProviders], network: xchainClient.Network.Mainnet, feeBounds: { lower: LOWER_FEE_BOUND, upper: UPPER_FEE_BOUND, }, rootDerivationPaths: ethRootDerivationPaths, }; /** * Module importing and providing a customized client for the Binance Smart Chain (BSC). */ /** * Customized BSC client extending the base XchainEvmClient. */ class ClientKeystore extends xchainEvm.ClientKeystore { /** * Constructor for the BSC client. * * @param {Object} config Configuration parameters for the client. Defaults to defaultBscParams if not provided. */ constructor(config = defaultBscParams) { super(Object.assign(Object.assign({}, config), { signer: config.phrase ? new xchainEvm.KeystoreSigner({ phrase: config.phrase, provider: config.providers[config.network || xchainClient.Network.Mainnet], derivationPath: config.rootDerivationPaths ? config.rootDerivationPaths[config.network || xchainClient.Network.Mainnet] : '', }) : undefined })); } } /** * Class definition for the Binance Smart Chain EVM client. * Extends the `XchainEvmClient` class. */ class ClientLedger extends xchainEvm.ClientLedger { /** * Constructor for the Binance Smart Chain EVM client. * @param {Object} config - Configuration object for the client (optional). * Defaults to `defaultEthParams` if not provided. */ constructor(config) { // Call the constructor of the parent class with the provided config or the default parameters super(Object.assign(Object.assign({}, config), { signer: new xchainEvm.LedgerSigner({ transport: config.transport, provider: config.providers[config.network || xchainClient.Network.Mainnet], derivationPath: config.rootDerivationPaths ? config.rootDerivationPaths[config.network || xchainClient.Network.Mainnet] : '', }) })); } } // Export all elements from the 'client' module exports.AssetBSC = AssetBSC; exports.BSCChain = BSCChain; exports.BSC_GAS_ASSET_DECIMAL = BSC_GAS_ASSET_DECIMAL; exports.Client = ClientKeystore; exports.ClientKeystore = ClientKeystore; exports.ClientLedger = ClientLedger; exports.LOWER_FEE_BOUND = LOWER_FEE_BOUND; exports.UPPER_FEE_BOUND = UPPER_FEE_BOUND; exports.default = ClientKeystore; exports.defaultBscParams = defaultBscParams;