Transfer Crypto
This guide explains how to transfer crypto tokens using the Notus API. You will set up a wallet, generate a transfer request, and execute the transfer.
1. Initialize Wallet AccountCopied!
First, use your private key to initialize a wallet account. This allows you to sign messages and interact with the blockchain
import { privateKeyToAccount } from 'viem/accounts';
const BRZ_POLYGON = '0x4eD141110F6EeeAbA9A1df36d8c26f684d2475Dc';
const USDC_POLYGON = '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359';
const privKey = '0x<private-key>'; // Replace <private-key> with your private key
const account = privateKeyToAccount(privKey);
2. Get Smart Wallet AddressCopied!
Before transferring tokens, you need to register and retrieve the smart wallet address for Account Abstraction.
const getSmartWalletAddress = async () => {
const FACTORY_ADDRESS = "0x0000000000400CdFef5E2714E63d8040b700BC24";
let res = await fetch(`https://<baseUrl>/api/v1/wallets/register`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": "<api-key>",
},
body: JSON.stringify({
externallyOwnedAccount: externallyOwnedAccount,
factory: FACTORY_ADDRESS,
salt: "0",
}),
});
if (!res?.ok) {
return
}
const data = await res.json();
setAccountAbstraction(data.wallet.accountAbstraction);
};
3. Create Transfer ParametersCopied!
Define the parameters for your transfer, specifying the token, amount, sender's address, and recipient's address.
const transferParams = {
payGasFeeToken: USDC_POLYGON, // Token used to pay gas fees
token: BRZ_POLYGON, // Token to transfer
amount: '2', // Amount to transfer
walletAddress: '0x9Ea7DbDA009D6fDeb0AEbF82c62F3CDC4A947098', // Sender's wallet
signerAddress: account.address, // Signer's address
toAddress: '0x<recipient-address>', // Replace <recipient-address> with the recipient's wallet
chain: 'POLYGON', // Blockchain network
gasFeePaymentMethod: 'DEDUCT_FROM_AMOUNT', // Fee payment method
};
4. Request TransferCopied!
Send the transfer request to the Notus API to get a quote for executing the transfer.
const { data } = await fetch('http://<baseUrl>/api/v1/crypto/transfer', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': '<api-key>', // Replace <api-key> with your API key
},
body: JSON.stringify(transferParams),
}).then((res) => res.json());
5. Execute TransferCopied!
Sign the transfer quote and execute the transfer using the Notus API.
const signature = await account.signMessage({
message: {
raw: data.quoteId, // Quote ID from the transfer quote
},
});
const res = await fetch('http://<baseUrl>/api/v1/crypto/execute-user-op', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': '<api-key>', // Replace <api-key> with your API key
},
body: JSON.stringify({ signature, quoteId: data.quoteId }),
}).then((res) => res.json());
console.log('Transfer Result:', res);