Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

用虚拟机搭建NEO私有链

杨小公子君莫邪
119 0 0
用虚拟机搭建私有链0 {5 T7 H  |( l; L. J+ Z' C, m
本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。( x& V0 n0 r* v: M6 m2 z6 ]
配置虚拟机
* |0 L7 p1 [$ T8 w( xNEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。4 v9 ]( X/ Q0 Z& v

' ^- D. J* s: [+ _9 b6 C( @" d2 w创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。
# w$ t3 u; r6 I0 I$ @* U1 t' G5 [  u0 @$ l: I! T/ }" F, {
[!Note]
1 q# d  S( A' E: g如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组/ 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
分别在四台虚拟机上进行如下操作:
& J0 \& |( x5 I% _: r( x3 w& W
  • 参考 安装 NEO-CLI ,安装 NEO 客户端。
  • 下载 SimplePolicy 插件并将解压后的 Plugins 文件夹拷贝到 neo-cli 目录下。. u7 {4 }) j1 l! |  ~4 _
    4 H& j% e5 L, L" t- r* n
    创建钱包# O0 X, U6 ?# Q; q* q# e

  • 1 G  Q  r' {6 Z/ h$ \在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。
    , w- `5 h5 Y" i* O5 L+ ]6 G! A  L9 s( D9 P) H. o7 s
  • " ?. s& J$ J( h2 g) \* G1 l
    将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的                                                                            list key 命令查看公钥再复制。& Z! `" L" s' n8 w2 T4 E- \* N

  • 3 j6 X( d$ ?+ |  W将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。, o/ ?2 v& q4 x  t5 k1 ?, ^

    0 ]: S0 `! F$ R& v8 _% h" l$ U  L0 T
    . `- R& o5 P" ^修改节点配置文件3 ~3 k  j4 x( S3 d8 u# n& a

  • 6 K- s# y$ q" |& _. A# ]配置每个节点的 protocol.json 文件 ,修改以下参数:( [$ S' Z3 L. d+ }' ~& w, H
  • Magic :Magic 用于识别消息的来源网络,指定不同的 Magic 确保 NEO 区块链中的不同网络信息在传输过程中不会发送到其它网络。Magic 的类型为 uint,注意填写的数值要在 [0 - 4294967295] 区间内。
  • StandbyValidators:将创建好的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。
    % t. V8 r# L  i
    ) c$ ]  Z0 J- |2 j8 S+ w$ g5 l' b
    {
    1 l% G, @$ x+ s" A$ P; U' R  "ProtocolConfiguration": {
    6 _  o$ m* I1 w    "Magic": 123456,
    * c' q/ ^0 q' w/ F% T4 }  a% @    "AddressVersion": 23,! Q7 Z$ b5 ?' K) @
        "SecondsPerBlock": 15,
    0 Q$ a; E* Z3 o9 s: F! h    "LowPriorityThreshold": 0.001,     ! J7 I9 j$ F" S+ C- r
        "StandbyValidators": [      "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3",      "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4",      "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",* |# x/ g: E) L5 Y  O1 m; v
    "03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f"
    % B- m8 c6 _9 X) v. t    ],8 z' U1 ^- y7 x
        "SeedList": [
    " }2 q+ z2 v* p1 `      "13.75.112.62:10333",
    / p, B  Y7 R; {      "137.116.173.200:10333",
    # F+ |+ P, P* g: z      "168.63.206.73:10333",
    8 [. @& o4 x* ~& s      "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
    7 m1 P; e7 G' j3 w$ a% v    }5 e3 m* Y4 K6 e7 y0 `* g+ J
      }' S, a3 d; [' O) U% `. q
    }& _/ m% ]% F# \+ K4 o( w' B" w
  • # O4 R; s0 N# W# G  E1 R4 V; f+ e
    配置每个节点的 config.json 文件,以便打开钱包,开启共识:3 L1 S; e8 T0 q) A# Q3 M  A
  • Path:设置对应的钱包名称。
  • Password:钱包密码。
  • StartConsensus:设置为 true 开启共识。
    ) E0 o) I4 X5 j+ F* g. _; A
    + z: E, o0 s! h' Q( A
    "UnlockWallet": {4 z; l# [: U' k# R# m1 C
      "Path": "1.json",# Q: G* X& q$ F" C/ b( Q% Q
      "Password": "11111111",
    ( T6 r+ x5 Q0 j4 \  "StartConsensus": true,
    8 V+ b! u4 S# \% {" U" G& p  "IsActive": true  I, C$ D% b" P8 N: ^: I
    }9 Y  w( Y) ^$ B" d2 ^

    ' B9 c" p7 }3 q# j
    ! Y  L, t/ V7 l/ b& Y7 E启动私有链
    6 S" K5 P4 U* C$ w$ m! m在四台虚拟机上依次运行命令行,进入 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

    0 s- K- I$ {3 Z4 ^7 Y' `4 个节点即使关掉一台依然可以达成共识,如图所示
    6 [% Q* a. W1 Y9 h  O  J' @, \4 n
    6 J! G6 d4 w9 F5 a提取 NEO 和 GAS4 ~6 R" h( q( z0 z
    在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。
    $ c4 V8 u% Y4 J0 e# I7 H& Z安装并配置 NEO-GUI
    . T1 q" Z% I) G
  • 从 Github 上下载 NEO-GUI 并解压。
  • 修改 NEO-GUI 配置文件 protocol.json 使其连接到私有链中:
    + k3 ?/ T% b9 P4 P9 \5 s( Z, Q. s
  • StandbyValidators`:将前面创建的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。
    6 K& G1 d) n8 G9 R
  • 配置 config.json 文件,设置端口与其它四个节点端口不冲突。如果端口冲突,NEO-GUI 将无法与 NEO-CLI 同时运行。9 N% L5 }" h3 K5 X4 Z
    6 P! p' X* d6 J; o1 E; Y
    运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。
    7 W, L: S8 P4 k: ~$ k8 O创建多方签名地址
    . O7 o# g! I' j在 NEO-GUI 中依次打开四个钱包,进行以下操作:
    * n  ]6 e' k9 G) a, t

  • - f* [: V: I/ q$ G! G% P右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。: I5 q& e8 `- h9 W/ G
  •   i3 s$ q. O1 d: o9 ?9 c
    输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。! r* `( [/ C% H9 r( T  j% U
    9 v8 I, r  e* ?* H! \0 R5 a- i; a4 w
  • $ v6 A% x; N5 Y+ ]8 o
    点击 钱包 -> 重建钱包索引。5 c% L7 I1 ?( \5 [4 |: J! F- h

    # L; X; L1 M3 b( l$ i5 d
    4 q& T: n' k( g! n( Z& B0 J( G8 w" h9 y; c
    [!Note]
    - C( K% {8 u, Z( ~# g四个钱包都要添加多方签名地址,否则签名会失败。
    : f/ l( W% m- h3 R' }

    7 A. w; G% d# W* b- a5 P: {你将看到合约地址中出现了 1 亿 NEO,如图所示。
    0 S! P9 Z: V  d$ S
    , U* B0 }) C/ d3 J提取 NEO 到标准地址
    : b  H$ O3 K5 k8 ~: k. |1 _, F进行如下操作,将 NEO 从合约地址转到标准地址中:
    3 b' N4 C4 r: J6 V; V( y. p* c6 {/ W
  • # d# P3 a3 m+ V, r1 Y# I; C) j
    打开四个钱包中的任意一个,点击 交易-> 转账。
    ' V/ C9 h0 Z% x) `1 R# b

  • 4 t0 t9 R4 M+ D# R* ?# Z2 K输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。% ~* k7 C! ~% ^9 L  C

  • . N4 ?8 y4 Z& l' T; ]# I8 y4 G( i系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。; a6 v8 t) X1 z$ p1 D- D) B) P: U
  • * _% g! K% G$ P. z6 z" U$ D- |
    打开第二个钱包,点击 交易 ->签名 。( M, x% i, H% o! Z: `, w8 Z' \

  • 6 e0 k0 O, y. k, W粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。( d" E0 a$ G  r9 G5 u0 O( a- k

  • # P) L$ o6 @  X) k8 C$ m& E打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。
    ; E" G3 Z8 Q( L+ u& |; g# W这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。7 V0 l& P' m9 `
  • 6 _! ]. S  n+ j! v' H& H
    点击 广播 完成转账交易。6 v2 C- B4 ^- E) O: i" T
    等待片刻后将看到 1 亿 NEO 成功转入了标准地址。
    0 c$ z5 k: \6 o) f( Y, c% S1 l$ z. }+ R: K+ _
    ' j* J; g+ U0 N/ n* r6 w

    8 K( Q7 Z0 _; h0 k. R9 o1 ?, `提取 GAS 到标准地址
    2 `+ a2 H( N) s" T: F9 k打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。
      D2 w' P- N+ W  e+ {. }3 p  N  N0 n5 f
    接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

    杨小公子君莫邪 初中生
    • 粉丝

      0

    • 关注

      0

    • 主题

      13