使用RPC介面新建EOS賬戶 - 實戰
前言
最近在研究 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": 1
}
],
"accounts": [],
"waits": []
}
}
}
響應引數
引數名稱 | 引數型別 | 描述 |
---|---|---|
binargs | string | 序列化的結果,在sign_transaction 和 push_transaction 中作為 data 請求引數 |
響應示例
{
"binargs": "000000603a8ab23b000000ca3d364dfb0100000001000202aba1b7d9fc5de9dd93308dc5ebedcb066c8e5b36970bfd82ae715d9e8c3060010000000100000001000202aba1b7d9fc5de9dd93308dc5ebedcb066c8e5b36970bfd82ae715d9e8c306001000000"
}
2、GET http://127.0.0.1:8888/v1/chain/get_info (獲取 EOS 區塊鏈的最新區塊號)
響應引數
引數名稱 | 引數型別 | 描述 |
---|---|---|
head_block_num | number | 最新區塊號 |
響應示例
{
"server_version": "13952d45",
"head_block_num": 359934,
"last_irreversible_block_num": 359934,
"last_irreversible_block_id": "a69af2c4aa56b5c4bd1cdf9c2acb1a7796bbc3043954e36da182a144ddcf58fb",
"head_block_id": "a69af2c4aa56b5c4bd1cdf9c2acb1a7796bbc3043954e36da182a144ddcf58fb",
"head_block_time": "2018-05-17T09:02:12",
"head_block_producer": "eosio",
"virtual_block_cpu_limit": 100000000,
"virtual_block_net_limit": 1048576000,
"block_cpu_limit": 99900,
"block_net_limit": 1048576
}
3、POST http://127.0.0.1:8888/v1/chain/get_block (獲取最新區塊的具體資訊)
請求引數
引數名稱 | 引數型別 | 描述 |
---|---|---|
block_num_or_id | number | 最新區塊號,上一個響應結果中的 head_block_num |
{
"block_num_or_id":359934
}
響應引數
引數名稱 | 引數型別 | 描述 |
---|---|---|
timestamp | string | 最新區塊的生成時間 |
block_num | number | 區塊號,作為sign_transaction 和 push_transaction中的 ref_block_num請求引數 |
ref_block_prefix | number | 作為sign_transaction 和 push_transaction中的 ref_block_prefix 請求引數 |
響應示例
{
"timestamp": "2018-05-17T09:02:12.500",
"producer": "eosio",
"confirmed": 0,
"previous": "00057dfd5044aba0d750eff1fbb84ac92cbf29db1354968816fd2a9aefb0a0b4",
"transaction_mroot": "0000000000000000000000000000000000000000000000000000000000000000",
"action_mroot": "dee87e5d025383574ac12c310faf6b759fba52bd19977399b7ebf6ccdd81c7fa",
"schedule_version": 0,
"header_extensions": [],
"producer_signature": "SIG_K1_KVX3RRTS4ch9m6bWDctsAhDWtFydTrg3mW7PaqCXnBZZWezBW23enggeW4ijuWBHBVsDoxzjMvspoFtPsU5nmau4ZYomZo",
"transactions": [],
"block_extensions": [],
"id": "a69af2c4aa56b5c4bd1cdf9c2acb1a7796bbc3043954e36da182a144ddcf58fb",
"block_num": 359934,
"ref_block_prefix": 1943477914
}
4、POST http://127.0.0.1:8888/v1/wallet/unlock (解鎖錢包,簽名交易前,需要解鎖賬號所在的錢包)
請求引數
引數名稱 | 引數型別 | 描述 |
---|---|---|
string | 錢包名稱 | |
string | 錢包密碼 |
請求示例
["liu","PW5KjWHnhL5kSRxpWyHQj321dFsZN62HAbZjVSqnDvzKMuEKBZ1T9"]
- 1
響應示例
{} //成功解鎖錢包,返回{}
- 1
5、POST http://127.0.0.1:8888/v1/wallet/sign_transaction(簽名新建賬號的交易)
請求的引數
引數名稱 | 引數型別 | 描述 |
---|---|---|
ref_block_num | number | 上面獲得的最新區塊號 |
ref_block_prefix | number | 上面獲得的最新區塊號相關資訊 |
expiration | string | 過期時間 = timestamp 加上 一段時間 ,例如1分鐘 |
account | string | 呼叫系統智慧合約賬號名,預設為 eosio |
name | string | 新建賬號的action,預設為 newaccount |
actor | string | 建立者 賬戶名 |
data | string | abi_json_to_bin 序列化後的 值 binargs |
string | 建立者的 公鑰 |
請求示例
[
{
"ref_block_num": 363759,
"ref_block_prefix": 4033496171,
"expiration": "2018-05-17T09:54:06.500",
"actions": [
{
"account": "eosio", //有 newaccount 的 action 的智慧合約賬號
"name": "newaccount",
"authorization": [
{
"actor": "bitcoin",
"permission": "active"
}
],
"data": "000000603a8ab23b000000ca3d364dfb0100000001000202aba1b7d9fc5de9dd93308dc5ebedcb066c8e5b36970bfd82ae715d9e8c3060010000000100000001000202aba1b7d9fc5de9dd93308dc5ebedcb066c8e5b36970bfd82ae715d9e8c306001000000" // //abi_json_to_bin 的響應引數 binargs
}
],
"signatures": []
},
[
"EOS5wQ4HaFFDxyfc23dZNXUTGBHepM1vXGfr1vkfWHfRfvAMXP7VV" //建立者的公鑰(交易發起者的公鑰),其實是用的公鑰對應的私鑰進行簽名的,簽名前需要先解鎖包含此私鑰的錢包
],
""
]
響應引數
引數名稱 | 引數型別 | 描述 |
---|---|---|
signatures | string | 新建賬號的交易 的簽名結果,最後 push_transaction 中使用 |
響應示例
{
"expiration": "2018-05-17T09:54:06",
"ref_block_num": 36079,
"ref_block_prefix": 4033496171,
"max_net_usage_words": 0,
"max_cpu_usage_ms": 0,
"delay_sec": 0,
"context_free_actions": [],
"actions": [
{
"account": "eosio",
"name": "newaccount",
"authorization": [
{
"actor": "bitcoin",
"permission": "active"
}
],
"data": "000000603a8ab23b000000ca3d364dfb0100000001000202aba1b7d9fc5de9dd93308dc5ebedcb066c8e5b36970bfd82ae715d9e8c3060010000000100000001000202aba1b7d9fc5de9dd93308dc5ebedcb066c8e5b36970bfd82ae715d9e8c306001000000"
}
],
"transaction_extensions": [],
"signatures": [
"SIG_K1_KY58QhP4jWLJWr7cVkahgL3JAjC8QMK5jnHurFUmn8xU71v6Mh4DmgjY75DxmWE6Je457N6MRM7GapxU43hywnAWKEmC1W" // 簽名 用在 push_transaction 中
],
"context_free_data": []
}
6、http://127.0.0.1:8888/v1/chain/push_transaction (把簽名後的交易push 推送到 EOS 系統中,即新建賬號完成)
請求引數
引數名稱 | 引數型別 | 描述 |
---|---|---|
compression | string | 預設 none |
data | string | abi_json_to_bin 序列化後的 值 binargs |
signatures | string | 交易簽名後的結果 |
請求示例
{
"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" //abi_json_to_bin 的響應引數 binargs
}
]
},
"signatures": ["SIG_K1_KY58QhP4jWLJWr7cVkahgL3JAjC8QMK5jnHurFUmn8xU71v6Mh4DmgjY75DxmWE6Je457N6MRM7GapxU43hywnAWKEmC1W"]
}
響應示例
{
"transaction_id": "2047702bfdc4678aabe123f335b4b5f604203edf7b4de8e42fa2c9211d4de075",
"processed": {
"id": "2047702bfdc4678aabe123f335b4b5f604203edf7b4de8e42fa2c9211d4de075",
"receipt": {
"status": "executed",
"cpu_usage_us": 390,
"net_usage_words": 25
},
"elapsed": 390,
"net_usage": 200,
"scheduled": false,
"action_traces": [
{
"receipt": {
"receiver": "eosio",
"act_digest": "ae18e275184e7defe81be175711cd24206990518963f857715e98755f713957c",
"global_sequence": 365444,
"recv_sequence": 365419,
"auth_sequence": [
[
"bitcoin",
27
]
]
},
"act": {
"account": "eosio",
"name": "newaccount",
"authorization": [
{
"actor": "bitcoin",
"permission": "active"
}
],
"data": {
"creator": "bitcoin",
"name": "zhangjie",
"owner": {
"threshold": 1,
"keys": [
{
"key": "EOS4ufZoTw95yHJS6Cyz3h4w5a2W4cyYpMYRnd7gbFZuCfPxUFS6r",
"weight": 1
}
],
"accounts": [],
"waits": []
},
"active": {
"threshold": 1,
"keys": [
{
"key": "EOS4ufZoTw95yHJS6Cyz3h4w5a2W4cyYpMYRnd7gbFZuCfPxUFS6r",
"weight": 1
}
],
"accounts": [],
"waits": []
}
},
"hex_data": "000000603a8ab23b000000ca3d364dfb0100000001000202aba1b7d9fc5de9dd93308dc5ebedcb066c8e5b36970bfd82ae715d9e8c3060010000000100000001000202aba1b7d9fc5de9dd93308dc5ebedcb066c8e5b36970bfd82ae715d9e8c306001000000"
},
"elapsed": 163,
"cpu_usage": 0,
"console": "",
"total_cpu_usage": 0,
"trx_id": "2047702bfdc4678aabe123f335b4b5f604203edf7b4de8e42fa2c9211d4de075",
"inline_traces": []
}
],
"except": null
}
}
來源:https://blog.csdn.net/yuanfangyuan_block/article/details/80421881
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。