本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。
配置虚拟机
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。
创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。. U8 w3 f% }+ g
[!Note]
如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组: C) D% H2 Y1 t5 v& M; j
Azure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。: M* z8 {' A8 J8 {, m% J- d; z
创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。
安装 NEO-CLI
分别在四台虚拟机上进行如下操作:: Y+ |8 P3 K0 U1 L$ B
! o, R( l5 h5 ]) r: r+ R
创建钱包
在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。& f7 y( V9 w2 q- {
" w5 D% ^# m$ y* F7 L. |, ~
将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的 list key 命令查看公钥再复制。
将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。
修改节点配置文件+ Y" e/ q& I1 S1 o
配置每个节点的 protocol.json 文件 ,修改以下参数:4 J% G1 L/ h9 X
{5 M* r V* r9 H
"ProtocolConfiguration": {
"Magic": 123456,& U, [6 K. [0 t+ v
"AddressVersion": 23,
"SecondsPerBlock": 15,
"LowPriorityThreshold": 0.001,
"StandbyValidators": [ "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3", "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4", "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",. a1 M0 E' t/ T
"03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f"
],
"SeedList": [
"13.75.112.62:10333",$ A- Q. z4 y2 L3 {, \9 W
"137.116.173.200:10333",- y- z6 \. ]9 i4 A% S" V7 V2 q
"168.63.206.73:10333",
"137.116.171.134:10333"
],
"SystemFee": {8 ?$ E3 ]' \. B0 z0 E. X1 M7 `3 v
"EnrollmentTransaction": 10,+ D: S! Z. F' r+ E2 e1 `5 N3 |
"IssueTransaction": 5,
"PublishTransaction": 5,+ i- X. O" b0 p
"RegisterTransaction": 100
}
}: u% o8 J; J% h8 }3 O( q
}/ S+ T- m. E( r" s# B
配置每个节点的 config.json 文件,以便打开钱包,开启共识:2 U# b, `3 A- B
"UnlockWallet": {
"Path": "1.json",
"Password": "11111111",/ {: ~2 l3 Z' ^9 f( o9 Y6 E% ~$ s
"StartConsensus": true,
"IsActive": true
}
6 Z9 C$ C9 j+ Z( u
3 b2 i. n7 I8 {( @
启动私有链9 [6 {: J8 ]8 [& w
在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。( Q) \) O( G% |/ u9 ?' r
如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:
6 ]' x7 N; S5 }: _( E
4 个节点即使关掉一台依然可以达成共识,如图所示/ W/ b' e; n: q4 g8 j6 b6 L% n
+ }" O& q4 M7 t" D- J8 a
提取 NEO 和 GAS
在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。
安装并配置 NEO-GUI3 ~- Q) X" A4 ^+ D
1 ^, `3 C# I6 E
运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。
创建多方签名地址
在 NEO-GUI 中依次打开四个钱包,进行以下操作:
右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。" E" Y6 o& E# ~- f- X, G3 S8 z
输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。
点击 钱包 -> 重建钱包索引。2 V8 k4 V9 V. g# ?/ C% w
0 N8 M( [% h( @' m* Y
[!Note]+ \4 w' B$ t* q% m
四个钱包都要添加多方签名地址,否则签名会失败。
你将看到合约地址中出现了 1 亿 NEO,如图所示。& Q) r; T" z9 E5 g" f8 S" Y+ S: A
提取 NEO 到标准地址/ ] E% O; X" I7 s
进行如下操作,将 NEO 从合约地址转到标准地址中:
打开四个钱包中的任意一个,点击 交易-> 转账。
输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。0 R9 |3 _8 M, W. l
系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。
打开第二个钱包,点击 交易 ->签名 。
粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。
打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。
这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。+ _6 i0 c, D. C% Y! I4 r
点击 广播 完成转账交易。
等待片刻后将看到 1 亿 NEO 成功转入了标准地址。
: ]5 h2 L1 K2 T# u
提取 GAS 到标准地址4 v3 E, t2 A; T* R( E
打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。' n, h k0 q2 V5 l4 Q. V
接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。