Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

BTM的RPC远程调试

哈哈笑417
168 0 0
?        搭建完节点,顺利启动了节点并同步了区块数据。使用 ./bytomcli 命令可以成功获取数据,使用  curl -X POST get-block-count调用rpc,结果提示说get-block-count未找到命令,于是顺手加上端口号, curl -X POST localhost:9888/get-block-count,成功的获取到了json格式的数据。
0 I8 X: W' S! Z% a" V. {?        习惯了使用Postman调试接口,于是尝试POST一个rpc请求,开始踩坑之旅哈哈。& Z  o6 P0 N5 h
远程调用RPC需要带上token方可请求,否则就出现BTM860的错误提示,如何获取token并设置呢?
' U0 T# P  r$ y4 o& w在节点服务器本地使用cli或者curl,生成access-token。$ w; ?: B0 D$ w# F' c) {7 J- c1 `
bytomcli 方式:5 b2 y9 N/ \" U# S! S: }8 e: n+ e
./bytomcli create-access-token test
- i+ R! D! O& j( U& K2 j或者
  D: @9 ~$ k" ^" Scurl -X POST create-access-token -d '{"id":"test"}'
4 I/ l6 U( i2 z5 ]5 `/ s3 k返回json数据
) j, t& d6 `3 x4 w# e{! x4 Z6 y( H  e
  "created_at": "2018-05-18T16:00:25.284677605+08:00",
( }: M  ], L( C8 }' b* Z  "id": "test",
  t9 L. m- Z& Z' M; ~! y  "token": "test:fe50927ddaa5bcca77021e9f50fa5ef236a6140c012d1fe2eb9241f61a9228e4             "6 e+ e) K! K9 {1 T% B4 Z7 [
}
3 _3 v4 v8 i, q+ }+ c1 S$ }其中 test是远程访问的username,冒号后面的字符串是password
. H9 U$ a. m1 ?3 x: c6 RPostman如何带上Auth呢?
; A; v& l! W$ R5 D* R设置Authorization为Basic Auth,Username填刚才生成的sccess-test的id,Password填token冒号后面的字符串即可
2 T2 v( z4 p- ~( \?        使用普通的表单提交,比如获取新地址的方法create-account-receiver ,在表单的key填account_alias ,value填账户的别名,提交请求发现返回错误信息,code为BTM003。需要将Body切到raw格式,输入json格式的参数即可,如:{“account_alias”:“test”}
1 m" a& P' b* }6 F; r% LJava中直接通过POST请求就可以远程调用RPC,但需要构造Authorization并加入到Header中,关键代码如下
& _# Y3 H! a6 T5 Z1 }6 ^String auth = Username + ":" + Password;8 e$ ?% x% @4 @5 \% C
byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));
" U- d4 p$ v$ f, F, d( `String authHeader = "Basic " + new String(encodedAuth);. u. n; M' D( C
Map header = new LinkedHashMap();# q  c# L4 v5 I+ K) h  K; r
header.put("Authorization", authHeader);
% a* w# k8 ^/ x& P) K4 N- I1 C- r【这里的Username即是 test,Password是fe50927xxxxxxxxxxxxx228e4,根据自己生成的token改】
8 T$ e( z( m. g3 `2 _/ \( Y" _% Ibody使用JSONObject即可。- `0 R+ s3 R- z) D) E. ~
关于转账的流程,比较复杂。需要先打包交易,对交易进行签名,再进行广播。对应的rpc是:
( q# m7 L0 G$ w1 ~* Ebuild-transaction -> sign-transaction  -> submit-transaction- ~1 @) g/ Y' n
build-transaction时带的参数根据api即可,主要是actions可能有点不清楚怎么用,比如通过地址转账时,可以设置actions如下:% n# |; _" q- ?9 m. ?, s8 V2 O8 x
“actions”:[! u$ y! ~, R9 ~
{
$ \- S% Q! p  {/ H+ j"account_id":"xxxx",   // 账户ID + }/ q1 K$ y  v* y
"amount":300000000,  //转账额度,需要包含手续费
0 R# j$ d7 u. U1 l2 y"asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",  //资产ID,BTM是全F,可以转合约上的其它资产
" k6 M; v2 `# S"type":"spend_account"  //表示花费的账号即转账方% e6 {4 A) X/ _6 J
},
! ^2 T) b" S2 n' a* D7 t{" J! J1 m! B. c( ^% y; L1 z- F- n
        "account_id":"xxxxx",  //接收方账户ID8 O3 r) h+ ?5 b- U. \. ^% G: z
        "amount":200000000, //转账额度
; t! d2 f7 K$ ?7 b        "asset_id":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",& w; N' Y) t( G% R8 l6 u; v! Q
        "type":"control_address",  //类型表示是地址转账
5 @% j2 Y9 W0 l4 j6 N        "address":"sm1q9s703yayrvn8g3zq80um65ul9ffg6pvx8cgpme"  //接收地址
- t! ]+ C; P/ P}
' O! G+ m8 }6 a* X, ~]! K, z8 r! F1 e/ W' u( X
转账主要是在手续费方面会踩坑,1BTM=10,000,000NEU,个人感觉NEU就是类似比特币中的一聪吧哈哈,就是小数点后八位。所以上面的amount是以NEU算的,其实就是转了2个BTM,拿1个BTM当作手续费,故转账账户需要出3个BTM。
" m1 `5 q2 u0 f9 b& ~2 n! f打包完交易,就需要进行签名, 用创建账户时的密码进行签名。即是调用 sign-transaction 的rpc,参数是password和transaction,其中transaction是build成功后返回的data中的一个对象Object。签名后返回结果,可以根据 sign_complete 判断是否签名成功,如果为true即成功。
& r6 f6 `' X5 ^9 `. t广播交易,submit-transaction 只有一个参数raw_transaction,打包完或者签名完都会有返回该参数,是一串很长的序列化后的字符串。如果广播成功,即返回tx_id,失败会返回失败信息。
( Y$ T, y$ J$ ]; i  R3 q7 `这两天对btm的rpc调用研究收获了不少,还搭建了个solonet节点自己挖矿测试转账,感谢比原技术群的大牛提供不少的帮助。我会继续努力的踩坑~嘻嘻+ ^4 J7 m. y) A) L" T
?                                                                                                                                                good-boy~zhangxuewen.% F  ]0 B$ P2 B* N
?                                                                                                                                                                2018-05-18
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

哈哈笑417 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    11