中移鏈Java-SDK實戰使用
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(
");
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(
");
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(
");
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]
參考資料
BSN開放聯盟鏈:
[2]官方EOSIO Java-SDK:
[3]官方EOSIO的RPC Provider(RPC介面程式): -rpc-provider
[4]官方EOSIO的Signature Provider(簽名介面程式): -softkey-signature-provider
[5]官方EOSIO的Serialization Provider(序列化介面程式): -abieos-serialization-provider
[6]官方EOSIO的Android示例程式: -android-example-app
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70012206/viewspace-2904685/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 中移鏈(基於EOS)DDC-SDK實戰 -如何整合中移鏈DDC-SDK
- 中移鏈結合CA證書實現節點准入控制
- 中移鏈合約常用開發介紹 (二)多索引表的使用索引
- Flutter移動端實戰手冊Flutter
- Velero系列文章(四):使用Velero進行生產遷移實戰
- python中的裝飾器的使用實戰Python
- 『中級篇』docker 使用bind Mounting實戰(36)Docker
- 中移鏈(基於EOS)實戰:如何呼叫RPC介面組裝交易、簽名、上鍊以及查詢上鍊結果RPC
- 有贊全鏈路壓測實戰
- 移動端開發小結(實戰)
- 遷移 SQL Server 到 Azure SQL 實戰SQLServer
- BSN開放聯盟鏈“中移鏈”瀏覽器2.0正式釋出!瀏覽器
- 盒馬供應鏈演算法實戰演算法
- 中移鏈助力“甬鏈”探索區塊鏈基礎設施建設的先行經驗區塊鏈
- curl 使用指北&實戰
- 專案實戰之gradle在實際專案中的使用Gradle
- 【Flutter實戰】移動技術發展史Flutter
- 中移鏈系統合約管控功能介紹
- Vue+Koa2移動電商實戰 (五)mock資料使用和佈局VueMock
- Mysql百萬級資料遷移,怎麼遷移?實戰過沒?MySql
- 專案實戰之Rxjava、RxBinding在實際專案中的使用RxJava
- Go微服務框架go-kratos實戰05:分散式鏈路追蹤 OpenTelemetry 使用Go微服務框架分散式
- BSN開放聯盟鏈“中移鏈”2.0瀏覽器提供了哪些新特性?瀏覽器
- docker實戰使用基礎Docker
- JMeter實戰(三) 介面使用JMeter
- 【Redis 技術探索】「資料遷移實戰」手把手教你如何實現線上 + 離線模式進行遷移 Redis 資料實戰指南(scan模式遷移)Redis模式
- 移動端真機除錯實戰經驗除錯
- Vue+Node+vant+mongoDB移動商城實戰【1】VueMongoDB
- Mysql百萬級資料遷移實戰筆記MySql筆記
- 在 iOS 中實現方法鏈呼叫iOS
- 在 iOS 中實現區塊鏈iOS區塊鏈
- webpack4 中的最新 React全家桶實戰使用配置指南!WebReact
- 區塊鏈技術實戰學習路線圖區塊鏈
- 使用Javascript實現小型區塊鏈JavaScript區塊鏈
- ElasticSearch實戰系列七: Logstash實戰使用-圖文講解Elasticsearch
- Linux 網路中通知鏈的使用Linux
- 《EJB實用原理和實戰示例》中的實戰示例問題請教
- Vue1.x 遷移 Vue2.x 實戰Vue