Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

BTM的RPC远程调试

哈哈笑417
171 0 0
?        搭建完节点,顺利启动了节点并同步了区块数据。使用 ./bytomcli 命令可以成功获取数据,使用  curl -X POST get-block-count调用rpc,结果提示说get-block-count未找到命令,于是顺手加上端口号, curl -X POST localhost:9888/get-block-count,成功的获取到了json格式的数据。8 l6 o! C- ^% J% B
?        习惯了使用Postman调试接口,于是尝试POST一个rpc请求,开始踩坑之旅哈哈。# [3 n; T' j/ w1 ]7 w: g
远程调用RPC需要带上token方可请求,否则就出现BTM860的错误提示,如何获取token并设置呢?
0 Y& ?7 e5 ]* q( F, K在节点服务器本地使用cli或者curl,生成access-token。! U3 [- O1 l1 v9 k/ T
bytomcli 方式:5 M( W# s6 C8 y: H- v4 k) q
./bytomcli create-access-token test+ @7 |5 ^9 e- l* m
或者  @- Q9 o* S; R; e7 i# ^
curl -X POST create-access-token -d '{"id":"test"}'
2 \( h9 T& _" W+ `返回json数据' i2 O/ O, b. m, i1 E
{( n* h- ^3 I( \3 S+ ]& \& y5 Q7 l
  "created_at": "2018-05-18T16:00:25.284677605+08:00",6 i1 {. B7 S- z7 f0 A% x( B' m( T
  "id": "test",# G2 I1 H; r0 n$ z! q
  "token": "test:fe50927ddaa5bcca77021e9f50fa5ef236a6140c012d1fe2eb9241f61a9228e4             "
& W8 U6 v  j; h}
* O; y' F- |8 M0 w) d其中 test是远程访问的username,冒号后面的字符串是password6 U) Z$ s+ f/ c" w/ p. _+ z
Postman如何带上Auth呢?7 N$ G4 u; t) F" L2 q- E2 Y
设置Authorization为Basic Auth,Username填刚才生成的sccess-test的id,Password填token冒号后面的字符串即可
# W% j0 Z" J" o6 g% M6 u3 M?        使用普通的表单提交,比如获取新地址的方法create-account-receiver ,在表单的key填account_alias ,value填账户的别名,提交请求发现返回错误信息,code为BTM003。需要将Body切到raw格式,输入json格式的参数即可,如:{“account_alias”:“test”}
; y! b" j; I/ z* k: vJava中直接通过POST请求就可以远程调用RPC,但需要构造Authorization并加入到Header中,关键代码如下
, c/ Z: L  _3 J% oString auth = Username + ":" + Password;8 N, R6 f0 ~9 r0 d' ~0 X4 I) E
byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));+ c6 Q& I$ m6 c! c6 I
String authHeader = "Basic " + new String(encodedAuth);+ X! U& J7 m0 D+ X& O" m1 M
Map header = new LinkedHashMap();
' r7 V  F) W5 y# u4 A) @header.put("Authorization", authHeader);
, T* A3 I- q9 f【这里的Username即是 test,Password是fe50927xxxxxxxxxxxxx228e4,根据自己生成的token改】
+ i+ R# N' f: [7 K6 Sbody使用JSONObject即可。5 O8 A! ?2 [+ u* [" `
关于转账的流程,比较复杂。需要先打包交易,对交易进行签名,再进行广播。对应的rpc是:
; L# u. {$ r3 Nbuild-transaction -> sign-transaction  -> submit-transaction
+ C4 l* P- |5 b- u# tbuild-transaction时带的参数根据api即可,主要是actions可能有点不清楚怎么用,比如通过地址转账时,可以设置actions如下:% n  \( ]! l! l: o! E2 D% U4 p2 \
“actions”:[
; i( m7 E1 J! g6 {( Y9 n{2 j3 l3 G) [1 |2 l  q& n' C( X
"account_id":"xxxx",   // 账户ID % n" d6 I( \5 |. O) l
"amount":300000000,  //转账额度,需要包含手续费1 W7 m- `- Z0 u4 y) b. \
"asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",  //资产ID,BTM是全F,可以转合约上的其它资产6 l4 c0 E; |  K' C, f( [
"type":"spend_account"  //表示花费的账号即转账方# A. i  g1 d3 L6 U. Y
},3 d. o  {5 o6 W  k
{% `2 w3 Y! c, o( l  ~2 s1 r- i0 \
        "account_id":"xxxxx",  //接收方账户ID
0 G' M7 Y. W2 ~$ h7 `        "amount":200000000, //转账额度
- ~3 {6 v# ^  n6 y8 f: d2 s        "asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
; K# Z# s8 O- Z        "type":"control_address",  //类型表示是地址转账: p1 C; I8 K5 }1 Z  I2 Z& X# k
        "address":"sm1q9s703yayrvn8g3zq80um65ul9ffg6pvx8cgpme"  //接收地址) h+ d6 K( A5 {8 b- r# [1 k
}. ~3 s3 ^6 z, N* U& H: K6 V
]' a# `6 B% T2 Y6 b$ y
转账主要是在手续费方面会踩坑,1BTM=10,000,000NEU,个人感觉NEU就是类似比特币中的一聪吧哈哈,就是小数点后八位。所以上面的amount是以NEU算的,其实就是转了2个BTM,拿1个BTM当作手续费,故转账账户需要出3个BTM。6 }6 k+ R. ?. E! I1 F
打包完交易,就需要进行签名, 用创建账户时的密码进行签名。即是调用 sign-transaction 的rpc,参数是password和transaction,其中transaction是build成功后返回的data中的一个对象Object。签名后返回结果,可以根据 sign_complete 判断是否签名成功,如果为true即成功。
; W. q& y3 H: G( L广播交易,submit-transaction 只有一个参数raw_transaction,打包完或者签名完都会有返回该参数,是一串很长的序列化后的字符串。如果广播成功,即返回tx_id,失败会返回失败信息。3 Y: b" f& c6 U1 G
这两天对btm的rpc调用研究收获了不少,还搭建了个solonet节点自己挖矿测试转账,感谢比原技术群的大牛提供不少的帮助。我会继续努力的踩坑~嘻嘻5 `$ F& k$ a2 {1 W* ^
?                                                                                                                                                good-boy~zhangxuewen.
  r2 `( ?, |- s  ??                                                                                                                                                                2018-05-18
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

哈哈笑417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11