UNPKG

@base-org/account

Version:
70 lines 2.76 kB
import { encodeFunctionData, parseUnits } from 'viem'; import { CHAIN_IDS, ERC20_TRANSFER_ABI, TOKENS } from '../constants.js'; /** * Encodes an ERC20 transfer call * @param recipient - The recipient address * @param amount - The amount in USDC (will be converted to 6 decimals) * @returns The encoded function data */ export function encodeTransferCall(recipient, amount) { const amountInUnits = parseUnits(amount, TOKENS.USDC.decimals); // Encode the transfer function call return encodeFunctionData({ abi: ERC20_TRANSFER_ABI, functionName: 'transfer', args: [recipient, amountInUnits], }); } /** * Builds the wallet_sendCalls request parameters * @param transferData - The encoded transfer call data * @param testnet - Whether to use testnet * @param payerInfo - Optional payer information configuration for data callbacks * @returns The request parameters for wallet_sendCalls */ export function buildSendCallsRequest(transferData, testnet, payerInfo) { const network = testnet ? 'baseSepolia' : 'base'; const chainId = CHAIN_IDS[network]; const usdcAddress = TOKENS.USDC.addresses[network]; // Build the call object const call = { to: usdcAddress, data: transferData, value: '0x0', // No ETH value for ERC20 transfer }; // Build the capabilities object const capabilities = {}; // Add dataCallback capability if payerInfo is provided if (payerInfo && payerInfo.requests.length > 0) { capabilities.dataCallback = Object.assign({ requests: payerInfo.requests.map((request) => { var _a; return ({ type: request.type, optional: (_a = request.optional) !== null && _a !== void 0 ? _a : false, }); }) }, (payerInfo.callbackURL && { callbackURL: payerInfo.callbackURL })); } // Build the request parameters const requestParams = { version: '2.0.0', chainId: chainId, calls: [call], capabilities, }; return requestParams; } /** * Translates payment options into a wallet_sendCalls request * @param recipient - The recipient address * @param amount - The amount to send * @param testnet - Whether to use testnet * @param payerInfo - Optional payer information configuration for data callbacks * @returns The complete request parameters */ export function translatePaymentToSendCalls(recipient, amount, testnet, payerInfo) { // Encode the transfer call const transferData = encodeTransferCall(recipient, amount); // Build and return the sendCalls request return buildSendCallsRequest(transferData, testnet, payerInfo); } //# sourceMappingURL=translatePayment.js.map