UNPKG

chaingate

Version:

Multi-chain cryptocurrency SDK for TypeScript — unified API for Bitcoin, Ethereum, Litecoin, Dogecoin, Bitcoin Cash, Polygon, Arbitrum, and any EVM-compatible chain. Create wallets, query balances, send transactions, and manage tokens and NFTs across UTXO

86 lines (85 loc) 3.42 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EvmRpcConnector = void 0; const BaseEvmConnector_1 = require("../EvmConnector/BaseEvmConnector"); const decimal_js_1 = __importDefault(require("decimal.js")); const EvmRpcTransaction_1 = require("./EvmRpcTransaction"); const abiEncode_1 = require("../../utils/abiEncode"); /** * Connector for any EVM-compatible network via a direct JSON-RPC connection. * * Supported operations: `address()`, `addressBalance()`, `transfer()`, * `transferToken()`, `transferNft()`, `transferErc1155()`, `callContract()`. * For transaction history, token-balance discovery, and fiat conversion use * {@link EvmConnector} instead. * * @example * ```ts * const cg = new ChainGate(); * const network = cg.networks.evmRpc({ * rpcUrl: 'https://bsc-dataseed.binance.org', * chainId: 56, * name: 'BNB Smart Chain', * symbol: 'BNB', * }); * * const conn = cg.connect(network, wallet); * const addr = await conn.address(); * const balance = await conn.addressBalance(); * const tx = await conn.transfer(network.amount('0.1'), '0x...'); * const broadcasted = await tx.signAndBroadcast(); * ``` */ class EvmRpcConnector extends BaseEvmConnector_1.BaseEvmConnector { /** @internal */ constructor(wallet, explorer, network) { super(wallet, explorer, network); } createTransaction(params) { return EvmRpcTransaction_1.EvmRpcTransaction.create({ explorer: this.explorer, ...params }); } /** * Returns the native coin balance for this wallet's address. * * The returned `Amount` uses the network's decimals and native token metadata. * Fiat conversion is not supported here — use {@link EvmConnector} when needed. */ async addressBalance(options) { const addr = await this.address(options); const balanceWei = await this.explorer.getBalance(addr); const balance = this.network.amountFromSmallestUnit(balanceWei); return { address: addr, balance }; } /** * Creates an ERC-20 token transfer transaction. * * Token decimals are resolved automatically. * * @param contractAddress - Token contract address (with `0x` prefix). * @param amount - Amount of tokens in human-readable units. * @param toAddress - Recipient address. * * @throws {@link UnsupportedOperationError} if the wallet is view-only. */ async transferToken(contractAddress, amount, toAddress, options) { const { index = 0, derivationPath } = options ?? {}; const [fromAddress, decimals] = await Promise.all([ this.address(options), this.explorer.getTokenDecimals(contractAddress), ]); const getPrivateKey = this.createPrivateKeyGetter(index, derivationPath); const rawAmount = BigInt(new decimal_js_1.default(amount.toString()).mul(new decimal_js_1.default(10).pow(decimals)).toFixed(0)); const data = (0, abiEncode_1.encodeErc20Transfer)(toAddress, rawAmount); return this.createTransaction({ fromAddress, toAddress: contractAddress, valueWei: 0n, data, getPrivateKey, }); } } exports.EvmRpcConnector = EvmRpcConnector;