[英]How to pass a variable from a smart contract to java project using web3j
這是一個非常簡單的智能合約:
pragma solidity ^0.7.0;
contract Name {
string name = "Tom";
function getName() public view returns (string memory) {
return name;
}
}
然后我使用 web3j 將其轉換為 java 文件,getName() 函數如下所示:
public RemoteCall<TransactionReceipt> getName() {
final Function function = new Function(
FUNC_GETNAME,
Arrays.<Type>asList(),
Collections.<TypeReference<?>>emptyList());
return executeRemoteCallTransaction(function);
}
我對如何獲取 getName() 函數的返回值有點困惑。
我不確定您使用的是哪個版本的 web3j。 目前我正在使用 Web3j 1.4.1。 當我創建包裝類時,它的返回類型與您提到的不同。
public RemoteFunctionCall<String> getName() {
final org.web3j.abi.datatypes.Function function = new org.web3j.abi.datatypes.Function(FUNC_GETNAME,
Arrays.<Type>asList(),
Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
return executeRemoteCallSingleValueReturn(function, String.class);
}
下面是代碼,我試圖解決。 它返回公共變量中提到的名稱。
nameContract = Name.deploy(this.web3j, this.credential, (new ContractGasProviderImplementations())).send();
String name = nameContract.getName().send();
System.out.println(name);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.