1. I created a USDC ATA and was accepting funds there.

  2. I closed the ATA and recouped the SOL. This means the ATA's owner became the System Program instead of the Token Program.

  3. Finally, someone sent USDC to the now-closed ATA that is owned by the System Program. Out of courtesy, since the recipient (the now-closed ATA) is owned by the System Program, a new ATA was created with the now-closed ATA listed as the owner.

Is there anyway to get the funds back? I could theoretically re-create the original ATA, but I would need a custom instruction added to the Token Program to do the transfer (the instruction would load the original ATA, see that I own it, and use that as proof to allow the transfer from the new ATA).

1 Answer 1


It turns out the answer is yes.

There is a recover_nested instruction in the Associated Token Program: https://github.com/solana-labs/solana-program-library/blob/master/associated-token-account/program/src/instruction.rs#L123-L161

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.