【FISCO BCOS】二十一、JAVA与FISCO BCOS交互(节点前置篇)

 目录

一、准备链和节点前置服务

二、准备合约

三、新建java工程

四、参照API官方文档写接口


前言: 本节点前置篇主要介绍如何通过节点前置接口与java后端进行交互,以及如何参照官方文档编写接口

一、准备链和节点前置服务

        首先准备好自己的区块链节点,这里采用单机四节点的默认配置搭建节点,实际可任意褡链方式。此处具体操作在前些博客已详细讲述,故不再赘述。

1.启动区块链节点

2.启动节点前置

二、准备合约

以最简单的HelloWorld合约作为例子,然后编译,选择一个账户部署即可

合约源码:

pragma solidity ^0.6.0;

contract HelloWorld {
  string private message;
  
  function sayHello() public pure returns (string memory) {
    return "Hello, World!";
  }
  
  function setMessage(string memory newMessage) public {
    message = newMessage;
  }
  
  function getMessage() public view returns (string memory) {
    return message;
  }
}

1.编译部署合约

2.复制合约地址等信息

 部署后复制合约的地址,ABI和Bin,准备后续使用

三、新建java工程

1.处理项目

我们直接新建一个springboot项目,然后创建一个controller层,我们直接在这里测试API接口

2.引入依赖

同时也要加几个必要的依赖包,一个是用于json转换的fastjson,一个用来解析区块交互信息的hutool包

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.79</version>
</dependency>
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.11</version>
</dependency>

四、参照API官方文档写接口

WeBASE的子系统 节点前置提供了许多与区块链进行交互的接口,详细查询可参见此官方文档:

官方文档地址:接口说明 — WeBASE v1.5.5 文档 (webasedoc.readthedocs.io)

 

1.接口测试

我们先来个简单的接口测试一下:

 以此接口为例,我们直接在浏览器发送请求就可以得到,但是这种简单到没有任何参数的接口,能得到的信息也很少。

 2.合约交易接口调用

我们调用API最重要的目的是通过FISCO BCOS与合约交互,我们通常使用这个接口与合约进行交互

官方文档中已经对合约的一些参数做了规范与定义 ,看起来很麻烦,需要很多参数,但其实多数参数是固定的,like this,注意替换你自己的合约地址等信息!

private static final String contractAddress = "0x80ea5245c8be0129f6704b855e8dbfc47fd1b5c4";
private static final String ABI = "这里是合约的ABI,原文太长,影响阅读";
private static final String contractName = "HelloWorld";

我们将先前复制的合约地址等信息定义为常量,便于后续方法调用。

接着我们定义一个commonReq的方法调用接口,接收3个值:用户地址、合约方法名、合约方法需要传入的参数,要注意data内数据的准确性。

public static String commonReq(String userAddress,
                               String funcName,
                               List funcParam) {
    JSONObject data = new JSONObject();
    JSONArray abiJSON = JSON.parseArray(ABI);
    data.put("user", userAddress);
    data.put("contractName", contractName);
    data.put("contractAddress", contractAddress);
    data.put("funcName", funcName);
    data.put("contractAbi", abiJSON);
    data.put("groupId", 1);
    data.put("funcParam", funcParam);
    data.put("useCns", false);
    data.put("useCns", false);
    data.put("cnsName", "");
    String dataString = data.toString();

    String response = HttpRequest.post("http://192.168.200.134:5002/WeBASE-Front/trans/handle")
            .header(Header.CONTENT_TYPE, "application/json")
            .body(dataString)
            .execute()
            .body();
    return response;
}

通过我们定义的commonReq方法,我们即可对合约进行交互,例如对合约的get方法和set方法进行调用。

    @GetMapping(value = "/get")
    public Object getInfo(){
        String result = commonReq("0x1809861467c11217ef957f2bbdc2e63371a6a34f","getMessage",null);
        return result;
    }

    @GetMapping(value = "/set/{info}")
    private JSONObject setInfo(@PathVariable String info){
        List<String> funcParam = new ArrayList<>();
        funcParam.add(info);
        String result = commonReq("0x1809861467c11217ef957f2bbdc2e63371a6a34f","setMessage",funcParam);
        return JSON.parseObject(result);
    }

之后我们启动项目,在postman中进行测试!

3.接口调用

 交易返回的result即为在节点前置中调用合约方法的返回结果。

测试结果正常,此时可以去节点前置验证。

4.交易查验

 可以看到,区块高度和交易数量都增加了,且合约内信息与刚才调用的相同,真正实现了通过java与区块链的交互。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奈何不吃鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值