【问题标题】:How to get Smart Contract Result data?如何获取智能合约结果数据?
【发布时间】:2021-10-26 09:10:26
【问题描述】:

假设我们有一个包含这个输入数据和这个智能合约结果的交易

  • 输入数据:issueNonFungible@415344@415344
  • 结果:@ok@4153442d383661353439

这是一个新的 NFT 集合的简单创建。可以在这个 txHash 的 devnet 上看到: 290498e8730975ea6d2703f4c5e0dc2c657b9480b9afc2a62c4c8818636cf062

我正在尝试获取智能合约的响应。这是我现在拥有的代码,其中 consts.walletAddress 是初始交易发送者的钱包地址。

var txHash = new TransactionHash("290498e8730975ea6d2703f4c5e0dc2c657b9480b9afc2a62c4c8818636cf062");
var toTest = await this.provider.getTransaction(txHash, new Address(consts.walletAddress), true);
var scResults = await toTest.getSmartContractResults();
console.log(scResults)

这是console.log 输出的内容:

问题是没有为智能合约结果输出数据,所以我无法得到智能合约的响应。 是我做错了什么还是 erdJs 中的错误?

【问题讨论】:

    标签: elrond


    【解决方案1】:

    您的代码非常好。通过 npm 分发的最新 erdjs 版本中只有一个小错误。

    在TransactionOnNetwork 类中,包中的代码当前如下所示:

        static fromHttpResponse(response) {
            let transactionOnNetwork = new TransactionOnNetwork();
            transactionOnNetwork.type = new TransactionOnNetworkType(response.type || "");
            transactionOnNetwork.nonce = new nonce_1.Nonce(response.nonce || 0);
            transactionOnNetwork.round = response.round;
            transactionOnNetwork.epoch = response.epoch || 0;
            transactionOnNetwork.value = balance_1.Balance.fromString(response.value);
            transactionOnNetwork.sender = address_1.Address.fromBech32(response.sender);
            transactionOnNetwork.receiver = address_1.Address.fromBech32(response.receiver);
            transactionOnNetwork.gasPrice = new networkParams_1.GasPrice(response.gasPrice);
            transactionOnNetwork.gasLimit = new networkParams_1.GasLimit(response.gasLimit);
            transactionOnNetwork.data = transactionPayload_1.TransactionPayload.fromEncoded(response.data);
            transactionOnNetwork.status = new transaction_1.TransactionStatus(response.status);
            transactionOnNetwork.hyperblockNonce = new nonce_1.Nonce(response.hyperblockNonce || 0);
            transactionOnNetwork.hyperblockHash = new hash_1.Hash(response.hyperblockHash);
            transactionOnNetwork.receipt = Receipt.fromHttpResponse(response.receipt || {});
            transactionOnNetwork.results = smartContractResults_1.SmartContractResults.fromHttpResponse(response.results || []);
            return transactionOnNetwork;
        }
    

    如您所见,它尝试从响应中的 results 字段解析 SmartContract 结果。

    但是,改为解析 smartContractResults 字段是正确的。

    这也可以在官方github 中看到,该问题似乎已经修复。

    因此,现在您可以手动修补 node_modules 中的 transactionOnNetwork.js 文件以使用 smartContractResults,或者降级到较低版本,直到此问题在最新的 npm 包中得到解决。

    【讨论】:

      猜你喜欢
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 2021-11-15
      • 2022-10-23
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      相关资源
      最近更新 更多