Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

BTM的RPC远程调试

哈哈笑417
98 0 0
?        搭建完节点,顺利启动了节点并同步了区块数据。使用 ./bytomcli 命令可以成功获取数据,使用  curl -X POST get-block-count调用rpc,结果提示说get-block-count未找到命令,于是顺手加上端口号, curl -X POST localhost:9888/get-block-count,成功的获取到了json格式的数据。$ W: i! _/ r, |1 @7 {" U. a, }% P
?        习惯了使用Postman调试接口,于是尝试POST一个rpc请求,开始踩坑之旅哈哈。9 A/ F6 s) \& K7 r0 X+ B1 S+ A. ~
远程调用RPC需要带上token方可请求,否则就出现BTM860的错误提示,如何获取token并设置呢?
$ o9 ~' ^9 H$ J# t( e1 S在节点服务器本地使用cli或者curl,生成access-token。( p8 W$ E5 y) f; y" i
bytomcli 方式:& h' P7 v( @+ x0 l1 f
./bytomcli create-access-token test
  c8 l. {* Q- W# A或者
- h, ?4 O; V' Zcurl -X POST create-access-token -d '{"id":"test"}'& `' W& I# |. X$ k5 S
返回json数据$ B1 f' U  G. f$ ?5 s1 H3 B
{
% F3 M8 r! u- t  "created_at": "2018-05-18T16:00:25.284677605+08:00",9 v( j5 K4 l9 C
  "id": "test",
  v) v  T* Z9 F& u8 ]# z+ V4 c  "token": "test:fe50927ddaa5bcca77021e9f50fa5ef236a6140c012d1fe2eb9241f61a9228e4             "
7 D. a& O4 |/ M! C! S1 ?}
7 j& N6 f6 I. A其中 test是远程访问的username,冒号后面的字符串是password3 R6 I" a8 E: F$ ~5 \" j
Postman如何带上Auth呢?
4 L4 N  ]* i, P. s设置Authorization为Basic Auth,Username填刚才生成的sccess-test的id,Password填token冒号后面的字符串即可
: O/ n. t/ @  A?        使用普通的表单提交,比如获取新地址的方法create-account-receiver ,在表单的key填account_alias ,value填账户的别名,提交请求发现返回错误信息,code为BTM003。需要将Body切到raw格式,输入json格式的参数即可,如:{“account_alias”:“test”}( @) D! [5 K) D9 B. T1 ~8 y& j
Java中直接通过POST请求就可以远程调用RPC,但需要构造Authorization并加入到Header中,关键代码如下
5 A7 S' i  }+ w% M, R# iString auth = Username + ":" + Password;$ [. m' U$ a/ ?
byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));' W4 q; D, |# Q" R' B* G
String authHeader = "Basic " + new String(encodedAuth);
$ O$ v8 f: U& hMap header = new LinkedHashMap();
% c) Y. Z$ P& [; p* Gheader.put("Authorization", authHeader);: L7 R0 g( v" i" [5 G6 l6 O4 Q
【这里的Username即是 test,Password是fe50927xxxxxxxxxxxxx228e4,根据自己生成的token改】% x/ f/ v- d4 b. }' _
body使用JSONObject即可。, I# L1 w* {( w+ z
关于转账的流程,比较复杂。需要先打包交易,对交易进行签名,再进行广播。对应的rpc是:- ]+ t7 `; ?8 |' E6 x$ K
build-transaction -> sign-transaction  -> submit-transaction
6 v$ C4 y. D/ ?& G* n" {build-transaction时带的参数根据api即可,主要是actions可能有点不清楚怎么用,比如通过地址转账时,可以设置actions如下:$ v$ O3 A7 Q8 j- A0 y0 F; [
“actions”:[
4 ~0 ]7 p: R, b  o, ]  Z9 K{  C, l+ m  l3 w) Q
"account_id":"xxxx",   // 账户ID
* T# s/ I" Q/ X"amount":300000000,  //转账额度,需要包含手续费3 p. b& q0 y5 y: ?0 r: R5 m) N
"asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",  //资产ID,BTM是全F,可以转合约上的其它资产
! w8 y* b! O- c+ k# {8 G; j4 B"type":"spend_account"  //表示花费的账号即转账方
4 ~( y6 N" W# L, H8 p2 J' ]! Y},! V5 v5 ?( S/ z* l* D: J. I8 O6 e
{4 \' l) a+ u: }7 g0 v1 P) ^
        "account_id":"xxxxx",  //接收方账户ID
1 u. ^% O. G$ C- H        "amount":200000000, //转账额度
4 b" J( {; g# ?$ g. P7 t- v3 P% \        "asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",+ G! }" q$ o& s- D1 T' x
        "type":"control_address",  //类型表示是地址转账
4 Z7 ~* h0 C6 D( `- e7 X: d- Z        "address":"sm1q9s703yayrvn8g3zq80um65ul9ffg6pvx8cgpme"  //接收地址1 G8 `9 }. t& p- e* T
}
& A4 e+ k: u+ H+ {2 Z" \% ^]& c. u) ^# |( Y; L
转账主要是在手续费方面会踩坑,1BTM=10,000,000NEU,个人感觉NEU就是类似比特币中的一聪吧哈哈,就是小数点后八位。所以上面的amount是以NEU算的,其实就是转了2个BTM,拿1个BTM当作手续费,故转账账户需要出3个BTM。
5 X: C: S" _0 D1 h9 ~打包完交易,就需要进行签名, 用创建账户时的密码进行签名。即是调用 sign-transaction 的rpc,参数是password和transaction,其中transaction是build成功后返回的data中的一个对象Object。签名后返回结果,可以根据 sign_complete 判断是否签名成功,如果为true即成功。+ B: j$ f1 ]0 V
广播交易,submit-transaction 只有一个参数raw_transaction,打包完或者签名完都会有返回该参数,是一串很长的序列化后的字符串。如果广播成功,即返回tx_id,失败会返回失败信息。- K- m" q- h& v" e, E
这两天对btm的rpc调用研究收获了不少,还搭建了个solonet节点自己挖矿测试转账,感谢比原技术群的大牛提供不少的帮助。我会继续努力的踩坑~嘻嘻. `+ n, }5 h2 c: l8 T( Y. T
?                                                                                                                                                good-boy~zhangxuewen.
! B, p8 H; U* g$ z1 b?                                                                                                                                                                2018-05-18
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

哈哈笑417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11