Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

BTM的RPC远程调试

哈哈笑417
165 0 0
?        搭建完节点,顺利启动了节点并同步了区块数据。使用 ./bytomcli 命令可以成功获取数据,使用  curl -X POST get-block-count调用rpc,结果提示说get-block-count未找到命令,于是顺手加上端口号, curl -X POST localhost:9888/get-block-count,成功的获取到了json格式的数据。+ n6 U* D* y7 J. H
?        习惯了使用Postman调试接口,于是尝试POST一个rpc请求,开始踩坑之旅哈哈。
2 u0 r* b4 e' v! P远程调用RPC需要带上token方可请求,否则就出现BTM860的错误提示,如何获取token并设置呢?8 o9 I7 F. [" i6 S5 _1 G8 [
在节点服务器本地使用cli或者curl,生成access-token。  V& r7 k3 Z- c" m7 M
bytomcli 方式:
) f% M# M4 b& _  t: f  Q./bytomcli create-access-token test
( G' ^( J8 \' _2 S6 g6 z或者+ Y. j5 i/ e$ G+ d: p* b* E+ j
curl -X POST create-access-token -d '{"id":"test"}'/ Q/ Y& k, ^7 O+ e
返回json数据
5 h5 H( b' v4 M: u{# k8 B: K0 e( H5 O8 l
  "created_at": "2018-05-18T16:00:25.284677605+08:00",
2 ^- ]1 v- m/ {  D) I3 F" h  "id": "test",2 S) N6 j( @/ X5 J3 o
  "token": "test:fe50927ddaa5bcca77021e9f50fa5ef236a6140c012d1fe2eb9241f61a9228e4             "+ {8 ?' y( X( d. S% O  j
}8 h9 A% r- b# x7 Q: v9 |/ E, w' u
其中 test是远程访问的username,冒号后面的字符串是password) W! U; x# E" z8 v
Postman如何带上Auth呢?
! B- _( M- ?# E% ^设置Authorization为Basic Auth,Username填刚才生成的sccess-test的id,Password填token冒号后面的字符串即可
9 X& v4 H7 G2 X& ??        使用普通的表单提交,比如获取新地址的方法create-account-receiver ,在表单的key填account_alias ,value填账户的别名,提交请求发现返回错误信息,code为BTM003。需要将Body切到raw格式,输入json格式的参数即可,如:{“account_alias”:“test”}0 v! H* _# q9 L; o- o) I
Java中直接通过POST请求就可以远程调用RPC,但需要构造Authorization并加入到Header中,关键代码如下' E& k" ?  x+ h
String auth = Username + ":" + Password;
/ I  E2 X$ K, `8 Y3 jbyte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));
0 N/ d& }8 G( MString authHeader = "Basic " + new String(encodedAuth);
4 ^% P( Z2 z5 G' u0 D8 [7 wMap header = new LinkedHashMap();6 k1 I1 C( e# H% V" g1 |. s! s
header.put("Authorization", authHeader);! U. R8 ~# \* u. ^1 y! i5 ^
【这里的Username即是 test,Password是fe50927xxxxxxxxxxxxx228e4,根据自己生成的token改】
  q( A8 o4 X* _2 R2 sbody使用JSONObject即可。2 H6 F& K# N2 h6 G9 N5 s
关于转账的流程,比较复杂。需要先打包交易,对交易进行签名,再进行广播。对应的rpc是:
/ t% N: @4 U& Pbuild-transaction -> sign-transaction  -> submit-transaction
, Q: @/ q( k' c& Wbuild-transaction时带的参数根据api即可,主要是actions可能有点不清楚怎么用,比如通过地址转账时,可以设置actions如下:( l  ^" R: F: a
“actions”:[: |! V6 d2 o6 B; V, K
{2 T6 {$ @6 i$ B4 z
"account_id":"xxxx",   // 账户ID
7 \; w5 R- d3 W# W, H"amount":300000000,  //转账额度,需要包含手续费: k* n% P0 M3 i& X4 ?# V
"asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",  //资产ID,BTM是全F,可以转合约上的其它资产
7 x1 t$ R2 s) O/ x/ ]+ [7 G"type":"spend_account"  //表示花费的账号即转账方: O2 k2 J$ k1 i5 [6 S  \
},  i8 L4 f( Y; n, z
{( x2 h5 _; e; A% T0 M
        "account_id":"xxxxx",  //接收方账户ID% U, w+ b0 h3 z8 Q3 o& D( ?
        "amount":200000000, //转账额度1 k4 h4 T: q0 [' g
        "asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",4 s$ \3 R/ D1 @6 z1 a' K( E( q
        "type":"control_address",  //类型表示是地址转账
- E- `$ P( ?; J; q6 _: v+ o        "address":"sm1q9s703yayrvn8g3zq80um65ul9ffg6pvx8cgpme"  //接收地址: ]/ p  n% b5 U, ]  p
}0 z2 H/ [& {" F7 B' y* a
]8 B7 s; d+ x7 r0 p- A% N. X* |; V; Q
转账主要是在手续费方面会踩坑,1BTM=10,000,000NEU,个人感觉NEU就是类似比特币中的一聪吧哈哈,就是小数点后八位。所以上面的amount是以NEU算的,其实就是转了2个BTM,拿1个BTM当作手续费,故转账账户需要出3个BTM。
' A- u: Y$ n4 L5 g7 ?" q打包完交易,就需要进行签名, 用创建账户时的密码进行签名。即是调用 sign-transaction 的rpc,参数是password和transaction,其中transaction是build成功后返回的data中的一个对象Object。签名后返回结果,可以根据 sign_complete 判断是否签名成功,如果为true即成功。
: B7 t3 N, M2 C8 W% {# m广播交易,submit-transaction 只有一个参数raw_transaction,打包完或者签名完都会有返回该参数,是一串很长的序列化后的字符串。如果广播成功,即返回tx_id,失败会返回失败信息。# D. w+ o) N: }, e7 Q- I
这两天对btm的rpc调用研究收获了不少,还搭建了个solonet节点自己挖矿测试转账,感谢比原技术群的大牛提供不少的帮助。我会继续努力的踩坑~嘻嘻
: Y  C5 D: A. ]) |?                                                                                                                                                good-boy~zhangxuewen.
+ J6 d, U$ i) B* L?                                                                                                                                                                2018-05-18
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

哈哈笑417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11