Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

用虚拟机搭建NEO私有链

杨小公子君莫邪
170 0 0
用虚拟机搭建私有链: ?- @4 R7 ^/ b3 a: `6 `
本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。
! r( F/ l0 }: ~3 L2 ^, o配置虚拟机# i) }3 G! _7 l' l4 X, T! E1 e6 X
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。
7 A9 Y  O# Y: c, y) O
& T2 i; d2 u! K2 A创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。( i+ ^; I& q: |6 D

# c7 R( Y/ Z1 W0 i" i[!Note]' P8 v# w* {8 u3 {0 E# Y2 h
如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组
9 K8 t9 X4 ~& `% W5 x! W3 ZAzure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。& M5 ?- P( r% y

2 H2 m0 ?" F& x% q创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。
7 s) d; U  v) e2 \+ @& f1 T安装 NEO-CLI6 z% c' D8 f7 I/ r
分别在四台虚拟机上进行如下操作:7 n* f5 k/ J  k. |7 t8 |: K
  • 参考 安装 NEO-CLI ,安装 NEO 客户端。
  • 下载 SimplePolicy 插件并将解压后的 Plugins 文件夹拷贝到 neo-cli 目录下。, E6 p: Z' A' y* c, Y* J+ a
    8 _1 j9 p" U& b8 o* m
    创建钱包9 z* s# B3 J' s* f$ H1 N
  • 6 w8 U' E9 R5 ~) z9 E
    在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。6 I1 I1 U; ^% }

    ) i0 r/ r' T4 X4 ?
  • : n4 I. a; x( h/ _- b8 X; |  T
    将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的                                                                            list key 命令查看公钥再复制。; a4 @  T1 G4 N& `

  • 2 r0 o$ f4 `- n3 J将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。" ]+ L' J# S( T9 Z2 v; ^8 y

    % S+ |! F( r. X+ N6 _, A% k7 k3 n# v0 A
    修改节点配置文件# u/ t, Y3 N- y4 c5 p
  • $ x/ Q  G. x6 F! e: T
    配置每个节点的 protocol.json 文件 ,修改以下参数:" E" F2 m) `- T5 T# ~
  • Magic :Magic 用于识别消息的来源网络,指定不同的 Magic 确保 NEO 区块链中的不同网络信息在传输过程中不会发送到其它网络。Magic 的类型为 uint,注意填写的数值要在 [0 - 4294967295] 区间内。
  • StandbyValidators:将创建好的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。
    + M3 H% A: @4 A2 F8 f) m3 U1 P
      F3 `! k: t4 h( q0 B3 {2 p) N5 w
    {" U5 R2 \& ]/ H6 o' ]# ?5 R. g
      "ProtocolConfiguration": {  F( ]& d9 {/ N8 t7 h5 }
        "Magic": 123456,) L1 R* r2 x) ?: l9 m
        "AddressVersion": 23,
    ) M7 Z4 u$ l  o! I6 v    "SecondsPerBlock": 15,3 l  H* F9 R: K# S4 L3 i6 O3 ?
        "LowPriorityThreshold": 0.001,     
    & e; |; X5 z9 s- f    "StandbyValidators": [      "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3",      "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4",      "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",
    9 Q7 J" n; I* P0 { "03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f": I+ T- g- k5 Y1 M( B+ g  w6 k1 \
        ],
    : r8 o. }2 M% Y; H" |! g3 `6 ~6 c    "SeedList": [( ^% r# [6 R# a$ c  v( G
          "13.75.112.62:10333",/ N7 J! \9 r8 E5 F
          "137.116.173.200:10333",
    6 N( {; ~; l/ B1 c1 V0 {+ ]% `! _      "168.63.206.73:10333",
    + ]3 c/ u$ O- [- I( E      "137.116.171.134:10333"2 O! y# k* T1 x$ c
        ],* D1 t) I) A; e! x
        "SystemFee": {
    4 `8 Z2 d0 T% R  z) S9 X  C      "EnrollmentTransaction": 10,
    , f" x: ]1 N+ E9 |5 w. Y      "IssueTransaction": 5,* Z2 M  @/ K$ b1 l
          "PublishTransaction": 5,, Y4 }/ `9 C# [+ }5 g. F( {2 f
          "RegisterTransaction": 100" a+ w( h) T* y  L
        }
    , k5 U5 r) P  t/ N# O  }
    ( u: P% ]# J  j$ b' |' Z' Z}
    % c% N) \* y: S% n- X

  • 9 T8 l) {; u- W配置每个节点的 config.json 文件,以便打开钱包,开启共识:, w; ]$ o% [: i3 e/ E$ H+ F. v
  • Path:设置对应的钱包名称。
  • Password:钱包密码。
  • StartConsensus:设置为 true 开启共识。
    0 j: d& m$ g+ ?- U: U1 `; u
    + n8 K( Y$ u1 ]3 h
    "UnlockWallet": {
    ! [% g! e2 c' U4 Y& n/ @  "Path": "1.json",$ l8 i; [: T0 Z1 r# L$ y' W4 o$ K
      "Password": "11111111",8 O2 v  n& s1 @9 z1 J) d% W9 R
      "StartConsensus": true,
    2 T7 H/ X0 p5 f, x  "IsActive": true
    7 f, F, B4 ^& g}# x+ M- P( t, d$ S7 C; Y) S

    . D' m- X. h1 o0 F' b4 N) `" b  z' t1 P5 {8 _; M& n# q1 V
    启动私有链& Q* s. q% ~& E) L) Z
    在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。
    1 T9 p) Z. n5 [/ L- E$ L7 G如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:5 C5 |6 I% [' X' k0 i+ R

      x6 E* ^- _$ z: {: g4 个节点即使关掉一台依然可以达成共识,如图所示
    3 J# t/ l6 U* q+ O/ ]" n) `; `% O* M/ z7 U) \) P4 h8 X( E
    提取 NEO 和 GAS
    : v, p+ c$ Q3 G1 S在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。
    " Z. x) R# e: b& O% L2 Y. R8 Q* }) L安装并配置 NEO-GUI
    6 ?4 ^# n1 ~% R
  • 从 Github 上下载 NEO-GUI 并解压。
  • 修改 NEO-GUI 配置文件 protocol.json 使其连接到私有链中:4 \) R& N, V5 v/ s
  • StandbyValidators`:将前面创建的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。
    / i! U$ T2 r* s% {' }  r- x
  • 配置 config.json 文件,设置端口与其它四个节点端口不冲突。如果端口冲突,NEO-GUI 将无法与 NEO-CLI 同时运行。
    , V/ A; Z% s3 z: [
    5 C! ~9 }% c+ j) x2 F6 k. D- A运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。1 `2 ~4 e$ x( P/ _3 d% S
    创建多方签名地址
    8 a# `0 m9 J% ?  w# j& z2 R( S在 NEO-GUI 中依次打开四个钱包,进行以下操作:
    3 l) |# S$ V" A' r

  • / B: X( Z* b+ ]" e右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。" x0 V# M0 ~  Z* L

  •   [4 e, q. j) y( e0 x7 ^! J6 \输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。5 Y. v' D, ^' M* B1 \3 {& |

    2 E. a' F* a( f2 Z6 J, c. q
  • ! X( m% T8 O# h' ?' o
    点击 钱包 -> 重建钱包索引。8 J* I* Z0 q& E- ]3 `$ r: c! U

    ) I. N" p% V+ Q8 X# |1 u' a/ I6 O" `* b
    3 x- B; D2 X: c- \! g9 \
    2 j) l: ~# L7 f  K' {) \3 U1 ~# g[!Note], [2 ?7 q5 F; x9 o, P0 A  u5 |
    四个钱包都要添加多方签名地址,否则签名会失败。/ D. l7 y7 g. @8 A
    4 q# A$ M& |& e5 E1 c
    你将看到合约地址中出现了 1 亿 NEO,如图所示。
    2 ^- P4 E5 ?+ |+ I, j! G5 ?, t6 E5 ~% f0 B
    提取 NEO 到标准地址' W. x: X9 U. m
    进行如下操作,将 NEO 从合约地址转到标准地址中:
    , Y+ J8 p# P+ D  B
  • 7 S) M; n  J4 H8 j- X
    打开四个钱包中的任意一个,点击 交易-> 转账。2 x& J/ a1 v  V# \" n) D
  • ; W9 F8 @& x* X# H2 a. e. i
    输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。+ u% n! @* G. `3 X+ g

  • * t& n9 \  m" j3 Y/ t( O系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。
    5 t& V. V+ P3 J; T
  • 4 }8 T: E$ V( F
    打开第二个钱包,点击 交易 ->签名 。9 q) e7 G# ?9 F& j6 k, N0 Y( {

  • - ^. ]7 \3 b2 s# i1 y8 t+ Q, r0 @$ t6 z粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。6 t5 @% R$ o7 x, h
  • . K7 G! o. u2 j0 w. u+ S5 q& ]
    打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。
    . [. [2 y9 ]/ |: u! ^这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。; |( U* m+ i: t2 f( H

  • ! O* m" T3 R6 G1 d点击 广播 完成转账交易。
    ' L, ~) i$ @/ Y( l: T# V等待片刻后将看到 1 亿 NEO 成功转入了标准地址。2 q& p" \  g2 b5 M* Q4 j9 y- u, p
    + F  d+ ^4 h! h
    & ~" i" c. Q% ~
    , L. s0 ~6 Y) b: A$ T4 J
    提取 GAS 到标准地址$ @, D' Z- c- w
    打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。
    & p2 k0 d2 {7 @1 s: G+ N
    8 t. `/ E# P0 n& r; J& ~2 I接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13