next.js 告诉他一个合同的电话是否成功

6vl6ewon  于 2022-12-18  发布在  其他
关注(0)|答案(2)|浏览(121)

我正在NextJS中的一个NFT站点上工作,尝试在用户成功创建令牌后实现重定向。以下是我的创建代码:

const mintToken = () => {
   safeMint?.();
   router.push('/success');
};

正如您所见,在调用safeMint之后,我尝试重定向到/success,我想让它只在调用智能合约成功后才重定向,我试过使用回调和超时,但似乎都不起作用。有没有什么方法可以在重定向我错过的消息之前获得或等待成功的响应?谢谢!

gcuhipw9

gcuhipw91#

如果使用事务处理执行函数,则函数返回值在EVM外部不可用。
您可以等待事务处理回执。它包含事务处理状态(成功/还原)以及事件日志。只有在块中包含了Tx之后,Tx回执才可用。
根据safeMint()实现的不同,它可能会在每次事务成功时生成令牌,但如果实现允许函数在不生成令牌的情况下也能成功,则可能需要检查事件日志以确保NFT确实是生成的。

// transaction reverted
function safeMint() external {
    require(failedCondition);
    _mint(msg.sender, tokenId);
}
// transaction succeeded but no token was minted
function safeMint() external {
    if (failedCondition) {
        _mint(msg.sender, tokenId);
    }
}

如何使用ethers等待回执:

const tx = await myContract.safeMint();
const txReceipt = await transaction.wait();

if (txReceipt.status) {
    // not reverted
}


文件:

  • https://docs.ethers.io/v5/api/providers/types/#providers-TransactionResponse
  • https://docs.ethers.io/v5/api/providers/types/#providers-TransactionReceipt
f8rj6qna

f8rj6qna2#

在契约内的safeMint函数中,可以返回tokenId(或者可以返回true)

const mintToken =async () => {
   const result=await safeMint?();
   if(result){
      router.push('/success');
   }
};

相关问题