@base-org/account
Version:
Base Account SDK
70 lines • 2.76 kB
JavaScript
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