Facing verification failed issue and found many similar issues on StackExchange but couldn't solve my problem so posting here.
I have deployed a Rust contract on devnet. It has an instruction which invokes spl_token transfer user's token account to the my contract's token account.
When I call the contract instruction from frontend, the signature verification fails after approve popup from wallet: {"code":-32003,"message":"failed to send transaction: Transaction simulation failed: Error processing Instruction 0: Cross-program invocation with unauthorized signer or writable account"}
Here is the Rust code:
let transfer_to_initializer_ix = spl_token::instruction::transfer(
token_program.key,
source_token_account.key,
destination_token_account.key,
initializer.key,
&[],
1,
)?;
msg!("Calling token program to transfer tokens");
invoke(
&transfer_to_initializer_ix,
&[
source_token_account.clone(),
destination_token_account.clone(),
initializer.clone(),
token_program.clone(),
]
)?;
This is how I send the call to instruction from my react app:
const instruction = new web3.TransactionInstruction({
keys: [
{
pubkey: publicKey,
isSigner: true,
isWritable: false,
},
{
pubkey: pda,
isSigner: false,
isWritable: true
},
{
isSigner: false,
isWritable: true,
pubkey: web3.SystemProgram.programId
},
{
is_signer: false,
is_writable: true,
pubkey: userAta,
},
{
is_signer: false,
is_writable: true,
pubkey: crowdpadATA,
},
{
is_signer: false,
is_writable: false,
pubkey: token.TOKEN_PROGRAM_ID,
},
],
data: buffer,
programId: crowdpadStakingProgram
})
console.log('adding staking instruction')
transaction.add(instruction)
try {
const txid = await sendTransaction(transaction, connection);
alert(`Transaction submitted: https://explorer.solana.com/tx/${txid}?cluster=devnet`)
console.log(`Transaction submitted: https://explorer.solana.com/tx/${txid}?cluster=devnet`)
} catch (e) {
console.log(JSON.stringify(e))
alert(JSON.stringify(e))
}
}
I checked the documentation and also discussed the issue with peers. Unfortunately the issue persisted. All help is appreciated!