当前位置: 首页 > 工具软件 > web3j > 使用案例 >

Web3j的使用

别子实
2023-12-01

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方法,只生成秘钥和公钥,不生成文件,这是最简单的,有的时候你可能需要修改下本方法,比如生成助记词什么的。

 

 类似资料: