当前位置: 首页 > 知识库问答 >
问题:

web3j不支持合同功能?

杜君浩
2023-03-14

这是我在私人网络中的简单合同

contract AB {
    /* This creates an array with all balances */
    mapping (address => uint256) public balanceOf;

    /* Initializes contract with initial supply tokens to the creator of the contract */
    function AB () {
        balanceOf[msg.sender] = 1200;              // Give the creator all initial tokens
    }

    /* Send coins */
    function transfer(address _to, uint256 _value) {
        if (balanceOf[msg.sender] < _value) throw;           // Check if the sender has enough
        if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows
        balanceOf[msg.sender] -= _value;                     // Subtract from the sender
        balanceOf[_to] += _value;                            // Add the same to the recipient
    }

    function gettokenBalance(address to)constant returns (uint256){
          return balanceOf[to];
       }
}

我已经使用web3J生成了智能合同包装器,功能如下

public Future<Uint256> gettokenBalance(Address to) {
        Function function = new Function("gettokenBalance", 
                Arrays.<Type>asList(to), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallSingleValueReturnAsync(function);
    }

当我试图访问我的合同功能时,如

AB newAB = AB.load(contractaddress, web3j, credentials, gasprice, gaslimit);
        Future<Uint256> result = newAB.gettokenBalance(new Address(address));
        LOGGER.info("result:::"+result.get());

它给了我一个例外

 java.util.concurrent.ExecutionException: java.lang.IndexOutOfBoundsException: Index: 0
    at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357) ~[na:1.8.0_91]
    at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895) ~[na:1.8.0_91]
    at com.belrium.service.UserWalletService.check(UserWalletService.java:197) ~[classes/:na]
    at com.belrium.controller.UserController.check(UserController.java:119) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91]

请帮忙。

共有1个答案

周峻
2023-03-14

期货是异步的,所以get()会尝试获取结果值,当前仍在计算中。它只在计算完成后才起作用。

我认为Java未来API不支持您想要的。相反,我可以建议使用<code>CompletableFuture,它有一个<code>join()

当我从契约中生成代码时,我遇到了同样的问题。所以我抛弃了生成器,用< code>CompletableFuture替换了我生成的代码中的所有< code>Future。我认为这是web3j的疏忽,尽管可能有一种我不知道的不同方法来处理这个问题!

 类似资料:
  • 编辑:因为人们仍然从google登陆这里,你必须在OpenGL环境中调用每一个OpenGL方法。因此,在使用GL做任何事情之前,请确保您在一个上下文中。 我试图用lwjgl在我的屏幕上呈现一个简单的文本,但是每次都失败了!当我启动游戏时,它崩溃了,并向我抛出错误: 我需要使用现代openGL还是什么?我真的需要帮助

  • 问题内容: 我试图将项目从Eclipse迁移到Android Studio。终于我能够运行它了,但是在某个时候我遇到了这个异常,而我在谷歌上对此一无所获: 73. MainActivity行是: 请给我建议。 问题答案: 替代@sbaar的答案, 保持到并加入以及和它设置为。 即

  • 我试图将Spring Cloud Stream与本主题中描述的功能一起使用。但是它不起作用。 我的职能: 我推送消息。通过使用输出注释制作的生产者,发送到consumer-in-0频道: 我的yaml通道配置: 如果我通过配置使用消费者,一切正常。同样在rabbitmq管理器中,我看到生产者正在工作并发送消息,但消费者并不使用它们。帮帮我,请某人帮忙。 附言:我也使用Spring WebFlux

  • 我已经研究这个问题好几天了,决定在这里问这个问题,看看是否有人能帮我指出正确的方向。 我试图用MS Access 2013表格中的数据填充我的Netbeans 8.0.2程序中的组合框。 我正在使用最新的“Ucanaccess”及其所有必要的组件来获取两者之间的连接,据我所知,连接是好的。然而,当我运行程序时,它会弹出一条错误异常消息,内容如下: 就这样-没有其他字母、字符、数字。。。没有什么 我

  • 我注意到这是一个非常常见的问题,但没有一个解决方案对我有效。这是每个人似乎都参考的主线: 升级到AppCompat v22.1.0,现在获得IllegalArgumentException:app compat不支持当前的主题功能 但我试过运气不好。我错过了什么吗?? 这是我的清单: 这是我的风格: 这是我的基本活动: 这是我的示例活动: 我基本上是直接在我测试的活动上设置主题。我没有在清单中设置

  • 问题内容: Node.js是否已经支持=>函数关键字别名?如果是,请从哪个版本开始?如何启用此语言扩展? 成为 问题答案: 简而言之:是的,自版本4.4.5起,Node.js中就很好地支持箭头功能。 完全正确的支持从版本6开始。最初的支持是从v0.12开始引入的,但是它非常不完整,默认情况下处于禁用状态,直到v4.0变得更好为止。