FILEEM

POWER OF DREAM

在Ubuntu上使用石墨烯底层编译、部署一条公链

石墨烯(graphene)区块链底层,也就是比特股(bitshares),在此介绍部署中的一些坑。

在Ubuntu上编译石墨烯(比特股)核心代码

Ubuntu 16.04自带boost1.58,对于编译比特股核心代码相对友好,下面就来说说具体的步骤。
在示例中,我使用win10的ubuntu虚拟机进行操作。

1.安装依赖和编译工具

sudo apt-get install cmake make libbz2-dev libdb++-dev libdb-dev libssl-dev openssl libreadline-dev autoconf libtool git ntp

如果没有安装过基础的编译包

sudo apt-get install build-essential

如果需要启用elastic search插件(默认被启用)

sudo apt-get install libcurl4-openssl-dev

2.安装boost

Ubuntu 16.4可以通过apt安装boost 1.58

sudo apt-ge't install libboost-all-dev

如果是Ubuntu 14.04 LTS,则需要自己安装boost,由于boost1.58需要C++14版本,在14.04上安装会过于复杂,所以这里介绍boost 1.57的安装方法

BOOST_ROOT=$HOME/opt/boost_1_57_0

sudo apt-get update

sudo apt-get install autotools-dev build-essential g++ libbz2-dev libicu-dev python-dev

wget -c 'http://sourceforge.net/projects/boost/files/boost/1.57.0/boost_1_57_0.tar.bz2/download' -O boost_1_57_0.tar.bz2

[ $( sha256sum boost_1_57_0.tar.bz2 | cut -d ' ' -f 1 ) == "910c8c022a33ccec7f088bd65d4f14b466588dda94ba2124e78b8c57db264967" ] || ( echo 'Corrupt download' ; exit 1 )

tar xjf boost_1_57_0.tar.bz2

cd boost_1_57_0/

./bootstrap.sh "--prefix=$BOOST_ROOT"

./b2 install

3.获取代码并编译

git clone https://github.com/bitshares/bitshares-core.git

cd bitshares-core

git submodule update --init --recursive

cmake -DCMAKE_BUILD_TYPE=Release . 

(如果是14.04,则运行 cmake -DBOOST_ROOT=”$BOOST_ROOT” -DCMAKE_BUILD_TYPE=Release . )
《在Ubuntu上使用石墨烯底层编译、部署一条公链》

make

《在Ubuntu上使用石墨烯底层编译、部署一条公链》

4.获取可执行文件

全节点:program/witness_node/witness_node

延时节点:program/delayed_node/deplayed_node

命令行钱包:program/cli_wallet/cli_wallet

创世区块助手:program/genesis_util/get_dev_key

以上就是在Ubuntu系统上编译比特股核心代码的方法,参考 https://www.jianshu.com/p/89d0d52c411c

搭建自己的石墨烯(比特股)测试网

1、新建testnet目录,将witness_node文件拷贝到testnet目录

mkdir testnet

cp program/witness_node/witness_node testnet

2.生成秘钥对和地址

programs/genesis_util/get_dev_key BTS w1 w2 w3 admin

运行以上命令会生成四对秘钥对和地址,分别对应w1,w2,w3和admin的私钥、公钥和地址如下

[{"private_key":"5JjzogP6V1TciYQHthBLPnmj5cyrYLfwfoDeY6rpG4mcNUd7hDq","public_key":"BTS6WqFcNmb8DA8SG2HJDL23TzSKk67HrCf6qTeqXhbCcohi11epm","address":"BTSMZq4SyNoFGraCNuV5ZjbJHMvcYBLSV3rM"},

{"private_key":"5JpX8v4y7HQ9EXLRGPXcPCVCqw5BLzP2drAbwJ94P3QXFxxwzkw","public_key":"BTS8ftmc4mCUjnR43SPtQFg8xuJgUr82MKuBjvegrmdDasohZcpZw","address":"BTSP1gitSEvGzCLCa9rsCCfQiRSzNQquDUxX"},

{"private_key":"5HtEtfFYt1eGpE6uVWMyzMXzh8BBYfPyfH2A8Q8FQvXgdFXsc7N","public_key":"BTS7hKorE5txmsT6qee9NNqcYqNvBU1Umxk1cV93Q1XPEbYCacpfM","address":"BTSCSSgBtAUAGkhFbo6rbUMqtNTJteWaxHdG"},

{"private_key":"5KNP4D9K3FL1gBtRtanhfgLZTpz1wcJVsLEQXonRMeAwzMDL2se","public_key":"BTS51ABY2MWbn3W5NNW3JNJRDraEi4JbzEAmBa3jiTQJ7f99Z7xJ6","address":"BTS21sMK9h93c1i29wLKi29xqKxqjvLSEarw"}]

3.初始化创始区块配置文件

cd /tesnet

./witness_node --create-genesis-json testnet.json

这里我遇到了一个大坑,--create-genesis-json已在issues 1536中被删除,因此这里会出现witness_node: command not found,解决办法是使用现有的开发人员genesis.json文件作为示例。参考https://github.com/bitshares/bitshares-core/wiki/private-testnet

在VSC之类的编辑器打开genesis.json:

用你有私钥的公钥替换掉genesis.json里所有的公钥,例如BTS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV全部替换为BTS6WqFcNmb8DA8SG2HJDL23TzSKk67HrCf6qTeqXhbCcohi11epm,然后
initial_balances中的owner地址替换为BTS6WqFcNmb8DA8SG2HJDL23TzSKk67HrCf6qTeqXhbCcohi11epm的”address”如:BTSMZq4SyNoFGraCNuV5ZjbJHMvcYBLSV3rM

对了 这里最好sudo -i 切换到root用户

在witness_node同级目录新建testnet.json:

 nano testnet.json

把genesis.json里改过的内容复制进去,保存退出。
然后:

./witness_node --data-dir data --genesis-json testnet.json

《在Ubuntu上使用石墨烯底层编译、部署一条公链》

这一步会新建data目录,并且运行到最后会打印出chain-id,这时候ctrl-c停止程序运行,并且记录chain-id备用。

打开data目录下的config.ini文件

nano data/config.ini

修改如下:

p2p-endpoint = 0.0.0.0:10101 //seed节点的ip和端口,端口可以自定义

rpc-endpoint = 0.0.0.0:11011 //rpc的ip和端口

genesis-json = testnet.json

enable-stale-production = true

witness-id = "1.6.1"

...

witness-id = "1.6.11"

private-keys = ["BTS6WqFcNmb8DA8SG2HJDL23TzSKk67HrCf6qTeqXhbCcohi11epm","5JjzogP6V1TciYQHthBLPnmj5cyrYLfwfoDeY6rpG4mcNUd7hDq"] //公钥、私钥对

debug-private-keys = ["BTS6WqFcNmb8DA8SG2HJDL23TzSKk67HrCf6qTeqXhbCcohi11epm","5JjzogP6V1TciYQHthBLPnmj5cyrYLfwfoDeY6rpG4mcNUd7hDq"] //公钥、私钥对

保存退出

4.运行网络中的第一个节点

./witness_node --data-dir data

看到不断的产生区块就成功了,第一个节点就运行完毕了。
《在Ubuntu上使用石墨烯底层编译、部署一条公链》

5.往网络中加入新的节点

点赞