准备工作
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点,每台服务器上有一个 NEO 钱包文件。
这4台服务器都随意选的,官方给的教程是4台服务器,那我们做实验也不可能真的去买4台服务器,所以我选择了使用虚拟机Vmware。
首选我准备一个Linux镜像:我选用的是ubuntu-16.04
新建虚拟机和安装镜像就不写了,直接跳过。
第一步: 安装.Net Core,注意,需要2.0及以上的版本
sudo wget -q packages-microsoft-prod.deb https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.1.200
其它类型Linux服务器可以参考微软官方文档安装:
https://www.microsoft.com/net/download/linux-package-manager/ubuntu16-04/sdk-current
第二步: 安装 LevelDB 和 SQLite3 开发包
sudo apt-get install libleveldb-dev sqlite3 libsqlite3-dev
第三步: 安装neo-cli
sudo wget -c 'https://github.com/neo-project/neo-cli/releases/download/v2.7.5/neo-cli-linux-x64.zip'
sudo unzip neo-cli-linux-x64.zip
到此为止准备工作就结束了,现在关闭我们新建的虚拟机。
关机后我们克隆三份相同虚拟机。(因为Neo需要四个节点共识,如果不克隆就要安装四个虚拟机,耗时耗力!另外,建议大家克隆完成后,更改一些Linux系统的名字,不然台服务器在同一个网络重名可能会出问题。)
开始搭建私有链
第一步: 创建四个钱包文件
因为我Window本地有neo-cli,我就直接使用PowerShell创建了,当然也可以使用我们刚搭建的环境去创建,但是记得创建了之后要删除同步的Chian数据。
另外这四个pubkey一定要保存好,稍后我们会使用
neo> create wallet test1.json
password: ******
password: ******
address: AWxxYq2bC3V6uMf2YR1M645XPjsZWgPsUg
pubkey: 02dd5ab23f18ff6e3e0a8f9b1a88c27fbf19d199c335d5a67f1ceed2d4a4df0479
neo> create wallet test2.json
password: ******
password: ******
address: AZTzjCCrxqtvpo3F9aG6eqU7CmKWLUd8Zw
pubkey: 03f9e7101393cd7ccea79b3fa29b6084ad736b1abb760b77e060444eeb5f57591d
neo> create wallet test3.json
password: ******
password: ******
address: AQoKXnxEUWkSjjWGsHd5gUuDZuBukUsowG
pubkey: 028507b2c7de32fa5814b78de3d9154b16628b15645c37fe60ea3a21d448f82b7b
neo> create wallet test4.json
password: ******
password: ******
address: ALpVJeceiABMUC3CXSAzeRmhDbiccmbU8y
pubkey: 024346183e33097ce60d74ec05fa7396a4e9efe9b82545a1f25892cf517aa9b1ba
第二步: 修改protocol.json配置文件
vim protocol.json
修改Magic的值,保持范围在[0 - 4294967295]区间即可。
在StandbyValidators中写入我们保存的四个pubkey。
在SeedList中写入四台虚拟机的ip地址,端口保持不变。
保存文件分别替换掉四台虚拟机neo-cli中的皮protocol.json文件即可
详细配置文件如下:
{
"ProtocolConfiguration": {
"Magic": 9345724,
"AddressVersion": 23,
"SecondsPerBlock": 15,
"StandbyValidators": [
"02dd5ab23f18ff6e3e0a8f9b1a88c27fbf19d199c335d5a67f1ceed2d4a4df0479",
"03f9e7101393cd7ccea79b3fa29b6084ad736b1abb760b77e060444eeb5f57591d",
"028507b2c7de32fa5814b78de3d9154b16628b15645c37fe60ea3a21d448f82b7b",
"024346183e33097ce60d74ec05fa7396a4e9efe9b82545a1f25892cf517aa9b1ba"
],
"SeedList": [
"192.168.154.129:10333",
"192.168.154.130:10333",
"192.168.154.131:10333",
"192.168.154.132:10333"
],
"SystemFee": {
"EnrollmentTransaction": 1000,
"IssueTransaction": 500,
"PublishTransaction": 500,
"RegisterTransaction": 10000
}
}
}
第三步: 启动节点并同步
启动节点:
dotnet neo-cli.dll
打开钱包:
open wallet wallet1.db3
开启节点共识:
start consensus
查看节点状态:
show state
如果效果如下就说明已达成了节点共识:
第四步:提起Neo
安装 PC 版客户端(Neo-GUI),修改配置文件 protocol.json 使其连接到私有链中。
打开钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。
在 PC 版客户端中打开钱包 wallet1.db3,添加多方签名地址,输入 protocol.json 中的 4 个公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),如图所示。
确定,然后需要重建钱包索引,在菜单栏中点击 钱包 重建钱包索引 然后你就会看到在合约地址中有 1 亿的 NEO 了。(4个钱包都要执行相同的操作)
我们要将该 NEO 从合约地址转到普通地址中,打开 4 个钱包中的任意一个,点击 交易 转账 输入一个标准地址,将 1 亿 NEO 转到这个地址中。
然后系统会提示“交易构造完成,但没有足够的签名”,然后将代码复制下来,打开第二个钱包,点击 交易 签名 粘贴刚才复制的代码,点击 签名, 然后将代码复制下来,打开第三个钱包,点击 交易 签名 粘贴刚才复制的代码,点击 签名, 这时你会发现窗口中出现了一个 广播 按钮,代表交易已经签名完成(达到多方签名合约要求的最少签名数量)可以广播,点击 广播 后转账交易开始广播,约 15 秒后转账成功。
提取 NeoGas 的操作方法也类似,点击 高级 提取 NeoGas 提取 ,(记得这时所在的钱包 X,下文会用到),如图所示
接下来的操作与转账 NEO 类似,将没有足够的签名的代码复制下来,打开第二个钱包,点击 交易 签名 粘贴刚才复制的代码,点击 签名, 然后将代码复制下来,打开第三个钱包,点击 交易 签名 粘贴刚才复制的代码,点击 签名,点击 广播 后提取 NeoGas 的交易开始广播,约 15 秒后提取成功。
提取成功后 NeoGas 会进入到你发起提取 NeoGas 的交易所在的钱包(即上方的 X 钱包)的第一个标准地址,如图所示
参考:http://docs.neo.org/zh-cn/network/private-chain.html