【问题标题】:How to pass a variable from a smart contract to java project using web3j如何使用 web3j 将变量从智能合约传递到 java 项目
【发布时间】:2020-09-22 04:24:42
【问题描述】:

这是一个非常简单的智能合约:

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() 函数的返回值有点困惑。

【问题讨论】:

    标签: java solidity web3-java


    【解决方案1】:

    我不确定您使用的是哪个版本的 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 2022-08-12
      • 2022-11-04
      • 2020-09-05
      • 2021-03-09
      • 1970-01-01
      相关资源
      最近更新 更多