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