Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

用虚拟机搭建NEO私有链

杨小公子君莫邪
177 0 0
用虚拟机搭建私有链
' ^/ P4 Z' p1 O! [本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。1 y% a* g: c* i
配置虚拟机7 m5 w! G, N! i* n9 I1 F4 g6 z
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。
6 V# u6 G6 d9 `
- X% S5 F+ b9 s6 j% p% o8 w创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。# a; G; D* z7 N5 W  S
; S. o& [6 X( ]2 g! o" h8 W0 m
[!Note]
6 u% ]" Q4 w0 m7 ]6 m% O如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组
- t% a: V8 s- f& q% e( p, A2 A% QAzure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。
# k+ F+ l) w% {7 @" q  R
5 W2 V6 M2 V8 [* k
创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。0 x, e( M) a9 i
安装 NEO-CLI
! T! J: b* J# |4 _7 x8 p1 S$ e分别在四台虚拟机上进行如下操作:
, Y( o/ h/ F% U* M
  • 参考 安装 NEO-CLI ,安装 NEO 客户端。
  • 下载 SimplePolicy 插件并将解压后的 Plugins 文件夹拷贝到 neo-cli 目录下。4 C5 O# L" C" d- u
    : ^9 G% I; ]6 h  ^4 C
    创建钱包
    , D' O7 Z: G, I8 X/ Q  ~
  • ( }4 J9 w( O( e  ~' ~3 x3 i( {# a
    在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。$ h; [* g, V; n5 d; x2 _+ F/ w$ R$ B

    ( B) u7 S! ]0 N! o! z7 Z( g* `

  • : Y: w4 }% N' E6 `) H2 Y将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的                                                                            list key 命令查看公钥再复制。
    ' C7 |. u+ R6 g: R' y3 S5 g
  • ( a" F0 P5 D0 G. \: d4 h. r
    将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。1 C4 _! S# ?# C( p9 h- B
    1 v* }1 o( f+ ~3 C: Y0 `

    9 c' W5 x2 m5 m# F9 f4 b修改节点配置文件
    , h, C" H* f4 q7 J' D1 p( M: D) J
  • # N4 `4 Y; Q( R- [: c5 S/ {
    配置每个节点的 protocol.json 文件 ,修改以下参数:3 P" f3 n% i# ?9 E! H4 o
  • Magic :Magic 用于识别消息的来源网络,指定不同的 Magic 确保 NEO 区块链中的不同网络信息在传输过程中不会发送到其它网络。Magic 的类型为 uint,注意填写的数值要在 [0 - 4294967295] 区间内。
  • StandbyValidators:将创建好的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。
    9 j: \6 u( Z+ {) ]& O

    ; c2 d" b  F1 w: r! f/ ?0 S) ~. t+ X{
    ! O: |% |8 t1 H( K% ~# K/ i% F4 l  "ProtocolConfiguration": {: k  `; R) u+ X& V/ v8 b
        "Magic": 123456,
    ! f3 Z  G8 H6 J2 l* ]& L' F; Q  y! K    "AddressVersion": 23,
    1 e: ]' ~% v! A9 q    "SecondsPerBlock": 15,
    ( [$ n5 G3 u1 b    "LowPriorityThreshold": 0.001,     : Z. t$ G$ {, Z7 f& K8 ^9 k9 y# q
        "StandbyValidators": [      "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3",      "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4",      "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",
    7 q" |  |! q: R" S "03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f") g/ P0 e' f" S0 [$ q
        ],4 |/ h4 Q/ @, e8 o; p  w
        "SeedList": [7 m3 S* f9 p* Z3 a- |  d
          "13.75.112.62:10333",
    1 z7 T8 c# v7 ]1 t7 m. Y# S6 A3 E- P      "137.116.173.200:10333",' ?0 k% ]. p% S' x
          "168.63.206.73:10333",# A, i3 Y9 a6 g% i% W* N# u
          "137.116.171.134:10333"8 Y! B5 s/ K* \# M* ^" f8 y3 X: f
        ],
    - s3 F) x& Y+ |; G* l, b    "SystemFee": {. J( T) a1 I3 @" `2 l! T0 ^' M
          "EnrollmentTransaction": 10,( a* n0 y2 k; b
          "IssueTransaction": 5,8 \5 c7 T, }, o' i$ J
          "PublishTransaction": 5,
    6 D' f, E0 }! z$ y/ U      "RegisterTransaction": 100
    / d/ p. H( X* F1 W9 F- K    }' K3 E% C+ L# j, h3 S7 @
      }/ B2 _( c% J6 F8 ~  m9 P
    }; p% U5 s3 E$ N' X% C# ~- d
  • 4 ]# \; I+ {8 T5 E$ i
    配置每个节点的 config.json 文件,以便打开钱包,开启共识:3 t- x) x# i# ]4 R
  • Path:设置对应的钱包名称。
  • Password:钱包密码。
  • StartConsensus:设置为 true 开启共识。+ m- H$ D9 F# C: i3 ?

    4 B* a. V- O/ r6 E" s2 q"UnlockWallet": {4 T! Y% s2 r. C9 w+ N- K8 F
      "Path": "1.json",
    * Q" |( K+ z4 F! `  h  "Password": "11111111",' d+ B- ]/ j% P+ ?* z; L2 C! m
      "StartConsensus": true," G; ?! z' q) l# B& K  `
      "IsActive": true7 b: {( R3 c; I/ a' u4 g
    }: ~+ {; {8 g$ ?4 l& n* z
    # x; Z+ ^0 r/ m$ A
    2 c- D3 H4 ?" X% u
    启动私有链! j  S9 F- M2 {: @7 ~( K; B( G6 h
    在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。
    : k( l$ f- k8 U如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:4 {  S: X' P3 ~+ s4 i0 t

    " d1 H1 G( M& p% @/ y# l7 w4 个节点即使关掉一台依然可以达成共识,如图所示. ^1 w$ K" o0 z/ @6 r. g
    4 u8 _7 f6 k( f" K/ m8 c
    提取 NEO 和 GAS0 k  S4 l  e+ s
    在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。5 @: \. y- d/ {" W
    安装并配置 NEO-GUI1 u  @& O/ W) O' ]. @9 a& G" e( E" V) u
  • 从 Github 上下载 NEO-GUI 并解压。
  • 修改 NEO-GUI 配置文件 protocol.json 使其连接到私有链中:1 r: ]* e. z+ n3 C/ l, s9 b/ X1 C! y
  • StandbyValidators`:将前面创建的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。
    9 y( z* Q  H5 ^6 Q
  • 配置 config.json 文件,设置端口与其它四个节点端口不冲突。如果端口冲突,NEO-GUI 将无法与 NEO-CLI 同时运行。8 e6 C) z. r. E5 |6 ?% B' P  X8 W: Z" e

    + e2 ^3 f7 b8 b; J2 ]运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。" I  \" o' n" W4 f& N% i
    创建多方签名地址
    ( ^; r; b* X. W3 X) R在 NEO-GUI 中依次打开四个钱包,进行以下操作:
    : P* p# B6 ~( ]% ?, d4 ?

  • 8 L' |- y$ H5 A$ z/ G右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。
    0 O( M8 F4 ~6 o' u4 V9 Q; ~% C

  • ' I& p9 ?( P& i* ^2 S) r输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。+ f4 k  L4 I' H6 R7 ~

    $ S; Y6 }* K) r

  •   L( D6 U7 W/ X: H% g/ y7 f点击 钱包 -> 重建钱包索引。
    ! T' ~4 m+ {' U! J) Q4 @! m6 z) l
    ' W$ d$ A$ G2 o0 G5 x/ I( S4 e/ a9 o1 O+ _( M" p

    6 s1 {, v8 Y* T/ T[!Note]
    0 t- R$ X4 l7 z& A' i# V四个钱包都要添加多方签名地址,否则签名会失败。2 f9 e" Q3 q+ p- N/ f6 M

    " r4 O& N% \7 T你将看到合约地址中出现了 1 亿 NEO,如图所示。. \. z8 l6 t+ k! Q+ @( o
    0 z% n- C( `' {7 z: V2 U) b/ m# O
    提取 NEO 到标准地址& a, Q2 b( |+ [$ h  p3 N
    进行如下操作,将 NEO 从合约地址转到标准地址中:% v& _* b- K7 }4 H! a) U, D7 v

  • 0 L% \# O. L& G# V3 [% N打开四个钱包中的任意一个,点击 交易-> 转账。9 k+ R5 M' V3 S+ p1 M' P/ Z. a. A( k
  • . F9 J! S9 f5 n  b6 L
    输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。* x: u4 r9 o: g" N3 i

  • 3 S9 q) E3 Z/ Y/ r2 v1 `系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。' V5 l! s3 e$ {! c
  • ) T9 D9 S8 [- p  r; i& M, Y5 i
    打开第二个钱包,点击 交易 ->签名 。
    7 B$ Q- _9 `  l9 g# |+ k
  • ! X) k4 H8 R) _( g6 M) C
    粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。
    , h2 L2 c+ u+ r/ G- K/ A
  • 8 V5 f+ v" W9 }# G
    打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。' l! f" \6 j0 M/ K6 I$ |; c; L
    这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。2 Q! w2 _% x5 S, P4 W$ d* y
  • ) A' e" w4 d9 I
    点击 广播 完成转账交易。
    2 k; y6 N! s' ^1 S" H3 v. N- V7 a等待片刻后将看到 1 亿 NEO 成功转入了标准地址。
    , s$ K- W" C3 W7 c( A% S# L6 e: `4 e! L2 p' S7 I; O' T
    5 A( n' ~  @+ y5 Y/ b" a# G
    * F0 U- n  {# ~4 b, Q
    提取 GAS 到标准地址! J8 D9 o/ e, z1 [; B- _
    打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。3 x) t# y7 r- E- @6 E1 S- r! h7 d

    2 v. ?9 b3 h  L) z  `& S接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13