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

101 lines (100 loc) 3.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EvmConnector = void 0; const BaseEvmConnector_1 = require("./BaseEvmConnector"); const Amount_1 = require("../../utils/Amount"); const EvmTransaction_1 = require("./EvmTransaction"); const abiEncode_1 = require("../../utils/abiEncode"); /** * Connector for Ethereum (and EVM-compatible) networks. * * For network-level operations (blocks, gas, broadcasting, contract calls, * tokens, NFTs, logos) use {@link EvmExplorer} via * `cg.explore(cg.networks.ethereum)`. * * @example * ```ts * const cg = new ChainGate(); * const eth = cg.connect(cg.networks.ethereum, wallet); * * // Get the default address (index 0) * const addr = await eth.address(); * * // Get address at index 3 * const addr3 = await eth.address({ index: 3 }); * * // Query balance (uses the wallet's default address) * const balance = await eth.addressBalance(); * * // Query balance at a specific index * const balance3 = await eth.addressBalance({ index: 3 }); * ``` */ class EvmConnector extends BaseEvmConnector_1.BaseEvmConnector { /** @internal */ constructor(wallet, explorer, network) { super(wallet, explorer, network); } createTransaction(params) { return EvmTransaction_1.EvmTransaction.create({ explorer: this.explorer, ...params }); } /** Returns the confirmed and unconfirmed balance for this wallet's address. */ async addressBalance(options) { const addr = await this.address(options); return this.explorer.getAddressBalance(addr); } /** * Returns paginated transaction history for this wallet's address. * * @param page - Pagination cursor. */ async addressHistory(page, options) { const addr = await this.address(options); return this.explorer.getAddressHistory(addr, page); } /** * Returns all ERC-20/ERC-721/ERC-1155 token balances for this wallet's address. * * Each balance is an {@link Amount}. Use `isToken` and `isNFT` to distinguish types. */ async addressTokenBalances(options) { const addr = await this.address(options); return this.explorer.getAddressTokenBalances(addr); } /** Returns the nonce (transaction count) for this wallet's address. */ async addressTransactionCount(options) { const addr = await this.address(options); return this.explorer.getAddressTransactionCount(addr); } /** * Creates an ERC-20 token transfer transaction. * * Token decimals are resolved automatically, so only the amount * in human-readable units is required. * * @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, tokenData] = await Promise.all([ this.address(options), this.explorer.getTokenData(contractAddress), ]); const getPrivateKey = this.createPrivateKeyGetter(index, derivationPath); const decimals = tokenData.decimals ?? 0; const tokenAmount = Amount_1.Amount.fromDecimal(amount, decimals, { symbol: tokenData.symbol ?? '', name: tokenData.name ?? '', network: this.network.id }, this.explorer.global.marketsCache); const data = (0, abiEncode_1.encodeErc20Transfer)(toAddress, tokenAmount.min()); return this.createTransaction({ fromAddress, toAddress: contractAddress, valueWei: 0n, data, getPrivateKey, }); } } exports.EvmConnector = EvmConnector;