乐趣区

关于后端:中移链JavaSDK实战使用

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 凋谢联盟链
官网 EOSIO Java-SDK
官网 EOSIO 的 RPC Provider(RPC 接口程序)
官网 EOSIO 的 Signature Provider(签名接口程序)
官网 EOSIO 的 Serialization Provider(序列化接口程序)
官网 EOSIO 的 Android 示例程序

本文由 mdnice 多平台公布

退出移动版