首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在solana中调用transaction.from()后,有没有办法获得amount(我们在事务中发送的令牌数量

在solana中调用transaction.from()后,有没有办法获得amount(我们在事务中发送的令牌数量
EN

Stack Overflow用户
提问于 2021-10-14 08:54:40
回答 1查看 311关注 0票数 0
代码语言:javascript
复制
  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获取金额

我在缓冲区数据中获得了数量:,我无法解码它

EN

回答 1

Stack Overflow用户

发布于 2021-10-14 11:39:26

这种能力目前在JS端还没有公开。为了正确地做到这一点,我们需要公开这个结构定义:https://github.com/solana-labs/solana-program-library/blob/e8b7009cc4d8cdd87232ccfc9ce93ab203ada496/token/js/client/token.js#L1519

在您这边,为了进行测试,您可以复制该结构布局,然后对事务数据调用decode对其进行反序列化。在(未测试的)代码中,如下所示:

代码语言:javascript
复制
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来暴露它们,那么其他所有人都可以使用它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69567801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档