te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - What is "Signature Verification Failed" in Solana? - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - What is "Signature Verification Failed" in Solana? - Stack Overflow

programmeradmin3浏览0评论

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]
);

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]
);
Share Improve this question asked Dec 18, 2021 at 19:44 Evan ConradEvan Conrad 4,3896 gold badges34 silver badges48 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 9

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!
});

This worked for me.

tx.partialSign

let tx = new Transaction();
const anotherKeypair = Keypair.generate(); 

tx.recentBlockhash =  (await connection.getLatestBlockhash("finalized")).blockhash;
tx.feePayer = new PublicKey(publicKeyStringfromWallet);
console.log(tx)

tx.partialSign(anotherKeypair) // THIS SIGNS for web3 keypair

const { signature } = await window.solana.signAndSendTransaction(tx); //THIS signs wallet keypair

It depends on the isSigner key, if isSigner: true, you need to provide the signer.

For example, the following code will not work because we mention payerAta (Associated Token Account of Payer) has isSigner:true.

const instruction = new TransactionInstruction({
    keys: [
      {
        pubkey: programAta.address,
        isSigner: false,
        isWritable: true,
      },
      {
        pubkey: payerAta.address,
        isSigner: true,
        isWritable: true,
      },
    ],
    programId,
    data: Buffer.alloc(0), // All instructions are hellos
  });
  await sendAndConfirmTransaction(
    connection,
    new Transaction().add(instruction),
    [payer]
  );
}

In this case either we change payerAta to payer, or change the isSigner to false

发布评论

评论列表(0)

  1. 暂无评论