中移链(基于EOS)实战:如何调用RPC接口组装交易、签名、上链

sw

背景:今年3月开放联盟链“中移链”在区块链服务网络(BSN[1])中完成适配并上线发布,吸引了大批开发者,部分开发者提出了一些共性问题

目的:本篇文章是为了让读者了解如何在中移链(基于EOS)上调用RPC接口组装交易、签名、上链以及查询上链结果

适用对象:适用于BSN开放联盟链--中移链(基于EOS)开发者

1.准备

•需要现在bsn[2]创建项目和创建一个账户,可以参考:

•可以获取到eos端点:•eos账户/合约地址:helailiang14

•为账户购买足够的资源(cpu、net、ram)

•安装EOSIO开发环境:需要安装cleos和keosd,可以参考:•部署eos合约:

includeeosio/;//通过[[eosio::contract]]标注这个类是一个合约class[[eosio::contract]]hello:publiccontract{public:usingcontract::contract;//在构造函数进行表对象的实例化,标准合约构造函数,receiver也就是我们的合约账号(一般情况下),code就是我们的action名称,ds就是数据流//get_self()合约所在的账号get_code()当前交易请求的action方法名get_datastream()当前数据流hello(namereceiver,namecode,datastreamconstchar*ds):contract(receiver,code,ds),fri_table(get_self(),get_self().value){}//用[[eosio::action]]标注这个方法是一个合约action就行//注意:action的名称要求符合name类型的规则[[eosio::action]]voidhi(nameuser){print("Hello,",user);print("get_self,",get_self().value);//print("get_code,",get_code().value);uint32_tnow=current_time_point().sec_since_epoch();autofri_itr=fri_();//数据不存在if(fri_itr==fri_()){//第一个参数就是内存使用的对象,第二个参数就是添加表对象时的委托方法。fri_(get_self(),[](autof){_name=user;_time=now;});}else{//第一个参数是传递需要修改的数据指针,第二个参数是内存使用的对象,第二个参数就是表对象修改时的委托方法fri_(fri_itr,get_self(),[](autof){_time=now;});}}[[eosio::action]]voidnevermeet(nameuser){print("Neverseeyouagain,",user);autofri_itr=fri_();check(fri_itr!=fri_(),"Idon'tknowwhoyouare.");//只有一个参数,就是要删除的对象指针fri_(fri_itr);}[[eosio::action]]voidmeetagain(){uint32_tnow=current_time_point().sec_since_epoch();autotime_idx=fri__index"time"_n();autolast_meet_itr=time_();check(last_meet_itr!=time_(),"Idon'thaveafri.");time_(last_meet_itr,get_self(),[](autof){_time=now;});}private://定义一个结构体,然后用[[eosio::table]]标注这个结构体是一个合约表。在结构体里定义一个函数名primary_key,返回uint64_t类型,作为主键的定义struct[[eosio::table]]my_fri{namefri_name;uint64_tvisit_time;uint64_tprimary_key()const{returnfri_;}doubleby_secondary()const{return-visit_time;}};//定义表名和查询索引"fris"_n就是定义表名,所以使用了name类型,之后my_fri是表的结构类typedefeosio::multi_index"fris"_n,my_frifris;frisfri_table;};
2.rpc调用流程1.将交易信息由JSON格式序列化为BIN格式字符串
curl-XPOST'{您的开放联盟链项目ID/rpc/v1/chain/abi_json_to_bin'\-d'{"code":"helailiang14","action":"hi","args":{"user":"helloworld"}}'------------------return{"binargs":"00408a97721aa36a"}
2.获取当前最新的区块编号
curlGET'{您的开放联盟链项目ID/rpc/v1/chain/get_info'------------------return{"server_version":"11d35f0f","chain_id":"9b4c6015f8b73b2d7ee3ebd92d249a1aba06a614e9990dcf54f7cf2e3d5172e1","head_block_num":15134328,"last_irreversible_block_num":15134262,"last_irreversible_block_id":"00e6ee360b5e7680a526ddea45db1be15c4be2cd2389020688218fe765be6db7","head_block_id":"00e6ee7889523875a28284effecdd1199cc960adb14c14c36cd1bd52afed6824","head_block_time":"2022-04-27T09:08:08.500","head_block_producer":"","virtual_block_cpu_limit":200000000,"virtual_block_net_limit":1048576000,"block_cpu_limit":199900,"block_net_limit":1048576,"server_version_string":"v3af0a20","fork_db_head_block_num":15134328,"fork_db_head_block_id":"00e6ee7889523875a28284effecdd1199cc960adb14c14c36cd1bd52afed6824","server_full_version_string":"v3af0a20","last_irreversible_block_time":"2022-04-27T09:07:35.500"}
3.根据区块编号获取区块详情
curl-XPOST'{您的开放联盟链项目ID/rpc/v1/chain/get_block'\-d'{"block_num_or_id":"15130610"}'------------------return{"timestamp":"2022-04-27T09:08:08.500","producer":"","confirmed":0,"previous":"00e6ee77f2655528739622d2c9235026d4f10138b9821e46ea35165cb086d12d","transaction_mroot":"0000000000000000000000000000000000000000000000000000000000000000","action_mroot":"665584b582b234bf58d3708b31da20e14d266713e3bc6ce79ea3187cc2ffa5a4","schedule_version":2,"new_producers":null,"producer_signature":"SIG_K1_KiYCDLMgE6gE1nNqQQL2jEEF3VVd6iaspAePvvJMjKwgg2Yf6GiTYcznrkymAdtZUAUFh28N8r9RzX936cASKDB6JW6ga3","transactions":[],"id":"00e6ee7889523875a28284effecdd1199cc960adb14c14c36cd1bd52afed6824","block_num":15134328,"ref_block_prefix":4018438818}
4.签署交易

使用EOSIO提供的签名工具实现签名:启动keosd后,才会提供签名服务


curl-XPOSTPOST''\-d'[{"expiration":"2022-04-27T10:08:08","ref_block_num":61048,"ref_block_prefix":4018438818,"max_net_usage_words":0,"max_cpu_usage_ms":0,"delay_sec":0,"context_free_actions":[],"actions":[{"account":"helailiang14","name":"hi","authorization":[{"actor":"helailiang14","permission":"active"}],"data":"00408a97721aa36a"}],"transaction_extensions":[],"signatures":[],"context_free_data":[]},["EOS6F6PRkSaPyijTDBYskFbsxpGz53JMTFbEhua94fQEyf7pAMc7Y"],"9b4c6015f8b73b2d7ee3ebd92d249a1aba06a614e9990dcf54f7cf2e3d5172e1"]'------------------return:{"expiration":"2022-04-27T10:08:08","ref_block_num":61048,"ref_block_prefix":4018438818,"max_net_usage_words":0,"max_cpu_usage_ms":0,"delay_sec":0,"context_free_actions":[],"actions":[{"account":"helailiang14","name":"hi","authorization":[{"actor":"helailiang14","permission":"active"}],"data":"00408a97721aa36a"}],"transaction_extensions":[],"signatures":["SIG_K1_K2AzV2Pk4SP3PQhcdQ1bYgGZgr7PUUcJkAGowvncFV1ngrZufeCQpveAUBRYvNA5uyxFk2hKiot3Mu7FCW5rqqeoU5SVTo"],"context_free_data":[]}
5.打包交易

使用cleosconvertpack_transaction将交易报文转换成packed格式

cleosconvertpack_transaction'{"expiration":"2022-04-27T10:08:08","ref_block_num":61048,"ref_block_prefix":4018438818,"max_net_usage_words":0,"max_cpu_usage_ms":0,"delay_sec":0,"context_free_actions":[],"actions":[{"account":"helailiang14","name":"hi","authorization":[{"actor":"helailiang14","permission":"active"}],"data":"00408a97721aa36a"}],"transaction_extensions":[]}'------------------return:{"signatures":[],"compression":"none","packed_context_free_data":"","packed_trx":"0816696278eea28284ef000000000140029bc64567a26a000000000000806b0140029bc64567a26a00000000a8ed32320800408a97721aa36a00"}
6.提交交易
curl-XPOST'{您的开放联盟链项目ID/rpc/v1/chain/push_transaction'\-d'{"signatures":["SIG_K1_K2AzV2Pk4SP3PQhcdQ1bYgGZgr7PUUcJkAGowvncFV1ngrZufeCQpveAUBRYvNA5uyxFk2hKiot3Mu7FCW5rqqeoU5SVTo"],"compression":"none","packed_context_free_data":"","packed_trx":"0816696278eea28284ef000000000140029bc64567a26a000000000000806b0140029bc64567a26a00000000a8ed32320800408a97721aa36a00"}'------------------return:{"transaction_id":"a69d03f6b1bab4bd8908124eef5e59d3e47df4063e697a07487308cde63a9f79","processed":{"id":"a69d03f6b1bab4bd8908124eef5e59d3e47df4063e697a07487308cde63a9f79","block_num":15136664,"block_time":"2022-04-27T09:27:36.500","producer_block_id":null,"receipt":{"status":"executed","cpu_usage_us":272,"net_usage_words":13},"elapsed":272,"net_usage":104,"scheduled":false,"action_traces":[{"action_ordinal":1,"creator_action_ordinal":0,"closest_unnotified_ancestor_action_ordinal":0,"receipt":{"receiver":"helailiang14","act_digest":"31ff1ecb2b0b0c89911b74c7930f08ecfefbd24ba59ef30a905d44068d2d8910","global_sequence":15199315,"recv_sequence":2,"auth_sequence":[["helailiang14",4]],"code_sequence":1,"abi_sequence":1},"receiver":"helailiang14","act":{"account":"helailiang14","name":"hi","authorization":[{"actor":"helailiang14","permission":"active"}],"data":{"user":"helloworld"},"hex_data":"00408a97721aa36a"},"context_free":false,"elapsed":63,"console":"Hello,helloworldget_self,76838264","trx_id":"a69d03f6b1bab4bd8908124eef5e59d3e47df4063e697a07487308cde63a9f79","block_num":15136664,"block_time":"2022-04-27T09:27:36.500","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}}
7.查询表数据
curl-XPOST'{您的开放联盟链项目ID/rpc/v1/chain/get_table_rows'\-d'{"code":"helailiang14","table":"fris","scope":"helailiang14","json":true}'------------------return:{"rows":[{"fri_name":"helloworld","visit_time":1651051656}],"more":false,"next_key":"","next_key_bytes":""}
References

[1]BSN:
[2]bsn:

文章版权声明:除非注明,否则均为机床资讯库原创文章,转载或复制请以超链接形式并注明出处。

上一个 自组公路车,车店师傅不会告诉你的十大注意和技巧(上)

下一个 中企承建科特迪瓦可可加工厂正式交付