中移链Java-SDK实战使用

2023-10-31

id:BSN_2021 公众号:BSN研习社 作者:中移信息

中移链是基于EOS区块链框架改造,满足BSN开放联盟链要求,符合国内监管政策。BSN开放联盟链(BSN Open Permissioned Blockchain, 简称OPB)包括多条基于公有链框架和联盟链框架搭建的公用链,开发者可以选择适合应用业务需求的开放联盟链部署和运行智能合约和分布式应用,每条开放联盟链各有特点和优势,并均使用类似公有链的燃料机制通过人民币计价,使用方便简洁。在符合国家监管政策的前提下,实现“开箱即用、快速上链”。

​ 中移链Java-SDK,是一个用于与其底层区块链EOS交互的API工具包,可提高Java、Android等开发者操作中移链、EOS的规范性及便利性。本文是关于如何使用中移链Java-SDK的操作指南,适用于中移链或EOS的开发者实战参考,也可以帮助其他读者了解中移链及其底层的EOS。

一、 中移链Java-SDK简述

​ 中移链Java-SDK 本质上是一个用于与EOS底层区块链交互的API工具,其提供的主要接口功能可参考EOS自带的插件chain_api_plugin。

​ 中移链Java-SDK的核心库使用了插件式接口程序的体系结构,可以灵活地在多种环境中使用。主要涉及到4个Provider接口程序(RPC Provider、Signature Provider、Serialization Provider、ABI Provider)。其中ABI Provider在EOSIO Java-SDK中提供了具体的实现(ABIProviderImpl),其它3个Provider并不在EOSIO Java-SDK中实现,需要单独导入使用(参考下文第二部分的导入相关jar包)。

​ 中移链Java-SDK的核心功能类是TransactionSession和TransactionProcessor,利用这些Provider来准备和处理EOS交易。

  • RPC Provider(RPC接口程序)

    负责对nodeos的所有RPC调用,以及一般的网络处理(可达性、重试、故障转移逻辑等)。

  • Signature Provider(签名接口程序)

    Signature Provider使用指定可用的密钥来请求和获取交易事务签名。所用于配置的签名,可以是来自平台密钥库中的密钥的签名,也可以是来自终端用户设备上的钱包应用程序的签名。平台可以让用户按照自己的偏好来选择其中一种方式保管密钥。

  • Serialization Provider(序列化接口程序)

    负责处理ABI驱动的交易事务以及Json和二进制数据表示之间的操作序列化和反序列化。

  • ABI Provider(ABI接口程序)

    负责获取和缓存ABI,以便在序列化和反序列化期间使用。

二、 导入相关jar包

​ 可以使用gradle或Maven等依赖包管理工具来导入相关jar包,主要是EOSIO Java-SDK和3个Provider包(Signature Provider、RPC Provider、Serialization Provider)。

1. Gradle工具导入

implementation 'one.block:eosiojava:1.0.0'
implementation 'one.block:eosiojavasoftkeysignatureprovider:1.0.0'
implementation 'one.block:eosio-java-abieos-serialization-provider:1.0.0'
implementation 'one.block:eosio-java-rpc-provider:1.0.0'

2. Maven工具导入

<dependency>
  <groupId>one.block</groupId>
  <artifactId>eosiojava</artifactId>
  <version>1.0.0</version>
</dependency>

<dependency>
  <groupId>one.block</groupId>
  <artifactId>eosiojavasoftkeysignatureprovider</artifactId>
  <version>1.0.0</version>
</dependency>

<dependency>
  <groupId>one.block</groupId>
  <artifactId>eosio-java-abieos-serialization-provider</artifactId>
  <version>1.0.0</version>
</dependency>

<dependency>
  <groupId>one.block</groupId>
  <artifactId>eosio-java-rpc-provider</artifactId>
  <version>1.0.0</version>
</dependency> 

三、 配置相关初始化参数

主要初始化参数包括:

  • 配置RPC Provider所连接的链URL地址;

  • 配置Signature Provider的私钥。

IRPCProvider rpcProvider = new EosioJavaRpcProviderImpl("https://baseurl.com/v1/");
SoftKeySignatureProviderImpl signatureProvider = new SoftKeySignatureProviderImpl();
signatureProvider.importKey("xxxxx");  

四、 实现API调用

1. EOS链基本信息查询

​ EOS链基本信息查询可以通过实例化RPC Provider(RPC接口程序)来实现,只需配置RPC Provider所连接的链URL地址即可。

​ RPC Provider的常用API方法有:

getInfo();    // 调用返回区块链总体信息
getBlockInfo();   // 调用返回指定区块的详细数据
getRawAbi();   // 调用返回指定账号所托管合约的abi描述信息
getRequiredKeys();  // 调用返回签名一个交易时需要的公钥清单

示例程序:

// getInfo()
IRPCProvider rpcProvider = new EosioJavaRpcProviderImpl("https://baseurl.com/v1/"); 
GetInfoResponse getInfoResponse = rpcProvider.getInfo();
System.out.println(getInfoResponse.getHeadBlockNum());  
// getBlockInfo()  
BigInteger blockNum = BigInteger.valueOf(543210);
GetBlockInfoRequest getBlockInfoRequest = new GetBlockInfoRequest(blockNum);
GetBlockInfoResponse getBlockInfoResponse = rpcProvider.getBlockInfo(getBlockInfoRequest);
System.out.println(getBlockInfoResponse.getTransactionMroot());

2. EOS交易处理

​ EOS交易事务通过实例化的TransactionSession来执行,TransactionSession由配置4个Provider实例来构造而成。

​ 交易事务处理的一些参数可以通过使用TransactionConfig进行更改。这些参数是UselastReversible、blocksBehind和expiresSeconds。其默认值分别为UselastReversible等于true,blocksBehind等于3,expiresSeconds等于300。当UselastReversible为true时,将忽略blocksBehind,TransactionProcessor使用最后一个不可逆块和expiresSeconds来计算TAPO。否则,TransactionProcessor使用当前头块减去在blocksBehind和expiresSeconds中为TAPO指定的数字。TransactionConfig默认为UselastReversible,目的为减少在特定条件下进行交易事务微分叉的机会。

​ 示例程序:

// 4个Provider的实例化及初始化 
IRPCProvider rpcProvider = new EosioJavaRpcProviderImpl("https://baseurl.com/v1/");
ISerializationProvider serializationProvider = new AbiEosSerializationProviderImpl();
IABIProvider abiProvider = new ABIProviderImpl(rpcProvider, serializationProvider);
SoftKeySignatureProviderImpl signatureProvider = new SoftKeySignatureProviderImpl();
signatureProvider.importKey("xxxxx");

// 4个Provider实例构造成TransactionSession
TransactionSession session = new TransactionSession(
        serializationProvider,
        rpcProvider,
        abiProvider,
        signatureProvider
);
TransactionProcessor processor = session.getTransactionProcessor();

TransactionConfig transactionConfig = processor.getTransactionConfig();
// 按需修改transactionConfig配置
transactionConfig.setUseLastIrreversible(false);
transactionConfig.setExpiresSeconds(600);
// 使transactionConfig生效
processor.setTransactionConfig(transactionConfig);

// 组装交易参数
String jsonData = "{\n" +
        "\"from\": \"person1\",\n" +
        "\"to\": \"person2\",\n" +
        "\"quantity\": \"1.0000 EOS\",\n" +
        "\"memo\" : \"交易备注\"\n" +
        "}";
List<Authorization> authorizations = new ArrayList<>();
authorizations.add(new Authorization("myaccount""active"));
List<Action> actions = new ArrayList<>();
actions.add(new Action("eosio.token""transfer", authorizations, jsonData));
processor.prepare(actions);

// 交易提交及广播
SendTransactionResponse sendTransactionResponse = processor.signAndBroadcast();

// 从EOSIO 2.1开始,交易操作可以具有与之关联的返回值
ArrayList<Object> actionReturnValues = sendTransactionResponse.getActionValues();
System.out.println(actionReturnValues);

五、 参考链接

BSN开放联盟链[1] 官方EOSIO Java-SDK[2] 官方EOSIO的RPC Provider(RPC接口程序)[3] 官方EOSIO的Signature Provider(签名接口程序)[4] 官方EOSIO的Serialization Provider(序列化接口程序)[5] 官方EOSIO的Android示例程序[6]

参考资料

[1]

BSN开放联盟链: https://opb.bsnbase.com/main/index

[2]

官方EOSIO Java-SDK: https://github.com/EOSIO/eosio-java

[3]

官方EOSIO的RPC Provider(RPC接口程序): https://github.com/EOSIO/eosio-java-rpc-provider

[4]

官方EOSIO的Signature Provider(签名接口程序): https://github.com/EOSIO/eosio-java-softkey-signature-provider

[5]

官方EOSIO的Serialization Provider(序列化接口程序): https://github.com/EOSIO/eosio-java-abieos-serialization-provider

[6]

官方EOSIO的Android示例程序: https://github.com/EOSIO/eosio-java-android-example-app

本文由 mdnice 多平台发布

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

中移链Java-SDK实战使用 的相关文章

  • 解决TypeError: string indices must be integers, not str

    遇到问题 ExtendValue area 1 info year 2014 a 12 b 3 c 5 trip country CN 在按照字典访问的时候 报错 TypeError string indices must be integ
  • ubuntu 16.04 gedit 配置

    ubuntu 16 04 gedit 配置 1 功能说明 说明 1 配置使用gedit调用python工具 调用终端显示python运行结果 2 配置使用gedit调用终端 显示shell运行结果 3 配置使用gedit编辑markdown

随机推荐

  • Java常见面试题(2)

    1 表单提交重复 怎么设置接口的幂等性 场景 当用户在下单的时候 他已经支付过了 再返回支付结果的时候 出现网络抖动的问题 出现了一些异常 那这个时候用户已经消费过了 如果用户在点击这个按钮 就会二次消费 这就是因为没有实现幂等性 解决 1
  • State Manager

    stateProvider工作的方式与Angular s v1 router相近 但是他更加注重状态 状态对应于应用程序中某个位置 整体的UI和导航A state corresponds to a place in the applicat
  • mybatis条件判断/ 动态sql

    1 if标签 单条件判断 判断完第一个条件 对下一个条件进行判断 看是否能满足条件 满足则执行
  • 开发中用到的数据库查询案例

    目录 1 查询过去12个月的数据 并统计每个月数据的数量 2 查询过去12个月的数据 并统计每个月数据的数量 如果某个月数据没有 也展示出为0 1 查询过去12个月的数据 并统计每个月数据的数量 select date format cas
  • Qt入门-界面多语言国际化的实现

    Qt为国际化的实现提供了简便的方法 下面使用Qt Linguist示例一个中文语言界面的生成 我使用以前的实例 http blog csdn net xgbing article details 7778856 它是一个英文界面 步骤如下
  • 什么场景该用 MongoDB

    摘要 前段时间 MongoDB源码团队 在云栖社区上发起了一个 MongoDB 使用场景及运维管理问题交流探讨 的技术话题 有近五千人关注了该话题讨论 很多人比较关心 MongoDB的适用场景 也有用户在话题里分享了自己的业务场景 这里就
  • 【题解】poj2689(LibreOJ10197) 线性筛

    题目链接 筛出2到sqrt u 的所有质数 再标记 l u 中是质数p倍数的数 最后枚举相邻质数 部分代码实现参考了大佬题解 题目描述 给定两个整数 L R L R L R 求闭区间 L
  • Linux I2C设备驱动基本规范

    不同于单片机驱动开发 即使是简单的I2C设备驱动程序 如果要在Linux上实现同种功能的驱动程序 事情也会变的复杂起来 对于初学者而言 主要的困难就是不知道如何使用Linux现有的驱动框架 去完成驱动程序的开发 I2C设备驱动 相对来说比较
  • VUE+element-ui微信充值支付

    VUE element ui微信充值支付 前端页面是参考别人的 前端页面是参考别人的 链接 http www lanlanwork com blog post 5839
  • docker build 命令后 . 号的意思

    点击在我的博客 xuxusheng com 中查看 有更好的排版哦 参考文章 https yeasy gitbooks io docker practice content image build html 我们在使用 docker bui
  • JS-计算日期差值;计算日期之间的月数

    计算两天之间的日期差值 输入格式 yyyy MM DD function daysBetween sDate1 sDate2 Date parse 解析一个日期时间字符串 并返回1970 1 1 午夜距离该日期时间的毫秒数 var time
  • MATLAB 中的非线性回归:将复杂模型拟合到数据

    线回归是一种强大的技术 用于将复杂模型拟合到不遵循线性关系的数据 MATLAB 提供了强大的工具来执行非线性回归分析 使您能够找到最适合模型的参数并根据拟合模型进行预测 在本教程中 我们将介绍使用 MATLAB 环境中可用的数据集在 MAT
  • window安装Linux

    一 安装VMware 可通过VMware官网VMware Delivering a Digital Foundation For Businesses下载正版VMware 下载完成后直接打开 或使用管理员身份运行 点击是 点击下一步 点击我
  • 最简单的网页登录注册功能讲解及其实现

    目录 前言 结构 创建数据库存储账户信息 html注册页面 注册处理后台程序 html登录页面 后台登录处理程序 演示 前言 最近打算做一个网页登录的练习 今天撸一个最简单的demo 记录一下学习的过程 结构 实现一个网页最基本的注册与登录
  • SpringSecurity系列 之 集成第三方登录(包括默认的用户名密码、短信验证码和github三种登录方式)

    一 前言 前面在 SpringSecurity系列 之 认证过程和原理 一文中 我们已经学习了SpringSecurity的认证过程 实现过程如下图所示 根据这个认证过程 我们如何实现集成多种第三方登录的方案呢 我们这里提供了一种思路 首先
  • (若依)RuoYi后台管理框架前端

    若依后台管理 官方网址 后台管理二开推荐 官网的源码地址可供下载前后端代码 最近进到公司后跟着团队接了两家公司的App一套的开发 到公司的第一天就是先配置开发环境 安装软件之类的 第二天 带着熟悉RuoYi框架 很巧带我的大哥和我是一个学校
  • 关于一些奇葩的兼容bug

    iPhoneXr canvas层级失效 大致就是这样 一个img在canvas上面 所有手机img正常显示 就是ios的这个机型有问题 系统版本14 0 img的层级不论多大都会被canvas覆盖 解决办法尽然是将canvas的层级设置为
  • Ubuntu下FastDFS环境的安装搭建

    Ubuntu下FastDFS环境的安装搭建 一 FastDFS简介 FastDFS是一个个人开发的 轻量级的 开源的分布式文件系统 纯C语言编写 其功能包括 文件存储 文件同步 文件访问 文件上传 文件下载 等 解决了大容量存储和负载均衡的
  • Qt主线程卡死,竟然与X11 的 _XReply() 有关

    在ubuntu系统下运行Qt程序 Qt的程序就相当于X11的一个客户端 受X11的限制 近期 在处理一起离奇事件 发现UI的qt界面已经卡死了 无鼠标键盘任何反应 但程序是运行的 比如与其他设备通信是正常的 说明程序本身没有死掉 通过断点
  • 中移链Java-SDK实战使用

    id BSN 2021 公众号 BSN研习社 作者 中移信息 中移链是基于EOS区块链框架改造 满足BSN开放联盟链要求 符合国内监管政策 BSN开放联盟链 BSN Open Permissioned Blockchain 简称OPB 包括