Token Operations
Learn how to transfer SOL and SPL tokens to other wallets
Transfer SOL or any SPL token to another wallet address. The function automatically handles both native SOL transfers and SPL token transfers with proper decimal adjustment.
Copy
// Transfer SOL
const signature = await agent.methods.transfer(
new PublicKey("recipient-address"),
1.5 // amount in SOL
);
// Transfer SPL token
const signature = await agent.methods.transfer(
new PublicKey("recipient-address"),
100, // amount in token units
new PublicKey("token-mint-address")
);
to
PublicKey
Yes
Recipient’s wallet address
amount
number
Yes
Amount to transfer
mint
PublicKey
No
Token mint address (omit for SOL)
Copy
"Send 1 SOL to wallet 8x2dR8Mpzuz2YqyZyZjUbYWKSWesBo5jMx2Q9Y86udVk"
"Transfer 100 USDC to Dm9Un6DVCrCfkiUmPAhE4zVgxeUK8kZtUAgH3QUoQmHP"
"Send 50 tokens to recipient using mint address EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
Copy
// SOL transfer
{
"to": "8x2dR8Mpzuz2YqyZyZjUbYWKSWesBo5jMx2Q9Y86udVk",
"amount": 1
}
// USDC transfer
{
"to": "8x2dR8Mpzuz2YqyZyZjUbYWKSWesBo5jMx2Q9Y86udVk",
"amount": 100,
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
}
// Custom SPL token transfer
{
"to": "8x2dR8Mpzuz2YqyZyZjUbYWKSWesBo5jMx2Q9Y86udVk",
"amount": 50,
"mint": "dRQtYMWaQrBroBrJ2Q53fgVuq95CV9UPGEvpCxa"
}
Here’s a complete example showing different types of transfers:
Copy
import { PingAgentKit } from "ping-agent-kit";
import { PublicKey } from "@ping/web3.js";
async function executeTransfers(agent: PingAgentKit) {
// Transfer SOL
const solTransfer = await agent.methods.transfer(
new PublicKey("recipient"),
1.5 // 1.5 SOL
);
console.log("SOL transfer:", solTransfer);
// Transfer USDC
const usdcTransfer = await agent.methods.transfer(
new PublicKey("recipient"),
100, // 100 USDC
new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v")
);
console.log("USDC transfer:", usdcTransfer);
}
Automatically detects SOL vs SPL token transfers
Handles decimal adjustment for SPL tokens
Creates Associated Token Accounts if needed
Uses single-instruction transactions for efficiency
Copy
try {
const signature = await agent.methods.transfer(recipient, amount, mint);
} catch (error) {
if (error.message.includes("insufficient funds")) {
// Handle insufficient balance
} else if (error.message.includes("invalid account")) {
// Handle invalid addresses
}
}
Amount Validation
Always verify token decimals
Check balances before transfer
Account for transaction fees
Address Validation
Validate recipient addresses
Double-check mint addresses
Use address checksums
Transaction Management
Monitor transaction status
Implement retry logic
Handle timeouts appropriately
Security
Verify recipient addresses carefully
Implement confirmation dialogs
Consider using transaction previews
SOL: Native token (no mint address needed)
USDC:
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
USDT:
Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB
BONK:
DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263
Last updated