在 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 获取金额
我正在获取缓冲区数据中的数量: 我无法解码
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 来公开这些,那么其他人都可以使用它们。
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 获取金额
我正在获取缓冲区数据中的数量:
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 来公开这些,那么其他人都可以使用它们。