Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

BTM的RPC远程调试

哈哈笑417
113 0 0
?        搭建完节点,顺利启动了节点并同步了区块数据。使用 ./bytomcli 命令可以成功获取数据,使用  curl -X POST get-block-count调用rpc,结果提示说get-block-count未找到命令,于是顺手加上端口号, curl -X POST localhost:9888/get-block-count,成功的获取到了json格式的数据。  P' E  ~( z2 `
?        习惯了使用Postman调试接口,于是尝试POST一个rpc请求,开始踩坑之旅哈哈。/ P9 U1 k' P% U/ _3 |
远程调用RPC需要带上token方可请求,否则就出现BTM860的错误提示,如何获取token并设置呢?$ P6 w2 i1 e/ Y' X4 M
在节点服务器本地使用cli或者curl,生成access-token。3 S: m0 b3 Q2 u4 N9 \9 m
bytomcli 方式:: v- _+ h+ s0 l8 B& `
./bytomcli create-access-token test& g; v- G7 ]( \8 |7 q; w
或者
7 g( z3 h+ V% v4 V- Q, R8 W, R" ^9 xcurl -X POST create-access-token -d '{"id":"test"}'
4 t0 i- e8 w* ]( y8 i7 h% q4 p. g% D" c返回json数据  H3 l* A4 y5 L: U# Y
{( y, \  b* R0 ?2 j3 J$ [
  "created_at": "2018-05-18T16:00:25.284677605+08:00",: N& F& W, `% [* T; H
  "id": "test",
- E4 y3 o  o: u  @; {2 e. V7 n- u3 y  "token": "test:fe50927ddaa5bcca77021e9f50fa5ef236a6140c012d1fe2eb9241f61a9228e4             "
% h9 y9 b& O5 N& U}
8 c! [, l2 {- U  M* C  N其中 test是远程访问的username,冒号后面的字符串是password; G9 t$ Z6 V: u6 }, X# k  Q* p
Postman如何带上Auth呢?
7 T5 \3 w) z) v2 `& K设置Authorization为Basic Auth,Username填刚才生成的sccess-test的id,Password填token冒号后面的字符串即可) l9 m+ [& Q8 ~$ O$ s8 s1 ~7 b
?        使用普通的表单提交,比如获取新地址的方法create-account-receiver ,在表单的key填account_alias ,value填账户的别名,提交请求发现返回错误信息,code为BTM003。需要将Body切到raw格式,输入json格式的参数即可,如:{“account_alias”:“test”}2 M* d5 I# T. G0 }3 N8 I! H
Java中直接通过POST请求就可以远程调用RPC,但需要构造Authorization并加入到Header中,关键代码如下
& j* A# e5 N: Y0 k* L( `0 W2 H2 ]String auth = Username + ":" + Password;
2 m' i' O, ]* K, `( f" nbyte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));
8 t; u: `9 |' V, K) Y1 O" gString authHeader = "Basic " + new String(encodedAuth);
# q5 a+ i1 O$ `2 @* EMap header = new LinkedHashMap();: {: c  q2 M8 A/ F
header.put("Authorization", authHeader);
0 A3 F0 ^' h! Z【这里的Username即是 test,Password是fe50927xxxxxxxxxxxxx228e4,根据自己生成的token改】( l; T9 \: \- h2 [4 X
body使用JSONObject即可。5 ], O! B( `* r2 q, ?* e  @- i
关于转账的流程,比较复杂。需要先打包交易,对交易进行签名,再进行广播。对应的rpc是:" L9 Y: ]; M7 Y; q9 R
build-transaction -> sign-transaction  -> submit-transaction1 o& E7 T. ~% e  t& Z7 l
build-transaction时带的参数根据api即可,主要是actions可能有点不清楚怎么用,比如通过地址转账时,可以设置actions如下:
' b+ \& x9 g/ s; T4 F“actions”:[
( Y4 w' j, G1 w0 L$ n* S{1 l5 \% k) H/ C" {
"account_id":"xxxx",   // 账户ID 3 t; I$ ~5 q3 P
"amount":300000000,  //转账额度,需要包含手续费7 ^# A* s) ~( j- O9 a
"asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",  //资产ID,BTM是全F,可以转合约上的其它资产0 [) A" _; E2 }5 W! I7 J, l
"type":"spend_account"  //表示花费的账号即转账方
  D0 u6 O4 k2 ^2 k},$ p# P' y7 O6 `: u1 V3 e0 y& Y
{! \- t5 h9 Q: D  a, Y; ~! d
        "account_id":"xxxxx",  //接收方账户ID
6 U# _1 [# V* W8 V, e# k, L& y        "amount":200000000, //转账额度
* P, v' d/ e8 w6 s! y# T9 S        "asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",% P9 Z+ R  o9 I; s2 c0 k
        "type":"control_address",  //类型表示是地址转账% a3 P4 ?4 x/ B8 p$ y  x+ }( g
        "address":"sm1q9s703yayrvn8g3zq80um65ul9ffg6pvx8cgpme"  //接收地址1 K! Y/ f8 N- j! j) K
}: [& O! l) _% i9 k0 `8 ^
]3 `$ B3 a/ A" `# ^6 g
转账主要是在手续费方面会踩坑,1BTM=10,000,000NEU,个人感觉NEU就是类似比特币中的一聪吧哈哈,就是小数点后八位。所以上面的amount是以NEU算的,其实就是转了2个BTM,拿1个BTM当作手续费,故转账账户需要出3个BTM。  m: \; ]+ f1 ^4 O
打包完交易,就需要进行签名, 用创建账户时的密码进行签名。即是调用 sign-transaction 的rpc,参数是password和transaction,其中transaction是build成功后返回的data中的一个对象Object。签名后返回结果,可以根据 sign_complete 判断是否签名成功,如果为true即成功。
' v& {. K, |1 ]1 ]: V8 c广播交易,submit-transaction 只有一个参数raw_transaction,打包完或者签名完都会有返回该参数,是一串很长的序列化后的字符串。如果广播成功,即返回tx_id,失败会返回失败信息。
/ _% }  C! v: @这两天对btm的rpc调用研究收获了不少,还搭建了个solonet节点自己挖矿测试转账,感谢比原技术群的大牛提供不少的帮助。我会继续努力的踩坑~嘻嘻
8 ~; \/ d9 ^  `" [, g. R) D?                                                                                                                                                good-boy~zhangxuewen.
# A. [1 S9 ?( ?( ^5 H* G3 n& m) }! J?                                                                                                                                                                2018-05-18
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

哈哈笑417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11