Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

BTM的RPC远程调试

哈哈笑417
128 0 0
?        搭建完节点,顺利启动了节点并同步了区块数据。使用 ./bytomcli 命令可以成功获取数据,使用  curl -X POST get-block-count调用rpc,结果提示说get-block-count未找到命令,于是顺手加上端口号, curl -X POST localhost:9888/get-block-count,成功的获取到了json格式的数据。' u7 J" A- {' f) b' Z2 c
?        习惯了使用Postman调试接口,于是尝试POST一个rpc请求,开始踩坑之旅哈哈。+ N" S# l5 x) V( v, Q) a+ z
远程调用RPC需要带上token方可请求,否则就出现BTM860的错误提示,如何获取token并设置呢?; N1 p8 v1 F! k4 y& |) ]$ I2 y
在节点服务器本地使用cli或者curl,生成access-token。
5 Y- W: k& t/ w5 n  e3 P$ obytomcli 方式:
0 P. X$ }* ~& @+ z./bytomcli create-access-token test3 m+ m) g; e) R8 B# a% B! ?5 K+ K% }
或者2 e4 D/ l# u0 H8 J, |0 J+ n! D
curl -X POST create-access-token -d '{"id":"test"}'4 P: q/ ^" C! u
返回json数据  W  p( }. J/ m; U
{
: Q- x% Q% x1 ?/ N2 n  "created_at": "2018-05-18T16:00:25.284677605+08:00",) l3 h+ ]- G  s
  "id": "test",$ F% D7 O- M5 V
  "token": "test:fe50927ddaa5bcca77021e9f50fa5ef236a6140c012d1fe2eb9241f61a9228e4             "
; l5 b; c$ c! Z6 i}
$ ]6 _* A4 I% ], h  |其中 test是远程访问的username,冒号后面的字符串是password3 }# [+ ~9 Y* ]% [/ E" V
Postman如何带上Auth呢?
- s: f; a4 H  I. Y: S0 F. B设置Authorization为Basic Auth,Username填刚才生成的sccess-test的id,Password填token冒号后面的字符串即可
# D: G3 g$ _6 l. y?        使用普通的表单提交,比如获取新地址的方法create-account-receiver ,在表单的key填account_alias ,value填账户的别名,提交请求发现返回错误信息,code为BTM003。需要将Body切到raw格式,输入json格式的参数即可,如:{“account_alias”:“test”}# `- N0 M! ]8 b/ h+ i! m
Java中直接通过POST请求就可以远程调用RPC,但需要构造Authorization并加入到Header中,关键代码如下8 u. V' I8 z4 _! g1 y
String auth = Username + ":" + Password;
" y# x3 e$ `% P* ?byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));
  M' ?; V4 p0 N0 qString authHeader = "Basic " + new String(encodedAuth);
! Z+ c2 S. {; T0 j# J- `8 \- YMap header = new LinkedHashMap();
7 p6 a; F2 B: n" E4 n$ `8 Lheader.put("Authorization", authHeader);; x! Z$ G: v5 Z9 _5 l5 r
【这里的Username即是 test,Password是fe50927xxxxxxxxxxxxx228e4,根据自己生成的token改】
* {& L9 o1 k5 {body使用JSONObject即可。. l( A) w: A6 `+ X( x% v$ P
关于转账的流程,比较复杂。需要先打包交易,对交易进行签名,再进行广播。对应的rpc是:. O' U& G% V! X: \7 P
build-transaction -> sign-transaction  -> submit-transaction$ X: e# q# E+ y0 c! a' x
build-transaction时带的参数根据api即可,主要是actions可能有点不清楚怎么用,比如通过地址转账时,可以设置actions如下:
; {% E* V' Y5 N# N5 S4 r“actions”:[
( V" U3 J& j4 P# B  g{
3 _( A! M  H* }" G  G"account_id":"xxxx",   // 账户ID
' c8 n2 B! R0 ?* }) U"amount":300000000,  //转账额度,需要包含手续费
4 _% C3 d/ `: p9 ^/ Z"asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",  //资产ID,BTM是全F,可以转合约上的其它资产$ Z# r4 \$ O4 W3 f
"type":"spend_account"  //表示花费的账号即转账方
$ K8 |  \& W+ f3 x},3 M+ \2 T+ D0 n" G& e9 ]* p" h, a
{
! P+ k) D5 P& d, U        "account_id":"xxxxx",  //接收方账户ID
! X8 H& f8 W0 u5 c1 i" n        "amount":200000000, //转账额度' v$ e1 \$ n  c0 Y; g+ K0 n/ S2 a, c
        "asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
4 y/ u) M5 U! Z3 _        "type":"control_address",  //类型表示是地址转账
" y' [5 g. H8 s9 ?. c7 _4 z6 T        "address":"sm1q9s703yayrvn8g3zq80um65ul9ffg6pvx8cgpme"  //接收地址
0 @. u: r- D5 k6 O}: {' K( [+ Y& b' T; |3 g$ _" _0 |
]
5 v+ Q  B4 R# J* n4 N转账主要是在手续费方面会踩坑,1BTM=10,000,000NEU,个人感觉NEU就是类似比特币中的一聪吧哈哈,就是小数点后八位。所以上面的amount是以NEU算的,其实就是转了2个BTM,拿1个BTM当作手续费,故转账账户需要出3个BTM。
% Z1 W# A  S3 f/ @+ g' j打包完交易,就需要进行签名, 用创建账户时的密码进行签名。即是调用 sign-transaction 的rpc,参数是password和transaction,其中transaction是build成功后返回的data中的一个对象Object。签名后返回结果,可以根据 sign_complete 判断是否签名成功,如果为true即成功。7 Y2 i0 `- d$ z+ f) d% h) x; N
广播交易,submit-transaction 只有一个参数raw_transaction,打包完或者签名完都会有返回该参数,是一串很长的序列化后的字符串。如果广播成功,即返回tx_id,失败会返回失败信息。! F0 n! C& n  A9 w. r% e. k
这两天对btm的rpc调用研究收获了不少,还搭建了个solonet节点自己挖矿测试转账,感谢比原技术群的大牛提供不少的帮助。我会继续努力的踩坑~嘻嘻
3 [9 u2 e) Y' ^3 r, ?# X, X8 B6 F?                                                                                                                                                good-boy~zhangxuewen.6 x  M' d; T- t- `' y
?                                                                                                                                                                2018-05-18
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

哈哈笑417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11