比特股私有链环境搭建
官方推荐使用ubuntu16.04版本,参考官方wiki:https://github.com/bitshares/bitshares-core/wiki/BUILD_UBUNTU
1.安装编译依赖的相关库
sudo apt-get update
sudo apt-get install autoconf cmake git libboost-all-dev libssl-dev g++ libcurl4-openssl-dev
2.下载bitshares源代码编译
源代码下与编译见如下代码所示
git clone https://github.com/bitshares/bitshares-core.git
cd bitshares-core
git checkout
git submodule update --init --recursive
cmake -DBOOST_ROOT="$BOOST_ROOT" -DCMAKE_BUILD_TYPE=Release .
make -j4
编译完成后,会生成见证节点程序(programs/witness_node/witness_node) 和钱包程序(programs/cli_wallet/cli_wallet)
为方面使用可以通过创建对应应用程序的链接:
ln -s programs/witness_node/witness_node /usr/local/bin/witness_node
ln -s programs/cli_wallet/cli_wallet /usr/local/bin/cli_wallet
当然也可以编译见证节点和钱包节点:
make witness_node cli_wallet
注:Bitshare依赖openSSL 1.0.x,如果版本在这个之上调整到对应的版本
3.部署单机私有网络
创世文件定义了网络的初始状态
默认创世文件
石墨烯代码库有一个默认的创世区块,包含所有证人,委员会成员和基金以及一个名为nathan的帐户,它从下面私钥获得:
5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
定制创世文件
运行以下命令创建一个创世文件:
$ mkdir Test
$ cd Test
$ witness_node --create-genesis-json my-genesis.json
在Test目录里会生成my-genesis.json文件和witness_node_data_dir目录,可以同修改my-genesis.json配置来定制网络初始状态 主要可以定制以下内容:
- 创世账户、名字以及公钥
- 资产和初始分配(包括核心资产)
- 区块链的初始参数(包括费用)
- 初始见证人的账户密钥(可以是任何账户)
起动见证人节点
witness_node --data-dir data --genesis-json my-genesis.json
会出现一段Message,可以在Message的最下方看到ChainID,如下所示:
2900598ms th_a main.cpp:246 main ] Started BitShares node on a chain with 0 blocks.
2900598ms th_a main.cpp:247 main ] Chain ID is e6e736cc89c25e5a9f31550e14d7cff3d5900ca9296d6f3ed4546be2
可以看到ChainId:
e6e736cc89c25e5a9f31550e14d7cff3d5900ca9296d6f3ed4546be2
同时会生成一个Data目录,在Data会生成一个config.ini,可以通过修改Config.ini来修改见证节点的配置信息。 有一下两种方式来启动见证人节点:
命令行参数的方式
witness_node --rpc-endpoint "127.0.0.1:8090" --enable-stale-production --data-dir data --seed-nodes "[]" --genesis-json "my-genesis.json"
修改config.init配置文件的方式
打开data/conig.init文件修改对应的参数:
rpc-endpoint = 127.0.0.1:11011
genesis-json = my-genesis.json
enable-stale-production = true
增家如下节点,不知道测试环境增加多个为啥会出问题:
witness-id = "1.6.1"
上面的列表授权见证人节点代表列出的证人id产生块。 通常每个见证人都在不同的节点上,但为了这个私人测试网的目的,我们将从所有在单个节点上签名块的目击者开始。 在config.ini文件中已经提供了所有这些证人ID(需要签名块)的私钥:
修改成功后,运行如下命令:
witness_node --data-dir data
运行成功的话会出现如下信息:
2718639ms th_a application.cpp:206 reset_p2p_node ] Configured p2p node to listen on 0.0.0.0:45531
2718642ms th_a application.cpp:281 reset_websocket_serv ] Configured websocket rpc to listen on 127.0.0.1:11011
2718643ms th_a witness.cpp:122 plugin_startup ] witness plugin: plugin_startup() begin
2718643ms th_a witness.cpp:127 plugin_startup ] Launching block production for 1 witnesses.
2718643ms th_a witness.cpp:138 plugin_startup ] witness plugin: plugin_startup() end
2718643ms th_a main.cpp:246 main ] Started BitShares node on a chain with 25 blocks.
2718643ms th_a main.cpp:247 main ] Chain ID is 7be1c10cbe48776d5c52ac2b2da8e259533fd9acff44e943d9efe69115c4bfa5
4.命令行钱包的使用
再开一个命令行窗口,运行如下命令,chain-id需要换成对应生成的chainid
cli_wallet --wallet-file=my-wallet.json --chain-id 7be1c10cbe48776d5c52ac2b2da8e259533fd9acff44e943d9efe69115c4bfa5 --server-rpc-endpoint=ws://127.0.0.1:11011
创建钱包密码
new >>> set_password 1111
set_password 1111
null
locked >>>
解锁新创建的钱包
locked >>> unlock 1111
unlock 1111
null
unlocked >>>
在石墨烯中,余额包含在账户中。 要将一个账户导入钱包,只需要知道其名称和私钥。 现在我们将使用import_key命令将一个名为nathan的帐户导入到钱包中:
unlocked >>> import_key nathan 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
import_key nathan 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
3343864ms th_a wallet.cpp:788 save_wallet_file ] saving wallet to file my-wallet.json
3343865ms th_a wallet.cpp:464 copy_wallet_file ] backing up wallet my-wallet.json to after-import-key-9407629b.wallet
true
请注意,nathan恰好是在起源文件中定义的帐户名称。 如果您在创建my-genesies.json文件之后编辑了自己的文件,则可以在其中添加一个不同的名称。 另请注意,5KQwrPbwdL ... P79zkvFD3是在config.ini文件中定义的私钥。
现在我们将私钥导入到钱包中,但是仍然没有与之相关的资金。 资金存储在创世blance对象中。 这些资金可以使用import_balance命令免费索取:
unlocked >>> import_balance nathan ["5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"] true
import_balance nathan ["5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"] true
3518604ms th_a wallet.cpp:3717 import_balance ] balances: [{"id":"1.15.0","owner":"BTSFAbAx7yuxt725qSZvfwWqkdCwp9ZnUama","balance":{"amount":"1000000000000000","asset_id":"1.3.0"},"last_claim_date":"1970-01-01T00:00:00"}]
[{
"ref_block_num": 40,
"ref_block_prefix": 2829793676,
"expiration": "2017-12-27T02:58:50",
"operations": [[
37,{
"fee": {
"amount": 0,
"asset_id": "1.3.0"
},
"deposit_to_account": "1.2.17",
"balance_to_claim": "1.15.0",
"balance_owner_key": "BTS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"total_claimed": {
"amount": "1000000000000000",
"asset_id": "1.3.0"
}
}
]
],
"extensions": [],
"signatures": [
"20203418aba7124965965018f43442e238d9752e182ab5f9233db671a21738f34f42578d85de8ed1e49beeb1dc53a728e81148ab76252341b39b423a58d973ce57"
]
}
]
查看账户信息
unlocked >>> get_account nathan
get_account nathan
{
"id": "1.2.17",
"membership_expiration_date": "1970-01-01T00:00:00",
"registrar": "1.2.4",
"referrer": "1.2.0",
"lifetime_referrer": "1.2.0",
"network_fee_percentage": 2000,
"lifetime_referrer_fee_percentage": 3000,
"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
}
查看账户余额
unlocked >>> list_account_balances nathan
list_account_balances nathan
10000000000 BTS
创建一个新账户
现在我们将创建另一个帐户(名为alpha),以便我们可以在nathan和alpha之间来回转移资金。 创建一个新账户总是通过使用一个现有账户来完成 - 我们需要这个账户,因为有人(即注册商)必须为注册费用提供资金。 此外,注册服务商账户还要求具有终身成员(LTM)身份。 因此,我们需要将帐户nathan升级为LTM,然后才能继续创建其他帐户。 要升级到LTM,请使用upgrade_account命令:
unlocked >>> upgrade_account nathan true
upgrade_account nathan true
{
"ref_block_num": 47,
"ref_block_prefix": 821762446,
"expiration": "2017-12-27T03:05:05",
"operations": [[
8,{
"fee": {
"amount": 1000000000,
"asset_id": "1.3.0"
},
"account_to_upgrade": "1.2.17",
"upgrade_to_lifetime_member": true,
"extensions": []
}
]
],
"extensions": [],
"signatures": [
"1f7f7974b17319ed1e9bf92ea6392261c8d5f1b40650828b762e55a6d5c8a76f8b1991c06ba9e33918510347c926c238bef2cad2751095d9e0b9adf1d6c4e1f4f0"
]
}
由于已知的缓存问题,您需要在这个阶段重新启动CLI,否则它将不知道nathan已经升级了。按Ctrl-C停止命令启动它再次使用相同的命令之前,即:
cli_wallet --wallet-file=my-wallet.json --chain-id 7be1c10cbe48776d5c52ac2b2da8e259533fd9acff44e943d9efe69115c4bfa5 --server-rpc-endpoint=ws://127.0.0.1:11011
运行如下命令,看是否升级成功:
get_account nathan
可以看到"membership_expiration_date"已经从"1970-01-01T00:00:00" 变成了 "1969-12-31T23:59:59",意味着升级成功了 现在可以使用nathan作为注册商注册一个帐户。 但首先我们需要掌握新账户的公钥。 通过使用suggest_brain_key命令来完成它:
locked >>> suggest_brain_key
suggest_brain_key
{
"brain_priv_key": "BECURSE VALGOID DEFROCK GODKIN SWITHER WORTH SUIFORM DAKER IPSEAND UPPERER PSALM UNCAST DOTTILY BEFRIZ SCUT BRONC",
"wif_priv_key": "5KZmzKmP8869Tw26nBTtYzGM4vW55mH9R9ZTeK9wPiTeX495rbn",
"pub_key": "BTS7KuKh66CdWb1pTRg414ocVXGDQLnrRtJDd4srevt6MRmQPd8Gg"
}
通过create_account_with_brain_key命令注册帐户,并自动导入相应的私钥。
unlocked >>> create_account_with_brain_key "BECURSE VALGOID DEFROCK GODKIN SWITHER WORTH SUIFORM DAKER IPSEAND UPPERER PSALM UNCAST DOTTILY BEFRIZ SCUT BRONC" alpha nathan nathan true
转账
执行如下命令:
transfer nathan alpha 2000000000 BTS "here is some cash" true
查看alpha账户余额:
unlocked >>> list_account_balances alpha
list_account_balances alpha
2000000000 BTS
转账成功
作者:LeonRun
链接:https://www.jianshu.com/p/024ee9fcf8fc
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。