Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

用虚拟机搭建NEO私有链

杨小公子君莫邪
193 0 0
用虚拟机搭建私有链- k7 `% o  T0 d2 U% U1 S
本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。
! c6 U% t+ P: g" ^7 W+ n" |配置虚拟机
. d7 p# ~7 ?: W) c# \& {/ gNEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。
! [" u: U$ X; H) f8 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]
+ d9 [- n/ I! q% f3 {如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组, O% y' ]) ~" x0 W
Azure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。
" N9 S6 \9 u" W4 f

# |) w& c5 P" |1 l创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。
8 M& c) W9 L" e" M% V+ Y安装 NEO-CLI6 {; `+ p% I8 l7 l
分别在四台虚拟机上进行如下操作:& O* j0 X( X9 _
  • 参考 安装 NEO-CLI ,安装 NEO 客户端。
  • 下载 SimplePolicy 插件并将解压后的 Plugins 文件夹拷贝到 neo-cli 目录下。
    ; p6 I4 z" W. c3 P9 P8 r3 j
    ' Z' ^; m% i, F. c" \4 Q) ~创建钱包' ?, ]* i! V: ^) l& W" V' ~* ?

  • ! u* }! _% j  ^5 N! I6 J) O在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。
    9 h+ v' U; @- g+ O, m0 A. _. E. c2 Q: c# {/ y8 l( P0 `+ ]

  • : f: K* n5 Z( ^& k% f3 @& m将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的                                                                            list key 命令查看公钥再复制。
    : E: d9 O. M; ^  A- I* e7 q

  • * }( N: V4 C7 I: C3 i0 b; m2 P将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。
    1 e, b. p! A; S$ A; o% O7 i
    # Z+ ]- l# L: ]0 ~; \! z5 o; c6 @/ m, J) a% {' B
    修改节点配置文件* L( _6 B8 O* p

  • " R$ e- {' u8 q$ c% O2 ~  S& z配置每个节点的 protocol.json 文件 ,修改以下参数:
    7 n: o4 X% u$ k
  • Magic :Magic 用于识别消息的来源网络,指定不同的 Magic 确保 NEO 区块链中的不同网络信息在传输过程中不会发送到其它网络。Magic 的类型为 uint,注意填写的数值要在 [0 - 4294967295] 区间内。
  • StandbyValidators:将创建好的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。
    4 ?, A4 w5 y' n# @5 @9 _1 w

      k2 [& K2 Y- q  _5 F3 ?$ H, h0 H3 q{
    # z6 F: b: l! l  "ProtocolConfiguration": {
    / G/ O- g  T- Z4 X- h$ V! @    "Magic": 123456,
    ! y$ B' U+ C+ V  t    "AddressVersion": 23,
    - y$ q! R  D9 D" B0 y; y    "SecondsPerBlock": 15,( c- F) G+ V  c" I0 F
        "LowPriorityThreshold": 0.001,     
    6 S9 v$ P3 ]& w  n    "StandbyValidators": [      "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3",      "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4",      "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",% N: p% q' Y* d" E, I2 Z  X" _6 S
    "03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f"
    * y, \/ [) n! c    ],
    0 u+ b/ r! _- v! H2 a6 a    "SeedList": [
    $ n8 h5 u& }, @$ o5 K! n      "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",
    0 Q; G) v* u! ^' \8 c" ]4 I      "137.116.171.134:10333"- H8 L" ?" x+ I0 w3 p# Q4 t
        ],
      }" C) M# O! K6 ?; K    "SystemFee": {
    ' V- T. }  t; ^# h" U      "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
        }
    $ k0 a1 ]& L  \" [+ g  }
      i3 Z" @- `3 r1 X8 [}
    ' I( [0 ^7 s% N4 p+ P3 N4 B

  • # {. V( |& n9 r/ V2 i1 f3 O配置每个节点的 config.json 文件,以便打开钱包,开启共识:% l! ~/ t" W0 c' P
  • Path:设置对应的钱包名称。
  • Password:钱包密码。
  • StartConsensus:设置为 true 开启共识。2 |7 `2 v, \; E% ~# M$ u6 m) g8 G! M: X
    1 U2 l& k! s6 B/ f: {
    "UnlockWallet": {
    / |& c+ K# B* M1 B$ y  "Path": "1.json",2 ~' L/ U% \: r
      "Password": "11111111",
    6 @; M' S9 N4 G! D. _% B  "StartConsensus": true,5 B6 X( u4 P! d2 t& P
      "IsActive": true% j! d# t0 p6 Y) `9 g* l8 d# {
    }
    ) H+ q8 a# h  y
    6 o, N- k0 z7 R, V3 ?: 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 启动节点,这时程序会自动打开钱包并开启共识。
    ! W5 c) i% f: ?- ?" R0 Z3 n3 R1 j如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:# @2 f" P! `8 Q4 P# N

    : R0 s/ V8 W" C  c  L4 个节点即使关掉一台依然可以达成共识,如图所示
    9 C, Y6 J3 S$ |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
    " E" t8 b8 S3 C' k0 j% F
  • 从 Github 上下载 NEO-GUI 并解压。
  • 修改 NEO-GUI 配置文件 protocol.json 使其连接到私有链中:  X" D2 P- P% m
  • StandbyValidators`:将前面创建的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。
    3 }% l- g$ r6 P
  • 配置 config.json 文件,设置端口与其它四个节点端口不冲突。如果端口冲突,NEO-GUI 将无法与 NEO-CLI 同时运行。
    3 h9 e. t0 Z! o! G5 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

  • # }; Y; x% {7 q1 i& I% S右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。: e* U3 D" K& @6 I$ ?" ~
  • ; d+ k, Y0 Y1 a
    输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。) V# W" j/ x4 J6 J9 v" R6 \

    ! c3 G' {1 I8 d8 W

  • 5 O. y% h  S2 R( _( C% u! Z点击 钱包 -> 重建钱包索引。
    ( E. J: }3 p. D
    4 a' E2 x4 G$ U4 r+ W% i
    0 U" o* i( _/ m: T/ q3 g$ L, ]
    ( g  j1 r1 i# `3 Z/ g" a[!Note]7 _" ]7 R% s( e( T# T4 x
    四个钱包都要添加多方签名地址,否则签名会失败。
    8 o0 o8 D/ B' s/ W4 F' u
      r0 B7 }$ C& G  i0 q
    你将看到合约地址中出现了 1 亿 NEO,如图所示。
    & U/ f, q3 a4 y+ @2 T4 R" m  ^: I3 E* y8 ~" M
    提取 NEO 到标准地址
    7 |4 N' o# H- C' o# ]进行如下操作,将 NEO 从合约地址转到标准地址中:% d0 N; M' l- g! W6 Y

  • 9 |: E. A( }) O; |打开四个钱包中的任意一个,点击 交易-> 转账。
    4 O* z# F4 {; |

  • $ X0 v+ K5 U- @7 R3 s9 ]/ Q6 k+ J输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。- E2 n; O' |/ T" ~1 `' w

  • - w1 n/ @& b7 P6 ^  b系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。" y3 J* X8 }/ e" {6 w
  • : b3 O4 P* w- A9 G
    打开第二个钱包,点击 交易 ->签名 。7 S7 `$ I/ \6 d  k; i1 c

  • - b$ }) g* Q+ n粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。, ^, F5 A# j. I* _5 b- f; R# C
  • . g( b& v) v. G: e
    打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。
    0 }$ ^% I9 s/ S3 }% g这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。
    ( Q4 X. T- q# ^$ o
  •   P# b/ R- V- V: Q
    点击 广播 完成转账交易。% x4 E% l5 t) V% m7 T, h
    等待片刻后将看到 1 亿 NEO 成功转入了标准地址。
    . i) S9 Q& {3 T# u
      a/ T4 ]: B) z2 t( q1 T
    $ {2 D) P* J5 q! Z& D* z" m! D
    5 j7 ]& D* B% X, [提取 GAS 到标准地址! ]! ?. m8 J3 _* Q
    打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。
    ' @) y0 K4 H* D5 |% a/ H8 G" z7 Y
    , y  _) ?) y+ z" ?( p接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13