Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

用虚拟机搭建NEO私有链

杨小公子君莫邪
168 0 0
用虚拟机搭建私有链9 v- h  Z3 p2 h4 u4 D
本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。
! v$ K* o3 u3 V7 s: |配置虚拟机4 I# c+ {, p( p2 l( [1 D
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。
3 i) t$ C2 l8 h
: ?- {) f0 C& F- ]( d+ w$ l创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。$ l! e, a+ d8 K

  s2 p+ I" w3 c. T+ @[!Note]3 t0 _' n0 q  ?
如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组/ `, t( u# i. X: y2 F( R. Q7 R
Azure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。
& S8 V* w; c; b: V/ b8 v

6 Q4 Y  ^3 \3 @% z! Z创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。$ F2 s$ X- k; j8 H( i8 i+ L  [
安装 NEO-CLI( B- B: g, X* L9 F  S( t5 E% P* ~" }
分别在四台虚拟机上进行如下操作:
2 L* B. ^3 ]2 M3 Y/ C* _7 a
  • 参考 安装 NEO-CLI ,安装 NEO 客户端。
  • 下载 SimplePolicy 插件并将解压后的 Plugins 文件夹拷贝到 neo-cli 目录下。& m2 C; C% F1 m$ _1 ~- l. Z! h
    $ v4 B7 o( h5 u5 Z% l
    创建钱包7 ?# n  h. c; j: ?7 B- E

  • 3 l0 R0 W5 z; _+ Y1 S* v在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。
    # j9 H  g% p5 b  a
    0 O* J& H( ^7 \7 c+ R: W

  • ( Z& G2 Z7 o" \; a* R4 P将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的                                                                            list key 命令查看公钥再复制。
    6 M! \( t2 U  T! E2 @

  • , N: |( N+ ], m. z& ]5 r将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。
    : F. I! }; W% |( |) _; K: r9 q" e8 ?4 K( p% z0 c* M

      d! J3 Q+ f" i修改节点配置文件
    1 o4 f& O" k* p& L8 t

  • 6 X/ L: @, j2 V) b配置每个节点的 protocol.json 文件 ,修改以下参数:
    ) N; Y0 R0 H% a/ U
  • Magic :Magic 用于识别消息的来源网络,指定不同的 Magic 确保 NEO 区块链中的不同网络信息在传输过程中不会发送到其它网络。Magic 的类型为 uint,注意填写的数值要在 [0 - 4294967295] 区间内。
  • StandbyValidators:将创建好的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。0 m- Z$ t' X' q2 J& t( G6 R
    " F& p/ ?0 w0 \4 _
    {8 [2 m- A# \, _" `) k1 P
      "ProtocolConfiguration": {
    ) _4 m. j% c- T/ b) D! p5 d    "Magic": 123456,8 J; X( G6 `7 d' e# L$ I
        "AddressVersion": 23,  @+ D$ W9 v! J
        "SecondsPerBlock": 15,
    * Z; }" t+ h7 p    "LowPriorityThreshold": 0.001,     
    9 q* i, }3 ^/ c' f8 v- }5 d    "StandbyValidators": [      "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3",      "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4",      "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",
    2 ^) [$ G8 m& r. g "03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f"
    " O0 p. Q# w" A+ R6 P( |    ]," x& l7 j5 q- v$ [! b4 W/ X
        "SeedList": [
    . Q1 M, A  I5 j3 i, Z. Q      "13.75.112.62:10333",2 F9 n3 ~4 [0 T0 S3 F
          "137.116.173.200:10333",4 F  ]( U2 A/ ]; p& A2 B4 r
          "168.63.206.73:10333",5 L2 z1 Z: T' h
          "137.116.171.134:10333"
    ' v. o- _  L9 c5 L5 I: ~    ],
      Z% O. ~/ L' p9 a: a. h- A% x    "SystemFee": {+ b9 _7 }$ y  w3 K5 I
          "EnrollmentTransaction": 10,
    7 r/ g* y0 H. j1 Y1 t+ `5 \      "IssueTransaction": 5,
    & f1 u( o' P5 w, ]! [      "PublishTransaction": 5,: ]# |% C7 r+ t% i1 k( v
          "RegisterTransaction": 100) s1 T) p) F3 F9 B# h# ?
        }
    , S2 G! E; ?2 e# W. ^! q3 G9 X  }
    * b) {5 x& m2 \" \}
    5 U% J" j0 w" Q0 T  C  @
  • - v1 J6 h( w! x# |
    配置每个节点的 config.json 文件,以便打开钱包,开启共识:; Q. J0 U: b$ i
  • Path:设置对应的钱包名称。
  • Password:钱包密码。
  • StartConsensus:设置为 true 开启共识。
    1 ~2 p% l3 O( }; F. x, q
    * ^9 @* d5 }+ z- T" _9 b3 r2 f$ e
    "UnlockWallet": {1 t7 X0 S8 j1 \
      "Path": "1.json",
    ) e# `) g  T+ V  "Password": "11111111",! M! t' ]" k& d1 t8 Y6 t
      "StartConsensus": true,( h3 i, }+ n4 j( r1 \- o
      "IsActive": true
    , D/ q6 ]: q6 P9 K0 {}2 @  T- ?9 y) O& }  H
    . y; A- [0 Q% q. D) D
    " M, X% Y" O. l
    启动私有链
    ' u" L4 Q9 S9 q* P在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。
    + q4 X$ l. o' X, {* N0 V( t如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:
    - Y6 B+ k4 N, X, T5 K6 p4 H3 \& N- R' Q- D! f+ m
    4 个节点即使关掉一台依然可以达成共识,如图所示+ u) u! Z! B) Z4 o9 x) o7 _

    8 t7 }+ B+ n" e- B; g% Z提取 NEO 和 GAS% V4 i/ U  O( y" p  |  b
    在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。
    # X; @: @1 V8 n6 s安装并配置 NEO-GUI
    / b8 b# _5 L4 S# i
  • 从 Github 上下载 NEO-GUI 并解压。
  • 修改 NEO-GUI 配置文件 protocol.json 使其连接到私有链中:
    7 v9 H! d) d% y8 Q
  • StandbyValidators`:将前面创建的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。6 h4 @2 v! t, a+ D7 L9 a: G- L
  • 配置 config.json 文件,设置端口与其它四个节点端口不冲突。如果端口冲突,NEO-GUI 将无法与 NEO-CLI 同时运行。
    ' I( t. W. |) j
    1 o6 C; y! X* z) N+ Z运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。
    * Q. U! k! [! x/ X" A7 R- j) Z创建多方签名地址+ i/ o: K* F% s% x0 K
    在 NEO-GUI 中依次打开四个钱包,进行以下操作:7 e6 J* f1 f2 G' k3 A0 J/ D

  • 9 ?  s7 Q, n& b) \* U  G5 P$ S9 i右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。4 ]. l& p% s1 f  g

  • & R, l3 O* n, c) K* g- _5 |5 i7 _输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。
    / {. h" Q9 c( U& X4 V& |
    % G+ n( b3 Z. P' `& p0 @

  • + e' f+ T! c4 ~- s点击 钱包 -> 重建钱包索引。! a" e; F7 s, B. |8 I

    - G4 q$ x( H- u# {$ @6 q7 R$ H8 C

    + ^1 o( C  d. Z, |[!Note]8 @( |; [' \& m7 c7 c
    四个钱包都要添加多方签名地址,否则签名会失败。
    0 J( x9 z5 p2 G! R+ I0 e$ M8 Y* N
    $ @& r6 X2 S! Y+ T! w
    你将看到合约地址中出现了 1 亿 NEO,如图所示。
    $ D5 W& P6 t$ F. q' S& G; t
    # U* j- G4 U6 o  N' X: f/ i提取 NEO 到标准地址+ U0 S1 d7 }3 U) ?0 e; C# v/ I3 N% {
    进行如下操作,将 NEO 从合约地址转到标准地址中:) S$ H1 d5 `7 f: Z8 L5 m6 j

  • 5 C4 S4 a, g8 _, M+ D: C! p打开四个钱包中的任意一个,点击 交易-> 转账。. e1 N- R! e. D, g9 k% O

  • $ ]) p. L) E0 A' `3 Q4 d7 z0 P输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。
    1 W' _& B& q9 l! q
  • . t% P" ]$ R. Z% {+ O
    系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。- r1 I/ w  K2 U0 v" L" f

  • 8 `+ g- f0 ~% U. `. A打开第二个钱包,点击 交易 ->签名 。) a. [6 |3 k: z9 ?
  • 6 v! F6 o+ J) o5 T+ ^
    粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。; k% U% h: J( o8 L

  • 4 s: V0 x. k) A, v1 F3 Z* K0 u3 g打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。" D! r8 [% \+ B
    这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。+ O$ S4 h- A3 j- ?( ~% }) q; N0 I

  • 7 L7 C4 q" @  ?4 n1 v2 d9 M* K点击 广播 完成转账交易。- h  t0 L0 d5 O: y+ @
    等待片刻后将看到 1 亿 NEO 成功转入了标准地址。- J. f7 q! D4 V  e3 n
    0 }" T: H$ h+ j$ e; O

    & {" d/ ?  z# d) \4 {7 Z$ l4 g, n* {, s. }" v
    提取 GAS 到标准地址
    6 z( x( O; s% t; s& g! z7 z打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。
    6 q2 y) f4 B5 p! b0 }) q3 g; Q7 t% H, j9 S- p+ E2 @4 [/ m
    接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13