等到铸币完成

Wait until the minting is done

我正在使用 React 构建我的 NFT Minting DApp 的前端。

我试图在交易生成后在控制台中打印 URL 到 etherscan/hash,但是当交易开始时我得到了日志,所以,它不是已在 etherscan 中可用。

我已经检查了其他站点,但没有一个是确定性的。

铸币过程完成后如何获取交易收据?

try {
      ethereum
        .request({
          method: "eth_sendTransaction",
          params: [tx],
        })
        .then(
          
          async (result) => 
          {
          let nftTxn = await nftContract.safeMint;
          console.log("Minting... please wait");
          web3.eth.getTransactionReceipt(result)
          .then(console.log(`Mined, see transaction: https://ropsten.etherscan.io/tx/${result}`));
          }
        )

没有可以订阅的听众吗?

web3.eth.subscribe("alchemy_fullPendingTransactions")

终于,我做到了。我决定使用间隔。资料来源:here

if (result!=null){
            const interval = setInterval(()=>{
              console.log("Attempting to get transaction receipt...");
              web3.eth.getTransactionReceipt(result, function(err, rec){
                if (rec) {
                  console.log(`See transaciton in https://ropsten.etherscan.io/tx/${rec.transactionHash}`);
                  clearInterval(interval);
                } else {
                  console.log(err);
                }
              });
            }, 1000); 
          }

我在 web3js 中的做法是这样的,transactionHash 会很快注销,然后收据就会到达。

myContract.methods
  .myMethod(123)
  .send({ from: "0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe" })
  .on("transactionHash", function (hash) {
    console.log("transactionHash", hash);
  })
  .on("confirmation", function (confirmationNumber, receipt) {
    console.log("confirmationNumber", confirmationNumber);
    console.log("receipt", receipt);
  })
  .on("receipt", function (receipt) {
    // receipt example
    console.log(receipt);
  })
  .on("error", function (error, receipt) {
    // If the transaction was rejected by the network with a receipt, the second parameter will be the receipt.
    console.log("error", error);
    console.log("receipt", receipt);
  });

https://web3js.readthedocs.io/en/v1.7.0/web3-eth-contract.html#id37