如何查明交易是否在 Solana 上完成

问题描述 投票:0回答:3

如何使用 Solana Javascript API (@solana/web3.js) 获取 Solana 上交易的当前状态?

https://solscan.io/tx/4fwgX16WDwYj5hZ2t5xEHz6UUnuaTovJpMeoWWEBvuA7z1baf1qX1BW2EGZVR9ChSyJZ8akeLX6EDTadFcEcSTdy

这是我尝试过的,但它似乎只适用于最近的交易。

const { Connection, clusterApiUrl } = require("@solana/web3.js");

(async () => {
    const connection = new Connection(clusterApiUrl('mainnet-beta'));
    const status = await connection.getSignatureStatus("4fwgX16WDwYj5hZ2t5xEHz6UUnuaTovJpMeoWWEBvuA7z1baf1qX1BW2EGZVR9ChSyJZ8akeLX6EDTadFcEcSTdy");
    console.log(status);
})();
javascript node.js blockchain solana anchor-solana
3个回答
2
投票

尝试将

searchTransactionHistory: true
添加到
SignatureStatusConfig

const getConfirmation = async (connection: Connection, tx: string) => {
  const result = await connection.getSignatureStatus(tx, {
    searchTransactionHistory: true,
  });
  return result.value?.confirmationStatus;
};

https://docs.solana.com/developing/clients/jsonrpc-api#getsignaturestatuses


1
投票

您还可以使用

confirmTransaction
功能:

const { Connection, clusterApiUrl } = require("@solana/web3.js");

(async () => {
    const connection = new Connection(clusterApiUrl('mainnet-beta'));
    const result = await connection.confirmTransaction({
        signature: "4fwgX16WDwYj5hZ2t5xEHz6UUnuaTovJpMeoWWEBvuA7z1baf1qX1BW2EGZVR9ChSyJZ8akeLX6EDTadFcEcSTdy"
    },
    'finalized');
    console.log(result);
})();

编辑:此函数签名已在 web3.js 中弃用,并已移至此包:https://www.npmjs.com/package/@solana-developers/helpers需要传入连接作为第一个参数:

 await confirmTransaction(connection, transaction);

如果您自己进行交易,您应该将相同的区块哈希传递到确认和构造中。

const { blockhash, lastValidBlockheight } = await connection.getLatestBlockhash();

const tx = new Transaction({ blockhash, lastValidBlockheight });
const signature = await connection.sendTransaction(tx);

const confirmationStrategy: BlockheightBasedTransactionConfirmationStrategy = {
  blockhash,
  lastValidBlockheight,
  signature,
};
await connection.confirmTransaction(confirmationStrategy);

详情:https://github.com/solana-labs/solana-web3.js/pull/2733/files#r1611723082

原因:

使用不同于之前的区块哈希来确认交易 交易中实际使用的信息将产生错误的信息, 例如“你的区块哈希现在无效”,当它不是或者是时 已经有一段时间无效了。

https://github.com/solana-labs/solana-web3.js/issues/2067#issuecomment-1947353265


0
投票

您还可以尝试将连接的承诺级别设置为“已完成”

new Connection(clusterApiUrl('mainnet-beta'), 'finalized');
© www.soinside.com 2019 - 2024. All rights reserved.