Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

BTM的RPC远程调试

哈哈笑417
101 0 0
?        搭建完节点,顺利启动了节点并同步了区块数据。使用 ./bytomcli 命令可以成功获取数据,使用  curl -X POST get-block-count调用rpc,结果提示说get-block-count未找到命令,于是顺手加上端口号, curl -X POST localhost:9888/get-block-count,成功的获取到了json格式的数据。
( v* U/ A, t- C( B$ [5 p?        习惯了使用Postman调试接口,于是尝试POST一个rpc请求,开始踩坑之旅哈哈。
. l- c1 `% \7 z5 r远程调用RPC需要带上token方可请求,否则就出现BTM860的错误提示,如何获取token并设置呢?
  O9 B: J1 p# e" Z* q1 z在节点服务器本地使用cli或者curl,生成access-token。+ E$ d! T" A3 k
bytomcli 方式:
8 w# o7 P5 U+ L9 {: _./bytomcli create-access-token test) i1 A; ^; U$ {+ v  j$ Y8 K4 J
或者
' F) n( J7 W) p# e. pcurl -X POST create-access-token -d '{"id":"test"}'
- j# p6 D" y' c' Y: e1 Q4 k5 X) v, f返回json数据
& J, _) R& X$ j) r- [  P$ m# M{/ w, `' T, e7 {- P' T' g) h. n
  "created_at": "2018-05-18T16:00:25.284677605+08:00",; X% c/ P' @4 c- o( G. T
  "id": "test",2 {2 |% J/ V1 d% l+ J, i
  "token": "test:fe50927ddaa5bcca77021e9f50fa5ef236a6140c012d1fe2eb9241f61a9228e4             "% _7 B# ~0 f  E0 C! \( u+ }
}
7 ]5 a& r( z5 P& Q, M其中 test是远程访问的username,冒号后面的字符串是password
: V4 Q9 P5 H. D/ H& T1 aPostman如何带上Auth呢?
: N# k% f8 r$ E. X; X设置Authorization为Basic Auth,Username填刚才生成的sccess-test的id,Password填token冒号后面的字符串即可
% R. B6 ~: _; ~: ~# }& r9 L, m?        使用普通的表单提交,比如获取新地址的方法create-account-receiver ,在表单的key填account_alias ,value填账户的别名,提交请求发现返回错误信息,code为BTM003。需要将Body切到raw格式,输入json格式的参数即可,如:{“account_alias”:“test”}
& H8 Q1 U) s: U3 T) z8 fJava中直接通过POST请求就可以远程调用RPC,但需要构造Authorization并加入到Header中,关键代码如下0 c( H9 u& u. k; K
String auth = Username + ":" + Password;
6 d4 s0 x; |) s+ Rbyte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));
( X/ P2 @; {4 t  k9 e+ w: ~String authHeader = "Basic " + new String(encodedAuth);8 o: p+ H" w# C! w# h! D
Map header = new LinkedHashMap();
  i: r+ Q. F& }0 F) bheader.put("Authorization", authHeader);- r" R% }$ y7 P$ d9 p( i$ d
【这里的Username即是 test,Password是fe50927xxxxxxxxxxxxx228e4,根据自己生成的token改】3 j( G' D" f- ?) ], D
body使用JSONObject即可。2 w5 b6 v/ q* f9 P
关于转账的流程,比较复杂。需要先打包交易,对交易进行签名,再进行广播。对应的rpc是:
! j" a  b2 [) k6 i) z* ?+ [  Cbuild-transaction -> sign-transaction  -> submit-transaction- j3 U$ T: b5 _6 l: {
build-transaction时带的参数根据api即可,主要是actions可能有点不清楚怎么用,比如通过地址转账时,可以设置actions如下:) A+ o  y6 V/ u9 a; p0 `# Z
“actions”:[+ A7 E0 [/ P1 Q
{  A* \! |+ w" W* o. U
"account_id":"xxxx",   // 账户ID
: \, C6 }5 W* |. K( U7 I, l"amount":300000000,  //转账额度,需要包含手续费
' c2 }: k% G& f% R+ O"asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",  //资产ID,BTM是全F,可以转合约上的其它资产( X; H6 B( g* I3 h+ w" C
"type":"spend_account"  //表示花费的账号即转账方
. R% f8 |7 a) t: }7 u},' B! I+ F( f1 l2 v
{1 h# W2 p9 e& ~0 L0 W) w; N
        "account_id":"xxxxx",  //接收方账户ID
1 G( g& x4 D. M- ^        "amount":200000000, //转账额度
0 ~* |' x! L2 {$ _        "asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
3 s9 u; t, ?5 q        "type":"control_address",  //类型表示是地址转账
% p( y( [* l0 l+ b        "address":"sm1q9s703yayrvn8g3zq80um65ul9ffg6pvx8cgpme"  //接收地址* H# \# ~" z3 L- i8 o! }
}
$ m. a) P( t5 M4 U& u]8 y% F" i- T3 K1 v# @6 Q0 c
转账主要是在手续费方面会踩坑,1BTM=10,000,000NEU,个人感觉NEU就是类似比特币中的一聪吧哈哈,就是小数点后八位。所以上面的amount是以NEU算的,其实就是转了2个BTM,拿1个BTM当作手续费,故转账账户需要出3个BTM。! i+ q$ K# d) ]7 @5 R! @
打包完交易,就需要进行签名, 用创建账户时的密码进行签名。即是调用 sign-transaction 的rpc,参数是password和transaction,其中transaction是build成功后返回的data中的一个对象Object。签名后返回结果,可以根据 sign_complete 判断是否签名成功,如果为true即成功。
) T5 l* w# r1 Z# I; x# s2 {/ c% Q广播交易,submit-transaction 只有一个参数raw_transaction,打包完或者签名完都会有返回该参数,是一串很长的序列化后的字符串。如果广播成功,即返回tx_id,失败会返回失败信息。) Q( V, n7 g6 N* A" v* {/ A5 o
这两天对btm的rpc调用研究收获了不少,还搭建了个solonet节点自己挖矿测试转账,感谢比原技术群的大牛提供不少的帮助。我会继续努力的踩坑~嘻嘻
7 G; _, y8 k* i" y) e. B?                                                                                                                                                good-boy~zhangxuewen." o  q- A) e6 H
?                                                                                                                                                                2018-05-18
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

哈哈笑417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11