适用于最新的 EOS Dawn 4.0/4.1
前言
最近在研究 EOS 的 RPC API,但是由于官方API文档的不够详尽,新建账号(new account)这一个操作就折腾了一个多星期。皇天不负有心人,终于调通了新建账号,代币转账也轻松解决。特地写这篇文章(适用于 EOS dawn 4.0 和 4.1),帮助准备使用 EOS RPC 做 Dapp 开发的朋友,如有问题,欢迎批评指正。
少废话,先看东西
1、POST http://127.0.0.1:8888/v1/chain/abi_json_to_bin (序列化新建账号的 json)
{
"code": "eosio",
"action": "newaccount",
"args": {
"creator": "bitcoin",
"name": "eason",
"owner": {
"threshold": 1,
"keys": [
{
"key": "EOS4ufZoTw95yHJS6Cyz3h4w5a2W4cyYpMYRnd7gbFZuCfPxUFS6r", //owner public key
"weight": 1
}
],
"accounts": [],
"waits": []
},
"active": {
"threshold": 1,
"keys": [
{
"key": "EOS4ufZoTw95yHJS6Cyz3h4w5a2W4cyYpMYRnd7gbFZuCfPxUFS6r", //active public key
"weight": 1
}
],
"accounts": [],
"waits": []
}
}
}
2、POST http://127.0.0.1:8888/v1/wallet/sign_transaction(签名新建账号的交易)
[
{
"ref_block_num": 363759,
"ref_block_prefix": 4033496171,
"expiration": "2018-05-17T09:54:06.500",
"actions": [
{
"account": "eosio",
"name": "newaccount",
"authorization": [
{
"actor": "bitcoin",
"permission": "active"
}
],
"data": "000000603a8ab23b000000ca3d364dfb0100000001000202aba1b7d9fc5de9dd93308dc5ebedcb066c8e5b36970bfd82ae715d9e8c3060010000000100000001000202aba1b7d9fc5de9dd93308dc5ebedcb066c8e5b36970bfd82ae715d9e8c306001000000"
}
],
"signatures": []
},
[
"EOS5wQ4HaFFDxyfc23dZNXUTGBHepM1vXGfr1vkfWHfRfvAMXP7VV"
],
""
]
3、http://127.0.0.1:8888/v1/chain/push_transaction (把签名后的交易push 推送到 EOS 系统中,即新建账号完成)
{
"compression": "none",
"transaction": {
"expiration": "2018-05-17T09:54:06.500",
"ref_block_num": 363759,
"ref_block_prefix": 4033496171,
"actions": [
{
"account": "eosio",
"name": "newaccount",
"authorization": [
{
"actor": "bitcoin",
"permission": "active"
}
],
"data": "000000603a8ab23b000000ca3d364dfb0100000001000202aba1b7d9fc5de9dd93308dc5ebedcb066c8e5b36970bfd82ae715d9e8c3060010000000100000001000202aba1b7d9fc5de9dd93308dc5ebedcb066c8e5b36970bfd82ae715d9e8c306001000000"
}
]
},
"signatures": ["SIG_K1_KY58QhP4jWLJWr7cVkahgL3JAjC8QMK5jnHurFUmn8xU71v6Mh4DmgjY75DxmWE6Je457N6MRM7GapxU43hywnAWKEmC1W"]
}
(代币转账 和 新建账号的 sign_transaction、push_transaction 类似,主要就是 智能合约的不同 和 调用的action 的不同 以及 action 中具体的参数不同。)
新建账号(newaccount)需要用 「已有的账号」 创建「 新账号」
内部是 已有账号 调用系统智能合约eosio中的 newaccount 的 action
新建账号的交易需要用 创建者 的 私钥签名交易(sign_transaction),然后 推送签名后的交易 (push_transaction)到区块链中。
a. sign_transaction 图示
b. push_transaction 图示
具体接口
1、POST http://127.0.0.1:8888/v1/chain/abi_json_to_bin (序列化新建账号的 json)
请求参数:
参数名称 | 参数类型 | 描述 |
---|---|---|
code | string | 系统智能合约,默认填写“eosio” |
action | string | 智能合约中的action,默认填写“newaccount” |
creator | string | 创建者 |
name | string | 新建账号名 |
key | string | 新建账号的公钥 |
请求示例:
{
"code": "eosio",
"action": "newaccount",
"args": {
"creator": "bitcoin",
"name": "eason",
"owner": {
"threshold": 1,
"keys": [
{
"key": "EOS4ufZoTw95yHJS6Cyz3h4w5a2W4cyYpMYRnd7gbFZuCfPxUFS6r", //owner public key
"weight": 1
}
],
"accounts": [],
"waits": []
},
"active": {
"threshold": 1,
"keys": [
{
"key": "EOS4ufZoTw95yHJS6Cyz3h4w5a2W4cyYpMYRnd7gbFZuCfPxUFS6r", //active public key
"weight"