web3j发送异步交易时不能解析方法`executeTransactionAsync`?

  1. 云栖社区>
  2. 博客>
  3. 正文

web3j发送异步交易时不能解析方法`executeTransactionAsync`?

马拉喀什 2018-07-20 11:20:46 浏览1480
展开阅读全文

我正试图用web3j库发送一个交易到以太坊区块链,得到一个错误,我必须用异步发送它。当用异步发送它时,会得到一个函数不存在的错误。我使用的是Android Studio、Java和web3j库。

当我调用web3.abi.datatypes.FunctionexecuteTransactionAsync方法时,我得到以一个错误提示说web3j库中没有这个方法executeTransactionAsync。但是官方文件又说可以使用这个方法,我看的web3j文档是3.1.1版的。

如果删掉异步的方式使用executeTransaction发送的话,又会提示我交易需要异步发送。

我有什么办法把这个交易发送出去吗?也许我的web3j代码写错了:

public TransactionReceipt approve() throws IOException, TransactionException {
    Function function = new Function("approve", Arrays.<Type>asList(), Collections.<TypeReference<?>>emptyList());
    return executeTransactionAsync (function);
}

问题的解决

你需要使用executeTransaction封装包中的RemoteCall:

Function function = new Function(...);
RemoteCall<TransactionReceipt> remoteCall = new RemoteCall(() -> {
  //call to executeTransaction
});
TransactionReceipt receipt = remoteCall.send();

你可以通过使用web3j的代码生成工具为你的以太坊智能合约创建简单的封装包,从而使你的开发更轻松。有关如何生成代码的Web3J文档的这一部分。通过生成的类处理远程调用(以及对constant函数的本地调用)。你的客户端代码变得类似:

Web3j web3j = Web3j.build(new HttpService());
Credentials credentials = Credentials.create(<YOUR_PRIVATE_KEY>);
SimpleContract contract = SimpleContract.load(<CONTRACT_ADDRESS>, web3j, credentials, BigInteger.valueOf(<GAS_PRICE>), BigInteger.valueOf(<GAS_LIMIT));
RemoteCall<TransactionReceipt> remoteCall = contract.setValue(BigInteger.valueOf(5)); // Call to smart contract setValue(5)
TransactionReceipt receipt = remoteCall.send();

添加代码生成的示例

$ solc --version
solc, the solidity compiler commandline interface
Version: 0.4.19+commit.c4cbbb05.Windows.msvc

$ java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

$ solc contracts/SimpleContract.sol --bin --abi --optimize -o build/

$ web3j.bat solidity generate build/SimpleContract.bin build/SimpleContract.abi -o ./src -p mypackage

              _      _____ _     _
             | |    |____ (_)   (_)
__      _____| |__      / /_     _   ___
\ \ /\ / / _ \ '_ \     \ \ |   | | / _ \
 \ V  V /  __/ |_) |.___/ / | _ | || (_) |
  \_/\_/ \___|_.__/ \____/| |(_)|_| \___/
                         _/ |
                        |__/

Generating mypackage.SimpleContract ... File written to .\src

原文《以太坊常见问题和错误》中的:
http://cw.hubwiz.com/card/c/ethereum-FAQ/1/2/8/

另外推荐几个很受欢迎全网稀缺的互动教程:

  • web3j,主要是针对java和android程序员围绕web3j库进行区块链以太坊开发的讲解。
  • python以太坊,主要是针对python围绕web3.py进行区块链以太坊应用开发的讲解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
  • 以太坊开发,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • 以太坊教程,主要介绍智能合约与dapp应用开发,适合入门。

网友评论

登录后评论
0/500
评论
马拉喀什
+ 关注