发送事务异步 |无法解析方法 'executeTransactionAsync'
Sending A Transaction Async | Cannot Resolve Method 'executeTransactionAsync'
我正在尝试使用 Web3j 库将交易发送到以太坊区块链,我收到一个错误,我必须使用异步发送它。当我用 Async 发送它时,我收到一个错误,指出该函数不存在。
我正在使用 Android Studio、Java 和 Web3j 库。
当调用 executeTransactionAsync
方法时,web3.abi.datatypes.Function
的一部分,我收到一条错误消息,指出找不到该方法。我发现这意味着方法 executeTransactionAsync
在 Web3j 库中不存在。但是,Web3j 文档说要使用该方法。我正在使用最新版本的 Web3j,即 3.1.1。
如果我删除 Async,所以方法是 executeTransaction
,我收到一个错误,指出交易需要通过 Async 发送。
有什么方法可以用 Realm 或其他方式发送这笔交易吗?又或许我用错了 Web3j,我需要换一种方式使用它?
发送交易的代码:
public TransactionReceipt approve() throws IOException, TransactionException {
Function function = new Function("approve", Arrays.<Type>asList(), Collections.<TypeReference<?>>emptyList());
return executeTransactionAsync (function);
}
您需要使用包裹在 RemoteCall
中的 executeTransaction
。
Function function = new Function(...);
RemoteCall<TransactionReceipt> remoteCall = new RemoteCall(() -> {
//call to executeTransaction
});
TransactionReceipt receipt = remoteCall.send();
您可以使用 web3j 的代码生成工具为您的智能合约创建简单的包装器,让您的生活更轻松。有关如何生成代码的信息,请参阅 web3j 文档的 this section。生成的 class 处理远程调用(以及 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
注意 - 我 运行 在 Windows 上使用 Cygwin。因此,web3j.bat
用法。
我正在尝试使用 Web3j 库将交易发送到以太坊区块链,我收到一个错误,我必须使用异步发送它。当我用 Async 发送它时,我收到一个错误,指出该函数不存在。 我正在使用 Android Studio、Java 和 Web3j 库。
当调用 executeTransactionAsync
方法时,web3.abi.datatypes.Function
的一部分,我收到一条错误消息,指出找不到该方法。我发现这意味着方法 executeTransactionAsync
在 Web3j 库中不存在。但是,Web3j 文档说要使用该方法。我正在使用最新版本的 Web3j,即 3.1.1。
如果我删除 Async,所以方法是 executeTransaction
,我收到一个错误,指出交易需要通过 Async 发送。
有什么方法可以用 Realm 或其他方式发送这笔交易吗?又或许我用错了 Web3j,我需要换一种方式使用它?
发送交易的代码:
public TransactionReceipt approve() throws IOException, TransactionException {
Function function = new Function("approve", Arrays.<Type>asList(), Collections.<TypeReference<?>>emptyList());
return executeTransactionAsync (function);
}
您需要使用包裹在 RemoteCall
中的 executeTransaction
。
Function function = new Function(...);
RemoteCall<TransactionReceipt> remoteCall = new RemoteCall(() -> {
//call to executeTransaction
});
TransactionReceipt receipt = remoteCall.send();
您可以使用 web3j 的代码生成工具为您的智能合约创建简单的包装器,让您的生活更轻松。有关如何生成代码的信息,请参阅 web3j 文档的 this section。生成的 class 处理远程调用(以及 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
注意 - 我 运行 在 Windows 上使用 Cygwin。因此,web3j.bat
用法。