Solana: BigInt error during NFT transfer
As a Solana developer, you’ve likely encountered issues with transferring NFTs (non-fungible tokens) using the SPL-TOKEN program on your local Solana network. In this article, we’ll explore the cause and solution for a common issue that can arise during NFT transfers: BigInt errors.
The issue:
When transferring an NFT from one account to another, the transfer
function may fail due to a BigInt (a type of large integer) mismatch between the two accounts. This can happen when the transfer
function attempts to transfer the NFT without properly handling the transaction’s amount
parameter.
The error:
Here’s an example of what the error might look like in your code:
const { Connection, PublicKey, Transaction, Keypair } = require('@solana/web3.js');
// Create a new key pair for the sender
const senderKeypair = Keypair.generate();
// Define the connection and keys for the SPL-TOKEN program
const connection = new Connection('
const splTokenProgramId = 'YOUR_SPL_TOKEN_PROGRAM_ID';
const splTokenAccountId = 'YOUR_SPL_TOKEN_ACCOUNT_ID';
// Create a transaction to transfer an NFT
const transaction = new Transaction()
.add(
[
// Set the transfer parameters
{
account0: splTokenAccountId,
amount: BigInt(1),
pubkey: splTokenProgramId.toPublicKey(),
pubkey: senderKeypair.publicKey.toBase58(),
},
],
);
// Try to transfer the NFT without error
transaction.sign(senderKeypair);
connection.sendTransaction(transaction);
// If this line returns an error, it means there was a BigInt mismatch
The solution:
To fix the BigInt error, you need to make sure that both accounts have sufficient balance and that the amount
parameter is valid. Here are some steps to resolve the issue:
- Check account balances: Make sure that both accounts have sufficient balances (BNA) for the transfer amount.
- Validate the
amount
parameter: Verify that theamount
value is a valid BigInt and does not exceed the maximum allowed value (e.g. 2^256 – 1).
- Update transaction parameters:
Change the
amount
parameter to a valid BigInt or update it to a smaller amount if necessary.
Here is an updated example that addresses these issues:
const { Connection, PublicKey, Transaction, Keypair } = require('@solana/web3.js');
// Create a new key pair for the sender
const senderKeypair = Keypair.generate();
// Define the connection and keys for the SPL-TOKEN program
const connection = new Connection('
const splTokenProgramId = 'YOUR_SPL_TOKEN_PROGRAM_ID';
const splTokenAccountId = 'YOUR_SPL_TOKEN_ACCOUNT_ID';
// Calculate the required amount in BigInts
const requiredAmount = 1n;
let availableBalance = splTokenAccountId.balances.get(splTokenAccountId.publicKey).amount;
// Check if there is enough balance for the transfer
if (availableBalance < requiredAmount) {
throw new Error('Insufficient balance');
}
// Create a transaction with the updated parameters
const transaction = new Transaction()
.add(
[
// Set the transfer parameters
{
account0: splTokenAccountId,
amount: BigInt(requiredAmount),
pubkey: splTokenProgramId.toPublicKey(),
pubkey: senderKeypair.publicKey.toBase58(),
},
],
);
// Try to transfer the NFT without error
transaction.sign(senderKeypair);
connection.sendTransaction(transaction);
// If this line does not throw an error, it means everything is valid
If you follow these steps and update your code accordingly, you should be able to resolve the BigInt error during NFT transfers.