Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

BTM的RPC远程调试

哈哈笑417
167 0 0
?        搭建完节点,顺利启动了节点并同步了区块数据。使用 ./bytomcli 命令可以成功获取数据,使用  curl -X POST get-block-count调用rpc,结果提示说get-block-count未找到命令,于是顺手加上端口号, curl -X POST localhost:9888/get-block-count,成功的获取到了json格式的数据。1 k1 n& T( B! |2 L% ?
?        习惯了使用Postman调试接口,于是尝试POST一个rpc请求,开始踩坑之旅哈哈。
, k- }1 h2 G! r# J' i* P( T远程调用RPC需要带上token方可请求,否则就出现BTM860的错误提示,如何获取token并设置呢?$ x% I. a- X$ k0 [2 ~
在节点服务器本地使用cli或者curl,生成access-token。" L( }9 K: ?+ W  C
bytomcli 方式:6 |( D' l8 t; e& _
./bytomcli create-access-token test
& Q, e+ S" `& {" R. N或者& L9 t7 x0 J9 Z# g
curl -X POST create-access-token -d '{"id":"test"}'5 G1 C5 V9 K7 `- O% A2 e  C& j
返回json数据, t3 f: r( `4 w9 s
{
# l: Z+ t+ M  w# W( i2 ~$ N4 o  "created_at": "2018-05-18T16:00:25.284677605+08:00",: j0 A! f+ j2 @5 r! i( L% _- o* n
  "id": "test",
( d4 L! H8 K' D$ B, k% t  "token": "test:fe50927ddaa5bcca77021e9f50fa5ef236a6140c012d1fe2eb9241f61a9228e4             "& k$ H8 M& [6 m3 t  v
}
0 l- t* n+ \9 _0 o其中 test是远程访问的username,冒号后面的字符串是password
7 n1 `) {0 s8 C4 WPostman如何带上Auth呢?; o7 o$ l. ^. J1 I' L
设置Authorization为Basic Auth,Username填刚才生成的sccess-test的id,Password填token冒号后面的字符串即可7 S! o+ j! g/ j# G4 q
?        使用普通的表单提交,比如获取新地址的方法create-account-receiver ,在表单的key填account_alias ,value填账户的别名,提交请求发现返回错误信息,code为BTM003。需要将Body切到raw格式,输入json格式的参数即可,如:{“account_alias”:“test”}
  y% W6 Q) \% @+ Z) e3 t2 `, [4 m# hJava中直接通过POST请求就可以远程调用RPC,但需要构造Authorization并加入到Header中,关键代码如下
+ w1 W! O" I8 o( f- Y  }% uString auth = Username + ":" + Password;
0 c0 u; o- S# }5 J% _! sbyte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));& q4 X; A$ |! m# |% X* P& ^: d
String authHeader = "Basic " + new String(encodedAuth);
! i7 m5 t) N% s3 y; h3 V, hMap header = new LinkedHashMap();% K* D2 B0 y! [
header.put("Authorization", authHeader);. K+ F2 |5 u6 a4 c' k2 j$ p
【这里的Username即是 test,Password是fe50927xxxxxxxxxxxxx228e4,根据自己生成的token改】
2 d  ?5 S/ i. O5 Hbody使用JSONObject即可。# x+ h4 Q( x) X" M3 z
关于转账的流程,比较复杂。需要先打包交易,对交易进行签名,再进行广播。对应的rpc是:
" _8 N0 O2 p; q) i3 ]" F0 {build-transaction -> sign-transaction  -> submit-transaction; }  p, H5 T# B; q( I$ f
build-transaction时带的参数根据api即可,主要是actions可能有点不清楚怎么用,比如通过地址转账时,可以设置actions如下:- i* [5 @/ b0 [" J
“actions”:[
$ ]' Y$ n; a5 k+ F' ~  n{
5 G: r/ M% v) N' L  }- O0 K) x"account_id":"xxxx",   // 账户ID , t" ^9 ~9 ]9 F$ K9 X
"amount":300000000,  //转账额度,需要包含手续费0 \1 J4 z$ H/ y8 h: D3 G
"asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",  //资产ID,BTM是全F,可以转合约上的其它资产
3 z- {' f* ^! X. d% }/ M& M) v( M"type":"spend_account"  //表示花费的账号即转账方
( V8 r1 P! B; q5 c6 v  N/ F% \},; h# L$ O( {% {' Q
{
' Y* p4 l; C6 o# g        "account_id":"xxxxx",  //接收方账户ID
/ G9 S2 h) S3 j; N        "amount":200000000, //转账额度
9 W9 M) ^( n3 o        "asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",7 S! G8 D% i" A' R# b0 P
        "type":"control_address",  //类型表示是地址转账" `* q3 S( [; U) y( g
        "address":"sm1q9s703yayrvn8g3zq80um65ul9ffg6pvx8cgpme"  //接收地址$ k1 z& w7 P% X) o0 H% D( s
}
/ P- u5 h# ^1 A5 H2 Y1 O]
$ X1 H' M3 f, F( J. w转账主要是在手续费方面会踩坑,1BTM=10,000,000NEU,个人感觉NEU就是类似比特币中的一聪吧哈哈,就是小数点后八位。所以上面的amount是以NEU算的,其实就是转了2个BTM,拿1个BTM当作手续费,故转账账户需要出3个BTM。
0 n1 t3 ^3 `4 K( O$ ^0 l. c打包完交易,就需要进行签名, 用创建账户时的密码进行签名。即是调用 sign-transaction 的rpc,参数是password和transaction,其中transaction是build成功后返回的data中的一个对象Object。签名后返回结果,可以根据 sign_complete 判断是否签名成功,如果为true即成功。" H" y" ~6 \* _
广播交易,submit-transaction 只有一个参数raw_transaction,打包完或者签名完都会有返回该参数,是一串很长的序列化后的字符串。如果广播成功,即返回tx_id,失败会返回失败信息。2 z/ N& p9 i" |7 s! Y
这两天对btm的rpc调用研究收获了不少,还搭建了个solonet节点自己挖矿测试转账,感谢比原技术群的大牛提供不少的帮助。我会继续努力的踩坑~嘻嘻9 g1 V4 R% i. g  G# k0 C: v  h
?                                                                                                                                                good-boy~zhangxuewen.
, S4 `" v9 h$ X3 u0 J* T; j?                                                                                                                                                                2018-05-18
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

哈哈笑417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11