I have a pool of NFTs (more than 50, with the same candy machine ID) and want to transfer all with smart contract written with anchor with one instruction. I've read, one transaction can pass only 33 accounts , in other words can transfer upto 9~10 nfts. because for 1 nft sending, nft mint address, source nft account, destination nft account,- these 3 accounts are needed. is there any pass way to transact more in one time?

2 Answers 2


A single transaction has a byte limit which is what causes that ~33 account limit. That limit also includes programs in addition to what you listed above. A transaction is atomic in and of itself, but usually for mass transfers like this you don't really care about that. You can instead build out a bunch of transactions and send them all to transfer in a very short amount of time. If any fail you can retry them.

If you really need the atomicity of a transaction you can create a custom program that you transfer all the nfts to then can change the owner in one transaction.


You can build a transaction with multiple instructions (createTransferCheckedInstruction) to move each token (up to the instruction limit).


And combine them all inside a transaction and run it.

instructions.map(i => tx.add(i))

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.