Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

用虚拟机搭建NEO私有链

杨小公子君莫邪
167 0 0
用虚拟机搭建私有链
" n7 p- {* A8 u0 \) C' m- |本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。
9 y8 x& w3 s3 G5 c  _8 o0 t配置虚拟机
" `+ t* t. F# p4 k. A1 M! E7 [  X' FNEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。
5 u% l% P9 \9 Z
/ Y6 c: B0 A- s# N; @创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。
2 r. b( i; B$ `
/ S' o! R9 `' M3 A& e6 Y[!Note]
, G% p+ n6 q9 P/ [0 P" n0 `如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组
" J  X$ p0 _; p, j3 P- `Azure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。
/ X& `. B* s, G/ a3 U6 m
9 A/ r* D% ?0 X6 }- ^; \, i
创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。
( e9 V! y& T9 m$ `3 _安装 NEO-CLI
1 `% a% y) |; b分别在四台虚拟机上进行如下操作:
) b% Q+ a5 }) p0 E8 ?) U+ @
  • 参考 安装 NEO-CLI ,安装 NEO 客户端。
  • 下载 SimplePolicy 插件并将解压后的 Plugins 文件夹拷贝到 neo-cli 目录下。
    1 I- F; G" O* y) _
    2 p- \  Q% v1 E) L$ X创建钱包
    $ ]) ]1 R3 T6 q
  • - t0 a$ a2 \: ~+ `; \& O( h
    在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。
    # J9 ]% Y2 `4 |( r8 T
    ; N$ f3 _1 Q  c4 Z0 e
  • 6 i5 A3 z8 h* S! J: i) D
    将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的                                                                            list key 命令查看公钥再复制。% ]7 [- Q0 x$ u. x
  • ( g7 @2 X9 J  t" q
    将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。
    ! M1 T3 a! |# \* F5 w' F
    . a: D/ m5 q  V+ d' z: D2 s# E, U& {
    + G- a0 h) L5 P5 Y# w修改节点配置文件
    2 x0 ?, p* u, Q( @: h: f
  • 3 d! ?# o4 y# K& g/ u& l* k" j
    配置每个节点的 protocol.json 文件 ,修改以下参数:, j4 Q4 X/ c0 t
  • Magic :Magic 用于识别消息的来源网络,指定不同的 Magic 确保 NEO 区块链中的不同网络信息在传输过程中不会发送到其它网络。Magic 的类型为 uint,注意填写的数值要在 [0 - 4294967295] 区间内。
  • StandbyValidators:将创建好的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。
    4 B- F- I- ]* r" X* T+ X2 v- M+ E

    $ F7 U) p5 q7 d$ m1 w) O{7 I/ p+ D( g( ~1 n: o5 p5 |* d
      "ProtocolConfiguration": {* {4 r  E2 q: ~6 z7 {' z
        "Magic": 123456,
      t$ P  J# G0 q4 B- U    "AddressVersion": 23,
    7 p# j3 z4 X/ ?+ D% p    "SecondsPerBlock": 15,
    7 e$ m/ l6 l0 F    "LowPriorityThreshold": 0.001,     
    & O4 m  S0 Z. u5 ^, g. T- k4 D    "StandbyValidators": [      "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3",      "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4",      "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",0 s; w3 ^6 r$ d! B+ `( v. Y/ Z
    "03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f"9 p* e: p* ~' L
        ],
    & J/ `. |9 {) H, u4 w    "SeedList": [  `" z- x0 `. K8 D
          "13.75.112.62:10333",
    6 j) Y! U: i2 `) @& c4 n      "137.116.173.200:10333",
    # ~5 m! Q& x( O2 ]1 ~/ H      "168.63.206.73:10333",
    2 y8 h$ c% W& W% A4 c' A7 \      "137.116.171.134:10333"$ s8 K' S& g: m, m
        ],
    3 }( t" G+ @% L# ~: T$ \    "SystemFee": {( E" \3 U3 g3 L
          "EnrollmentTransaction": 10,9 Y( w# r; D0 r+ \8 c/ V& p
          "IssueTransaction": 5,
      s' G5 @3 w" J0 K2 r      "PublishTransaction": 5,; O/ \/ l. ]5 d* N" X5 _
          "RegisterTransaction": 100( u! B, e/ x+ j7 T
        }  Q  s6 c7 e8 F0 |
      }/ L- P# L5 R6 C$ z2 B
    }% B- s- ?" f% V9 E
  • - ~4 o: {9 ~( h( Y5 A# d
    配置每个节点的 config.json 文件,以便打开钱包,开启共识:
    7 s8 u% x1 u+ S' e! n6 ^3 K5 H
  • Path:设置对应的钱包名称。
  • Password:钱包密码。
  • StartConsensus:设置为 true 开启共识。
    0 J+ F/ S- L+ Q' V% q: E
    ( f: {: Z! Q" \5 b
    "UnlockWallet": {
    , ?" U5 k7 z$ J  "Path": "1.json",
    & I( b7 m% M8 |, F; ?) S3 D  "Password": "11111111",
    1 G6 ?/ Q4 `) p2 F$ _5 F  "StartConsensus": true,) Y( q* @6 F( s5 P9 H& P
      "IsActive": true. Q( f( Y! q/ x, P& Y2 ~
    }7 v& I3 Q) G7 T$ h; [6 h$ z1 m

    * c( }, T6 o% }0 G
    * x9 ]8 W* U0 g( a启动私有链5 }( N. @3 {6 p7 Q, A' j
    在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。
    0 `$ o9 e! S* n/ }: M" q如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:
    7 B+ t! m% [$ N& c* N" }
    ( U+ K3 i/ C) c5 B, U, X4 个节点即使关掉一台依然可以达成共识,如图所示
    - i2 F. v# X( h8 E  E# F. U' k4 j3 _
    提取 NEO 和 GAS% n' {4 T5 y/ c6 O2 S0 t7 r: F
    在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。1 l6 a: W7 L. t3 q
    安装并配置 NEO-GUI/ U& g& K% z0 O8 N; d# Q7 E
  • 从 Github 上下载 NEO-GUI 并解压。
  • 修改 NEO-GUI 配置文件 protocol.json 使其连接到私有链中:! `3 p$ M6 G4 c: N
  • StandbyValidators`:将前面创建的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。) c9 \( K3 T- r$ j( ~% y# O" [
  • 配置 config.json 文件,设置端口与其它四个节点端口不冲突。如果端口冲突,NEO-GUI 将无法与 NEO-CLI 同时运行。+ a0 m0 a, |  J1 {0 V

    4 z+ c' W* K7 y/ C4 S  v9 ?运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。
    % j4 m( w% M5 a! g$ H1 v4 r) j创建多方签名地址# J( @+ X! ^2 p/ F0 B. E2 \
    在 NEO-GUI 中依次打开四个钱包,进行以下操作:
    . M7 F' |+ Y: H+ c0 b9 {/ }3 Y
  • . H( C. c. ]! ~
    右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。4 X; y5 T4 {$ u4 R6 D

  • 2 J; k9 p1 |8 V; y' R8 O输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。
    ; |/ m  E6 }+ q5 O
    & p4 u# d9 ^) f. i4 N! ]& d

  • + R9 p8 N$ C8 y点击 钱包 -> 重建钱包索引。4 `# @8 ?3 P+ c

    - ^) m: j! ~, T$ r0 ~5 V$ w( }7 D7 x! N2 p
    : c2 {: e% A1 A! s, @" Y- j
    [!Note]4 C+ m7 y4 U, s+ C! |  p- X
    四个钱包都要添加多方签名地址,否则签名会失败。0 ]: @4 ?$ a7 p

    3 r6 X9 t  r9 B) I0 t; U你将看到合约地址中出现了 1 亿 NEO,如图所示。# Z+ _- H5 h% b0 D- ]
    ' p& L. m+ B5 n1 }+ l
    提取 NEO 到标准地址, L+ T4 v! m" g7 f' w  p
    进行如下操作,将 NEO 从合约地址转到标准地址中:
    6 [, w) `0 W2 k+ c, F
  • 8 v, d5 v- i" a( \% W
    打开四个钱包中的任意一个,点击 交易-> 转账。
    ; x$ b- ^8 ?0 {& L: P/ J

  • 7 a, I7 K) O" p1 S& A6 l% k$ w: P输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。
    . g, T- K. g) X" d5 Y* m9 D

  • ) m9 N& {; l4 ?, [系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。
    " L  I2 U; j) X+ G: u

  • ( X5 [8 j& E$ @% H) o2 `- r打开第二个钱包,点击 交易 ->签名 。
    + m% _4 d( f6 u

  • 7 W4 C  R5 L; c3 Q7 C粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。& E5 n: l1 }4 v# i( a; ?

  • # D- [5 c" \0 w5 w3 c打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。6 Y9 w3 s$ S* S; c( K8 }6 q
    这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。
    % o6 V. `' z" [5 v; _$ ?& M
  • $ {& |, _* y. K% V/ Y
    点击 广播 完成转账交易。
    " M+ d8 A. u/ I. _+ K- p2 @' s( p8 v4 W等待片刻后将看到 1 亿 NEO 成功转入了标准地址。- P8 T1 g$ U  X0 I- A- C$ e/ S3 j

      y3 O0 i& X4 S3 h) M3 \0 I' s" D& ]/ {/ W4 C7 j" {" ?
    $ ~9 r" Q7 e5 y6 e  c
    提取 GAS 到标准地址" {; o* N0 ^9 C0 e; _! s
    打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。4 C5 W! Z" ^7 U8 s5 j4 x2 y
    . S  S- P( |) h! z! d
    接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13