本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。+ i# J% U/ ?; r+ N
配置虚拟机# Y e/ l4 X2 c# n
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。
创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。* |) a, i( o1 q" [0 P
[!Note]& @, `* o) j, ?( f8 W
如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组- k/ F; B1 x- [. ^' S
Azure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。
创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。8 h2 Q5 B! i& N' _# h: f
安装 NEO-CLI
分别在四台虚拟机上进行如下操作:; K) m8 \# N7 w7 K9 t
( p7 m& I/ ^! H. O" z" e
创建钱包$ m/ I( j8 B7 R+ m( \, }& ^
在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。/ N5 W. `) {* J
将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的 list key 命令查看公钥再复制。
将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。
' H8 h' B) J( c
, E2 q) S# C& D( h- Q; m* x8 X' V/ c
修改节点配置文件
配置每个节点的 protocol.json 文件 ,修改以下参数:
{1 ]7 }$ N: d$ I) l: B( Y' J
"ProtocolConfiguration": {* k% q2 E& z3 q4 R
"Magic": 123456,: n2 p2 ?1 j% p2 I% U, s
"AddressVersion": 23,
"SecondsPerBlock": 15,
"LowPriorityThreshold": 0.001, # H# e7 m4 E+ {( S8 m
"StandbyValidators": [ "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3", "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4", "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",
"03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f": _+ Z; ]: V9 C# L7 D X" F
],
"SeedList": [
"13.75.112.62:10333",
"137.116.173.200:10333",, L* L4 E6 F) `- ~$ X& B
"168.63.206.73:10333",
"137.116.171.134:10333"2 a9 p; k, j" A- y4 F: m& _. t
],
"SystemFee": {6 ^7 u$ B1 N9 o* E
"EnrollmentTransaction": 10,! |- m! }. b( d2 d( \. W6 s
"IssueTransaction": 5,
"PublishTransaction": 5," l+ A- {( U! B: }/ ]1 @$ v
"RegisterTransaction": 1004 n; d6 G y4 L4 Y. T
}7 X+ y6 R' b- d' }: Z, z
}( O q+ V/ H0 P
}
配置每个节点的 config.json 文件,以便打开钱包,开启共识:+ l+ L' }! x H5 `5 N! {4 j
"UnlockWallet": {: f8 V% c( \2 {3 K% i
"Path": "1.json",
"Password": "11111111",: R% ~& @* Q) Q' ?; `) v: y
"StartConsensus": true,
"IsActive": true
}
& r* X3 i, L1 y
6 ?9 ^ d: R3 D: B1 l2 g" o
启动私有链
在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。" z- t, V# Q% s' h/ g; X
如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:% H' P, X/ q! _ y- G
, w) J* X2 U7 v$ E3 Z o
4 个节点即使关掉一台依然可以达成共识,如图所示" R o8 w/ @7 E( y# e: f; U
( \3 H/ i5 f& F+ Y
提取 NEO 和 GAS
在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。1 Z$ `5 h9 Q3 q P6 p
安装并配置 NEO-GUI; j4 r( r4 b! p/ E
0 }* d( a# j. M( |: j
运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。
创建多方签名地址3 _& {4 R6 c! z l+ P+ o b
在 NEO-GUI 中依次打开四个钱包,进行以下操作:
右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。
输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。3 l8 [) E8 o5 R+ I
点击 钱包 -> 重建钱包索引。
1 p' b! S, _' M) V$ n1 N
7 Q9 N+ L$ m4 l
[!Note]
四个钱包都要添加多方签名地址,否则签名会失败。
你将看到合约地址中出现了 1 亿 NEO,如图所示。; L$ Z2 ^9 P7 @3 ]
% Z! \; a% M3 p0 w9 Y2 t
提取 NEO 到标准地址
进行如下操作,将 NEO 从合约地址转到标准地址中:
打开四个钱包中的任意一个,点击 交易-> 转账。- t: O- g8 ]/ N; j
输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。
系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。8 f) Z9 b5 a/ s. }/ j' }
打开第二个钱包,点击 交易 ->签名 。$ M5 U/ |9 Z2 W( n* X" B
粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。
打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。6 N O* N7 d, B# G% Y
这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。
点击 广播 完成转账交易。9 O( {0 k7 ]0 V, I8 _0 O$ E# T! C
等待片刻后将看到 1 亿 NEO 成功转入了标准地址。" L* O% D) ^3 v+ ~
提取 GAS 到标准地址
打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。
6 g$ r; t3 q8 o0 c }
接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。