一 编译
编译环境推荐为ubuntu 16.04 64位版(如果是windows,可以在https://github.com/bitshares/bitshares-core/releases中,下载编译好的BitShares-Core-2.0.170710-x64-cli-tools.zip)
1 安装编译相关库
sudo apt-get update
sudo apt-get install autoconf cmake git libboost-all-dev libssl-dev
2下载 源码 (2017.9.19 最新版本为 2.0.170710)
git clone https://github.com/bitshares/bitshares-core
cd bitshares-core
git checkout 2.0.170710
git submodule update --init --recursive
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .
make -j4
###make -jN 多进程并行编译,后面跟一数字N代表开启进程数量(默认约定为cpu核心数)
###make witness_node cli_wallet 只编译见证节点和钱包节点
二 程序结构介绍
witness_node 通过 P2P 方式连接到 BTS 网络,从网络接收最新区块,向网络广播本地签署的交易包;
witness_node 通过 websocket + http rpc 的方式提供 API 供其他程序调用(以下称为节点 API)。
delayed_node 通过 websocket 方式连接到 witness_node ,只包含不可回退的区块;
delayed_node 通常情况下最新区块比 witness_node 落后一分钟,异常时可能会落后很多,但可保证不可回退。
delayed_node 通过 websocket + http rpc 的方式提供 API 供其他程序调用,API清单与 witness_node 相同,但无法使用交易广播功能。
cli_wallet 通过 websocket 方式连接到 witness_node 和 delayed_node 其中之一。
可以同时运行两个 cli_wallet 进程,分别连到 witness_node 和 delayed_node 。
cli_wallet 管理钱包文件,钱包文件里包含经过加密的用户私钥,一个钱包文件可以包含多个私钥。
cli_wallet 提供交易签名功能,签名后通过 witness_node 向外广播。
cli_wallet 通过 http rpc 的方式提供 API 供其他程序调用(以下称为钱包 API)。
推荐交易所使用一个连接到 delayed_node 的 cli_wallet 来监测用户充值,使用另一个连接到 witness_node 的 cli_wallet 来处理用户提现请求。
三 私有链单机部署步骤
1 生成创世纪块的json
./witness_node --create-genesis-json "genesis.json"
2 启动见证人节点
./witness_node --rpc-endpoint "127.0.0.1:8090" --enable-stale-production -d test_net --seed-nodes "[]" --genesis-json "genesis.json"
# --rpc-endpoint rpc监听端口
# --enable-stale-production 让本节点无视区块链数据的时间,无论如何都生成区块数据
# -w (--witness-id) 本节点控制的witness列表,(1.6.0-9)是默认的withness
# --seed-nodes 要连接的peer列表(测试环境务必传此参数,不传的话会走代码里hardcode的正式网的peer列表,会导致测试节点去跟正式网络同步数据)
(没有种子节点,一般用户等一年也不一定能连上网络。见证人对网络连接的要求更高,所以,必须与完整数据的种子节点相连,否则数据不完整的钱包会制造分叉。)
# --genesis-json 比特股网络启动的数据文件
3 启动钱包
./cli_wallet --chain-id="97f304dce6fe30cccbdef37cd7899d349297a78ba483375adc3982016ef40c63" -s ws://127.0.0.1:8090 -w wallet.json
# -s 或 --server-rpc-endpoint witness_node的地址和端口
# --chain-id 指的是服务的chain-id,可以不带此参数执行一次命令,程序的报错信息会显示这个id
4 使用命令行钱包,执行新建用户,转账,申请见证人等操作,只做简单使用介绍。
new>>>set_password my_password
#解锁钱包
locked>>>unlock my_password
#导入用户
unlocked >>> import_key"nathan"5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
#导入余额
unlocked >>>import_balance nathan [5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3] true
#查看账户信息
unlocked >>>list_my_accounts
#查看账户余额
locked >>> list_account_balances nathan
#升级会员 (PS:可能是因为命令行钱包的bug,升级账号后必须退出程序再次进入才能使升级的状态生效)。
locked >>>upgrade_account nathan true
5 后面可以整合安装bitshares-ui,浏览器版钱包,用于交易等操作。可看截图(https://bitshares.org/wallet/),源码(https://github.com/bitshares/bitshares-ui)。
四 遇到的问题,编译内存不足。分配交换空间
gcc 编译出现 internal compiler error: Killed
增加一个交换分区:
1. 创建分区文件, 大小 10G(读者可按需分配)
ddif=/dev/zero of=/swapfile bs=1kcount=10240000
2. 生成 swap 文件系统
mkswap/swapfile
3. 激活 swap 文件
swapon/swapfile
这样就木有问题了, 但是这样并不能在系统重启的时候自动挂载交换分区, 这样我们就需要修改 fstab.
修改 /etc/fstab 文件, 新增如下内容:
/swapfile swap swap defaults00
这样每次重启系统的时候就会自动加载 swap 文件了.
五 附录
搭建私有网络说明 http://docs.bitshares.org/testnet/private-testnet.html
BitShares 交易所对接指南20170614版 https://steemit.com/bitshares/@abit/bitshares