/** * ERC-20 Token Utilities * * Build unsigned ERC-20 token transfer and approval transactions * for signing via the FROST threshold network. Also provides * balance and allowance queries. * * Uses ethers.js (already a dependency of @sequence0/sdk). * * @example * ```typescript * import { Sequence0, buildTokenTransfer, getTokenBalance } from '@sequence0/sdk'; * * const s0 = new Sequence0({ network: 'mainnet', ownerPrivateKey: '0x...' }); * const wallet = await s0.createWallet({ chain: 'ethereum' }); * * // Check USDC balance * const balance = await getTokenBalance( * 'https://eth.llamarpc.com', * '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC on Ethereum * wallet.address, * ); * console.log(`${balance.balance} ${balance.symbol}`); // "1234.56 USDC" * * // Build a token transfer transaction * const { unsignedTx, messageHash } = await buildTokenTransfer( * 'https://eth.llamarpc.com', * '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', * wallet.address, * '0xRecipient...', * '100.0', // human-readable amount * 1, // chainId (Ethereum mainnet) * ); * * // Sign via FROST and broadcast * const signature = await s0.signAndWait(wallet.walletId, messageHash); * ``` */ /** Minimal ERC-20 token metadata. */ export interface TokenInfo { /** Token contract address */ address: string; /** Token symbol (e.g., "USDC") */ symbol: string; /** Token decimals (e.g., 6 for USDC, 18 for WETH) */ decimals: number; } /** Result of building an unsigned ERC-20 transaction. */ export interface UnsignedTokenTx { /** RLP-serialized unsigned transaction (hex) */ unsignedTx: string; /** Keccak256 hash of the unsigned transaction — submit this to FROST for signing */ messageHash: string; } /** Token balance result. */ export interface TokenBalanceResult { /** Human-readable balance (e.g., "1234.56") */ balance: string; /** Token symbol */ symbol: string; /** Token decimals */ decimals: number; } /** Token allowance result. */ export interface TokenAllowanceResult { /** Human-readable allowance (e.g., "1000.0") */ allowance: string; /** Token symbol */ symbol: string; /** Token decimals */ decimals: number; } /** * Build an unsigned ERC-20 transfer transaction. * * Queries the token contract for decimals, converts the human-readable * amount to the smallest unit, encodes the `transfer(address,uint256)` * call, and serializes as an EIP-1559 (type 2) transaction. * * @param rpcUrl - JSON-RPC endpoint for the target chain * @param tokenAddress - ERC-20 token contract address * @param from - Sender address (the Sequence0 wallet) * @param to - Recipient address * @param amount - Human-readable amount (e.g., "10.5") * @param chainId - Chain ID (e.g., 1 for Ethereum mainnet) * @returns Unsigned transaction hex and its keccak256 hash for signing */ export declare function buildTokenTransfer(rpcUrl: string, tokenAddress: string, from: string, to: string, amount: string, chainId: number): Promise; /** * Build an unsigned ERC-20 approval transaction. * * Approves `spender` to spend up to `amount` tokens on behalf of `from`. * Useful for DEX interactions, bridging, and contract allowances. * * @param rpcUrl - JSON-RPC endpoint for the target chain * @param tokenAddress - ERC-20 token contract address * @param from - Token owner address (the Sequence0 wallet) * @param spender - Address to approve for spending * @param amount - Human-readable amount to approve (e.g., "1000.0") * @param chainId - Chain ID * @returns Unsigned transaction hex and its keccak256 hash for signing */ export declare function buildTokenApproval(rpcUrl: string, tokenAddress: string, from: string, spender: string, amount: string, chainId: number): Promise; /** * Get the ERC-20 token balance for a wallet address. * * @param rpcUrl - JSON-RPC endpoint * @param tokenAddress - ERC-20 token contract address * @param walletAddress - Wallet address to query * @returns Human-readable balance, symbol, and decimals */ export declare function getTokenBalance(rpcUrl: string, tokenAddress: string, walletAddress: string): Promise; /** * Get the ERC-20 token allowance for a spender. * * @param rpcUrl - JSON-RPC endpoint * @param tokenAddress - ERC-20 token contract address * @param ownerAddress - Token owner address * @param spenderAddress - Spender address to check allowance for * @returns Human-readable allowance, symbol, and decimals */ export declare function getTokenAllowance(rpcUrl: string, tokenAddress: string, ownerAddress: string, spenderAddress: string): Promise; /** * Get basic token metadata (symbol and decimals). * * @param rpcUrl - JSON-RPC endpoint * @param tokenAddress - ERC-20 token contract address * @returns Token info with address, symbol, and decimals */ export declare function getTokenInfo(rpcUrl: string, tokenAddress: string): Promise; //# sourceMappingURL=erc20.d.ts.map