区块链编程:Web3j账户管理练习

区块链编程:Web3j账户管理练习

    • 获取节点上的账号信息
    • 配置web3j日志
    • 创建钱包
    • 根据钱包加载账户信息

上一章,我们简单的访问了eth模拟节点的版本信息,算是提前预热,今天我们来实现和节点进行账户信息交互,配置将沿用上一章的配置

获取节点上的账号信息

package com.block.chain.account;

public class App {
     

    public static void main(String[] args) throws Exception {
     
        AccountManage AM = new AccountManage();
        // 获取eth节点下账户
        AM.getNodeAccounts();
    }
}

下面是功能实现类

public class AccountManage {
     
    public void getNodeAccounts() throws IOException {
     
        Web3j web3j = Web3j.build(new HttpService("http://localhost:8545"));
        List<String> accounts = web3j.ethAccounts().send().getAccounts();
        accounts.forEach(account -> {
     
            log.info("account:{}", account);
        });
    }
}

可以看到下面都是我们的交互信息和一些我之前已经创建好的账户
区块链编程:Web3j账户管理练习_第1张图片

配置web3j日志

其实有时候网络通信的信息我们并不care,可以去配置日志,让控制台不打印网络通信信息,配置下面的logback.xml


<configuration>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
    encoder>
  appender>

  <logger name="org.web3j.protocol" level="INFO"/>

  <root level="INFO">
    <appender-ref ref="STDOUT" />
  root>
configuration>

可以看到我们在控制台的信息已经没有网络信息了
区块链编程:Web3j账户管理练习_第2张图片

创建钱包

下面我们会创建一个账户,生成钱包文件, Web3j提供了WalletUtils工具进行钱包操作,下面在AccountManage代码提供生成钱包的实现,钱包文件会生成到/resources/keys 文件夹下

    private final String keyDir = "xxx/resources/keys";
	
	public String createWallet(String pass) throws Exception {
     
        File destDir = new File(keyDir);
        String fn = WalletUtils.generateNewWalletFile(pass, destDir, true);
        log.info("Wallet file: " + fn);
        return fn;
    }

下面是我们的测试代码

package com.block.chain.account;

public class App {
     

    public static void main(String[] args) throws Exception {
     
        AccountManage AM = new AccountManage();
        // 创建钱包 密码是123-后面会用到
        AM.createWallet("123");
    }
}

可以看到我们已经生成了一个钱包了
区块链编程:Web3j账户管理练习_第3张图片

根据钱包加载账户信息

我们在上面的练习中,已经能够生成自己的钱包了,下面我们需要根据钱包和密码获取我们的账户信息,依然是在AccountManage中实现逻辑

    public void loadAccountByWallet(String password, String wallet) throws Exception {
     
        String src = keyDir + "/" + wallet;
        Credentials credentials = WalletUtils.loadCredentials(password, src);
        ECKeyPair keyPair = credentials.getEcKeyPair();
        // 打印密钥信息和账户地址
        logAccountInfo(keyPair);
    }

下面将会沿用生成钱包的练习代码

package com.block.chain.account;

public class App {
     

    public static void main(String[] args) throws Exception {
     
        AccountManage AM = new AccountManage();
        // 创建钱包
        String wallet = AM.createWallet("123");
        // 根据钱包加载账户信息
        AM.loadAccountByWallet("123", wallet);
    }
}

下面可以看到我们的账户地址和密钥对信息
区块链编程:Web3j账户管理练习_第4张图片

未完待续~

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