Search code examples
javascriptsolana

What is "Signature Verification Failed" in Solana?


I'm trying to call a Solana Program, and when I run sendAndConfirmTransaction, it gives me Signature Verification Failed, and I'm not sure why.

const {sendAndConfirmTransaction, clusterApiUrl, Connection} = require("@solana/web3.js");

let signer = Keypair.generate();
let anotherKeypair = Keypair.generate();

let transaction = someInstruction(signer, anotherKeypair); 
let connection = new Connection(clusterApiUrl('testnet'));

sendAndConfirmTransaction(
  connection,
  transaction,
  [signer]
);

Solution

  • In Solana, you need to pass in both the keypairs of the signer, and the keypairs of the accounts you're creating.

    const {sendAndConfirmTransaction, clusterApiUrl, Connection} = require("@solana/web3.js");
    
    let signer = Keypair.generate();
    let anotherKeypair = Keypair.generate();
    
    let transaction = someInstruction(signer, anotherKeypair); 
    let connection = new Connection(clusterApiUrl('testnet'));
    
    sendAndConfirmTransaction(
      connection,
      transaction,
      [signer, anotherKeypair] // <-- If you made the keypair, you probably want it here!
    );
    

    If you're using a wallet connect library, like @solana/wallet-adapter-react, you don't have the signer, but you will still have any keypairs of accounts your generating:

    const { sendTransaction } = useWallet();
    
    const anotherKeypair = Keypair.generate(); 
    
    const signature = await sendTransaction(transaction, connection, {
      signers: [anotherKeypair] // You probably want to pass in the keypair here!
    });