java连接区块链 很简单 ,调用智能合约要麻烦一些.
先说连接 区块链查询数据.
1 maven 项目导入 web3j 的依赖.
<dependency>
<groupId>org.web3j</groupId>
<artifactId>core</artifactId>
<version>4.5.0</version>
</dependency>
2 需要 链上开启 rpc 端口 . 不开启 本地可以通过 指定 geth.ipc 连接.
package com.cxygg.testweb3j; import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.DefaultBlockParameterName;
import org.web3j.protocol.core.methods.response.EthGetBalance;
import org.web3j.protocol.http.HttpService;
import org.web3j.utils.Convert; public class Web3jDemo2 { private static final String RPC_URL = "http://192.168.1.199:9001";
private static final Web3j web3j = Web3j.build(new HttpService(RPC_URL)); public static void main(String[] args) throws Exception { getAge(); } public static void getAge() throws Exception {
// 这里要填写真实的钱包地址
EthGetBalance ethGetBalance = web3j
.ethGetBalance("0xbcbbd4e9bbf41a149652da55c42a4b28b6e39599", DefaultBlockParameterName.LATEST).send(); if (ethGetBalance != null) {
System.out.println("余额:" + Convert.fromWei(ethGetBalance.getBalance().toString(), Convert.Unit.ETHER));
} } }
发布和调用智能合约部分
调用智能合约通过 abi 文件 和 合约二进制文件生成 java的 代理类,然后调用。
truffle 和 zeppelin-solidity 的使用
truffle是一个基于Javascript开发的一套智能合约开发框架,使用Solidity语言编写合约。truffle有一套自动的项目构建机制
1 安装 npm
brew install npm
2 安装 truffle
npm install -g truffle
3 下载 zeppelin-solidity 包
npm install zeppelin-solidity
4 编写合约
建立项目 truffle unbox 项目名 ,编写合约
5 得到bin 文件和 abi 文件。
6 使用 bin文件 和 abi 文件生成Java 对象.( 需要安装 web3j )
web3j solidity generate -b <编译的bin文件地址> -a <编译的abi文件地址> -o <输出目录> -p <java包名>
web3j solidity generate -b ./tokenExchange.bin -a .\tokenExchange.abi -o ./ -p data
生成了 Java对象 ,结合 Web3j 就可以发布合约和调用合约了。
备注:我使用的版本: 版本不同可能有奇怪的问题
appledeMacBook-Pro:~ apple$ truffle version
Truffle v5.0.36 (core: 5.0.36)
Solidity v0.5.8 (solc-js)
Node v12.10.0
Web3.js v1.2.1