赞
踩
Web3j实际上就是一个简单的封装好的JsonRpc的HttpClient。这是java版的,它的同族兄弟最著名的还是web3.js,是js版本的,都是用来访问以太坊节点的。
使用web3j第一步当然是引入依赖:
- <dependency>
- <groupId>org.web3j</groupId>
- <artifactId>core</artifactId>
- <version>4.5.5</version>
- </dependency>
一个简单例子如下:
- package com.alisita.eth;
-
- import java.io.IOException;
- import java.math.BigInteger;
- import java.security.InvalidAlgorithmParameterException;
- import java.security.NoSuchAlgorithmException;
- import java.security.NoSuchProviderException;
- import java.util.List;
-
- import org.web3j.crypto.CipherException;
- import org.web3j.crypto.ECKeyPair;
- import org.web3j.crypto.Keys;
- import org.web3j.crypto.Wallet;
- import org.web3j.crypto.WalletFile;
- import org.web3j.protocol.Web3j;
- import org.web3j.protocol.admin.Admin;
- import org.web3j.protocol.admin.methods.response.NewAccountIdentifier;
- import org.web3j.protocol.admin.methods.response.PersonalListAccounts;
- import org.web3j.protocol.http.HttpService;
-
- public class EthService {
- public static Web3j initWeb3j() {
- return Web3j.build(new HttpService());
- }
- public static Admin initAdmin() {
- return Admin.build(new HttpService());
- }
- /**
- * 查询所有的地址
- * @return
- * @throws IOException
- */
- public static List<String> listAccounts() throws IOException {
- PersonalListAccounts listAccounts = initAdmin().personalListAccounts().send();
- return listAccounts.getResult();
- }
- /**
- * 创建新地址
- * @param ps
- * @return 公钥地址
- * @throws IOException
- */
- public static String newAccount(String ps) throws IOException {
- NewAccountIdentifier identifier = initAdmin().personalNewAccount(ps).send();
- return identifier.getResult();
- }
- /**
- * 创建新地址
- * @param ps
- * @return
- * @throws IOException
- * @throws CipherException
- * @throws NoSuchProviderException
- * @throws NoSuchAlgorithmException
- * @throws InvalidAlgorithmParameterException
- */
- public static void newAcc() throws IOException, CipherException, InvalidAlgorithmParameterException, NoSuchAlgorithmException, NoSuchProviderException {
- ECKeyPair ecKeyPair = Keys.createEcKeyPair();
- BigInteger privateKeyInDec = ecKeyPair.getPrivateKey();
-
- String sPrivatekeyInHex = privateKeyInDec.toString(16);
-
- WalletFile aWallet = Wallet.createLight("", ecKeyPair);
-
- String sAddress = aWallet.getAddress();
- System.out.println(sPrivatekeyInHex);
- System.out.println(sAddress);
- }
- }
只是个别使用的示例,这个里面需要注意的地方不少,容我一一道来:
1.Web3j是基本工具对象,Admin继承自web3j,并且多了一些权限较大的方法。
2、Web3j的构造方法里的HttpService拥有一个url的构造,是区块节点的url,如果不填写就代表这localhost:8545,代表着本地区块节点,如果将来你要连接其他节点比如以太坊api什么的,就要换成它们的url
3.newAccount创建新用户方法和在geth命令行里创建的方式是一样的,该方法返回公钥,如果创建好,你会发现在节点keystore文件夹里出现了一个以公钥为结尾的keystore文件。
4.如果你要访问外网的节点api地方,它们可能就根本不给你创建keystore,这时候你就只能使用newAcc方法,只生成秘钥和公钥,不生成文件,这是最简单的,有的时候你可能需要修改下本方法,比如生成助记词什么的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。