本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。1 y% a* g: c* i
配置虚拟机7 m5 w! G, N! i* n9 I1 F4 g6 z
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。
创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。# a; G; D* z7 N5 W S
; S. o& [6 X( ]2 g! o" h8 W0 m
[!Note]
如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组
Azure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。
5 W2 V6 M2 V8 [* k
创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。0 x, e( M) a9 i
安装 NEO-CLI
分别在四台虚拟机上进行如下操作:
: ^9 G% I; ]6 h ^4 C
创建钱包
在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。$ h; [* g, V; n5 d; x2 _+ F/ w$ R$ B
将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的 list key 命令查看公钥再复制。
将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。1 C4 _! S# ?# C( p9 h- B
1 v* }1 o( f+ ~3 C: Y0 `
修改节点配置文件
配置每个节点的 protocol.json 文件 ,修改以下参数:3 P" f3 n% i# ?9 E! H4 o
{
"ProtocolConfiguration": {: k `; R) u+ X& V/ v8 b
"Magic": 123456,
"AddressVersion": 23,
"SecondsPerBlock": 15,
"LowPriorityThreshold": 0.001, : Z. t$ G$ {, Z7 f& K8 ^9 k9 y# q
"StandbyValidators": [ "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3", "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4", "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",
"03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f") g/ P0 e' f" S0 [$ q
],4 |/ h4 Q/ @, e8 o; p w
"SeedList": [7 m3 S* f9 p* Z3 a- | d
"13.75.112.62:10333",
"137.116.173.200:10333",' ?0 k% ]. p% S' x
"168.63.206.73:10333",# A, i3 Y9 a6 g% i% W* N# u
"137.116.171.134:10333"8 Y! B5 s/ K* \# M* ^" f8 y3 X: f
],
"SystemFee": {. J( T) a1 I3 @" `2 l! T0 ^' M
"EnrollmentTransaction": 10,( a* n0 y2 k; b
"IssueTransaction": 5,8 \5 c7 T, }, o' i$ J
"PublishTransaction": 5,
"RegisterTransaction": 100
}' K3 E% C+ L# j, h3 S7 @
}/ B2 _( c% J6 F8 ~ m9 P
}; p% U5 s3 E$ N' X% C# ~- d
配置每个节点的 config.json 文件,以便打开钱包,开启共识:3 t- x) x# i# ]4 R
"UnlockWallet": {4 T! Y% s2 r. C9 w+ N- K8 F
"Path": "1.json",
"Password": "11111111",' d+ B- ]/ j% P+ ?* z; L2 C! m
"StartConsensus": true," G; ?! z' q) l# B& K `
"IsActive": true7 b: {( R3 c; I/ a' u4 g
}: ~+ {; {8 g$ ?4 l& n* z
# x; Z+ ^0 r/ m$ A
2 c- D3 H4 ?" X% u
启动私有链! j S9 F- M2 {: @7 ~( K; B( G6 h
在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。
如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:4 { S: X' P3 ~+ s4 i0 t
4 个节点即使关掉一台依然可以达成共识,如图所示. ^1 w$ K" o0 z/ @6 r. g
4 u8 _7 f6 k( f" K/ m8 c
提取 NEO 和 GAS0 k S4 l e+ s
在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。5 @: \. y- d/ {" W
安装并配置 NEO-GUI1 u @& O/ W) O' ]. @9 a& G" e( E" V) u
运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。" I \" o' n" W4 f& N% i
创建多方签名地址
在 NEO-GUI 中依次打开四个钱包,进行以下操作:
右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。
输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。+ f4 k L4 I' H6 R7 ~
点击 钱包 -> 重建钱包索引。
4 e/ a9 o1 O+ _( M" p
[!Note]
四个钱包都要添加多方签名地址,否则签名会失败。2 f9 e" Q3 q+ p- N/ f6 M
你将看到合约地址中出现了 1 亿 NEO,如图所示。. \. z8 l6 t+ k! Q+ @( o
0 z% n- C( `' {7 z: V2 U) b/ m# O
提取 NEO 到标准地址& a, Q2 b( |+ [$ h p3 N
进行如下操作,将 NEO 从合约地址转到标准地址中:% v& _* b- K7 }4 H! a) U, D7 v
打开四个钱包中的任意一个,点击 交易-> 转账。9 k+ R5 M' V3 S+ p1 M' P/ Z. a. A( k
输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。* x: u4 r9 o: g" N3 i
系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。' V5 l! s3 e$ {! c
打开第二个钱包,点击 交易 ->签名 。
粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。
打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。' l! f" \6 j0 M/ K6 I$ |; c; L
这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。2 Q! w2 _% x5 S, P4 W$ d* y
点击 广播 完成转账交易。
等待片刻后将看到 1 亿 NEO 成功转入了标准地址。
: `4 e! L2 p' S7 I; O' T
5 A( n' ~ @+ y5 Y/ b" a# G
* F0 U- n {# ~4 b, Q
提取 GAS 到标准地址! J8 D9 o/ e, z1 [; B- _
打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。3 x) t# y7 r- E- @6 E1 S- r! h7 d
接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。