Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

BTM的RPC远程调试

哈哈笑417
166 0 0
?        搭建完节点,顺利启动了节点并同步了区块数据。使用 ./bytomcli 命令可以成功获取数据,使用  curl -X POST get-block-count调用rpc,结果提示说get-block-count未找到命令,于是顺手加上端口号, curl -X POST localhost:9888/get-block-count,成功的获取到了json格式的数据。
7 e0 j. i8 i; [% ^$ V?        习惯了使用Postman调试接口,于是尝试POST一个rpc请求,开始踩坑之旅哈哈。7 a2 C- P8 F& q% h
远程调用RPC需要带上token方可请求,否则就出现BTM860的错误提示,如何获取token并设置呢?
+ L$ j& _0 }; I- W在节点服务器本地使用cli或者curl,生成access-token。! F* s4 O1 K  m8 o  `$ N9 s% ~! G$ g* O& K
bytomcli 方式:/ U/ L/ Y/ {, g: P+ \. J
./bytomcli create-access-token test  y) B& w/ n2 h0 O( H" ^
或者
8 r" O4 B9 ~+ f  ^* vcurl -X POST create-access-token -d '{"id":"test"}'+ @+ W  m" f1 {1 d5 W
返回json数据
) W7 R) y# D. S6 ^5 o{& R" f- c" S6 B/ V
  "created_at": "2018-05-18T16:00:25.284677605+08:00",+ t: Y3 c! l* d  G7 i
  "id": "test",
# E: m/ l% J% g- g! n. J4 M2 y+ r  "token": "test:fe50927ddaa5bcca77021e9f50fa5ef236a6140c012d1fe2eb9241f61a9228e4             "
4 P9 M5 ^. b' m# \( M" A3 d/ Y}
/ K' ^5 G: p; }4 P6 M- ^% h: M其中 test是远程访问的username,冒号后面的字符串是password
6 c! [2 {0 o# tPostman如何带上Auth呢?0 z3 z( v# J. @4 B
设置Authorization为Basic Auth,Username填刚才生成的sccess-test的id,Password填token冒号后面的字符串即可1 m& Y1 e  j' w. ]# y1 ^* }
?        使用普通的表单提交,比如获取新地址的方法create-account-receiver ,在表单的key填account_alias ,value填账户的别名,提交请求发现返回错误信息,code为BTM003。需要将Body切到raw格式,输入json格式的参数即可,如:{“account_alias”:“test”}
3 V+ n6 h3 m. Q* D' BJava中直接通过POST请求就可以远程调用RPC,但需要构造Authorization并加入到Header中,关键代码如下
/ q! I, k7 `( m5 AString auth = Username + ":" + Password;! N5 r9 I3 ^7 ]8 ]  x, |/ f* k
byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));( g" {- C$ [* B1 V0 p
String authHeader = "Basic " + new String(encodedAuth);
, O4 p- Q: J! LMap header = new LinkedHashMap();
( c$ u- b9 t/ X% nheader.put("Authorization", authHeader);
2 Z! d# w+ g' G【这里的Username即是 test,Password是fe50927xxxxxxxxxxxxx228e4,根据自己生成的token改】
5 n6 A* l2 k/ w/ A, z' o/ kbody使用JSONObject即可。3 u& [1 V) t! J) T
关于转账的流程,比较复杂。需要先打包交易,对交易进行签名,再进行广播。对应的rpc是:4 s/ e4 `  R/ R+ p8 |( p
build-transaction -> sign-transaction  -> submit-transaction
: j0 R  t# D9 ~build-transaction时带的参数根据api即可,主要是actions可能有点不清楚怎么用,比如通过地址转账时,可以设置actions如下:
# I; o; e5 \7 _3 j“actions”:[
: u6 x4 F. U5 o+ Z7 u7 S{
. \+ }6 t. A) p: v) k"account_id":"xxxx",   // 账户ID
+ Q# A; ?, ?6 F1 E  Y"amount":300000000,  //转账额度,需要包含手续费
' _, T- @- K& c% C0 `" ?"asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",  //资产ID,BTM是全F,可以转合约上的其它资产$ X, y! }" h5 a( k4 z  |6 j" D+ P& L
"type":"spend_account"  //表示花费的账号即转账方3 g, e. r4 o3 c* Q) h; m% r4 m
},
+ v3 c& G+ {9 Z+ P7 r{9 X, S$ F7 {8 F
        "account_id":"xxxxx",  //接收方账户ID
) [; d& [4 s* x* _        "amount":200000000, //转账额度: L4 q' z5 w- T* k: o
        "asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
1 i+ N9 K. s8 _  Q& L        "type":"control_address",  //类型表示是地址转账
# U9 F% g1 h% b0 {: d/ _        "address":"sm1q9s703yayrvn8g3zq80um65ul9ffg6pvx8cgpme"  //接收地址
" y2 g2 d, o3 j: f; p  V/ V6 I}1 g  W- e5 }( D* p- n# D# z4 d% c
]5 a& `% @* U) I( y" O2 ]. V- o! r
转账主要是在手续费方面会踩坑,1BTM=10,000,000NEU,个人感觉NEU就是类似比特币中的一聪吧哈哈,就是小数点后八位。所以上面的amount是以NEU算的,其实就是转了2个BTM,拿1个BTM当作手续费,故转账账户需要出3个BTM。
0 a/ v$ p) O0 {8 Z7 k打包完交易,就需要进行签名, 用创建账户时的密码进行签名。即是调用 sign-transaction 的rpc,参数是password和transaction,其中transaction是build成功后返回的data中的一个对象Object。签名后返回结果,可以根据 sign_complete 判断是否签名成功,如果为true即成功。- `) ^2 e: ^: c; w+ p$ q: T* w& W
广播交易,submit-transaction 只有一个参数raw_transaction,打包完或者签名完都会有返回该参数,是一串很长的序列化后的字符串。如果广播成功,即返回tx_id,失败会返回失败信息。
' ^1 I+ [* u9 e0 `: g这两天对btm的rpc调用研究收获了不少,还搭建了个solonet节点自己挖矿测试转账,感谢比原技术群的大牛提供不少的帮助。我会继续努力的踩坑~嘻嘻9 Q, T! o3 E# O4 a. |. n9 w9 @3 J9 L
?                                                                                                                                                good-boy~zhangxuewen.
2 c' Q2 m. `7 u2 L" O' Q?                                                                                                                                                                2018-05-18
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

哈哈笑417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11