Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

BTM的RPC远程调试

哈哈笑417
114 0 0
?        搭建完节点,顺利启动了节点并同步了区块数据。使用 ./bytomcli 命令可以成功获取数据,使用  curl -X POST get-block-count调用rpc,结果提示说get-block-count未找到命令,于是顺手加上端口号, curl -X POST localhost:9888/get-block-count,成功的获取到了json格式的数据。4 U" a. C& Y! |) B  ]7 ~1 p- \! t
?        习惯了使用Postman调试接口,于是尝试POST一个rpc请求,开始踩坑之旅哈哈。( U. t9 B$ g- l" D# M
远程调用RPC需要带上token方可请求,否则就出现BTM860的错误提示,如何获取token并设置呢?
) X; L" j$ V9 M5 ], o# b5 ^/ a在节点服务器本地使用cli或者curl,生成access-token。
2 i/ E/ `2 Z1 n2 s+ q/ i' c! Rbytomcli 方式:
8 P0 H# b0 ?' E% [/ q./bytomcli create-access-token test4 u+ I8 J4 S5 X4 R( k8 j' a" J* d
或者3 a( b3 \3 f: F8 E/ _9 `9 `' ]
curl -X POST create-access-token -d '{"id":"test"}'; h( V  m+ N4 Q. g
返回json数据
) L4 P, G& C5 t/ L" W{: J9 _) @* B9 |7 D, j6 ^
  "created_at": "2018-05-18T16:00:25.284677605+08:00",
8 W: S6 o3 J" S3 q  "id": "test",9 y' M5 [$ O% u' _1 z( K0 a/ o1 k5 d
  "token": "test:fe50927ddaa5bcca77021e9f50fa5ef236a6140c012d1fe2eb9241f61a9228e4             ": ]) R7 n. V3 T" ~* K: M5 e, K# a+ b  c
}& Y/ ]# p& H; H# d9 s
其中 test是远程访问的username,冒号后面的字符串是password
/ a2 [, V0 e/ J( h2 r+ `Postman如何带上Auth呢?! L+ \! ~- g% o9 f: G) d3 V  ~
设置Authorization为Basic Auth,Username填刚才生成的sccess-test的id,Password填token冒号后面的字符串即可; Z4 P9 m5 G$ c3 ]. X/ T
?        使用普通的表单提交,比如获取新地址的方法create-account-receiver ,在表单的key填account_alias ,value填账户的别名,提交请求发现返回错误信息,code为BTM003。需要将Body切到raw格式,输入json格式的参数即可,如:{“account_alias”:“test”}' C! y7 `# _- p7 o% F) [: a: H* I$ X$ v
Java中直接通过POST请求就可以远程调用RPC,但需要构造Authorization并加入到Header中,关键代码如下4 x) A! Q2 y" l) j7 M# o4 s& J
String auth = Username + ":" + Password;: e  b- C, w8 ~% M' t+ F
byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));
7 ]- J$ ?9 }! X9 A0 K' eString authHeader = "Basic " + new String(encodedAuth);) E) f- r, i5 p  E% G5 h
Map header = new LinkedHashMap();; ?8 }! M& x+ a+ H
header.put("Authorization", authHeader);! d! r1 S4 [9 N# @+ h
【这里的Username即是 test,Password是fe50927xxxxxxxxxxxxx228e4,根据自己生成的token改】" k) t" o) A# ?, X1 v  C* f! B6 @
body使用JSONObject即可。1 l0 e! _5 b2 `2 _
关于转账的流程,比较复杂。需要先打包交易,对交易进行签名,再进行广播。对应的rpc是:/ }: Y* s2 B4 e6 j; d' A
build-transaction -> sign-transaction  -> submit-transaction& ], X; C) J+ k; H
build-transaction时带的参数根据api即可,主要是actions可能有点不清楚怎么用,比如通过地址转账时,可以设置actions如下:
4 J* ~: i$ q6 w) a* q“actions”:[
3 A) [9 Y  X1 X- g: B+ q{
0 r. F5 L% \" ^! t$ }) P"account_id":"xxxx",   // 账户ID
6 r7 y! j7 ~; t& B"amount":300000000,  //转账额度,需要包含手续费2 B, I1 m* U7 g
"asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",  //资产ID,BTM是全F,可以转合约上的其它资产
; R4 d4 p2 A! r" J4 p! ?9 g. K"type":"spend_account"  //表示花费的账号即转账方
$ q3 ]/ D: U# E) j4 K8 P# Q},
7 I9 J% [! r7 E  ]# L3 ~$ ~7 @  C{$ F9 y$ J' `# I- f8 d9 S5 q) c
        "account_id":"xxxxx",  //接收方账户ID
8 E9 q1 v. c" B& K+ @: ?, {" @9 b        "amount":200000000, //转账额度! ~& g; a8 `. H6 M5 z& y+ J
        "asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"," H; T. G. Z; q( C& s
        "type":"control_address",  //类型表示是地址转账
4 ~" s0 i/ {# e7 t) U        "address":"sm1q9s703yayrvn8g3zq80um65ul9ffg6pvx8cgpme"  //接收地址
7 K$ _6 a' F. m8 B  ?}
) [/ r+ A2 ]# c0 i, G: \0 P/ Q]
" G# X% S2 d! |# M& `2 ]9 b" H转账主要是在手续费方面会踩坑,1BTM=10,000,000NEU,个人感觉NEU就是类似比特币中的一聪吧哈哈,就是小数点后八位。所以上面的amount是以NEU算的,其实就是转了2个BTM,拿1个BTM当作手续费,故转账账户需要出3个BTM。8 i/ o" a% G$ E3 c6 P
打包完交易,就需要进行签名, 用创建账户时的密码进行签名。即是调用 sign-transaction 的rpc,参数是password和transaction,其中transaction是build成功后返回的data中的一个对象Object。签名后返回结果,可以根据 sign_complete 判断是否签名成功,如果为true即成功。9 {  E1 p% D$ `5 p6 x2 v2 P+ g
广播交易,submit-transaction 只有一个参数raw_transaction,打包完或者签名完都会有返回该参数,是一串很长的序列化后的字符串。如果广播成功,即返回tx_id,失败会返回失败信息。
) {) _" n% ~+ a这两天对btm的rpc调用研究收获了不少,还搭建了个solonet节点自己挖矿测试转账,感谢比原技术群的大牛提供不少的帮助。我会继续努力的踩坑~嘻嘻# @; X9 ~3 ~9 }2 {) q4 W2 }
?                                                                                                                                                good-boy~zhangxuewen.
, J. K) ]+ l- r/ I' M( c?                                                                                                                                                                2018-05-18
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

哈哈笑417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11