本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。
配置虚拟机# i) }3 G! _7 l' l4 X, T! E1 e6 X
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。
创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。( i+ ^; I& q: |6 D
[!Note]' P8 v# w* {8 u3 {0 E# Y2 h
如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组
Azure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。& M5 ?- P( r% y
创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。
安装 NEO-CLI6 z% c' D8 f7 I/ r
分别在四台虚拟机上进行如下操作:7 n* f5 k/ J k. |7 t8 |: K
8 _1 j9 p" U& b8 o* m
创建钱包9 z* s# B3 J' s* f$ H1 N
在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。6 I1 I1 U; ^% }
将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的 list key 命令查看公钥再复制。; a4 @ T1 G4 N& `
将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。" ]+ L' J# S( T9 Z2 v; ^8 y
6 _, A% k7 k3 n# v0 A
修改节点配置文件# u/ t, Y3 N- y4 c5 p
配置每个节点的 protocol.json 文件 ,修改以下参数:" E" F2 m) `- T5 T# ~
{" U5 R2 \& ]/ H6 o' ]# ?5 R. g
"ProtocolConfiguration": { F( ]& d9 {/ N8 t7 h5 }
"Magic": 123456,) L1 R* r2 x) ?: l9 m
"AddressVersion": 23,
"SecondsPerBlock": 15,3 l H* F9 R: K# S4 L3 i6 O3 ?
"LowPriorityThreshold": 0.001,
"StandbyValidators": [ "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3", "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4", "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",
"03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f": I+ T- g- k5 Y1 M( B+ g w6 k1 \
],
"SeedList": [( ^% r# [6 R# a$ c v( G
"13.75.112.62:10333",/ N7 J! \9 r8 E5 F
"137.116.173.200:10333",
"168.63.206.73:10333",
"137.116.171.134:10333"2 O! y# k* T1 x$ c
],* D1 t) I) A; e! x
"SystemFee": {
"EnrollmentTransaction": 10,
"IssueTransaction": 5,* Z2 M @/ K$ b1 l
"PublishTransaction": 5,, Y4 }/ `9 C# [+ }5 g. F( {2 f
"RegisterTransaction": 100" a+ w( h) T* y L
}
}
}
配置每个节点的 config.json 文件,以便打开钱包,开启共识:, w; ]$ o% [: i3 e/ E$ H+ F. v
"UnlockWallet": {
"Path": "1.json",$ l8 i; [: T0 Z1 r# L$ y' W4 o$ K
"Password": "11111111",8 O2 v n& s1 @9 z1 J) d% W9 R
"StartConsensus": true,
"IsActive": true
}# x+ M- P( t, d$ S7 C; Y) S
8 _; M& n# q1 V
启动私有链& Q* s. q% ~& E) L) Z
在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。
如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:5 C5 |6 I% [' X' k0 i+ R
4 个节点即使关掉一台依然可以达成共识,如图所示
* M/ z7 U) \) P4 h8 X( E
提取 NEO 和 GAS
在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。
安装并配置 NEO-GUI
运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。1 `2 ~4 e$ x( P/ _3 d% S
创建多方签名地址
在 NEO-GUI 中依次打开四个钱包,进行以下操作:
右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。" x0 V# M0 ~ Z* L
输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。5 Y. v' D, ^' M* B1 \3 {& |
点击 钱包 -> 重建钱包索引。8 J* I* Z0 q& E- ]3 `$ r: c! U
[!Note], [2 ?7 q5 F; x9 o, P0 A u5 |
四个钱包都要添加多方签名地址,否则签名会失败。/ D. l7 y7 g. @8 A
4 q# A$ M& |& e5 E1 c
你将看到合约地址中出现了 1 亿 NEO,如图所示。
+ I, j! G5 ?, t6 E5 ~% f0 B
提取 NEO 到标准地址' W. x: X9 U. m
进行如下操作,将 NEO 从合约地址转到标准地址中:
打开四个钱包中的任意一个,点击 交易-> 转账。2 x& J/ a1 v V# \" n) D
输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。+ u% n! @* G. `3 X+ g
系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。
打开第二个钱包,点击 交易 ->签名 。9 q) e7 G# ?9 F& j6 k, N0 Y( {
粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。6 t5 @% R$ o7 x, h
打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。
这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。; |( U* m+ i: t2 f( H
点击 广播 完成转账交易。
等待片刻后将看到 1 亿 NEO 成功转入了标准地址。2 q& p" \ g2 b5 M* Q4 j9 y- u, p
+ F d+ ^4 h! h
& ~" i" c. Q% ~
, L. s0 ~6 Y) b: A$ T4 J
提取 GAS 到标准地址$ @, D' Z- c- w
打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。
接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。