Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

BTM的RPC远程调试

哈哈笑417
180 0 0
?        搭建完节点,顺利启动了节点并同步了区块数据。使用 ./bytomcli 命令可以成功获取数据,使用  curl -X POST get-block-count调用rpc,结果提示说get-block-count未找到命令,于是顺手加上端口号, curl -X POST localhost:9888/get-block-count,成功的获取到了json格式的数据。
7 ?5 [8 D# b9 G  I?        习惯了使用Postman调试接口,于是尝试POST一个rpc请求,开始踩坑之旅哈哈。% B% a( n1 ^  i- z/ x" \" B; [) z
远程调用RPC需要带上token方可请求,否则就出现BTM860的错误提示,如何获取token并设置呢?
" \+ K( ^: X4 h" @/ A7 N0 v5 Z在节点服务器本地使用cli或者curl,生成access-token。" A$ C0 N  h0 k+ s& u
bytomcli 方式:
1 M4 w6 w) g' @# }0 x( _./bytomcli create-access-token test
: Q4 A& {. `5 _1 @或者! g% |0 q  x9 _: Z* U! @9 Z
curl -X POST create-access-token -d '{"id":"test"}'$ Z3 K- e( ^1 M7 w
返回json数据5 G; w4 z0 I* X& y% E7 j* P
{& B4 s1 _! a& ~  p& _, F/ R
  "created_at": "2018-05-18T16:00:25.284677605+08:00",3 x8 E4 w) `% d# j1 Q1 h) }
  "id": "test",
" u+ M7 _- e! g& K/ T6 U5 D+ L  "token": "test:fe50927ddaa5bcca77021e9f50fa5ef236a6140c012d1fe2eb9241f61a9228e4             "
4 C) w+ M- \# M, j, r8 l}' v) p- F0 l3 y
其中 test是远程访问的username,冒号后面的字符串是password
, v! w3 F5 \: f; n6 UPostman如何带上Auth呢?2 H* ^! m7 [8 t! v9 L
设置Authorization为Basic Auth,Username填刚才生成的sccess-test的id,Password填token冒号后面的字符串即可* r  J" D3 G0 o
?        使用普通的表单提交,比如获取新地址的方法create-account-receiver ,在表单的key填account_alias ,value填账户的别名,提交请求发现返回错误信息,code为BTM003。需要将Body切到raw格式,输入json格式的参数即可,如:{“account_alias”:“test”}7 G/ r' |8 a. W, t: c
Java中直接通过POST请求就可以远程调用RPC,但需要构造Authorization并加入到Header中,关键代码如下
/ U& I) F  k: D* a# M, a  NString auth = Username + ":" + Password;
* ^  d7 l# l4 A$ b( obyte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));
5 y; d: R9 {  k4 }, @' V% `String authHeader = "Basic " + new String(encodedAuth);8 h) b8 r& i; Q. A+ r" a& l4 m! t: c& q
Map header = new LinkedHashMap();  f; y/ G: L) W0 u) w
header.put("Authorization", authHeader);, V/ p7 _. l  w4 _7 `3 K. ~
【这里的Username即是 test,Password是fe50927xxxxxxxxxxxxx228e4,根据自己生成的token改】
6 P1 ^- f4 P. o# E3 Q$ lbody使用JSONObject即可。
( t; q3 @9 m0 G# V. S7 w关于转账的流程,比较复杂。需要先打包交易,对交易进行签名,再进行广播。对应的rpc是:
. h2 Q6 }) V% y- J+ abuild-transaction -> sign-transaction  -> submit-transaction
- f: s# ^) C+ z! j$ N1 zbuild-transaction时带的参数根据api即可,主要是actions可能有点不清楚怎么用,比如通过地址转账时,可以设置actions如下:
+ N/ F. X/ _# V1 h“actions”:[8 \) G, X, v1 ^2 [$ h, G
{
: d/ M# y0 w1 m6 _; h! G; F"account_id":"xxxx",   // 账户ID
' @1 m9 x9 l0 V5 b% x: N5 v, Q"amount":300000000,  //转账额度,需要包含手续费5 m7 h# a& D# k2 d4 o/ {
"asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",  //资产ID,BTM是全F,可以转合约上的其它资产9 n+ R6 x+ k. d1 R4 C
"type":"spend_account"  //表示花费的账号即转账方' i& l8 H; o# ^5 G0 u
}," l6 N5 q9 e& X. u
{2 I$ P: H6 [4 U5 \" Y2 w
        "account_id":"xxxxx",  //接收方账户ID
' z/ t, \5 P& J  M: _6 C( a# }. x        "amount":200000000, //转账额度  f1 q1 z1 S) q  U4 o
        "asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",* U9 m* l+ z$ i8 [1 ]) v! A
        "type":"control_address",  //类型表示是地址转账
+ z; A  g+ f9 z, t        "address":"sm1q9s703yayrvn8g3zq80um65ul9ffg6pvx8cgpme"  //接收地址
, A: ?/ m! K0 j4 A4 y}% `* Y7 }& m& @6 z! X
]+ b7 x+ `1 v) P* m; Q  ?, D- j
转账主要是在手续费方面会踩坑,1BTM=10,000,000NEU,个人感觉NEU就是类似比特币中的一聪吧哈哈,就是小数点后八位。所以上面的amount是以NEU算的,其实就是转了2个BTM,拿1个BTM当作手续费,故转账账户需要出3个BTM。) N8 U$ A) m: E9 ]
打包完交易,就需要进行签名, 用创建账户时的密码进行签名。即是调用 sign-transaction 的rpc,参数是password和transaction,其中transaction是build成功后返回的data中的一个对象Object。签名后返回结果,可以根据 sign_complete 判断是否签名成功,如果为true即成功。
9 d( D3 L7 }) R& r广播交易,submit-transaction 只有一个参数raw_transaction,打包完或者签名完都会有返回该参数,是一串很长的序列化后的字符串。如果广播成功,即返回tx_id,失败会返回失败信息。  J  }  |! I, ~4 s
这两天对btm的rpc调用研究收获了不少,还搭建了个solonet节点自己挖矿测试转账,感谢比原技术群的大牛提供不少的帮助。我会继续努力的踩坑~嘻嘻  b4 \0 x8 D$ G
?                                                                                                                                                good-boy~zhangxuewen.
3 v/ U/ E4 C% c?                                                                                                                                                                2018-05-18
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

哈哈笑417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11