I have a use case to assign a new owner to an associated token address (ATA) after it has been created. Having tried this against a local node I was met with an error saying that I could not change the owner. Having looked through the documentation, I found that the extensions for the token 2022 program enforce the immutability of the owner of an ATA by default.

I'd like to turn this off (whether rightly or wrongly) so that I can update the owner to be a multisig account. Is there a way of doing this by way of an additional instruction on the ATA creation transaction? I cannot find a way at present.

The reason I'm doing this is that I would like to create a single multisig account that can be used as the owner of many ATAs (the ATAs will be client deposit addresses). If I can't change the owner after account creation, this will mean that I will need a new multisig account for each and every client deposit address (as the ATA is a derived address from the owner and the mint and I need client deposit addresses to be distinct). This doesn't seem like a very elegant solution, however.

1 Answer 1


Reassigning the owner of an ATA is antipattern -- many dapps just assume that a wallet's account for a token is the ATA, without checking that the owner is valid, so you could trick a dapp into using the wrong account, potentially stealing tokens from someone.

The ATA program does not allow this with token-2022 because it has created so many issues for people, and there's no way to turn it off.

You could get around it by deploying your own modified version of the ATA program, or by using an auxiliary token account, created with a random keypair, instead of an ATA.

The best option though, might be to create your own version of ATAs from inside your program, since then you'll know exactly the right address for each user, ie create auxiliary token accounts at an address defined by:

Pubkey::find_program_address([wallet, mint, token_program_id], MY_PROGRAM_ID)

This way, users can keep using their canonical ATAs as normal, and then your program can manage its own token accounts.

  • I feel like the platform itself doesn't have to be affected just because of Dapps not correctly utilizing a feature that has been offered to and by the platform. Dapps are the one needing to ensure they are correctly utilizing are resources provided to protect their users and this is one of them this is on Dapps themselves for not handling this. In conclusion if this is the case I would strongly disagree to have this enforced as there are use cases to let the token creator decide if they want to allow it to be mutable or not. instead of now forcing for a workaround. Commented May 15 at 12:21

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.