中移链元交易功能对接说明
作者:BSN研习社
- 2023-03-03 北京
本文字数:15352 字
阅读完需:约 50 分钟

前言
12月5日,由中国移动信息技术中心研发的中移链“元交易”功能,已在BSN-DDC基础网络正式上线。中移链“元交易”是将多个连续的中移链链操作打包整合,保障操作事务统一、一致的快捷交易开发工具包。在中移链原有链上应用开发SDK的基础上,中移链“元交易”降低了区块链业务应用的开发复杂度,对构建高效便捷的区块链应用开发经济模型提供了重要支撑。
复制代码
一、元交易功能
(一)功能简介
“元交易”是由平台方代终端用户(DDC的拥有者)发起DDC铸造、转移或者销毁的相关交易,且本功能由平台方代付资源费和手续费。在传统的交易模式中,如发起铸造、转移、销毁等操作时,需要终端用户拥有足额的链资源和DDC合约中的手续费,并且流程较长且复杂。本次中国移动信息技术中心研发的中移链“元交易”功能,通过将交易的发起方从终端用户变更为平台方,控制发起方的数量,使发起方充值链资源变得容易,同时从根本上解决了终端用户操作复杂的弊端。
复制代码
(二)应用场景
1、终端用户根据交易请求参数和权限私钥,离线生成元交易的签名,并将签名值发送给平台方,由平台方代为发起元交易执行; 2、终端用户将私钥托管给平台方,平台方根据交易请求参数和权限私钥,生成元交易的签名并发起元交易执行。
复制代码
二、元交易签名
(一)基于 ddc-sdk-java 进行元交易签名
1、平台方添加终端用户的公钥,参考 ddc-sdk 中的 addMetaUser 方法
1)测试用例
@Testpublic void addMetaUser() { //设置平台方账户私钥 ChainConfig.setPk("5Jj3bPpWtbJex5DGXCLjE8c5Gr9SudFRogkwXvd1KHGGa7ZWYS1"); DDCPermissionService ddcPermissionService = new DDCPermissionServiceImpl(); //平台方账户、终端用户账户、终端用户账户公钥 PushedTransaction pt1 = ddcPermissionService.addMetaUser("ddcplatform1", "ddcconsumer1", "EOS6R3jYqb3uZsVgzJz4HVLcYV94CLkr3u9unEzm5rpuAqUos7fqK"); System.out.println(JSONUtil.toJsonStr(pt1));}
复制代码
2)输出结果
{ "transactionId":"3ea5f2b4e21642f6862a0120a11ff9ef0fd54bc34f4d5c79884bc66b5f5bd86e", "processed":{ "id":"3ea5f2b4e21642f6862a0120a11ff9ef0fd54bc34f4d5c79884bc66b5f5bd86e", "blockNum":169181, "blockTime":"2023-02-01T06:23:56.000", "receipt":{ "cpuUsageUs":278, "netUsageWords":21, "status":"executed" }, "elapsed":278, "netUsage":168, "scheduled":false, "actionTraces":[ { "actionOrdinal":1, "creatorActionOrdinal":0, "closestUnnotifiedAncestorActionOrdinal":0, "receipt":{ "abiSequence":1, "actDigest":"d3950f01d30eeee961fb2e2335b00cfdf098b19a6671d18189bf59454f8410df", "authSequence":[ [ "ddcplatform1", "11" ] ], "codeSequence":1, "globalSequence":169952, "receiver":"ddccontract1", "recvSequence":69 }, "receiver":"ddccontract1", "act":{ "account":"ddccontract1", "authorization":[ { "actor":"ddcplatform1", "permission":"active" } ], "data":{ "sender":"ddcplatform1", "account":"ddcconsumer1", "pubKey":"EOS6R3jYqb3uZsVgzJz4HVLcYV94CLkr3u9unEzm5rpuAqUos7fqK" }, "hexData":"10e4a52b9b58514a10ae921a4f8a504a35454f533652336a59716233755a7356677a4a7a3448564c6359563934434c6b72337539756e457a6d357270754171556f733766714b", "name":"addmetauser" }, "contextFree":false, "elapsed":125, "console":"", "trxId":"3ea5f2b4e21642f6862a0120a11ff9ef0fd54bc34f4d5c79884bc66b5f5bd86e", "blockNum":169181, "blockTime":"2023-02-01T06:23:56.000", "accountRamDeltas":[
], "accountDiskDeltas":[
], "returnValueHexData":"", "inlineTraces":[
] } ] }}
复制代码
2、终端用户根据 DDC 拥有者查询 Nonce 值,参考 ddc-sdk 中的 getNonce 方法
1)测试用例
@Testpublic void getMetaNonce() { DDC1155Service ddc1155Service = new DDC1155ServiceImpl(); //终端用户账户 BigInteger nonce = ddc1155Service.getNonce("ddcconsumer1"); System.out.println("nonce:" + nonce);}
复制代码
2)输出结果
nonce:2
复制代码
3、终端用户根据交易请求参数,生成签名所需的摘要数据(以元交易生成为例)
1)测试用例
@Testpublic void getMetaMintDigest() { BigInteger amount = BigInteger.valueOf(10); String ddcURI = "https://bitnodes.io/0001"; String memo = "memo0001"; //上一步获取的nonce值 BigInteger nonce = BigInteger.valueOf(2); //过期时间(时间戳:秒) BigInteger deadline = BigInteger.valueOf(1671096761);
DDC1155MetaTransaction metaTransaction = new DDC1155MetaTransaction(); String digest = metaTransaction.getSafeMintDigest("ddcplatform1", "ddcconsumer1", "ddcconsumer1", amount, ddcURI, memo, nonce, deadline); System.out.println("digest:" + digest);}
复制代码
2)输出结果
digest:baa58785f08da6bfe06e3675423478f8039a55f5aaf57eea195b47b9ebb6732c
复制代码
4、终端用户根据权限私钥和摘要数据,生成元交易签名
1)测试用例
@Testpublic void getMetaMintSignature() { //终端用户账户私钥 String privateKey = "5JAT6ZYDhvvWVP2UMat84BhCyu5U3PYMYtkzqXEgoPoyhdJJfV1"; //上一步获取的摘要值 String digest = "baa58785f08da6bfe06e3675423478f8039a55f5aaf57eea195b47b9ebb6732c";
DDC1155MetaTransaction metaTransaction = new DDC1155MetaTransaction(); String signature = metaTransaction.generateSignature(privateKey, digest.getBytes(StandardCharsets.UTF_8)); System.out.println("signature:" + signature);}
复制代码
2)输出结果
signature:SIG_K1_K8W87kgEkB3EwUUTSzqU5WjnuQJ5Q11mcUx7PGJhCG5ZgALHzmxep8s9AVWXyXAEfhc9xb1Bz53biadmnRBkyRzWnYGU8W
复制代码
(二)基于 ddc-sdk-js 进行元交易签名
1、平台方添加终端用户的公钥,参考 ddc-sdk 中的 addMetaUser 方法 1)测试用例
import EOSDDC from 'eos-ts-sdk';const addMetaUserTest = (sender='ddcplatform1',account='ddcconsumer1') => { const privateKey = "5JAT6ZYDhvvWVP2UMat84BhCyu5U3PYMYtkzqXEgoPoyhdJJfV1"; const pubKey= "EOS6R3jYqb3uZsVgzJz4HVLcYV94CLkr3u9unEzm5rpuAqUos7fqK"; let ddcPermissionService = new EOSDDC('http://101.42.251.173:3921', 'ddccontract1'); const result1 = ddcPermissionService.addMetaUser(sender, account, pubKey,privateKey); console.log(result1);}
复制代码
2)输出结果
{ "transaction_id": "4b2b33a6e380ba4726ce6360a91435fe93ec304b0e06ee2170de5a537f254769", "processed": { "id": "4b2b33a6e380ba4726ce6360a91435fe93ec304b0e06ee2170de5a537f254769", "block_num": 2363, "block_time": "2023-01-31T07:13:47.000", "producer_block_id": null, "receipt": { "status": "executed", "cpu_usage_us": 270, "net_usage_words": 21 }, "elapsed": 270, "net_usage": 168, "scheduled": false, "action_traces": [ { "action_ordinal": 1, "creator_action_ordinal": 0, "closest_unnotified_ancestor_action_ordinal": 0, "receipt": { "receiver": "ddccontract1", "act_digest": "d3950f01d30eeee961fb2e2335b00cfdf098b19a6671d18189bf59454f8410df", "global_sequence": 3129, "recv_sequence": 64, "auth_sequence": [ [ "ddcplatform1", 6 ] ], "code_sequence": 1, "abi_sequence": 1 }, "receiver": "ddccontract1", "act": { "account": "ddccontract1", "name": "addmetauser", "authorization": [ { "actor": "ddcplatform1", "permission": "active" } ], "data": { "sender": "ddcplatform1", "account": "ddcconsumer1", "pubKey": "EOS6R3jYqb3uZsVgzJz4HVLcYV94CLkr3u9unEzm5rpuAqUos7fqK" }, "hex_data": "10e4a52b9b58514a10ae921a4f8a504a35454f533652336a59716233755a7356677a4a7a3448564c6359563934434c6b72337539756e457a6d357270754171556f733766714b" }, "context_free": false, "elapsed": 135, "console": "", "trx_id": "4b2b33a6e380ba4726ce6360a91435fe93ec304b0e06ee2170de5a537f254769", "block_num": 2363, "block_time": "2023-01-31T07:13:47.000", "producer_block_id": null, "account_ram_deltas": [ ], "account_disk_deltas": [ ], "except": null, "error_code": null, "return_value_hex_data": "", "inline_traces": [ ] } ], "account_ram_delta": null, "except": null, "error_code": null }}
复制代码
2、终端用户根据 DDC 拥有者查询 Nonce 值,参考 ddc-sdk 中的 getNonce 方法
1)测试用例
const getNonce1155 = async () => { const Meta1155 = new EOSDDC( 'http://101.42.251.173:3921', 'ddccontract1', ); const nonce = await Meta1155.getNonce('ddcconsumer1'); console.log(`nonce:${nonce}`); return nonce;};
复制代码
2)输出结果
nonce:2
复制代码
3、终端用户根据交易请求参数,生成签名所需的摘要数据(以元交易生成为例)
1)测试用例
const getMetaMintDigest1155 = async () => { const amount = 10; const ddcURI = 'https://bitnodes.io/0001'; const memo = 'memo0001'; const deadline = 1671096761; const nonce = await getNonce1155(); const ddc1155 = new DDC1155MetaTransaction('ddccontract1'); const digest = await ddc1155.getSafeMintDigest( 'ddcplatform1', 'ddcconsumer1', 'ddcconsumer1', amount, ddcURI, memo, nonce, deadline, ); console.log(`digest:${digest}`); return digest; };
复制代码
2)输出结果
digest:baa58785f08da6bfe06e3675423478f8039a55f5aaf57eea195b47b9ebb6732c
复制代码
4、终端用户根据权限私钥和摘要数据,生成元交易签名 1)测试用例
const getMetaMintSignature1155 = async () => { const key = '5JAT6ZYDhvvWVP2UMat84BhCyu5U3PYMYtkzqXEgoPoyhdJJfV1'; const digest = await getMetaMintDigest1155(); // baa58785f08da6bfe06e3675423478f8039a55f5aaf57eea195b47b9ebb6732c const ddc1155 = new DDC1155MetaTransaction('ddccontract1'); const signature = await ddc1155.generateSignature(key, digest); console.log(`signature:${signature}`); return signature; };
复制代码
2)输出结果
signature:SIG_K1_K8W87kgEkB3EwUUTSzqU5WjnuQJ5Q11mcUx7PGJhCG5ZgALHzmxep8s9AVWXyXAEfhc9xb1Bz53biadmnRBkyRzWnYGU8W
复制代码
三、元交易方法调用
(一)元交易生成
1、功能介绍
终端用户可以通过授权平台方调用该方法对 DDC 进行元交易生成,注:调用此接口所消耗的能量值和业务费对应的是平台方账户。
复制代码
2、方法定义
1) SDK 方法定义: DDC721Service PushedTransaction metaSafeMint(String sender, String from, String to, String ddcURI, String memo, BigInteger nonce, BigInteger deadline, String signature); DDC1155Service PushedTransaction metaSafeMint(String sender, String from, String to, BigInteger amount, String ddcURI, String memo, BigInteger nonce, BigInteger deadline, String signature);2) EOS 合约方法: metamint(name sender,name from, name to, uint64_t amount, std::string ddc_uri, uint64_t business_type, std::string memo, uint64_t nonce, uint64_t deadline, signature signature);
复制代码
3、输入参数
4、输出参数
5、API 调用
1)测试用例(以 DDC1155 为例)
@Testpublic void metaSafeMint1155() { BigInteger amount = BigInteger.valueOf(10); String ddcURI = "https://bitnodes.io/0001"; String memo = "memo0001"; BigInteger deadline = BigInteger.valueOf(1671096761); DDC1155Service ddc1155Service = new DDC1155ServiceImpl(); BigInteger nonce = ddc1155Service.getNonce(accountList.get(2)); DDC1155MetaTransaction metaTransaction = new DDC1155MetaTransaction(); String digest = metaTransaction.getSafeMintDigest(accountList.get(1), accountList.get(2), accountList.get(2), amount, ddcURI, memo, nonce, deadline); String signature = metaTransaction.generateSignature(privateKey, digest.getBytes(StandardCharsets.UTF_8)); PushedTransaction pt = ddc1155Service.metaSafeMint(accountList.get(1), accountList.get(2), accountList.get(2), amount, ddcURI, memo, nonce, deadline, signature); Map<String, Object> trxMap = ChainUtil.getInstance().parseTrxResp(pt); System.out.println(JSONUtil.parse(trxMap));}
复制代码
2) 输出结果
{ "actionTraces":[ { "actData":{ "ddc_id":6899, "account":"ddcplatform1", "business_type":2, "func_name":"mint", "fee":"0.0001 FEE", "balance":"8.2350 FEE" }, "actAccount":"ddccontract1", "actName":"receiptpay" }, { "actData":{ "sender":"ddcplatform1", "to":"ddcconsumer1", "ddc_id":6899, "ddc_uri":"https://bitnodes.io/0001", "allowed":1, "amount":10, "business_type":2, "ddc_name":"", "ddc_symbol":"" }, "actAccount":"ddccontract1", "actName":"receiptmint" }, { "actData":{ "sender":"ddcplatform1", "from":"ddcconsumer1", "to":"ddcconsumer1", "amount":10, "ddc_uri":"https://bitnodes.io/0001", "business_type":2, "memo":"memo0001", "nonce":77, "deadline":1671096761, "signature":"SIG_K1_K5wAsgrAAoAyafBVXSXQQ8qSn6N7tY6XiyJ3wYvv1Bky3fZbYQJmuVw94wYnAqfqRfNZ7Zt7umMiSroArYSbu3vVbphZmh" }, "actAccount":"ddccontract1", "actName":"metamint" } ], "blockNum":8126659, "blockTime":"2022-12-28T07:03:12.000", "transactionId":"9d2e99de165568cd74ef4b779c73f4afa2085e023b1d80ccbd521237c9c1efa2"}
复制代码
(二)元交易批量生成
1、功能介绍
终端用户可以通过授权平台方调用该方法对 DDC 进行元交易批量安全生成,注:调用此接口所消耗的能量值和业务费对应的是平台方账户。
复制代码
2、方法定义
1) SDK 方法定义: DDC1155Service PushedTransaction metaSafeMintBatch(String sender, String from, String to, List<BigInteger> amounts, List<String> ddcURIs, String memo, BigInteger nonce, BigInteger deadline, String signature);2) EOS 合约方法: metamintbatc(name sender, name from,name to, std::vector<uint64_t> amounts, std::vector<std::string> ddc_uris, uint64_t business_type, std::string memo, uint64_t nonce, uint64_t deadline, signature signature);
复制代码
3、输入参数
4、输出参数
5、API 调用
1)测试用例
@Testpublic void metaSafeMintBatch1155() { List<BigInteger> amounts = Arrays.asList(BigInteger.valueOf(20), BigInteger.valueOf(30)); List<String> ddcURIs = Arrays.asList("http://ddcUrl1", "http://ddcUrl2"); String memo = "memo0001"; BigInteger deadline = BigInteger.valueOf(1671096761); DDC1155Service ddc1155Service = new DDC1155ServiceImpl(); BigInteger nonce = ddc1155Service.getNonce(accountList.get(2)); DDC1155MetaTransaction metaTransaction = new DDC1155MetaTransaction(); String digest = metaTransaction.getSafeMintBatchDigest(accountList.get(1), accountList.get(2), accountList.get(2), amounts, ddcURIs, memo, nonce, deadline); String signature = metaTransaction.generateSignature(privateKey, digest.getBytes(StandardCharsets.UTF_8)); PushedTransaction pt = ddc1155Service.metaSafeMintBatch(accountList.get(1), accountList.get(2), accountList.get(2), amounts, ddcURIs, memo, nonce, deadline, signature); Map<String, Object> trxMap = ChainUtil.getInstance().parseTrxResp(pt); System.out.println(JSONUtil.parse(trxMap));}
复制代码
2) 输出结果
{ "actionTraces":[ { "actData":{ "ddc_id":6900, "account":"ddcplatform1", "business_type":2, "func_name":"mintbatch", "fee":"0.0001 FEE", "balance":"8.2349 FEE" }, "actAccount":"ddccontract1", "actName":"receiptpay" }, { "actData":{ "sender":"ddcplatform1", "to":"ddcconsumer1", "ddc_id":6900, "ddc_uri":"http://ddcUrl1", "allowed":1, "amount":20, "business_type":2, "ddc_name":"", "ddc_symbol":"" }, "actAccount":"ddccontract1", "actName":"receiptmint" }, { "actData":{ "ddc_id":6901, "account":"ddcplatform1", "business_type":2, "func_name":"mintbatch", "fee":"0.0001 FEE", "balance":"8.2348 FEE" }, "actAccount":"ddccontract1", "actName":"receiptpay" }, { "actData":{ "sender":"ddcplatform1", "to":"ddcconsumer1", "ddc_id":6901, "ddc_uri":"http://ddcUrl2", "allowed":1, "amount":30, "business_type":2, "ddc_name":"", "ddc_symbol":"" }, "actAccount":"ddccontract1", "actName":"receiptmint" }, { "actData":{ "sender":"ddcplatform1", "from":"ddcconsumer1", "to":"ddcconsumer1", "amounts":[ 20, 30 ], "ddc_uris":[ "http://ddcUrl1", "http://ddcUrl2" ], "business_type":2, "memo":"memo0001", "nonce":78, "deadline":1671096761, "signature":"SIG_K1_KfJAvnwbWXxzijNhZKsnLs4M1xHYYb3uABPho9VJcoHpQBbpGUphFXRpEAQJuhar8jzdxs4TTt1JY7giSRVuFKYD5XYBBN" }, "actAccount":"ddccontract1", "actName":"metamintbatc" } ], "blockNum":8127577, "blockTime":"2022-12-28T07:10:51.000", "transactionId":"75f44ef74a241e2e341d16056e6ee379b25cf1b73a51a942a244839a974da21c"}
复制代码
(三)元交易转移
1、功能介绍
DDC 拥有者或 DDC 授权者通过授权平台方调用该方法对 DDC 进行元交易转移,注:调用此接口所消耗的能量值和业务费对应的是平台方账户。
复制代码
2、方法定义
1) SDK 方法定义: DDC721Service PushedTransaction metaSafeTransferFrom(String sender, String from, String to, BigInteger ddcId, String memo, BigInteger nonce, BigInteger deadline, String signature); DDC1155Service PushedTransaction metaSafeTransferFrom(String sender, String from, String to, BigInteger ddcId, BigInteger amount, String memo, BigInteger nonce, BigInteger deadline, String signature);2) EOS 合约方法: metatransfer(name sender, name from, name to, uint64_t ddc_id, uint64_t amount, std::string memo, uint64_t business_type, uint64_t nonce, uint64_t deadline, signature signature);
复制代码
3、输入参数
4、输出参数
5、API 调用
1)测试用例(以 DDC1155 为例)
@Testpublic void metaSafeTransferFrom1155() { BigInteger ddcId = BigInteger.valueOf(136); BigInteger amount = BigInteger.valueOf(2); String memo = "memo0001"; BigInteger deadline = BigInteger.valueOf(1671096761); DDC1155Service ddc1155Service = new DDC1155ServiceImpl(); BigInteger nonce = ddc1155Service.getNonce(accountList.get(2)); DDC1155MetaTransaction metaTransaction = new DDC1155MetaTransaction(); String digest = metaTransaction.getSafeTransferFromDigest(accountList.get(1), accountList.get(2), accountList.get(2), ddcId, amount, memo, nonce, deadline); String signature = metaTransaction.generateSignature(privateKey, digest.getBytes(StandardCharsets.UTF_8)); PushedTransaction pt = ddc1155Service.metaSafeTransferFrom(accountList.get(1), accountList.get(2), accountList.get(2), ddcId, amount, memo, nonce, deadline, signature); Map<String, Object> trxMap = ChainUtil.getInstance().parseTrxResp(pt); System.out.println(JSONUtil.parse(trxMap));}
复制代码
2) 输出结果
{ "actionTraces":[ { "actData":{ "ddc_id":136, "account":"ddcplatform1", "business_type":2, "func_name":"transfer", "fee":"0.0001 FEE", "balance":"8.2347 FEE" }, "actAccount":"ddccontract1", "actName":"receiptpay" }, { "actData":{ "sender":"ddcplatform1", "from":"ddcconsumer1", "to":"ddcconsumer1", "ddc_id":136, "amount":2, "memo":"memo0001", "business_type":2, "nonce":79, "deadline":1671096761, "signature":"SIG_K1_KkQvq6AnrCxS2hzdqYhsqJB3AtZeQW5RJfviSMGaBYgaHXdVAFdEzW8Q5nkQMd4k7LdWprSCKLmUM49JBFGtY9TrTv9hL4" }, "actAccount":"ddccontract1", "actName":"metatransfer" } ], "blockNum":8128554, "blockTime":"2022-12-28T07:18:59.500", "transactionId":"d26f43175c9b07ae3ace53122edc82ee704484168479672cccadf6ed6ea33818"}
复制代码
(四)元交易批量转移
1、功能介绍
DDC 拥有者或 DDC 授权者可以通过授权平台方调用该方法对 DDC进行元交易批量转移,注:调用此接口所消耗的能量值和业务费对应的是平台方账户。
复制代码
2、方法定义
1) SDK 方法定义: DDC1155Service PushedTransaction metaSafeBatchTransferFrom(String sender, String from, String to, List<BigInteger> ddcIds, List<BigInteger> amounts, String memo, BigInteger nonce, BigInteger deadline, String signature);2) EOS 合约方法: metatransbat (name sender, name from, name to, std::vector<uint64_t> ddc_ids, std::vector<uint64_t> amounts, std::string memo, uint64_t business_type, uint64_t nonce, uint64_t deadline, signature signature);
复制代码
3、输入参数
4、输出参数
5、API 调用
1)测试用例
@Testpublic void metaSafeBatchTransferFrom1155() { List<BigInteger> ddcIds = Arrays.asList(BigInteger.valueOf(137), BigInteger.valueOf(138)); List<BigInteger> amounts = Arrays.asList(BigInteger.valueOf(2), BigInteger.valueOf(3)); String memo = "memo0001"; BigInteger deadline = BigInteger.valueOf(1671096761); DDC1155Service ddc1155Service = new DDC1155ServiceImpl(); BigInteger nonce = ddc1155Service.getNonce(accountList.get(2)); DDC1155MetaTransaction metaTransaction = new DDC1155MetaTransaction(); String digest = metaTransaction.getSafeBatchTransferFromDigest(accountList.get(1), accountList.get(2), accountList.get(2), ddcIds, amounts, memo, nonce, deadline); String signature = metaTransaction.generateSignature(privateKey, digest.getBytes(StandardCharsets.UTF_8)); PushedTransaction pt = ddc1155Service.metaSafeBatchTransferFrom(accountList.get(1), accountList.get(2), accountList.get(2), ddcIds, amounts, memo, nonce, deadline, signature); Map<String, Object> trxMap = ChainUtil.getInstance().parseTrxResp(pt); System.out.println(JSONUtil.parse(trxMap));}
复制代码
2) 输出结果
{ "actionTraces":[ { "actData":{ "ddc_id":137, "account":"ddcplatform1", "business_type":2, "func_name":"batchtrans", "fee":"0.0001 FEE", "balance":"8.2346 FEE" }, "actAccount":"ddccontract1", "actName":"receiptpay" }, { "actData":{ "ddc_id":138, "account":"ddcplatform1", "business_type":2, "func_name":"batchtrans", "fee":"0.0001 FEE", "balance":"8.2345 FEE" }, "actAccount":"ddccontract1", "actName":"receiptpay" }, { "actData":{ "sender":"ddcplatform1", "from":"ddcconsumer1", "to":"ddcconsumer1", "ddc_ids":[ 137, 138 ], "amounts":[ 2, 3 ], "memo":"memo0001", "business_type":2, "nonce":80, "deadline":1671096761, "signature":"SIG_K1_KWTUkvmwpYiTK9jvZcrWSJSs9p9XnX2Br6odYv7fVzQ6qZmQrhfXXf5VEMAvrwLo9Ufs3pijh4u9JioT2wKwFFx5dF4dvW" }, "actAccount":"ddccontract1", "actName":"metatransbat" } ], "blockNum":8129207, "blockTime":"2022-12-28T07:24:26.000", "transactionId":"a4c2049569c305f094ffd6c568711796b8eb4df4e21b8b326077491844d6ca01"}
复制代码
(五)元交易销毁
1、功能介绍
DDC 拥有者或 DDC 授权者可以通过授权平台方调用该方法对 DDC进行元交易销毁,注:调用此接口所消耗的能量值和业务费对应的是平台方账户。
复制代码
2、方法定义
1) SDK 方法定义: DDC721Service PushedTransaction metaBurn(String sender, String owner, BigInteger ddcId, BigInteger nonce, BigInteger deadline, String signature); DDC1155Service PushedTransaction metaBurn(String sender, String owner, BigInteger ddcId, BigInteger nonce, BigInteger deadline, String signature);2) EOS 合约方法: metaburn(name sender, name owner, uint64_t ddc_id, uint64_t business_type, uint64_t nonce, uint64_t deadline, signature signature);
复制代码
3、输入参数
4、输出参数
5、API 调用
1)测试用例(以 DDC1155 为例)
@Testpublic void metaBurn1155() { BigInteger ddcId = BigInteger.valueOf(139); BigInteger deadline = BigInteger.valueOf(1671096761); DDC1155Service ddc1155Service = new DDC1155ServiceImpl(); BigInteger nonce = ddc1155Service.getNonce(accountList.get(2)); DDC1155MetaTransaction metaTransaction = new DDC1155MetaTransaction(); String digest = metaTransaction.getBurnDigest(accountList.get(1), accountList.get(2), ddcId, nonce, deadline); String signature = metaTransaction.generateSignature(privateKey, digest.getBytes(StandardCharsets.UTF_8)); PushedTransaction pt = ddc1155Service.metaBurn(accountList.get(1), accountList.get(2), ddcId, nonce, deadline, signature); Map<String, Object> trxMap = ChainUtil.getInstance().parseTrxResp(pt); System.out.println(JSONUtil.parse(trxMap));}
复制代码
2) 输出结果
{ "actionTraces":[ { "actData":{ "ddc_id":139, "account":"ddcplatform1", "business_type":2, "func_name":"burn", "fee":"0.0001 FEE", "balance":"8.2343 FEE" }, "actAccount":"ddccontract1", "actName":"receiptpay" }, { "actData":{ "sender":"ddcplatform1", "owner":"ddcconsumer1", "ddc_id":139, "business_type":2, "nonce":82, "deadline":1671096761, "signature":"SIG_K1_Kk7xG8Ux1Nu7jjF4zx4p98BLb4cZHVxwTbTV1L9nxU4zXiaRQoeNGq4WDv33hdFZ3pGrLyrcK5XwSkPR7sn7vdm3hdi2yG" }, "actAccount":"ddccontract1", "actName":"metaburn" } ], "blockNum":8129841, "blockTime":"2022-12-28T07:29:43.000", "transactionId":"863711b5f8a4aa17ec167ecf073c62c4c2491754bed29064b1935c19bcf84929"}
复制代码
(六)元交易批量销毁
1、功能介绍
DDC 拥有者或 DDC 授权者可以通过授权平台方调用该方法对 DDC进行元交易批量销毁,注:调用此接口所消耗的能量值和业务费对应的是平台方账户。
复制代码
2、方法定义
1) SDK 方法定义: DDC1155Service PushedTransaction metaBurnBatch(String sender, String owner, List<BigInteger> ddcIds, BigInteger nonce, BigInteger deadline, String signature);2) EOS 合约方法: metaburnbatc(name sender, name owner, std::vector<uint64_t> ddc_ids, uint64_t business_type, uint64_t nonce, uint64_t deadline, signature signature);
复制代码
3、输入参数
4、输出参数
5、API 调用
1)测试用例
@Testpublic void metaBurnBatch1155() { List<BigInteger> ddcIds = Arrays.asList(BigInteger.valueOf(137), BigInteger.valueOf(138)); BigInteger deadline = BigInteger.valueOf(1671096761); DDC1155Service ddc1155Service = new DDC1155ServiceImpl(); BigInteger nonce = ddc1155Service.getNonce(accountList.get(2)); DDC1155MetaTransaction metaTransaction = new DDC1155MetaTransaction(); String digest = metaTransaction.getBurnBatchDigest(accountList.get(1), accountList.get(2), ddcIds, nonce, deadline); String signature = metaTransaction.generateSignature(privateKey, digest.getBytes(StandardCharsets.UTF_8)); PushedTransaction pt = ddc1155Service.metaBurnBatch(accountList.get(1), accountList.get(2), ddcIds, nonce, deadline, signature); Map<String, Object> trxMap = ChainUtil.getInstance().parseTrxResp(pt); System.out.println(JSONUtil.parse(trxMap));}
复制代码
2) 输出结果
{ "actionTraces":[ { "actData":{ "ddc_id":137, "account":"ddcplatform1", "business_type":2, "func_name":"burnbatch", "fee":"0.0001 FEE", "balance":"8.2342 FEE" }, "actAccount":"ddccontract1", "actName":"receiptpay" }, { "actData":{ "ddc_id":138, "account":"ddcplatform1", "business_type":2, "func_name":"burnbatch", "fee":"0.0001 FEE", "balance":"8.2341 FEE" }, "actAccount":"ddccontract1", "actName":"receiptpay" }, { "actData":{ "sender":"ddcplatform1", "owner":"ddcconsumer1", "ddc_ids":[ 137, 138 ], "business_type":2, "nonce":83, "deadline":1671096761, "signature":"SIG_K1_K4TC8gPC3iLQcrrKYRS7kgsNKX2xh6AB8CSyaRyN6fYfiAow3YMctBGg2z9pyS7RPuXmidn6GVapJ4k7scMxRFJPzAFc8X" }, "actAccount":"ddccontract1", "actName":"metaburnbatc" } ], "blockNum":8130284, "blockTime":"2022-12-28T07:33:24.500", "transactionId":"9352f902710cf44133729b1730565c95a5900d7d51f95bef1f043f2de42bae71"}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 6
BSN研习社
关注
还未添加个人签名 2021-11-05 加入
还未添加个人简介










评论