参考文档
https://www.jianshu.com/p/fe72e564c559
https://github.com/bitshares/bitshares-core/wiki/private-testnet
环境准备
我在这里使用的是 Ubuntu 18.04 LTS
内存 16G
设置防火墙
iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
综合流程
1.构建依赖关系:
sudo apt-get update
sudo apt-get install autoconf cmake make automake libtool git libboost-all-dev libssl-dev g++ libcurl4-openssl-dev
2.构建脚本 生成Makefile,编译,安装:
git clone https://github.com/bitshares/bitshares-core.git
cd bitshares-core
git checkout master # may substitute "master" with current release tag
git submodule update --init --recursive
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .
make
sudo make install
3.检查是否编译安装成功:
cd .. && which witness_node cli_wallet
4.创建测试目录,并切换到该目录:
mkdir -p testnet_home && cd testnet_home/
5.创建和编辑genesis文件:
witness_node --create-genesis-json=my-genesis.json
解释:
石墨烯(graphene)代码中默认的geneis块包含唯一一个账户,geneis块中所有的初始证人,初始委员会成员和初始证人候选人都是该账户,该账户的名称是:nathan,私钥为:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3。
genesis文件是用来定义区块链网络初始状态,可以诸如以下的状态:
存在于genesis区块的账户,包括账户的名字和公钥
资产及其初始分配状况(包括核心资产)
区块链参数的初始值
初始证人的帐户/签名密钥(或者其他任何帐户,注:默认的 witness 是 init0~inti10)。
在本人的设置中,为了加快活跃证人的更新时间,修改如下:
vim my-genesis.json
"maintenance_interval": 600,
保存并退出。
6.运行如下命令来初始化证人节点:
witness_node --data-dir data/ --genesis-json my-genesis.json --seed-nodes "[]"
当类似以下信息出现时,意味着初始化过程完成,按ctrl+c关闭见证节点:
1620535ms th_a main.cpp:266 main] Started BitShares node on a chain with 0 blocks.
1620535ms th_a main.cpp:267 main] Chain ID is 20e5aa92b1e3b7f971796a3f3fba59ea0a34b1eeb6fb5e585b2e4c9e441015f4
此时,完成了两件事:
创建了区块链data目录和在其之下的config.ini文件。
获得了区块链ID。将Chain ID另外保存起来,后面会用到。
7.配置证人节点
打开data/config.ini文件:
vim data/config.ini
在合适的位置进行以下设置,注意将重复的设置注释掉:
p2p-endpoint = 0.0.0.0:11010
rpc-endpoint = 0.0.0.0:11011
genesis-json = my-genesis.json
private-key = ["GPH6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV","5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"]
#seed-nodes = []
#enable-stale-production = true
# ID of witness controlled by this node (e.g. "1.6.5", quotes are required, may specify multiple times)
witness-id = "1.6.1"
witness-id = "1.6.2"
witness-id = "1.6.3"
witness-id = "1.6.4"
witness-id = "1.6.5"
witness-id = "1.6.6"
witness-id = "1.6.7"
witness-id = "1.6.8"
witness-id = "1.6.9"
witness-id = "1.6.10"
witness-id = "1.6.11"
解释一下上面的设置:
p2p-endpoint,指定开启的p2p监听端口,以方便其他节点连接,可以作为其他节点的seed-node。
rpc-endpoint,指定开启的rpc监听端口,以方便cli-wallet和web钱包与证人节点连接。
genesis-json,设置genesis.json的路径,通常只在创建新链生产创世区块时设置。
enable-stale-production,让本节点无视区块链数据的时间,无论如何都生成区块数据。该字段通常只在创建新链生产创世区块时设为true。当已存在区块链时,一定要将本参数设为false或者不管,否则会因数据不完整导致分叉。
seed-nodes,设置种子节点集合,以方便快速连接到区块链网络和同步区块链数据。在创建新链生产创世区块时设为空,以防止连接到正式网络(代码)中的默认种子节点。当连接已有区块链网络时,尽可能多的设置种子节点以加快同步速度。
witness-id,用于授权本证人节点所代表的证人id产生区块,可指定多个。一般来说一个证人节点授权一个证人id,私链第一个节点指定了11个。
8.生产私有测试链的第一个区块。 运行如下命令:
witness_node --data-dir data --enable-stale-production --seed-nodes "[]"
请注意,我们不需要my-genesis.json在命令行中指定,因为我们现在在配置文件中指定它。该--enable-stale-production 标志告诉在witness_node零块或非常旧块的链上生成。我们--enable-stale-production在命令行中指定参数,因为我们通常不需要它(尽管它也可以在配置文件中指定)。--seed-nodes添加空以避免连接到硬编码以进行生产的默认种子节点。
通过p2p网络连接到现有见证节点或从现有数据目录获得区块链状态的后续运行不需要具有该--enable-stale-production标志。
9.获取链ID
新建命令行运行如下命令:
curl --data '{"jsonrpc": "2.0", "method": "get_chain_properties", "params": [], "id": 1}' http://127.0.0.1:11011/rpc && echo
此curl命令将返回一个简短的JSON对象,包括chain_id。
下面的命令会用到chain_id
10.创建钱包:
mkdir -p wallet && cd wallet
cli_wallet --wallet-file my-wallet.json --chain-id cf307110d029cb882d126bf0488dc4864772f68d9888d86b458d16e6c36aa74b --server-rpc-endpoint ws://127.0.0.1:11011 -u '' -p ''
下面对指令参数进行解释:
--wallet-file:指定钱包json文件,该文件用于保存本钱包中所有加密后的私钥;
--server-rpc-endpoint:rpc服务器终端地址,指定钱包要连接的区块链全节点所需要的协议、地址和端口;
--rpc-endpoint:指定命令行钱包要监听的websocket RPC的ip地址和端口号;
--rpc-http-endpoint:指定命令行钱包要监听的HTTP RPC的ip地址和端口号;
--chain-id:指定要连接的区块链ID。不指定的话,钱包连接到bitshares的正式链上。
10.1 接下来设置密码:
set_password supersecret
unlock supersecret
11.导入账号和资金:
要将帐户导入钱包,必须知道账户名称和私钥才行。使用import_key命令将代码中默认的账户nathan导入钱包(其私钥为5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
import_key nathan 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
现在已经将私钥导入到钱包中,但初始账户仍然没有资金(后面升级账户需要资金)。 资金在genesies.json文件中的initial_balances字段已经设置好了。 使用import_balance命令可以将这些资金免费(相对于转账需要付手续费来说的)导入钱包:
import_balance nathan ["5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"] true
12.创建帐户:
12.1创建帐户需要终身成员(LTM)状态。要升级到LTM,请使用以下upgrade_account命令:
upgrade_account nathan true
12.2确认nathan现在处于LTM状态:
get_account nathan
在打印的账户属性中,membership_expiration_date的属性值应该是1969-12-31T23:59:59 。 如果仍然是1970-01-01T00:00:00,那么账户就没有成功升级。
12.3现在用原账户作为注册商注册一个新帐户了。 首先需要新帐户的公钥。可以通过suggest_brain_key命令来获得:
suggest_brain_key
显示的信息大致如下:
{
"brain_priv_key": "FACADAL POOF FOXER MOUSE BANDOG CUBEB BRIERED NE JUTKA QUILLED TORIC GRYLLOS FLEAM LEEWILL PLENIST HUSBAND",
"wif_priv_key": "5JtnWHxYMUD13sBPNMzprH1Z6r1nH3EWV1WeQXpAbsMLgxVt7tp",
"pub_key": "BTS5s2iBiMeaCt96hoiAhQz94AqiPChTNF2YpYt6zJNNFJonhXPTF"
}
12.4
其中brain_priv_key是私钥助记符,wif_priv_key是钱包导入格式的私钥,pub_key。一定要记下以上重要的信息找个黑客攻击不到的地方保存起来,非常关键。
现在可以注册一个新帐户。可以只使用前面推荐的公钥来注册一个名为alpha的新帐户:
register_account alpha BTS5s2iBiMeaCt96hoiAhQz94AqiPChTNF2YpYt6zJNNFJonhXPTF BTS5s2iBiMeaCt96hoiAhQz94AqiPChTNF2YpYt6zJNNFJonhXPTF nathan nathan 0 true
12.5
转移资金给新账户
transfer nathan alpha 100000 BTS "here is some cash" true
可以验证alpha是否收到了钱,运行一下命令查看账户余额:
list_account_balances alpha
pc端钱包使用介绍
https://www.jianshu.com/p/ab49971cf3f2