基于web3j和springBoot与链进行交互

前言

这是我的区块链专栏的第二篇,内容将围绕web3j 以及springBoot与我们之前创建好的链进行交互来写。怎么创建一条私链,请看上一篇文章。

需求

重新讲一下我们的需求:我想做的是把一部分的数据上链,以便之后必要的时候能做一定的验证,你可以理解这是一个简单地溯源项目。
既然如此,那么我们的核心就是把数据上链,以及结合现实情况,让一切能够走得通。而完成这系列工作的核心就是:web3j

web3j

web3j是什么?

Web3j是一个轻量级,响应式,类型安全的Java库,用于与Ethereum网络上的客户端(节点)集成,核心就是这一点: 与Ethereum网络上的客户端(节点)集成

web3所提供的核心功能

  1. 通过HTTP和IPC完成对Ethereum客户端API的实现

  2. 对于Ethereum钱包支持

  3. 使用过滤器的函数式编程功能的API

  4. 自动生成Java智能合约包装器,以创建、部署、处理和调用来自本地Java代码的智能合约

上一篇博客里我们是基于本地环境下。利用geth客户端与我们创建的私链进行交互,在实际开发中,我们不可能这样的,我们肯定是需要借助代码去和链进行交互;而web3j说白了就是做这样一件事情,需要记住的一点是: web3j不能进行智能合约编写!

springBoot项目下进行web3j的整合

导入依赖

这里只注入了web3j的依赖

  <!-- web3j-->
        <dependency>
            <groupId>org.web3j</groupId>
            <artifactId>core</artifactId>
            <version>3.4.0</version>
        </dependency>

开启以太坊客户端

我们现在还是基于本地进行测试,至于本地怎么搭建相关环境,请看上一篇博客。这里直接开启geth控制台,运行以下命令:

geth --identity "TestNode" --rpc --rpcport "8545" --datadir data --port "30303" --nodiscover --allow-insecure-unlock console



与客户端进行通信

从上面指令我们知道,我们已经开启了8545端口;那么接下来我们就去和我们本机的8545端口通信,在web3j里是这样实现的:

    //你可以这样:
     Web3j web3j = Web3j.build(new HttpService());
     
     //你也可以这样:
     Web3j web3j = Web3j.build(new HttpService("http://localhost:8545"));
     
     //你还可以这样:
     Admin admin =Admin.build(new HttpService());
     

上面的方式都可以与我们本地客户端完成通信

创建链上账户

与客户端进行通信之后,下面就是我们的代码实现部分,首先先完成创建链上账户:下面是我的完整代码

首先,创建一个以太坊钱包类:

public class ETHAccounts {

    Integer id ;

    //保存文件名
    String keyStoreKey;

    //12个单词的助记词
    String memorizingWords;

    //钱包公钥16进制字符串表示
    String ethPublicKey;

    //钱包私钥16进制字符串表示
    String ethPrivateKey;

    //钱包地址
    String walletAddress;

    //企业id
    Integer terraceUserId;

    //密码秘钥
    String rsaPublicKey;

    //密码公钥
    String rsaPrivateKey;

    //加密后密码
    String walletPwd;

    Integer status;

    public String getWalletPwd() {
        return walletPwd;
    }

    public void setWalletPwd(String walletPwd) {
        this.walletPwd = walletPwd;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getKeyStoreKey() {
        return keyStoreKey;
    }

    public void setKeyStoreKey(String keyStoreKey) {
        this.keyStoreKey = keyStoreKey;
    }

    public String getMemorizingWords() {
        return memorizingWords;
    }

    public void setMemorizingWords(String memorizingWords) {
        this.memorizingWords = memorizingWords;
    }

    public String getEthPublicKey() {
        return ethPublicKey;
    }

    public void setEthPublicKey(String ethPublicKey) {
        this.ethPublicKey = ethPublicKey;
    }

    public String getEthPrivateKey() {
        return ethPrivateKey;
    }

    public void setEthPrivateKey(String ethPrivateKey) {
        this.ethPrivateKey = ethPrivateKey;
    }

    public String getWalletAddress() {
        return walletAddress;
    }

    public void setWalletAddress(String walletAddress) {
        this.walletAddress = walletAddress;
    }

    public Integer getTerraceUserId() {
        return terraceUserId;
    }

    public void setTerraceUserId(Integer terraceUserId) {
        this.terraceUserId = terraceUserId;
    }

    public String getRsaPublicKey() {
        return rsaPublicKey;
    }

    public void setRsaPublicKey(String rsaPublicKey) {
        this.rsaPublicKey = rsaPublicKey;
    }

    public String getRsaPrivateKey() {
        return rsaPrivateKey;
    }

    public void setRsaPrivateKey(String rsaPrivateKey) {
        this.rsaPrivateKey = rsaPrivateKey;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "ETHAccounts{" +
                "id=" + id +
                ", keyStoreKey='" + keyStoreKey + '\'' +
                ", memorizingWords='" + m
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值