Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

用虚拟机搭建NEO私有链

杨小公子君莫邪
160 0 0
用虚拟机搭建私有链0 @; l7 x1 ^: K2 k( ]+ C
本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。6 |/ z) h' }( \) M: L+ H
配置虚拟机
/ v9 O8 Z3 ?; N0 HNEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。
2 T5 y2 T6 g% G
- {- W* O9 J- x) D' c创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。5 Q$ T4 k$ h- w1 w: W

$ `% U+ g* u& p8 L[!Note]
, ~+ k, z2 @, b& [% q( D如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组
1 c2 j1 }. B5 S3 F( [! F* A" WAzure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。1 q( j/ U7 K" \. w& U# V

+ W: F+ Q  @$ H8 I; O创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。
/ s  i  l- F! H3 ^2 ^3 X安装 NEO-CLI
0 F1 Z5 J2 q" H/ G, g9 @5 d! B分别在四台虚拟机上进行如下操作:8 K3 i5 g5 [, ?% S1 K
  • 参考 安装 NEO-CLI ,安装 NEO 客户端。
  • 下载 SimplePolicy 插件并将解压后的 Plugins 文件夹拷贝到 neo-cli 目录下。5 r; `7 `5 b) s3 g- `5 m3 W

    5 [$ w: R# ?& h1 ?创建钱包3 O. g4 @* h, |+ |' c8 o

  • ) L3 V6 H( f: u: O2 U$ P在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。
    9 ~- v. T. `8 N9 E( d
    0 o4 h# o, n1 w9 y, _; B- T
  • 5 t0 h% x! x/ w( _- a$ L, V/ d6 m
    将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的                                                                            list key 命令查看公钥再复制。
    7 h' v! X) X' x1 A( l2 q
  • , Z" F. T6 c1 L6 J5 v
    将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。. R" I- H" X4 Y+ p' E& M

    ) @  _4 S  r3 F' B) Q1 e' J% {  f& ?9 V
    修改节点配置文件
    " f3 u  \, l1 i- K
  •   r3 k. Y) w: U- f! I( W
    配置每个节点的 protocol.json 文件 ,修改以下参数:9 T6 P: B" R5 D# j
  • Magic :Magic 用于识别消息的来源网络,指定不同的 Magic 确保 NEO 区块链中的不同网络信息在传输过程中不会发送到其它网络。Magic 的类型为 uint,注意填写的数值要在 [0 - 4294967295] 区间内。
  • StandbyValidators:将创建好的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。! ?  ], \$ j& R" H3 i7 d

    9 u0 Z* _" A5 t# A. S, [$ _9 j9 y{
      a9 b6 u8 Z/ H1 }  "ProtocolConfiguration": {$ P6 K9 R6 V& _% N3 @
        "Magic": 123456,8 A- X' y7 a: i0 n* t6 n1 a/ G- k' A6 x
        "AddressVersion": 23,
    - ]' M" ^" S0 F+ G4 t0 r1 i    "SecondsPerBlock": 15,  F# O  T) Y! m
        "LowPriorityThreshold": 0.001,     3 Q; b7 d  S; ~2 w) V' N, r, I
        "StandbyValidators": [      "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3",      "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4",      "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",  Y. V6 j  m  K
    "03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f"
    ) Y+ `! }0 f* r2 d    ],8 n! _) s# G% B  ?3 z" _! x
        "SeedList": [' q, Z* k7 S4 P- z6 E# |; P
          "13.75.112.62:10333",9 V! n  L' Q3 Z4 ~, b( ]- w' L! t
          "137.116.173.200:10333",
    : A4 h2 A) \  L+ f      "168.63.206.73:10333",  C* C% M0 f5 H6 V; I1 s
          "137.116.171.134:10333"
    + ?5 Y3 x2 a' r& k    ],, H7 k, y& |! q+ J+ K; ^
        "SystemFee": {5 u& H1 D, d8 i3 I' s  X
          "EnrollmentTransaction": 10,
    8 b( A7 H. L) m3 C* [$ G2 n  F/ \) C      "IssueTransaction": 5,1 g2 R4 {6 P/ Q9 \& Y
          "PublishTransaction": 5,
    $ L: l* u# r- V" M# x      "RegisterTransaction": 100; S! O% e& s6 G0 Y7 _) @6 b
        }
    ) T9 j2 F$ G( Q  }
    + g0 S( O7 E, W# N}
    ! v+ d- k$ g; K) \
  • 2 ?6 V; I% X* s# p/ u5 H
    配置每个节点的 config.json 文件,以便打开钱包,开启共识:
    1 G5 r& T& a1 d' j, }
  • Path:设置对应的钱包名称。
  • Password:钱包密码。
  • StartConsensus:设置为 true 开启共识。
    ' h0 L" e) I1 r' T/ f. v
    " V" _. ^. p8 `4 H
    "UnlockWallet": {0 ~. S- |; E2 a2 p, X4 {0 P) n
      "Path": "1.json",9 I/ c/ F- x* i- C1 ?% N) A1 l; O
      "Password": "11111111",
    $ \: Y- i9 s' i7 F, R: r  "StartConsensus": true,+ i3 m" S# \. v+ |6 Q( `/ L
      "IsActive": true
    0 x" c& g6 n/ r: `3 y}) T4 o2 h, _9 w- N' O
    ( J0 R- R% y6 H* W, h. O- ?
    / @8 X7 a; g, U8 R9 t; a' N0 C- h
    启动私有链2 p8 n0 ]5 u2 n7 K* r
    在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。
    & D/ X" i% W4 F1 @% x6 o3 X7 e如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:
    8 z0 r3 j& b7 o' c( n: ?' t6 s- r
    : o7 P- w8 N2 h5 _4 个节点即使关掉一台依然可以达成共识,如图所示/ h3 T' w3 n) X& H3 a) _
    ( t) N/ f  p  E; G
    提取 NEO 和 GAS* ]. U! w: _5 b# C6 W, K0 S
    在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。
    8 [1 [$ ^3 [0 x! L安装并配置 NEO-GUI
    % f" z4 A* k) p5 y
  • 从 Github 上下载 NEO-GUI 并解压。
  • 修改 NEO-GUI 配置文件 protocol.json 使其连接到私有链中:0 |* }+ F! N0 R5 X
  • StandbyValidators`:将前面创建的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。' q3 z  b5 ^3 y: |( A
  • 配置 config.json 文件,设置端口与其它四个节点端口不冲突。如果端口冲突,NEO-GUI 将无法与 NEO-CLI 同时运行。
    9 x* J4 O+ L) K! P: b
    0 D+ |/ b6 B1 ]' T% [运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。/ q0 ?/ H) c- t3 Q0 m& ?
    创建多方签名地址
    " }, x6 [0 ]5 t' Z% p在 NEO-GUI 中依次打开四个钱包,进行以下操作:/ [1 U& k: t  T9 ?1 ?& A: q
  • ; `7 `! k. |- [- s0 S' z6 O$ t
    右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。
    - b* v* h0 J6 _& s
  • ; A# S; I: j* z% }9 U% n
    输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。
    7 U8 o% c& I% |' |- S
    4 P6 E9 O" j* h; x; {

  • & k1 s6 o/ f" |点击 钱包 -> 重建钱包索引。' k6 o+ x# p7 p* D; O

    3 ~8 U- ^, b& ~6 D# e/ r" j2 `* I  H. L5 W5 A- n

    2 B( O( N1 f3 v% e2 e" P[!Note]" x- [' I# I- X5 @! B
    四个钱包都要添加多方签名地址,否则签名会失败。1 m! q% G, U3 [* v+ ?2 [8 `/ [

    ' q+ |7 P) {& ?$ e) x/ L( Q- p你将看到合约地址中出现了 1 亿 NEO,如图所示。
    + d2 r- C/ \* t7 n. I/ l7 ]
    4 f- J% m9 R" ]$ @  h) x9 F提取 NEO 到标准地址. i# ^0 N5 z/ D9 f9 Y  L
    进行如下操作,将 NEO 从合约地址转到标准地址中:) Q8 D% F6 C& j% M4 c
  • 9 W1 l) F3 S6 [! a  p' ]' r+ o
    打开四个钱包中的任意一个,点击 交易-> 转账。
    5 z2 F7 |% \! Y/ G# I. T

  • , x$ E! d) h; X: `4 z输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。8 @. i/ i  j3 p+ D
  • + k1 \$ l! T2 w) t
    系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。
    ! |7 C9 F0 [, T7 v0 u

  •   v. T5 ]# ~5 R打开第二个钱包,点击 交易 ->签名 。
    6 a0 l) _! U, M; U: A: I

  • ! I3 ~2 I% g2 i! k粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。
    4 b) u: O. g: K* f

  • 8 T( ]+ z$ E' {/ H- Z8 Q9 I2 k  ^打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。4 E+ _) W5 D) }& A
    这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。, N7 s: I6 A2 `0 V5 I
  • 8 k3 G7 m, x# u# Y* k& e2 C
    点击 广播 完成转账交易。
    # i" {5 O$ R2 [2 r等待片刻后将看到 1 亿 NEO 成功转入了标准地址。
    / Q2 }7 t2 W1 b, d! a  ^% Q
    1 k+ I; |. A$ Z9 w7 h% T% G
    9 ^5 Z7 b- A' `1 [5 j! ]& n& [; i" v# X# R
    提取 GAS 到标准地址, b! K9 g& e6 m2 B
    打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。
    # p* Q- L0 F: b, i; @7 h- w1 K7 ]" ^$ }- l) k  C9 ?, p
    接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13