1、准备一个空白的springboot项目

pom.xml依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.1</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.yuyun</groupId><artifactId>springboot</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot</name><description>springboot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

application.yml

server:port: 8112

HelloController.java

@RestController
public class HelloController {@RequestMapping("hello")public String index(){return "hello";}
}

运行一下看看能不能用

2、引入jar包

下载:bsn-sdk-java-jar-with-dependencies.jar

方法一

将下载后的jar包放在项目的lib目录下:

pom.xml文件中引入

<dependency><groupId>com.example.javacc</groupId><artifactId>bsn-sdk-java</artifactId><version>1.0-SNAPSHOT</version><scope>system</scope><systemPath>${project.basedir}/lib/bsn-sdk-java-jar-with-dependencies.jar</systemPath>
</dependency>

方法二:

也可以将jar包放入D盘,然后cmd进入D盘,直接用命令

mvn install:install-file -Dfile=D:\bsn-sdk-java-jar-with-dependencies.jar -DgroupId=com.example.javacc -DartifactId=bsn-sdk-java -Dversion=1.0-SNAPSHOT -Dpackaging=jar

将其导入到本地的maven仓库,再在pom.yml文件中引入

<dependency><groupId>com.example.javacc</groupId><artifactId>bsn-sdk-java</artifactId><version>1.0-SNAPSHOT</version>
</dependency>

3、搬源码

将下载后的源码打开,找到test下的.java

将里面的文件copy到自己新建的项目下,记得将readme_CN.md也复制一下,有用

服务的平台类型是Fabric-2.3.2-secp256r1,选择Fabric

4、下载秘钥

查看我的服务,然后把下图所示的内容记下来,并且下载证书

下载后的文件里面有个ReadMe.txt文件,仔细阅读里面的内容

证书下载压缩包含用户链下应用证书和网关证书两大部分:
1、userAppCert目录:用于存放链下应用证书,具体文件如下:
【1】secp256r1目录:如果您发布测试网服务算法类型为secp256r1时,使用该目录证书进行签名以及验证。
【1】public_cert.pem:应用证书公钥文件,主要用于网关对接受的签名数据进行验证或公开给其它使用者。
【2】private_key.pem:应用证书私钥文件,主要用于请求网关时对数据进行签名以及验证。
【2】secp256k1目录:如果您发布测试网服务算法类型为secp256k1时,使用该目录证书进行签名。
【1】public_cert.pem:应用证书公钥文件,主要用于网关对接受的签名数据进行验证或公开给其它使用者。
【2】private_key.pem:应用证书私钥文件,主要用于请求网关时对数据进行签名。
【3】sm2目录:如果您发布测试网服务算法类型为国密(sm2)时,使用该目录证书进行签名以及验证。
【1】public_cert.pem:应用证书公钥文件,主要用于网关对接受的签名数据进行验证或公开给其它使用者。
【2】private_key.pem:应用证书私钥文件,主要用于请求网关时对数据进行签名。
2、gatewayCert目录:用于存放网关证书,具体文件如下:
【1】gateway_public_cert_secp256r1.pem:网关公钥secp256r1证书,如果您发布测试网服务算法类型为secp256r1时,用该公钥证书对网关响应时的数据进行验签。
【2】gateway_public_cert_secp256k1.pem:网关公钥secp256k1证书,如果您发布测试网服务算法类型为secp256k1时,用该公钥证书对网关响应时的数据进行验签。
【3】gateway_public_cert_sm2.pem:网关公钥国密(sm2)证书,如果您发布测试网服务算法类型为国密(sm2)时,用该公钥证书对网关响应时的数据进行验签。
3、fabricMsp目录:为Fabric上传公钥模式中的本地证书,具体文件如下:
【1】keystore目录:用户证书的私钥。
【2】{testuser}@{AppCode}-cert.pem:Fabric的用户证书文件。
【注】使用方式: 为将fabricMsp中的{testuser}@{AppCode}-cert.pem文件修改为【子用户名@AppCode-cert.pem】,并将该文件夹路径配置到config中的mspDir参数。
4、此类证书文件,只限于测试网与节点网关数据交互签名与验签使用,不用于任何应用业务处理!

因为我建的服务平台类型为Fabric-2.3.2-secp256r1,所以找到下面的文件,将其移动到springboot项目的resources目录下

5、初始化config

初始化config有两种方法,可以通过实例化配置对象读取json文件来初始化配置

api:=""       //节点网关地址
userCode:=""     //用户编号
appCode :=""     //应用编号
puk :=""         //应用公钥内容
prk :=""         //应用私钥内容
mspdir:=""       //注册用户证书存放目录

方法一:实例化配置对象

秘钥位置如图:

没用到MspDir,所以就没加MspDir参数

public void initConfig() throws IOException {Config config = new Config();config.setAppCode("app008809d6356825a4c249be16572723c6225");config.setUserCode("USER0001202112061433104102226");config.setApi("http://52.83.209.158:17502");config.setPrk(Common.readFile("cert/private_key.pem"));config.setPuk(Common.readFile("cert/public_key.pem"));config.setMspDir("");config.initConfig(config);
}

方法二:读取JSON文件

现在项目里面新建一个config.json文件,格式如下:

{  "userPrivateKey":"-----BEGIN PRIVATE KEY-----\nMIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQg8Flin1KdqsLIsAy/\nmnE5a0RURsqAlxOud0OX5o0Uf0egCgYIKoZIzj0DAQehRANCAASSyO4FdX4teW13\nF44IzByoW4kGM7X+vS+3jGyijG4EtjvffOY5DJtAC09cxvLCOR2dR1YLhkHMg6EY\nvO1Y+aXq\n-----END PRIVATE KEY-----\n",  "bsnPublicKey":"-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEksjuBXV+LXltdxeOCMwcqFuJBjO1\n/r0vt4xsooxuBLY733zmOQybQAtPXMbywjkdnUdWC4ZBzIOhGLztWPml6g==\n-----END PUBLIC KEY-----",  "appCode":"app0001202111091107065973883",  "userCode":"USER0001202103231633257714404",  "nodeApi":"https://nanjingtxynode.bsngate.com:17602",  "mspPath":""}

使用下方的java代码直接读取JSON文件

public void initConfig() {    String filePath="config/config.json";    Config config=Config.buildByConfigJson(filePath);    config.initConfig(config);}

测试运行一下看看能不能用:

6、子用户注册

public void userRegister() {    try {        initConfig(); //这里为示例,实际使用中,值需在程序生命周期内调用一次即可        ReqUserRegister register = new ReqUserRegister();        register.setName("test");        register.setSecret("123456");        ResUserRegister resUserRegister = FabricClient.userRegister(register);        System.out.println(JSONObject.toJSONString(resUserRegister, SerializerFeature.PrettyFormat));    } catch (Exception e) {        e.printStackTrace();    }}

可能应为这是测试服务的问题,注册用户的时候无法注册成功,但是换成正常建立的服务就没得问题

7、数据操作

如果上面的子用户注册成功了,就可以在添加数据的时候加上子用户名

ChainCode是服务部署成功后的链码部署名称,用到哪个链码包就输入对应的链码部署名称

public void reqChainCode() {    try {        initConfig();        ReqKeyEscrow reqkey = new ReqKeyEscrow();        String[] args = {"{\"baseKey\":\"161\",\"baseValue\":\"123\"}"};        reqkey.setArgs(args);        reqkey.setFuncName("set");        reqkey.setChainCode("cc_630d65b3664c42e29570c3754889a7c4");        //reqkey.setUserName("test"); /子用户名        ResKeyEscrow resKeyEscrow = FabricClient.reqChainCode(reqkey);        System.out.println(JSONObject.toJSONString(resKeyEscrow, SerializerFeature.PrettyFormat));    } catch (Exception e) {        e.printStackTrace();    }}

里面的String[] args = {"{\"basekey\":\"161\",\"basevalue\":\"123\"}"};也可以换成

JSONObject jsonObject=new JSONObject();jsonObject.put("baseKey" , "161");jsonObject.put("baseValue" , "123");String[] args = {JSONObject.toJSONString(jsonObject)};

FuncName的值有好几个,分别是:

set              保存数据event_set       保存数据事件update            更新数据event_update    更新数据事件delete            删除数据event_delete    删除数据事件get               获取数据getHistory      获取历史数据

1. 增加数据(set)

输入参数说明

baseKey:需要保存的唯一的主键标识

baseValue:保存的数据信息

例:{“baseKey”:“str”,“baseValue”:“this is string”}

其中baseKey是不能为空的字符串,baseValue可以是任意类型的数据。如果baseKey已经存在,则直接返回已经存在,不能添加;如果不存在,则添加数据。

2. 修改数据(update)

输入参数说明

baseKey:需要修改的唯一的主键标识

baseValue:保存的数据信息

例:{“baseKey”:“str”,“baseValue”:“this is string”}

其中baseKey是不能为空的字符串,baseValue可以是任意类型的数据。如果baseKey不存在,则无法更新,如果已经存在,则修改数据。

3. 删除数据(delete)

输入参数说明

baseKey:需要删除的唯一的主键标识的值

例:“str”

其中baseKey的值不能为空,且必须存在,否则将无法删除。

4. 获取数据(get)

输入参数说明

baseKey:需要获取的唯一的主键标识的值

例:“str”

其中baseKey的值不能为空,且必须存在,否则将无法获取到相应的信息。

5. 获取历史记录数据(getHistory)

输入参数说明

baseKey:需要获取的唯一的主键标识的值

例:“str”

其中baseKey的值不能为空。响应结果:交易Id(txId)、交易时间(txTime)、是否删除(isDelete)、交易信息(dataInfo)。

保存数据,返回SUCCESS就保存成功了


demo:https://gitee.com/hyh17808770899/spring-boot/tree/master/springboot-bsn-test

区块链测试网服务开发相关推荐

  1. 区块链测试网服务发布

    官网注册登录:区块链服务网络BSN 为开发者打造的免费测试服务 1.下载链码包 方法一 登录进去后就先去开发者社区下载链码包,我下载的是secp256r1版本的 然后改个名(不改也行) 方法二: 发布 ...

  2. 区块链测试(一):测试人员初学区块链

    区块链可能会成为未来10年互联应用的一个底层技术,会应用于各行各业的各种项目.比如:商品溯源,既然区块链会易用到各种系统,QA同学当然有必要了解下区块链该怎么测了. 1.1区块链的出现和特点 区块链的 ...

  3. Telegram正式推出TON区块链测试网络Lite客户端

    点击上方"蓝色字"可关注我们! 暴走时评:根据最近发给投资者的电子邮件,Telegram已正式发布Telegram开放网络(TON)的测试客户端.该测试版是Lite Client的 ...

  4. 区块链在公共服务领域的应用案例

    案例一:西班牙Lugo市政府等利用区块链建立公开公正的投票系统 西班牙公司Agora Voting成立于2014年,推出了一款基于区块链技术而建立的免费投票SaaS软件,致力于将传统耗时且存在作弊风险 ...

  5. 新书推荐 |《基于区块链的物联网项目开发》

    新书推荐 <基于区块链的物联网项目开发> 点击上图了解及购买 探索物联网架构中分类记账技术的实际实现,研究智能设备的安全最佳实践,了解端到端物联网解决方案的区块链实现. 编辑推荐 将物联网 ...

  6. 区块链BaaS云服务(23)网易NBaaS平台

    1. 功能 1.1. 去中心化数字身份 未来通行证 未来通行证(DID)提供分布式去中心化数字身份标识及可信数据交换流转,是未来全球通用的全新通行证,基于服务公众.价值交换的理念,构建可信基础设施,致 ...

  7. CSDN蒋涛大数据表明:DCO - 区块链时代企业级服务的全新机会

    CSDN蒋涛大数据表明:DCO - 区块链时代企业级服务的全新机会 2018年4月20号下午,2018区块链企业级服务创新论坛暨权大师A轮融资及战略升级发布会在北京凯迪克格兰云天酒店召开,在此次大会上 ...

  8. igxe查询交易机器人_区块链数字货币交易所开发功能技术解决方案 | 拾里郎

    点击上方蓝字关注我们! 区块链数字货币交易所开发是数字货币交易流通和价格确定的场所. 数字货币交易所开发是基于区块链技术面向数字货币交易市场的综合性平台.从目前币圈的发展来看,交易所涵盖了包括充值.资 ...

  9. 区块链app源码_区块链app商城系统开发适用于哪些企业

    区块链商城系统开发,区块链技术让人们对于软件应用开发有了全新的想象,现在也有越来越多的企业开始布局区块链业务,区块链应用开渐渐成为市场应用的宠儿,随着区块链技术的不断发展,未来也会有越来越多的区块链应 ...

最新文章

  1. oracle增量 mysql_是否有任何mysql / Oracle函数给予增量号。基于另一列相似值的一列?...
  2. 打包成单独的HTML文件,【WEBPACK】分离css单独打包
  3. Verify that you have sufficient access to that key
  4. makefile 最简单用法
  5. linux挂载NTFS硬盘
  6. DATEADD(Day, DATEDIFF(Day,0,ShippingTime), 0)
  7. python求圆柱体的体积_漫谈超球体的体积公式
  8. python测试题 - 列表,字典,字符串
  9. 什么是今日头条下拉词下拉框?
  10. 详解ifconfig命令
  11. 在Mac电脑上如何将TXT文本转成PDF?
  12. Python代码规范
  13. Pycharm中文设置教程
  14. Maple学习笔记——基础
  15. Android 四大开发组件
  16. windows10下搜索磁盘神器 Listay
  17. 【隔离的CAN通信接口-1Mbps】
  18. 利用栈实现精制转换c++
  19. C#SharpDevelop如何开发插件详细记录
  20. Linux查看磁盘空间的命令

热门文章

  1. 魅族手机 魅蓝手机 部分log不显示的问题
  2. 【RepVGG】《RepVGG:Making VGG-style ConvNets Great Again》
  3. KBU1010-ASEMI高端适配器扁桥KBU1010
  4. layui -- autoForm 模块(动态生成表单,非官网模块)
  5. 矩阵的定义及其相关运算
  6. Machine Learning 梳理总结 L0~L6
  7. 一种红外探测自动开关
  8. windows linux 集群,微软染指集群计算 放言Windows将干掉Linux(转)
  9. 中国索尼的相机质量怎么样?
  10. camera基础知识——1、camera模组简介