Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

BTM的RPC远程调试

哈哈笑417
102 0 0
?        搭建完节点,顺利启动了节点并同步了区块数据。使用 ./bytomcli 命令可以成功获取数据,使用  curl -X POST get-block-count调用rpc,结果提示说get-block-count未找到命令,于是顺手加上端口号, curl -X POST localhost:9888/get-block-count,成功的获取到了json格式的数据。
/ N) z6 n: y; p/ T9 Q6 t. U?        习惯了使用Postman调试接口,于是尝试POST一个rpc请求,开始踩坑之旅哈哈。
( x3 W& c% d) K远程调用RPC需要带上token方可请求,否则就出现BTM860的错误提示,如何获取token并设置呢?
- A. J6 k3 W$ Z1 F8 V4 {/ R5 F在节点服务器本地使用cli或者curl,生成access-token。
( O; S& T( }% c) H$ ibytomcli 方式:: \2 O$ i8 d: s/ w; z; U
./bytomcli create-access-token test
4 w$ I* T; P! N" {( j或者
! j% o7 U) J& xcurl -X POST create-access-token -d '{"id":"test"}'
3 z' d3 s6 k, T" A返回json数据) H; b. t. q* A3 A9 _8 k
{9 }' ?4 z7 n" E( U2 W
  "created_at": "2018-05-18T16:00:25.284677605+08:00",5 Q0 J# V, F' X9 Y9 O
  "id": "test",/ G6 ]# D% s2 t$ l1 p. P2 @) o; s
  "token": "test:fe50927ddaa5bcca77021e9f50fa5ef236a6140c012d1fe2eb9241f61a9228e4             "( v$ G6 z) C6 d( ~" Z
}
7 i5 v/ W0 P- u! f, k8 r其中 test是远程访问的username,冒号后面的字符串是password4 T8 D5 k" v0 K$ H) W% W! `
Postman如何带上Auth呢?' f  E; T0 a* o- _5 J  M
设置Authorization为Basic Auth,Username填刚才生成的sccess-test的id,Password填token冒号后面的字符串即可
5 X/ r* |/ ~& T0 c4 o' }, r?        使用普通的表单提交,比如获取新地址的方法create-account-receiver ,在表单的key填account_alias ,value填账户的别名,提交请求发现返回错误信息,code为BTM003。需要将Body切到raw格式,输入json格式的参数即可,如:{“account_alias”:“test”}
) h6 P$ d$ D1 [! `1 L5 VJava中直接通过POST请求就可以远程调用RPC,但需要构造Authorization并加入到Header中,关键代码如下
' t" m/ o+ ^. K, N( ~% RString auth = Username + ":" + Password;6 p( t8 B% ~6 P: K! C) G
byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));: n. \0 j" l3 E. s: l
String authHeader = "Basic " + new String(encodedAuth);# b% L" T9 N+ X
Map header = new LinkedHashMap();
4 [# R! I* v' V. F# @6 h( {! L+ ~5 ^header.put("Authorization", authHeader);' j6 S1 S  r1 T% P. N
【这里的Username即是 test,Password是fe50927xxxxxxxxxxxxx228e4,根据自己生成的token改】1 E0 k% T9 O, e" L8 t4 K
body使用JSONObject即可。+ c: H1 t5 t( o: }
关于转账的流程,比较复杂。需要先打包交易,对交易进行签名,再进行广播。对应的rpc是:0 x" S& Q. u) B! }1 w! ~3 I# {3 }0 ^
build-transaction -> sign-transaction  -> submit-transaction
% Y8 p% c) K+ fbuild-transaction时带的参数根据api即可,主要是actions可能有点不清楚怎么用,比如通过地址转账时,可以设置actions如下:" k" ?1 r- C9 ?% R' P" }$ B
“actions”:[
8 C1 T+ q  L7 n, S{, F4 `( ~+ t* G: P- x$ A/ C* x
"account_id":"xxxx",   // 账户ID / J4 H. n( D% i: b
"amount":300000000,  //转账额度,需要包含手续费
& w/ y; Z- d0 s9 R, P9 i+ c"asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",  //资产ID,BTM是全F,可以转合约上的其它资产
+ J; m5 z7 A: ^6 |  R"type":"spend_account"  //表示花费的账号即转账方
3 J9 n0 q6 q; U" |4 w/ v) Q},# k8 M+ Q% F0 t8 q. Q
{" G4 v# f. C# o7 D9 Z9 V
        "account_id":"xxxxx",  //接收方账户ID$ u- ~* p4 G" ?9 H8 E' x% k4 [
        "amount":200000000, //转账额度
5 T, f' P' T1 g! R0 K$ g        "asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
: M8 v. Q7 F2 x" f9 Y; X        "type":"control_address",  //类型表示是地址转账
( U. H- r1 R* E/ E6 ?2 F        "address":"sm1q9s703yayrvn8g3zq80um65ul9ffg6pvx8cgpme"  //接收地址$ G4 [6 }5 i4 Q: e1 [
}" p; y, i# K1 l& i
]7 ?+ V7 Y/ n; }1 L8 k) _+ Q4 O
转账主要是在手续费方面会踩坑,1BTM=10,000,000NEU,个人感觉NEU就是类似比特币中的一聪吧哈哈,就是小数点后八位。所以上面的amount是以NEU算的,其实就是转了2个BTM,拿1个BTM当作手续费,故转账账户需要出3个BTM。3 b: z! N5 j! w) f1 I! Q9 q1 ^
打包完交易,就需要进行签名, 用创建账户时的密码进行签名。即是调用 sign-transaction 的rpc,参数是password和transaction,其中transaction是build成功后返回的data中的一个对象Object。签名后返回结果,可以根据 sign_complete 判断是否签名成功,如果为true即成功。
7 ]" k6 J3 o3 q  p7 S广播交易,submit-transaction 只有一个参数raw_transaction,打包完或者签名完都会有返回该参数,是一串很长的序列化后的字符串。如果广播成功,即返回tx_id,失败会返回失败信息。9 M# j7 s- K. ^6 [: p8 P4 {* {8 v
这两天对btm的rpc调用研究收获了不少,还搭建了个solonet节点自己挖矿测试转账,感谢比原技术群的大牛提供不少的帮助。我会继续努力的踩坑~嘻嘻6 Y) S/ b! U" f0 q5 ]/ ?
?                                                                                                                                                good-boy~zhangxuewen.
0 _& |9 x$ [# \! F$ V1 r" l?                                                                                                                                                                2018-05-18
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

哈哈笑417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11