2021年10月,中移(动)信息技术有限公司(以下统称“ IT 公司 ”)与 BSN 开展合作 , 由 BSN 搭建 BSN-DDC 基础网络, IT 公司区块链团队自主研发基于 EOS 的 中移链 DDC,面向存在 DDC 业务需求的各行业客户提供接入服务,使其可便捷管理 DDC 操作,从而灵活升级产品模式,助力客户业务创新。
本文档是 关于 中移链 DDC-SDK 实战 , 即 如何集成基于 EOS 的 中移链 DDC-SDK 的操作指南 , 适用于 BSN 开放联盟链 --中移链 DDC-SDK 开发者 , 帮助 读者了解如何以平台方的角色集成中移链 DDC-SDK。
一、 中移链(基于 EOS)操作说明
1. 创建链账户
1.1 进入【链账户管理】模块,点击【创建链账户】按钮;
1.2 在链账户模块中点击创建链账户进入新增页面。页面中输入链账户名称,开放链框架下拉中选择中移链,链账户类型只支持上传公钥模式;
注意:链账户名称是 12个字符,只能包括【12345和26个字母】。其中必须以字母开头,并且链账户名称唯一。完成创建后,该链账户只可用于访问所选开放链框架且不可修改。
1.3 用户点击【创建】按钮,进入证书模式页中,输入公钥、测试数据及签名数据。测试通过后,点击【确认创建】完成链账户创建;
注意:此时创建的链账户就是平台方链账户,上传公钥所对应的私钥就是平台方私钥,后续初始化配置需要使用。
2. 分配资源
2.1 在链账户列表中的操作列点击【分配资源】后,系统打开资源分配窗口。
2.2 资源分配窗口,用户选择资源有效期、输入资源购买容量,系统自动计算出支付金额。点击【确认分配】按钮,弹出确认分配提示并点击【确定】按钮完成链账户资源分配;
注意:资源用于链上交易,分配后不支持退款。链上交易处理过程中,从链账户中扣除资源时,链账户上必须同时有 NET、CPU和RAM,三种资源缺一不可。CPU/NET购买后,资源使用有时间限制,RAM购买后无时间限制。用户购买CPU/NET后,若在有效期内,资源使用累加超过购买额度,需重新分配资源,否则过期则会清空资源。
3. 创建项目
3.1 进入【项目管理】模块,点击【创建项目】按钮。
3.2、 在创建项目页面中输入【项目名称】,【开放链框架】下拉中选择【中移链】即可完成创建;
注意:项目创建完成后不允许修改开放链框架。
4. 网关接入说明
4.1 密钥算法:中移链(基于 EOS)通过ECDSA(secp256k1)算法生成公私钥。
4.2 Chain ID: 9b4c6015f8b73b2d7ee3ebd92d249a1aba06a614e9990dcf54f7cf2e3d5172e1。
4.3 接入方式:中移链(基于 EOS)目前支持 JSON-RPC API 方式接入; API文档参考: https://developers.eos.io/manuals/eos/latest/nodeos/plugins/chain_api_plugin/api-reference/index
4.4 密钥模式:在上传公钥模式下,用户自己管理密钥,完全按照 API文档发起交易。
4.5 网关地址规则
RPC访问地址:网关地址/api/[项目id]/rpc;其中网关地址: https://opbningxia.bsngate.com:18602;
如果使用项目 key接入,需按照网关地址/api/[项目id]/[Protocol]格式拼接请求地址,同时请求报文头header中增加x-api-key:{项目key值};
项目 id:创建项目后生成的项目ID,见下图:
也可以从项目管理 ->操作->下载接入参数获取。
二、 引入 DDC-SDK依赖包
1. 引入 bsn-eos-sdk的jar包
1. <dependency>
2. <groupId> com.bsn.eos </groupId>
3. <artifactId> bsn-eos-sdk </artifactId>
4. <version> 1.0.20220602 </version>
5. <scope> system </scope>
6. <systemPath> ${project.basedir}/lib/bsn-eos-sdk-1.0.20220602.jar </systemPath>
7. </dependency>
2. 引入 EOS官方java-sdk以及相关依赖包
1. <dependencies>
2. <dependency>
3. <groupId> org.bouncycastle </groupId>
4. <artifactId> bcprov-jdk15on </artifactId>
5. <version> 1.69 </version>
6. </dependency>
7. <dependency>
8. <groupId> org.bouncycastle </groupId>
9. <artifactId> bcpkix-jdk15on </artifactId>
10. <version> 1.69 </version>
11. </dependency>
12.
13. <dependency>
14. <groupId> one.block </groupId>
15. <artifactId> eosiojava </artifactId>
16. <version> 1.0.0 </version>
17. <exclusions>
18. <exclusion>
19. <groupId> org.slf4j </groupId>
20. <artifactId> slf4j-jdk14 </artifactId>
21. </exclusion>
22. </exclusions>
23. </dependency>
24. <dependency>
25. <groupId> one.block </groupId>
26. <artifactId> eosio-java-rpc-provider </artifactId>
27. <version> 1.0.0 </version>
28. </dependency>
29.
30. <dependency>
31. <groupId> com.alibaba </groupId>
32. <artifactId> fastjson </artifactId>
33. <version> 1.2.79 </version>
34. </dependency>
35. <dependency>
36. <groupId> com.fasterxml.jackson.core </groupId>
37. <artifactId> jackson-databind </artifactId>
38. <version> 2.13.0 </version>
39. </dependency>
40. <dependency>
41. <groupId> com.squareup.okhttp3 </groupId>
42. <artifactId> okhttp </artifactId>
43. <version> 3.12.0 </version>
44. </dependency>
45. <dependency>
46. <groupId> com.squareup.okhttp3 </groupId>
47. <artifactId> logging-interceptor </artifactId>
48. <version> 3.12.0 </version>
49. </dependency>
50. <dependency>
51. <groupId> com.squareup.retrofit2 </groupId>
52. <artifactId> converter-scalars </artifactId>
53. <version> 2.5.0 </version>
54. </dependency>
55. <dependency>
56. <groupId> com.squareup.retrofit2 </groupId>
57. <artifactId> retrofit </artifactId>
58. <version> 2.5.0 </version>
59. </dependency>
60. <dependency>
61. <groupId> com.squareup.retrofit2 </groupId>
62. <artifactId> converter-jackson </artifactId>
63. <version> 2.5.0 </version>
64. </dependency>
65.
66. <dependency>
67. <groupId> org.projectlombok </groupId>
68. <artifactId> lombok </artifactId>
69. <version> 1.18.24 </version>
70. <scope> compile </scope>
71. </dependency>
72. <dependency>
73. <groupId> io.jafka </groupId>
74. <artifactId> jeos </artifactId>
75. <version> 0.9.15 </version>
76. <exclusions>
77. <exclusion>
78. <groupId> org.slf4j </groupId>
79. <artifactId> slf4j-reload4j </artifactId>
80. </exclusion>
81. </exclusions>
82. </dependency>
83. </dependencies>
三、 初始化平台方配置
1. 初始化参数配置
初始化 com.bsn.eos.chain.ChainConfig 类中的三个参数:gatewayUrl、ddcContractAndAccount、pk,完成EOS链访问地址、DDC合约账户名、平台方账户私钥的配置。其中,中移链的gatewayUrl为https://opbningxia.bsngate.com:18602/api/[项目id]/rpc,合约链账户ddcContractAndAccount为reddateddc22,平台方账户私钥pk为创建链账户所使用公钥对应的私钥。
2. 初始化代码示例
1. //设置EOS链访问地址
2. ChainConfig.setGatewayUrl( "https://opbningxia.bsngate.com:18602/api/58f79d4af7754e588fc2efd23bf7e7fc/rpc" );
3. //设置部署DDC合约的账户
4. ChainConfig.setDdcContractAndAccount( "reddateddc22" );
5. //设置平台方账户私钥
6. ChainConfig.setPk( "5Jj3bPpWtbJex5DGXCLjE8c5Gr9SudFRogkwXvd1KHGGa7ZWYS1" );
四、 实现 API调用
1. 调用 DDC生成
1 .1功能介绍:
平台方、终端用户通过调用该方法进行 DDC的创建。
1 .2 API定义:
1 ) 方法定义: String safeMint(String from, String to, String ddcURI);
2 ) EOS合约方法:ddc::mint_721(name sender, name to, uint64_t amount, std::string ddc_uri, std::string memo);
3 ) 调用者:平台方、终端用户,需设置调用者私钥;
4 ) 核心逻辑:
① 检查发送方、接收者账户状态是否可用;
② 检查角色是否为平台方或终端用户;
③ 检查发送方账户是否有调用权限;
④ 检查发送方账户与接受者账户是否属于同平台。
5 ) 输入参数:
|
字段名 |
字段 |
类型 |
必传 |
备注 |
|
发送方账户 |
From |
String |
是 |
|
|
接收者账户 |
to |
String |
是 |
|
|
DDC资源标识符 |
ddcURI |
String |
是 |
|
6 ) 输出参数:
|
字段名 |
字段 |
类型 |
备注 |
|
|
|
String |
交易 Hash |
1 .3调用代码示例:
1. @Test
2. public void mint721() {
3. //设置平台方账户
4. String platformAccount = "ddc.platform" ;
5. DDC721Service ddc721Service = new DDC721ServiceImpl();
6. String transactionId = ddc721Service.safeMint(platformAccount, platformAccount, "https://bitnodes.io/226" );
7. System.out.println(transactionId);
8. }
2. 调用查询 DDC数量
2 .1功能介绍:
通过调用该方法查询当前账户拥有的 DDC数量。
2 .2 API定义:
1 ) 方法定义: BigInteger balanceOf(String owner);
2)EOS合约方法:get_table_rows(name contract, name table, name account);
3)调用者:所有人;
4)核心逻辑:检查拥有者账户状态是否可用;
5)输入参数:
|
字段名 |
字段 |
类型 |
必传 |
备注 |
|
拥有者账户 |
owner |
String |
是 |
|
6) 输出参数:
|
字段名 |
字段 |
类型 |
备注 |
|
DDC的数量 |
balance |
BigInteger |
|
2 .3 调用代码示例:
1. @Test
2. public void balanceOf721() {
3. //设置平台方账户
4. String platformAccount = "ddc.platform" ;
5. DDC721Service ddc721Service = new DDC721ServiceImpl();
6. System.out.println(ddc721Service.balanceOf(platformAccount));
7. }
五、 参考链接
BSN介绍: https://bsnbase.com/static/tmpFile/bzsc/bsn/1-1.html
中移链(基于 EOS)操作说明: https://bsnbase.com/static/tmpFile/bzsc/openper/7-2-4.html
中移链(基于 EOS)网关接入说明: https://bsnbase.com/static/tmpFile/bzsc/openper/7-3-6.html
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70012206/viewspace-2902724/ ,如需转载,请注明出处,否则将追究法律责任。