区块链学习之Web3j入门(二):以太坊账户管理

1. 以太坊账户

以太坊使用非对称密钥进行身份识别。每个账户拥有自己独立的私钥(256位随机数),私钥通过椭圆曲线加密算法得到对应的公钥,再由公钥的后20字节作为账户地址值。私钥用于签名,公钥用于核对信息。得到私钥意味着得到了该账户的全部信息。

2.Web3j中的账户管理

Web3j中账户管理主要由org.web3j.crypto包实现,常用的类有以下三个:

类名 功能
ECKeyPair 表征密钥对的类
WalletUtils 钱包辅助类
Credentials 账户凭证类

可以通过ECKeyPair创建新的密钥对或导入已有的私钥,通过WalletUtils生成或载入钱包文件,Credentials包含了一个账户的全部信息,是交易的主体。

3.创建账户的代码实现

	@Test
    public void createAccount() throws InvalidAlgorithmParameterException, NoSuchAlgorithmException, NoSuchProviderException {
     
        ECKeyPair ecKeyPair = Keys.createEcKeyPair();//调用Keys的静态方法创建密钥对
        String privateKey = ecKeyPair.getPrivateKey().toString(16);//获取私钥
        String publicKey = ecKeyPair.getPublicKey().toString(16);//获取公钥
        String address = Keys.getAddress(publicKey);//获取地址值
        System.out.println("Your private key:"+privateKey);
        System.out.println("Your public key:"+publicKey);
        System.out.println("Your address:"+address);
    }

执行结果:
执行结果

4.生成钱包文件

		String password = "123456";
        File file = new File("C:\\Users\\Mr.Throne\\Desktop");
        String s = WalletUtils.generateWalletFile(password, ecKeyPair, file, true);
        System.out.println(s);

执行结果:
控制台打印信息
区块链学习之Web3j入门(二):以太坊账户管理_第1张图片

5.账户凭证

钱包文件中保存的是加密后的私钥,只要持有生成钱包文件时的密码,就可以恢复私钥。

@Test
    public void loadKeyFile() throws IOException, CipherException {
     
        Credentials credentials = WalletUtils.loadCredentials("123456", "C:\\Users\\Mr.Throne\\Desktop\\UTC--2021-01-19T02-04-15.99875300Z--257de1bf9e5ec775417b9e3245a5be4633ef560f.json");
        ECKeyPair ecKeyPair = credentials.getEcKeyPair();//获取密钥对对象
        String privateKey = ecKeyPair.getPrivateKey().toString(16);//获取私钥
        System.out.println(privateKey);
    }

6.节点管理的账户(管理ganache-cli中的账户)

@Test
    public void getNodeAccount() throws IOException {
     
        Web3j web3j = Web3j.build(new HttpService("http://localhost:8545"));//实例化web3j对象
        Request<?, EthAccounts> request = web3j.ethAccounts();//获取accounts
        EthAccounts response = request.send();//提交请求并获取响应
        List<String> accounts = response.getAccounts();//获取结果
        for (String a:accounts) {
     
            System.out.println(a); //打印节点账户信息
        }
    }

执行结果:区块链学习之Web3j入门(二):以太坊账户管理_第2张图片

你可能感兴趣的:(区块链,区块链,java)