0

就是这样,我们在创建 TransactionInstruction 时有一个帐户列表。所以这个列表可以有一个随机的顺序?或者它必须遵循一些特定的顺序?

  const keys = [
    {
      pubkey: key1,
      isSigner: true,
      isWritable: true,
    },
    {
      pubkey: key2,
      isSigner: false,
      isWritable: true,
    },
    ...
  ];

  new TransactionInstruction({
    keys,
    programId: PROGRAM_ID,
    data: txnData,
  }),
4

1 回答 1

1

帐户列表必须按照程序预期的顺序排列。

例如,在CreateAccount指令期间,您拥有按以下顺序定义的from帐户和new帐户:https ://github.com/solana-labs/solana/blob/c8f76b8bd05c9557123dd5695b3b809e01fe9ccd/web3.js/src/system-program.ts# L655

处理指令时,运行时会将第一个账号作为from账号,第二个账号作为new账号:https ://github.com/solana-labs/solana/blob/c8f76b8bd05c9557123dd5695b3b809e01fe9ccd/runtime/src/system_instruction_processor.rs# L284

于 2021-09-16T23:16:46.593 回答