0

我正在使用 solana 糖果机来铸造 nft。

当我在 javascript 中调用智能合约函数时

import * as anchor from "@project-serum/anchor";

let program = new anchor.Program(idl, programId, provider);
let result = await program.rpc.someFunc(); //here is the smart contract function

浏览器将显示弹出窗口供您批准交易。有什么方法可以知道用户是点击取消还是批准?

在以太坊中,它有如下内容:

          .on("transactionHash", function(hash) {
                …
          })
          .on("error", function(error, receipt) {
        …
          });

可以用糖果机做吗?我想在用户单击事务中批准后做某事

4

1 回答 1

0

是的,您可以实现类似的效果,但是直接从糖果机上不会有效。

可能有多种方法可以做到这一点,但我发现一种方法是使用connection.getSignatureStatuses()Serum。

代码看起来像这样,它类似于您共享的内容:

// Impor the connection dependencies
import * as anchor from '@project-serum/anchor';

// Loop using waiting for a positive status / or timeout
while (...) {

  // Get the status using the transaction ID
  const statusResponse = await connection.getSignatureStatuses([
    txId,
  ]);

  const status = statusResponse?.value[0];

  if (status.err) {
    // ...
  }
}

一旦您获得交易的状态,包括用户拒绝它,您就可以在前端触发该行为。

于 2022-01-05T03:44:53.420 回答