本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。( x& V0 n0 r* v: M6 m2 z6 ]
配置虚拟机
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。4 v9 ]( X/ Q0 Z& v
创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。
5 [ u0 @$ l: I! T/ }" F, {
[!Note]
如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组/ a9 B" l6 Z. t4 u' N2 S) S
Azure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。) |* @( V/ |3 T
% r7 D' D+ s- w' T' t1 l. y! j' _
创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。1 t0 o' x z% M
安装 NEO-CLI" b* U5 w) D& U5 M1 g
分别在四台虚拟机上进行如下操作:
4 H& j% e5 L, L" t- r* n
创建钱包# O0 X, U6 ?# Q; q* q# e
在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。
6 G! A L9 s( D9 P) H. o7 s
将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的 list key 命令查看公钥再复制。& Z! `" L" s' n8 w2 T4 E- \* N
将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。, o/ ?2 v& q4 x t5 k1 ?, ^
修改节点配置文件3 ~3 k j4 x( S3 d8 u# n& a
配置每个节点的 protocol.json 文件 ,修改以下参数:( [$ S' Z3 L. d+ }' ~& w, H
{
"ProtocolConfiguration": {
"Magic": 123456,
"AddressVersion": 23,! Q7 Z$ b5 ?' K) @
"SecondsPerBlock": 15,
"LowPriorityThreshold": 0.001, ! J7 I9 j$ F" S+ C- r
"StandbyValidators": [ "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3", "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4", "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",* |# x/ g: E) L5 Y O1 m; v
"03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f"
],8 z' U1 ^- y7 x
"SeedList": [
"13.75.112.62:10333",
"137.116.173.200:10333",
"168.63.206.73:10333",
"137.116.171.134:10333"3 s7 z6 p, t$ p
],% B, C' e: D7 m1 q# G% Y
"SystemFee": {1 q4 A' X ~. ^( h
"EnrollmentTransaction": 10,$ M% U' C. H3 S% R
"IssueTransaction": 5,4 k1 ?* i3 H2 W3 G* {
"PublishTransaction": 5,+ h; c- L# I; H( U6 V4 f+ m
"RegisterTransaction": 100
}5 e3 m* Y4 K6 e7 y0 `* g+ J
}' S, a3 d; [' O) U% `. q
}& _/ m% ]% F# \+ K4 o( w' B" w
配置每个节点的 config.json 文件,以便打开钱包,开启共识:3 L1 S; e8 T0 q) A# Q3 M A
"UnlockWallet": {4 z; l# [: U' k# R# m1 C
"Path": "1.json",# Q: G* X& q$ F" C/ b( Q% Q
"Password": "11111111",
"StartConsensus": true,
"IsActive": true I, C$ D% b" P8 N: ^: I
}9 Y w( Y) ^$ B" d2 ^
启动私有链
在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。8 C2 K3 T0 l" y: |& d& ~( v7 H3 P
如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:, o( w9 U# p( j+ T) k# p# c
4 个节点即使关掉一台依然可以达成共识,如图所示
提取 NEO 和 GAS4 ~6 R" h( q( z0 z
在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。
安装并配置 NEO-GUI
6 P! p' X* d6 J; o1 E; Y
运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。
创建多方签名地址
在 NEO-GUI 中依次打开四个钱包,进行以下操作:
右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。: I5 q& e8 `- h9 W/ G
输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。! r* `( [/ C% H9 r( T j% U
9 v8 I, r e* ?* H! \0 R5 a- i; a4 w
点击 钱包 -> 重建钱包索引。5 c% L7 I1 ?( \5 [4 |: J! F- h
! n( Z& B0 J( G8 w" h9 y; c
[!Note]
四个钱包都要添加多方签名地址,否则签名会失败。
你将看到合约地址中出现了 1 亿 NEO,如图所示。
提取 NEO 到标准地址
进行如下操作,将 NEO 从合约地址转到标准地址中:
打开四个钱包中的任意一个,点击 交易-> 转账。
输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。% ~* k7 C! ~% ^9 L C
系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。; a6 v8 t) X1 z$ p1 D- D) B) P: U
打开第二个钱包,点击 交易 ->签名 。( M, x% i, H% o! Z: `, w8 Z' \
粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。( d" E0 a$ G r9 G5 u0 O( a- k
打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。
这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。7 V0 l& P' m9 `
点击 广播 完成转账交易。6 v2 C- B4 ^- E) O: i" T
等待片刻后将看到 1 亿 NEO 成功转入了标准地址。
( Y, c% S1 l$ z. }+ R: K+ _
' j* J; g+ U0 N/ n* r6 w
提取 GAS 到标准地址
打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。
+ {. }3 p N N0 n5 f
接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。