本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。
配置虚拟机
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。
8 R3 [) \4 q/ e+ e2 a7 a
创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。+ U* j' U$ V( `2 t5 \: J* I$ G
2 V/ P- T$ r: f" V
[!Note]
如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组, O% y' ]) ~" x0 W
Azure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。
创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。
安装 NEO-CLI6 {; `+ p% I8 l7 l
分别在四台虚拟机上进行如下操作:& O* j0 X( X9 _
创建钱包' ?, ]* i! V: ^) l& W" V' ~* ?
在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。
# {/ y8 l( P0 `+ ]
将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的 list key 命令查看公钥再复制。
将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。
5 o; c6 @/ m, J) a% {' B
修改节点配置文件* L( _6 B8 O* p
配置每个节点的 protocol.json 文件 ,修改以下参数:
{
"ProtocolConfiguration": {
"Magic": 123456,
"AddressVersion": 23,
"SecondsPerBlock": 15,( c- F) G+ V c" I0 F
"LowPriorityThreshold": 0.001,
"StandbyValidators": [ "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3", "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4", "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",% N: p% q' Y* d" E, I2 Z X" _6 S
"03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f"
],
"SeedList": [
"13.75.112.62:10333",+ E6 G) J" W% M* k8 N
"137.116.173.200:10333",0 ?; F0 w1 h6 n- U: ]
"168.63.206.73:10333",
"137.116.171.134:10333"- H8 L" ?" x+ I0 w3 p# Q4 t
],
"SystemFee": {
"EnrollmentTransaction": 10,4 m6 G4 S1 b. J8 ^8 u" i- Z
"IssueTransaction": 5,* ~8 ~0 G9 G/ e* e+ Z% L
"PublishTransaction": 5,4 [; y& e3 l; M* |
"RegisterTransaction": 1006 v0 B3 o0 b2 k+ P7 y" x! u
}
}
}
配置每个节点的 config.json 文件,以便打开钱包,开启共识:% l! ~/ t" W0 c' P
"UnlockWallet": {
"Path": "1.json",2 ~' L/ U% \: r
"Password": "11111111",
"StartConsensus": true,5 B6 X( u4 P! d2 t& P
"IsActive": true% j! d# t0 p6 Y) `9 g* l8 d# {
}
: B% G4 E5 Y! x% r5 ?) V
启动私有链( T4 u3 a6 j8 [3 R6 o. A3 R5 I8 p$ {) y
在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。
如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:# @2 f" P! `8 Q4 P# N
4 个节点即使关掉一台依然可以达成共识,如图所示
4 T1 Z9 v8 }$ `* x" @
提取 NEO 和 GAS) ?' X) E6 j, f- a. @
在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。 I F) J9 A; Q4 O9 b! I5 h
安装并配置 NEO-GUI
5 L- j! n" d8 F5 x( |* W! v
运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。3 |& ?1 }# i9 \, d1 I5 Y1 s }
创建多方签名地址* V4 Y2 t2 P) ?( [( Z
在 NEO-GUI 中依次打开四个钱包,进行以下操作:4 z4 f9 B* d m( h: V. d/ \2 d
右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。: e* U3 D" K& @6 I$ ?" ~
输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。) V# W" j/ x4 J6 J9 v" R6 \
点击 钱包 -> 重建钱包索引。
[!Note]7 _" ]7 R% s( e( T# T4 x
四个钱包都要添加多方签名地址,否则签名会失败。
r0 B7 }$ C& G i0 q
你将看到合约地址中出现了 1 亿 NEO,如图所示。
2 T4 R" m ^: I3 E* y8 ~" M
提取 NEO 到标准地址
进行如下操作,将 NEO 从合约地址转到标准地址中:% d0 N; M' l- g! W6 Y
打开四个钱包中的任意一个,点击 交易-> 转账。
输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。- E2 n; O' |/ T" ~1 `' w
系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。" y3 J* X8 }/ e" {6 w
打开第二个钱包,点击 交易 ->签名 。7 S7 `$ I/ \6 d k; i1 c
粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。, ^, F5 A# j. I* _5 b- f; R# C
打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。
这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。
点击 广播 完成转账交易。% x4 E% l5 t) V% m7 T, h
等待片刻后将看到 1 亿 NEO 成功转入了标准地址。
提取 GAS 到标准地址! ]! ?. m8 J3 _* Q
打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。
接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。



