命令行钱包路径/bitshares-core/programs/cli_wallet
在上一篇 <<BitShares2.0 —— 第一章 创世篇(三):创世纪 运行见证节>> 中 , 运行了见证节点 , 我们要用钱包连接到这个节点上 .
命令
cli_wallet --wallet-file=my-wallet.json --server-rpc-endpoint=ws://127.0.0.1:38090 --rpc-endpoint=0.0.0.0:38099 --rpc-http-endpoint=0.0.0.0:38092 --chain-id=20e5aa92b1e3b7f971796a3f3fba59ea0a34b1eeb6fb5e585b2e4c9e441015f4
下面对指令参数进行解释:
--wallet-file
:指定钱包json文件,该文件用于保存本钱包中所有加密后的私钥;--server-rpc-endpoint
:rpc服务器终端地址,指定钱包要连接的区块链全节点所需要的协议、地址和端口;--rpc-endpoint
:指定命令行钱包要监听的websocket RPC的ip地址和端口号;--rpc-http-endpoint
:指定命令行钱包要监听的HTTP RPC的ip地址和端口号;--chain-id
:指定要连接的区块链ID。不指定的话,钱包连接到bitshares的正式链上。chain-id
参数需要与见证节点运行时候的Chain ID
一至 , 这样才会连接到你自己的节点上运行结果如下:
3158674ms th_a main.cpp:143 main ] key_to_wif( committee_private_key ): 5KCBDTcyDqzsqehcb52tW5nU6pXife6V2rX9Yf7c3saYSzbDZ5W
3158674ms th_a main.cpp:147 main ] nathan_pub_key: BTS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
3158674ms th_a main.cpp:148 main ] key_to_wif( nathan_private_key ): 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3Starting a new wallet with chain ID 4ed977c9239731ebfb51f3291cfa5ea2bb0094845acba21357c8a3e140fc7b88 (from CLI)
3158675ms th_a main.cpp:195 main ] wdata.ws_server: ws://127.0.0.1:38090
3158677ms th_a main.cpp:200 main ] wdata.ws_user: wdata.ws_password:Please use the set_password method to initialize a new wallet before continuing
3158700ms th_a main.cpp:238 main ] Listening for incoming RPC requests on 0.0.0.0:38099
3158701ms th_a main.cpp:263 main ] Listening for incoming HTTP RPC requests on 0.0.0.0:38092
new >>>
使用如下命令 给 钱包 创建密码 set_password 你的密码
此时 , 命令行变为 : locked >>>
该密码用于加密钱包中所有的私钥,
解锁 新创建的 钱包:unlock 你的密码
, 命令行变为 : unlocked >>>
要将帐户导入钱包,必须知道账户名称和私钥才行。使用import_key
命令将代码中默认的账户nathan
导入钱包(其私钥为5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
):
import_key nathan 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
输出结果:
unlocked >>> import_key nathan 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
import_key nathan 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
2917900ms th_a wallet.cpp:799 save_wallet_file ] saving wallet to file allet-file=my-wallet.json
2917902ms th_a wallet.cpp:476 copy_wallet_file ] backing up wallet allet-file=my-wallet.json to after-import-key-9407629b.wallet
true
注:帐户名称是前面在genesies.json
文件中设置的, 私钥也是前面在config.ini
文件中设置的。
现在已经将私钥导入到钱包中,但初始账户仍然没有资金(后面升级账户需要资金)。 资金在genesies.json
文件中的initial_balances
字段已经设置好了。 使用import_balance
命令可以将这些资金免费(相对于转账需要付手续费来说的)导入钱包:
import_balance nathan ["5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"] true
只能使用现有的账户去创建新账户,且该账户(称为注册商: registrar
)必须支付注册费用。 此外,要求注册商账户必须是终身会员(LTM: lifetime member
)。使用upgrade_account
命令将nathan
升级到LTM
:
upgrade_account nathan true
输出结果:
unlocked >>> upgrade_account nathan true
upgrade_account nathan true
{
"ref_block_num": 1738,
"ref_block_prefix": 2410829715,
"expiration": "2018-10-22T11:54:55",
"operations": [[
8,{
"fee": {
"amount": 1000000000,
"asset_id": "1.3.0"
},
"account_to_upgrade": "1.2.17",
"upgrade_to_lifetime_member": true,
"extensions": []
}
]
],
"extensions": [],
"signatures": [
"1f0c3bd37a6de3947c59a56f155606626ac4eed3f912fd2593615f1dfb2e4d399605b41886a2f931eb0462810ba3d6feb212ce09d112c1d11d95898d035df9285c"
]
}
注:由于缓存问题 ,需要重启cli_wallet
钱包,否则升级nathan
没有更新。 按下ctrl+c
停止CLI
钱包,运行与以下命令重新运行钱包并解锁:
cli_wallet --wallet-file=my-wallet.json --server-rpc-endpoint=ws://127.0.0.1:38090 --rpc-endpoint=0.0.0.0:38099 --rpc-http-endpoint=0.0.0.0:38092 --chain-id=20e5aa92b1e3b7f971796a3f3fba59ea0a34b1eeb6fb5e585b2e4c9e441015f4
➜ wallet ./cli_wallet -wallet-file=my-wallet.json --server-rpc-endpoint=ws://127.0.0.1:38090 --rpc-endpoint=0.0.0.0:38099 --rpc-http-endpoint=0.0.0.0:38092 --chain-id=4ed977c9239731ebfb51f3291cfa5ea2bb0094845acba21357c8a3e140fc7b88
Logging RPC to file: logs/rpc/rpc.log
3311567ms th_a main.cpp:143 main ] key_to_wif( committee_private_key ): 5KCBDTcyDqzsqehcb52tW5nU6pXife6V2rX9Yf7c3saYSzbDZ5W
3311567ms th_a main.cpp:147 main ] nathan_pub_key: BTS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
3311567ms th_a main.cpp:148 main ] key_to_wif( nathan_private_key ): 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
3311568ms th_a main.cpp:195 main ] wdata.ws_server: ws://127.0.0.1:38090
3311571ms th_a main.cpp:200 main ] wdata.ws_user: wdata.ws_password:
3311583ms th_a wallet.cpp:768 load_wallet_file ] Account 1.2.17 : "nathan" updated on chain
3311590ms th_a main.cpp:238 main ] Listening for incoming RPC requests on 0.0.0.0:38099
3311590ms th_a main.cpp:263 main ] Listening for incoming HTTP RPC requests on 0.0.0.0:38092
unlock 你的密码
get_account nathan
unlocked >>> get_account nathan
get_account nathan
{
"id": "1.2.17",
"membership_expiration_date": "1969-12-31T23:59:59",
"registrar": "1.2.17",
"referrer": "1.2.17",
"lifetime_referrer": "1.2.17",
"network_fee_percentage": 2000,
"lifetime_referrer_fee_percentage": 8000,
"referrer_rewards_percentage": 0,
"name": "nathan",
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [[
"BTS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
1
]
],
"address_auths": []
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [[
"BTS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
1
]
],
"address_auths": []
},
"options": {
"memo_key": "BTS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"voting_account": "1.2.5",
"num_witness": 0,
"num_committee": 0,
"votes": [],
"extensions": []
},
"statistics": "2.6.17",
"whitelisting_accounts": [],
"blacklisting_accounts": [],
"whitelisted_accounts": [],
"blacklisted_accounts": [],
"owner_special_authority": [
0,{}
],
"active_special_authority": [
0,{}
],
"top_n_control_flags": 0
}
在打印的账户属性中,membership_expiration_date
的属性值应该是1969-12-31T23:59:59
。 如果仍然是1970-01-01T00:00:00
,那么账户就没有成功升级。现在用原账户作为注册商注册一个新帐户了。 首先需要新帐户的公钥。可以通过suggest_brain_key
命令来获得:
命令输入:
suggest_brain_key
输出结果如下:
{
"brain_priv_key": "DIALLEL GADGET WHATA DUSKY YITE WAUR STEPT ABRADE TRIDUUM SWANNY WARTIME TUGUI BATLON ONCIN ANNUARY PAPBOAT",
"wif_priv_key": "5Kd8CQj7okrxgMSdccZDTUS4bR8TLDiRCoJUpp87u4tFZi4gh4b",
"pub_key": "BTS74AWCY222BVvCTAStoYsjsqtmnQNct8bXSsztgh8NUKuFNgLs4"
}
其中,
brain_priv_key
是私钥助记符,
wif_priv_key
是钱包导入格式的私钥,
pub_key
是公钥地址。
一定要记下以上重要的信息找个黑客攻击不到的地方保存起来,非常关键。
现在可以使用register_account
命令 注册一个新帐户。
可以只使用前面推荐的公钥来注册一个名为alpha
的新帐户:
命令:
register_account alpha BTS74AWCY222BVvCTAStoYsjsqtmnQNct8bXSsztgh8NUKuFNgLs4 BTS74AWCY222BVvCTAStoYsjsqtmnQNct8bXSsztgh8NUKuFNgLs4 nathan nathan 0 true
输出结果:
unlocked >>> register_account alpha BTS74AWCY222BVvCTAStoYsjsqtmnQNct8bXSsztgh8NUKuFNgLs4 BTS74AWCY222BVvCTAStoYsjsqtmnQNct8bXSsztgh8NUKuFNgLs4 nathan nathan 0 true
register_account alpha BTS74AWCY222BVvCTAStoYsjsqtmnQNct8bXSsztgh8NUKuFNgLs4 BTS74AWCY222BVvCTAStoYsjsqtmnQNct8bXSsztgh8NUKuFNgLs4 nathan nathan 0 true
{
"ref_block_num": 2486,
"ref_block_prefix": 2455595820,
"expiration": "2018-10-22T12:58:45",
"operations": [[
5,{
"fee": {
"amount": 200014062,
"asset_id": "1.3.0"
},
"registrar": "1.2.17",
"referrer": "1.2.17",
"referrer_percent": 0,
"name": "alpha",
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [[
"BTS74AWCY222BVvCTAStoYsjsqtmnQNct8bXSsztgh8NUKuFNgLs4",
1
]
],
"address_auths": []
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [[
"BTS74AWCY222BVvCTAStoYsjsqtmnQNct8bXSsztgh8NUKuFNgLs4",
1
]
],
"address_auths": []
},
"options": {
"memo_key": "BTS74AWCY222BVvCTAStoYsjsqtmnQNct8bXSsztgh8NUKuFNgLs4",
"voting_account": "1.2.5",
"num_witness": 0,
"num_committee": 0,
"votes": [],
"extensions": []
},
"extensions": {}
}
]
],
"extensions": [],
"signatures": [
"204968215d10105fe47ba030340f9bd43a58de67154aad2d8e92ef8ddc3eee842f64d8660a275b9fa803887e75ea06333ff8978346efe6898f35a01ed7014c4ad0"
]
}
至此, 已经创建好了名为alpha
的帐户.