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
JavaScript
;
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;