Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

BTM的RPC远程调试

哈哈笑417
115 0 0
?        搭建完节点,顺利启动了节点并同步了区块数据。使用 ./bytomcli 命令可以成功获取数据,使用  curl -X POST get-block-count调用rpc,结果提示说get-block-count未找到命令,于是顺手加上端口号, curl -X POST localhost:9888/get-block-count,成功的获取到了json格式的数据。5 K8 M/ w2 K9 S7 E6 P1 F# `
?        习惯了使用Postman调试接口,于是尝试POST一个rpc请求,开始踩坑之旅哈哈。
! T1 c( C  {5 j" j2 c+ @7 q远程调用RPC需要带上token方可请求,否则就出现BTM860的错误提示,如何获取token并设置呢?  d  ~# _' [4 o
在节点服务器本地使用cli或者curl,生成access-token。
( A2 Z1 A7 _; [+ Y/ vbytomcli 方式:
1 x3 q4 ^7 l8 d$ {./bytomcli create-access-token test$ w8 _: X. i: t, C( D; t5 @* W6 N
或者
2 l( P( i, \6 @6 E7 y" xcurl -X POST create-access-token -d '{"id":"test"}'" R, Q, n1 D& P0 l/ W/ ]) V. ^
返回json数据  Q9 ^5 r3 |2 ]: }; O
{
0 x# M" ^& Y/ ]2 k* j  "created_at": "2018-05-18T16:00:25.284677605+08:00",, t) U" q/ p9 z9 z* w. C# t
  "id": "test",# V% _+ F4 Y; D3 c3 O
  "token": "test:fe50927ddaa5bcca77021e9f50fa5ef236a6140c012d1fe2eb9241f61a9228e4             "5 N% \6 U7 p( f3 F6 e+ a( h# C4 X
}
2 _! [; F1 A" B& W/ Z9 W其中 test是远程访问的username,冒号后面的字符串是password
! W( c, Z/ ~& v8 S% V& RPostman如何带上Auth呢?
# B2 Z, V" U7 C0 ]9 x设置Authorization为Basic Auth,Username填刚才生成的sccess-test的id,Password填token冒号后面的字符串即可- p$ O. U6 ]/ L! n* H9 D- z, \
?        使用普通的表单提交,比如获取新地址的方法create-account-receiver ,在表单的key填account_alias ,value填账户的别名,提交请求发现返回错误信息,code为BTM003。需要将Body切到raw格式,输入json格式的参数即可,如:{“account_alias”:“test”}
8 w! ^. l7 X# b5 Z4 j& CJava中直接通过POST请求就可以远程调用RPC,但需要构造Authorization并加入到Header中,关键代码如下
) J+ D& M3 V2 [! ?String auth = Username + ":" + Password;
0 m2 Y) r4 y4 r3 q- ubyte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));7 f& O  q( H6 ?+ y
String authHeader = "Basic " + new String(encodedAuth);
! {  a) e( }& q# D: NMap header = new LinkedHashMap();
. d" ?) L; h3 i1 i8 cheader.put("Authorization", authHeader);2 w1 ]0 c- x( s4 Y) t: L/ _
【这里的Username即是 test,Password是fe50927xxxxxxxxxxxxx228e4,根据自己生成的token改】
  x  H; n1 c0 u0 d4 tbody使用JSONObject即可。* q3 W+ e% x9 [* M
关于转账的流程,比较复杂。需要先打包交易,对交易进行签名,再进行广播。对应的rpc是:
+ e  W( t+ v. N% obuild-transaction -> sign-transaction  -> submit-transaction
$ m- R% l6 k) L8 ~build-transaction时带的参数根据api即可,主要是actions可能有点不清楚怎么用,比如通过地址转账时,可以设置actions如下:+ U+ D9 p, V- O4 q9 E* [
“actions”:[
% }) e% a# ^! H& D8 R& V{
1 L8 `1 i4 V, K: f. B, Z& p"account_id":"xxxx",   // 账户ID % @* Q+ C2 t4 I) s0 p
"amount":300000000,  //转账额度,需要包含手续费: A9 r- l. t' K
"asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",  //资产ID,BTM是全F,可以转合约上的其它资产
$ B1 l- D2 K) r9 f: T: V"type":"spend_account"  //表示花费的账号即转账方
6 }" ]5 q0 ^) e1 c},
% o& B. m, J3 {  {. e; W{
) f$ {" A$ u0 G        "account_id":"xxxxx",  //接收方账户ID
: y# A- I* E0 ^7 y  n% n        "amount":200000000, //转账额度
$ q" q& `$ z; c% A; N+ I. R        "asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
0 W/ W$ r2 A7 P4 z! `        "type":"control_address",  //类型表示是地址转账
0 T+ E0 V2 ]8 x# K3 {& ]& R/ o; ^        "address":"sm1q9s703yayrvn8g3zq80um65ul9ffg6pvx8cgpme"  //接收地址
* r  Q' H! {, S* C2 G! d1 w. C! ]}( Q/ _4 @+ e0 }0 P9 ]; p
]$ m: P8 v) X7 m+ p  E1 [9 q
转账主要是在手续费方面会踩坑,1BTM=10,000,000NEU,个人感觉NEU就是类似比特币中的一聪吧哈哈,就是小数点后八位。所以上面的amount是以NEU算的,其实就是转了2个BTM,拿1个BTM当作手续费,故转账账户需要出3个BTM。
, G# L# h$ _* i; c- j- J# ~打包完交易,就需要进行签名, 用创建账户时的密码进行签名。即是调用 sign-transaction 的rpc,参数是password和transaction,其中transaction是build成功后返回的data中的一个对象Object。签名后返回结果,可以根据 sign_complete 判断是否签名成功,如果为true即成功。5 O% C% y0 h6 B
广播交易,submit-transaction 只有一个参数raw_transaction,打包完或者签名完都会有返回该参数,是一串很长的序列化后的字符串。如果广播成功,即返回tx_id,失败会返回失败信息。
  T5 n4 Y) ~! ?- s& C* E, C这两天对btm的rpc调用研究收获了不少,还搭建了个solonet节点自己挖矿测试转账,感谢比原技术群的大牛提供不少的帮助。我会继续努力的踩坑~嘻嘻$ c6 v  a$ X/ c" z: X
?                                                                                                                                                good-boy~zhangxuewen.
0 M3 C5 [( l' L; G% r9 H' ~. P?                                                                                                                                                                2018-05-18
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

哈哈笑417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11