Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

用虚拟机搭建NEO私有链

杨小公子君莫邪
98 0 0
用虚拟机搭建私有链
0 Q* r5 a5 P: T- `+ E  ^. \本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。
! r# f' {: F$ T+ d; n) l配置虚拟机( s, ]$ f. u2 _- b. U& K9 B
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。# P1 [5 i( m! j4 b% s8 H1 v
- q6 w$ p5 F, U; t
创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。
& J, Z4 w* v  r& p  H
& m/ F& L' {  k. i' O2 ^[!Note]1 K! i- o! L+ v3 r. z
如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组
7 r! _  _9 \$ I5 S4 ~. uAzure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。* Z; j& \$ ^$ }7 K" p

+ O: {8 X  C3 A" Q: `+ d7 g8 [创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。
: p( Q1 m6 Q* S" ~# X: u安装 NEO-CLI
! x# s2 H1 z; U$ s3 y3 g6 H分别在四台虚拟机上进行如下操作:
- p' R* t" ^: G3 [5 }! V
  • 参考 安装 NEO-CLI ,安装 NEO 客户端。
  • 下载 SimplePolicy 插件并将解压后的 Plugins 文件夹拷贝到 neo-cli 目录下。
    9 S9 z* Z1 M7 Q* L5 h) g6 f1 m' _+ X, X, _
    创建钱包
    ' V9 O. M) ^* ]& s

  • & l3 D: M, X! Q# \4 E2 p在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。
    + b+ l: W, y4 G- W! ^3 i& I1 N, T+ x
  • ; T. N3 d- @7 z9 H
    将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的                                                                            list key 命令查看公钥再复制。
    % L* [$ q/ P& P$ ?7 j

  • ' V8 C5 Z$ y; Z8 @5 ~将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。/ W3 l' ]! `/ q1 b' |$ J% L

    5 K$ r# U& u6 P7 S, w. J
    & u7 {7 ^9 v+ Z; A6 }8 |% X修改节点配置文件
    - P# p+ }: u0 w- e

  • & ?2 d7 Z) B9 F% {, i  r9 w5 E( C+ e配置每个节点的 protocol.json 文件 ,修改以下参数:
    : ~  \; x5 V3 {' y. e) R3 I" Z3 r
  • Magic :Magic 用于识别消息的来源网络,指定不同的 Magic 确保 NEO 区块链中的不同网络信息在传输过程中不会发送到其它网络。Magic 的类型为 uint,注意填写的数值要在 [0 - 4294967295] 区间内。
  • StandbyValidators:将创建好的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。
      H5 d6 |; b) p. V4 A: x
    5 }" w" k8 C0 e8 h7 Z) e' b' r- g
    {/ H) Y* \) l! V2 q
      "ProtocolConfiguration": {
    2 \1 _' @# X, q7 Y    "Magic": 123456,( B; h& o7 S! O* C8 I- h
        "AddressVersion": 23,
    $ p8 Q& F2 z$ a    "SecondsPerBlock": 15,
    ) M0 y1 {+ S/ x) |1 s/ R    "LowPriorityThreshold": 0.001,     
    , W6 D4 h0 ~) N# S9 ^- w5 d& E    "StandbyValidators": [      "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3",      "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4",      "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",, Y. I4 h! ^" n; B% h& x
    "03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f"" O! T' A+ T& M
        ],0 a0 Y2 F, i8 E1 M6 y
        "SeedList": [) x+ H% l2 D0 v
          "13.75.112.62:10333"," A. c1 o& v& y5 c- \- G
          "137.116.173.200:10333",; L: ?0 x+ E# h. E( f& K
          "168.63.206.73:10333",- r8 P9 j* @+ _# x- O5 R& f
          "137.116.171.134:10333"1 U% O% S9 |: W- `
        ],, A' H' q0 L) o3 t
        "SystemFee": {. B5 c6 k3 `3 T$ _: {
          "EnrollmentTransaction": 10," \" V8 d5 q2 R7 G  ]
          "IssueTransaction": 5,
    : \0 g" ]! f4 X3 ~) L      "PublishTransaction": 5,
    5 p  P  I+ R! u7 b      "RegisterTransaction": 100
    ' ]# o  c% I8 J- P9 Q; X& i+ Y" }$ O    }
    , ~. g# ?9 j. M; \& C1 D$ k  }
    ' R0 r7 `  s* [# d6 K5 R1 c+ Y}$ ?0 A+ Z  c# [

  • 1 }( i6 O+ E. Q% o) E4 O& t1 w配置每个节点的 config.json 文件,以便打开钱包,开启共识:
    % K6 D- {/ P! i$ P
  • Path:设置对应的钱包名称。
  • Password:钱包密码。
  • StartConsensus:设置为 true 开启共识。2 o0 u1 ]/ Z. R' f+ {: ]) j  q
    6 ^! P* O* {  L+ M' E
    "UnlockWallet": {+ ^) {6 g3 {7 X% H- E: V
      "Path": "1.json",
    $ |* a! X+ f. S" r% n0 D  z  "Password": "11111111",- l2 ^, d) W3 |
      "StartConsensus": true,; j# g0 k( k9 G3 [
      "IsActive": true
    4 V, u7 k- a& A% X7 L" l6 |0 @}1 K8 i7 P4 ~- y: V1 V+ L4 I

    6 J" n/ E9 b9 R% M7 e% C1 p* v& e4 `) x+ N7 f
    启动私有链
    6 [  d  H1 X* x1 I9 Z# b& [; @在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。
    ; }) U' m) K  w# N如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:& H0 i6 Z1 C; N; G( N# E" o7 ~

    8 ?; r9 q% a7 b' t" ~3 Z4 个节点即使关掉一台依然可以达成共识,如图所示8 n$ [) u" \* e6 _* I7 K

    / J! ^$ p. w0 U3 n1 `提取 NEO 和 GAS
    4 l! C$ W$ C) l/ h6 V9 D% ]# Q4 K在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。0 p4 q3 z! d+ t0 V
    安装并配置 NEO-GUI
    9 A+ z. B$ Z5 |7 F1 q& z2 z
  • 从 Github 上下载 NEO-GUI 并解压。
  • 修改 NEO-GUI 配置文件 protocol.json 使其连接到私有链中:
    ' g/ Q. x  ?7 l4 @7 `
  • StandbyValidators`:将前面创建的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。5 C; b+ F. z% b( |8 Z% y" Y
  • 配置 config.json 文件,设置端口与其它四个节点端口不冲突。如果端口冲突,NEO-GUI 将无法与 NEO-CLI 同时运行。
    8 g; a: @& {4 t0 Y6 ?: ]" a" V
    " ?7 t; W8 Y4 C  i运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。$ k1 {& m0 u( P
    创建多方签名地址
    % h7 G6 }& U: N3 ]" y在 NEO-GUI 中依次打开四个钱包,进行以下操作:
    0 `8 M# [9 S0 F1 \
  • 5 k5 u# o% \: X% P* p4 {" M
    右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。1 [& d& Q- l9 F: ]$ q6 z
  • 8 ~2 C9 K/ S4 \% ~. F9 S
    输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。2 l  r6 _% s0 V0 P

    - Y3 i- r$ g- N4 N& R
  • / D: J! U8 T# t9 f5 B
    点击 钱包 -> 重建钱包索引。
    5 G# L5 G/ u. X+ h& X
    ; `% K8 ^% O7 c! Y0 L8 O2 x! P0 t: d
    # r. `4 G' ^9 u" H
    [!Note]* w1 o, t; |5 W1 q+ K2 [8 R
    四个钱包都要添加多方签名地址,否则签名会失败。; z" ]5 V) P7 K3 n
    $ L# r' U" |2 e; Q
    你将看到合约地址中出现了 1 亿 NEO,如图所示。: R$ P0 |; G7 W  R

    ! L' W' E$ o* v提取 NEO 到标准地址
    " z. d3 @% G6 @* [0 o9 h进行如下操作,将 NEO 从合约地址转到标准地址中:
    # Y! {' o$ C9 }/ M8 B  E* m

  • 5 Z% z. \6 k& M打开四个钱包中的任意一个,点击 交易-> 转账。( [, d4 v+ k7 Y/ M

  • 7 m5 i) O6 i. r3 \6 H输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。
    . P7 j' X* ]" ]" e9 J& o: Z
  • & J( s1 m/ `1 G! w! C' w% O
    系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。. U2 X5 [0 E! A4 f- j
  • 9 v" c: u- |9 f! G
    打开第二个钱包,点击 交易 ->签名 。
    0 M- ?% \' e  _9 G" R* N" r
  • ; J5 {2 [) `- C) M0 [; e
    粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。9 o- Q# j, x3 h/ i( ]$ y

  • " i, T2 ^7 [# N4 u打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。# g5 l! T5 t0 p6 K! n" L7 _6 Y( {0 B, W
    这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。
    2 ?, {/ i. U7 A4 {$ A1 p" t$ B

  • 8 N& y5 q! u" t; J. w点击 广播 完成转账交易。
    / e% M; R% X+ w- k: }等待片刻后将看到 1 亿 NEO 成功转入了标准地址。
    # |% B+ ~: |4 |' ?8 p' n- I7 q& `
      P7 q3 ~2 B7 E% J3 d' x8 @
    5 K0 p! z- M$ S# Q' N- ~6 Q4 J
    1 @3 M: ~  |& Y! w$ }提取 GAS 到标准地址
    - @7 K+ i4 N" d1 E打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。
      _$ V. V: @$ K% k; K" o( Q7 P$ @: C
    接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13