【问题标题】:How to get Solana transaction data from transaction object如何从交易对象中获取 Solana 交易数据
【发布时间】:2022-07-22 16:33:14
【问题描述】:

我正在使用单个transfer 指令进行一项简单的交易,从一个帐户到另一个帐户的 0,1 SOL。然后我想获取交易数据并使用它来验证 (1) senderreceiver 地址和 (2) 它携带的数据 - 在这种情况下,传输已为 0,1 SOL 制作。

我使用带有 tx 签名的getTransaction 并得到如下响应:

{
  message: Message {
    header: {
      numReadonlySignedAccounts: 0,
      numReadonlyUnsignedAccounts: 1,
      numRequiredSignatures: 1
    },
    accountKeys: [ [PublicKey], [PublicKey] ],
    recentBlockhash: 'GEhNE2GKLRyW9c9E1BJx9b64WKbtGCftLYQcXrFg6UnS',
    instructions: [ [Object] ],
    indexToProgramIds: Map(1) { 1 => [PublicKey] }
  },
  signatures: [
    '5gH2uo22tapuoDBx9Mz1rMuMWZkKSWqRxvBURvovsiTiAWa3Ufk2GwV7Qcg1vUgd3fPKGuv3Nky7LuVSUbHEWJKu'
  ]
}

所以我深入研究了TransactionResponse。第一件事是我有兴趣看到accountKeys。好的,我发现其中之一是 sender 的 pub 地址。但我也想验证接收者......而且我看不到在事务对象中的哪个位置获取该信息。第二个PublicKey11111111111111111111111111111111,如果我没记错的话我就是SystemProgram……

第二件事是交易data。我深入message.instructions 并找到以下对象:

{ accounts: [ 0, 0 ], data: '3Bxs411Dtc7pkFQj', programIdIndex: 1 }

好的,所以database58 编码的字符串'3Bxs411Dtc7pkFQj'。我从 base58 解码(使用bs58),但这只给了我一个 Uint8Array,我不确定如何将其转换为 JS 对象。

我还发现了一件事:decodeTransfer 来自 web3.js 中的 SystemInstruction 类,它似乎完全符合我的需要 - 返回 fromPubkeytoPubkeylamports,但是问题是它接受TransactionInstruction 类型的对象,我不知道如何构造它...

那么,两个问题:

  1. 如何获取接收者的pub地址?
  2. 如何将指令数据解码成JS对象?

【问题讨论】:

    标签: solana solana-web3js solana-transaction-instruction


    【解决方案1】:

    那么,对于你的第二个问题:

    要知道如何反序列化从 bs58 解码返回的数组,您需要知道发送方如何序列化指令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-09
      • 2022-07-06
      • 2017-04-08
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多