簡體   English   中英

在 solana 中調用 transaction.from() 后,有沒有辦法獲取金額(我們在交易中發送的令牌數)

[英]Is there any way to get amount(number of token we are sending in transaction) after calling transaction.from() in solana

  var transaction = new web3.Transaction({
    feePayer: new web3.PublicKey(
      '2joML3MhVLPmASMDBYuaMzsFiCtdm3aityWu1pJZ1wg8',
    ),
   
  }).add(
    splToken.Token.createTransferInstruction(
      programId,
      user1TokenAccount.address,
      user2TokenAccount.address,
      user1Wallet.publicKey,
      [],
      1,
    ),
  ); let blockhashObj = await connection.getRecentBlockhash();
  transaction.recentBlockhash = await blockhashObj.blockhash;


  let endocdeTransction = transaction.serialize({
    requireAllSignatures: false,
    verifySignatures: false,
  });

讓 newconnectionTransction = web3.Transaction.from(newEncodedBuffer);

我想從 newconnectionTransction 獲取金額

我在緩沖區數據中獲得了數量: <Buffer 03 01 00 00 00 00 00 00 00> 我無法解碼

這個能力暫時沒有在 JS 端暴露出來。 要正確執行此操作,我們需要公開此結構定義: https : //github.com/solana-labs/solana-program-library/blob/e8b7009cc4d8cdd87232ccfc9ce93ab203ada496/token/js/client/token.js#L1519

在您這邊,為了進行測試,您可以復制該結構布局,然后對交易數據調用decode以對其進行反序列化。 在(未經測試的)代碼中,這看起來像:

const decodedTransaction = Transaction.from(encodedTransaction);
const TransferInstructionLayout = BufferLayout.struct([
    BufferLayout.u8('instruction'),
    Layout.uint64('amount'),
]);
const instructionData = TransferInstructionLayout.decode(decodedTransaction.instructions[0].data);
console.log(instructionData.amount);

可能會遺漏一些步驟,但這將使您獲得大部分方法! 如果你想添加一個 PR 來公開這些,那么其他人都可以使用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM