in-solana by Supanode

Owner does not match

The signer of the token instruction is not the owner of the source token account.

Common causes

  1. Wrong signer. You are signing the transaction with wallet A, but the token account is owned by wallet B.
  2. Confused authority. The token account’s owner field (the wallet that controls it) differs from the account’s on-chain owner field (which is the Token Program). The error refers to the wallet authority, not the program owner.
  3. Delegate authority used incorrectly. A delegate can spend tokens up to the approved amount, but the delegate must be passed as the authority — not the token account owner.

How to fix

  1. Check the token account’s authority. Use getAccountInfo and decode the token account data. The owner field in the decoded data is the wallet that controls this account.
  2. Sign with the correct wallet. Ensure the transaction signer matches the token account’s authority.
  3. For delegated transfers: pass the delegate as the authority and set owner to the delegate’s pubkey in the transfer instruction.

Token account data fields

FieldMeaning
mintThe token mint this account holds
ownerThe wallet pubkey authorized to transfer from this account
amountToken balance
delegateOptional delegate authorized to spend up to delegatedAmount
stateInitialized, Frozen, or Uninitialized

FAQ

What is custom program error: 0x4? Hex 0x4 is decimal 4, which maps to OwnerMismatch in the SPL Token error enum.

Can I change a token account’s owner? Yes. Use the setAuthority instruction with AuthorityType.AccountOwner to transfer control to a different wallet. The current owner must sign.

Is this the same as IncorrectProgramId? No. IncorrectProgramId is about the on-chain account ownership (which program owns the account). OwnerMismatch is about the token-level authority (which wallet can transfer tokens).

Error text variants

  • Owner does not match
  • OwnerMismatch
  • custom program error: 0x4

Updated: