簡體   English   中英

如何使用 web3j 將變量從智能合約傳遞到 java 項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM