以太坊区块链搭建与使用(六)-基于Java调用以太坊

一、基于Java代码如何调用智能合约

  • 一般java是基于web3j工具包来调用以太坊中的智能合约,类似的一个web工具包。
  • 示例代码参见:

[hanksandy/eth-web3j-samples​

gitee.com

](link.zhihu.com/?target=htt…)

二、示例项目搭建

1. 安装nodejs(支持solc编译与安装)
2. 安装solc(solidity智能合约编译环境)
3. 安装web3j(web3j命令行工作,为自动生成java代码)

命令行工具下载地址:github.com/web3j/web3j… 注意下载编码好的zip
– 编码合约:solcjs ./FileHashContract.sol –optimize –bin –abi –output -dir ./
– 生成java调用类:web3j solidity generate FileHashContract.bin FileHashContract.abi -o ./ -p com.hanko.contract
具体可以参考:www.jianshu.com/p/734995ca4…

三、示例代码说明

  • 此示例项目实现简单的文件hash存储功能

    此测试类为调用的入口:com.hanko.contract.FileHashContractTest

    /**
    * 一、连接区块链并获取geth客户端版本号
    * @throws IOException
    */
    @Test
    void getVersion() throws IOException {
    String version = web3j.web3ClientVersion().send().getWeb3ClientVersion();
    log.info(“>>>>>version is {}”,version);
    Assert.assertThat(version,startsWith( “Geth/” ));
    }

    /**
     * 二、部署合约,并返回合约地址。
     * @throws IOException
     */
    @Test
    void deploy() throws Exception {
        FileHashContract fileHashContract = FileHashContract.deploy(web3j,
    复制代码

    credentials,contractGasProvider).send();
    System.out.println(“fileHashContract.getContractAddress() = ” +
    fileHashContract.getContractAddress());

    }
    
    /**
     * 三、根据第二步返回的合约地址调用合约sethash方法
     * @throws IOException
     */
    @Test
    void setHash() throws Exception {
        FileHashContract fileHashContract = FileHashContract.load(
    复制代码

    web3jProperties.getContractAddress(), web3j, credentials, contractGasProvider);
    fileHashContract.setHash(“12345678”).send();
    }

    /**
     * 四、根据第二步返回的合约地址调用合约gethash方法
     * @throws IOException
     */
    @Test
    void getHash() throws Exception {
        FileHashContract fileHashContract = FileHashContract.load(
    复制代码

    web3jProperties.getContractAddress(), web3j, credentials, contractGasProvider);
    String hash = fileHashContract.getHash().send();
    Assert.assertEquals(hash,”12345678″);
    log.info(“>>>>>hash is {}”,hash);
    }

p.s. com.hanko.contract.FileHashContract是调用的核心类,通过web3j命令行工具直接生成。

//简单的文件hash存储合约
pragma solidity >= 0.4.0;

contract FileHashContract {
    string fileHash;

    function setHash(string memory hash) public {
        fileHash = hash;
    }

    function getHash() public view returns(string memory){
        return fileHash;
    }

}
复制代码

p.s. 合约的开发可使用idea 插件_intellij_-solidity 当然编译就在idea配置个External Tools在Setting可以找到。当然你也可以选择remix-ide 等ide。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享