Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

用虚拟机搭建NEO私有链

杨小公子君莫邪
99 0 0
用虚拟机搭建私有链
% h! |1 A2 w- j本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。$ ^# }( Q4 h& B
配置虚拟机
8 p5 Q& B. m; \) tNEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。
- K8 e6 u2 d( ~6 o# X
7 \3 Q4 s: Y4 T$ a( E: N5 V9 ~创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。, P1 d9 ~3 L5 {! x. [( g7 l; V
3 J. A1 f$ H- I3 H) _
[!Note]3 V& Y+ R+ w+ W- K8 T
如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组
7 \5 }" ?( Z& G# o9 oAzure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。
+ X" B. b! ~3 T$ v5 V0 K) V1 R6 ?4 R
7 `6 n' y' n6 d# @+ p) c2 f
创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。* Z8 P  @4 e) d) s! D
安装 NEO-CLI4 u: S0 p- N1 o; d
分别在四台虚拟机上进行如下操作:5 S- L& q; q$ Y# |
  • 参考 安装 NEO-CLI ,安装 NEO 客户端。
  • 下载 SimplePolicy 插件并将解压后的 Plugins 文件夹拷贝到 neo-cli 目录下。
    # |9 m8 d) K$ [' F/ f' L
    # h  e6 C7 U6 r+ B9 @: W+ W创建钱包
    ' H+ F+ t* @; v: k) ?) ?; A
  • 4 f& r/ ?2 n* [$ t. d: N
    在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。
    7 V9 v! K: F: a; A6 Z. l3 |) ]
    9 m' ]" v  @  n$ i2 C+ Z* w5 S

  • ' u2 i" ]  k: V. ?& z将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的                                                                            list key 命令查看公钥再复制。
    ) z6 j7 Z* c6 z6 \( r4 M* @) l/ m0 w" L0 N
  • * m: V# p7 @5 q8 Y
    将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。0 O1 K& B9 u7 @) l; e
    ( ?2 @* d% ]6 a+ o: Z4 ^
    / V4 U; d; L  v' C
    修改节点配置文件6 z) T1 O, ?! a2 v  ?6 H
  • " {  @' E% K3 k! x, h  {( V
    配置每个节点的 protocol.json 文件 ,修改以下参数:
    : C/ B  d+ j0 B5 q
  • Magic :Magic 用于识别消息的来源网络,指定不同的 Magic 确保 NEO 区块链中的不同网络信息在传输过程中不会发送到其它网络。Magic 的类型为 uint,注意填写的数值要在 [0 - 4294967295] 区间内。
  • StandbyValidators:将创建好的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。
    % @3 r8 O$ J  h
    0 O. F0 J4 Y6 q& W4 C' b8 A$ K
    {/ F0 q4 N# B7 I9 U
      "ProtocolConfiguration": {
    9 t5 h, P! ]5 i; l8 t( R    "Magic": 123456,
    - [  ^2 h0 f/ y' R) G; ^    "AddressVersion": 23,& j! p1 X% i. o" e) N
        "SecondsPerBlock": 15,- k* @; K  N$ K' S, }, \' e
        "LowPriorityThreshold": 0.001,     
    1 R% o' B, T& H2 a5 c5 ?9 q, P    "StandbyValidators": [      "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3",      "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4",      "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",/ o, K' r5 A+ M' j  ]
    "03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f"
    : l2 f+ v# a3 [$ a    ],. }& U5 X2 }3 s1 _% }
        "SeedList": [2 \" n5 G( U2 E8 c7 P  J" n
          "13.75.112.62:10333",
    5 {5 T# Z# e' u# b4 q( E/ `2 ~      "137.116.173.200:10333",. l+ M1 L! F9 P  F! C% a9 a. F
          "168.63.206.73:10333",* n9 W; T" ?0 B
          "137.116.171.134:10333"
    ; l3 O1 y/ V5 d7 u' b$ F    ],+ b1 x: C0 ~" v' ?
        "SystemFee": {/ I% \1 v+ g) Z$ K& y* [/ ?& B
          "EnrollmentTransaction": 10,
    8 R  D5 i  C$ P+ M  b; E; Q      "IssueTransaction": 5,
    ; G' s$ T. K9 e: V: Y      "PublishTransaction": 5,7 P& d4 A" ^* M! r( [7 b. x; P
          "RegisterTransaction": 100
    $ I& |7 h0 d+ r    }
    % n  |1 {( V  v8 G0 J  }
    ; a  X% F! J! t4 N* ~) Z' y0 D1 b}
    6 a  H$ b7 ?- F9 B0 E* w, _% I

  • % _( y6 z9 B* J+ k配置每个节点的 config.json 文件,以便打开钱包,开启共识:4 z8 w' M% |! _& ~
  • Path:设置对应的钱包名称。
  • Password:钱包密码。
  • StartConsensus:设置为 true 开启共识。
    # x! Q( b' H" z, g2 V; A4 F

    , M4 Y$ j) N: W9 o"UnlockWallet": {* z; y* I& L7 H& l( {* R
      "Path": "1.json",
    : Y& k$ R- |1 m3 E6 t# \  "Password": "11111111",) N- V" l: D" w/ E
      "StartConsensus": true,) i8 q7 @; T4 z5 _
      "IsActive": true2 ?6 A$ G6 |) P* ^6 ?/ P
    }1 C8 e; \* h* [9 f# z
    : S: W. N# H% j: a6 M# w
    ' M+ B, e- q6 A3 v5 X
    启动私有链
      ^& ^! {0 q/ {5 I1 l/ C在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。
    8 F* E9 l! {# @+ E5 l  ]# K如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:! R3 O6 E8 I( z- D( E  j, a

    5 h8 D5 _2 _% _4 Z, C$ c4 个节点即使关掉一台依然可以达成共识,如图所示
    - M$ y2 e  T+ }% D/ d" X9 _5 c: ]6 b' c* i# w; q* S2 n
    提取 NEO 和 GAS
      @) @4 E( n8 E, W在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。
    - P0 S  S2 O# b$ e( L2 U. d安装并配置 NEO-GUI8 k  a3 ~  _/ ]: [, H
  • 从 Github 上下载 NEO-GUI 并解压。
  • 修改 NEO-GUI 配置文件 protocol.json 使其连接到私有链中:
    8 U. K; F6 h1 u7 {, Y1 u
  • StandbyValidators`:将前面创建的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。
    3 F* a% v1 |2 d4 \) C4 R- Z/ M
  • 配置 config.json 文件,设置端口与其它四个节点端口不冲突。如果端口冲突,NEO-GUI 将无法与 NEO-CLI 同时运行。, S7 G* f8 ^$ I0 c1 D% O
    : J6 B% _/ H3 q/ c5 Z  J+ U
    运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。
    1 I5 T6 a9 G5 k) D" S" ]6 E创建多方签名地址
    3 T7 @7 U. X4 v在 NEO-GUI 中依次打开四个钱包,进行以下操作:2 P) L2 L1 c6 v. |

  • ' z# f  i0 c# ]8 P7 Q! A* E7 O) J右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。
    ) ~* @, Q) ]* s7 u

  • $ a% t1 s. s7 f9 M3 k$ g& ^( E  F2 c输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。% N/ K  g  Z6 u! N9 H# r# y
    9 J( h4 K* p7 T4 z8 f+ w( i

  • & o: |. v3 h. T4 C4 Y5 I& V点击 钱包 -> 重建钱包索引。) B. T/ Z/ }( m* K8 X2 I( _

      P. G7 \6 Z) o4 k3 U6 ^8 y
    2 H, Q; p2 q2 S: u- ]  n$ H& J) g/ w' C& G
    [!Note]. ?" y4 i9 q& S2 K. @0 P4 L
    四个钱包都要添加多方签名地址,否则签名会失败。
    4 e) I5 \% ^* c/ G0 B1 p
    7 C/ d' w( o" v  w
    你将看到合约地址中出现了 1 亿 NEO,如图所示。
    7 f5 C% m6 S( S( g
    " T. C8 s1 J1 Q: p提取 NEO 到标准地址
    ( X* [1 ?4 ], M: J; r; d! W进行如下操作,将 NEO 从合约地址转到标准地址中:6 H4 E7 O* _1 b( z& M: ?& v- ?
  • : a( m) \  b3 @% h8 P( T7 S  p
    打开四个钱包中的任意一个,点击 交易-> 转账。
    . `+ q" M2 j: F. r4 f/ c5 `

  • & ~& ^. M- o$ D/ x' d输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。
    % u6 I( N, y' O4 F7 V; u

  • ' ^* Q# I4 b( I; W& i8 t$ T) @系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。8 H' B6 x  @/ C& V: \$ Y
  • * t  L  C# t9 H" R' g8 k! o
    打开第二个钱包,点击 交易 ->签名 。
    * H$ h6 \. e9 C
  • . V, t% y* A" o' O
    粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。& R* z" q- n4 |+ g

  • * x' G1 R$ x+ X6 r! P打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。
    0 x6 Y$ ^% n5 Q6 c8 {这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。! m# k0 }8 N" ^* A3 h3 x7 |
  • + @- f5 v- D5 k/ p  I0 Q1 \1 U% S% b
    点击 广播 完成转账交易。- ]$ [4 J6 }' N
    等待片刻后将看到 1 亿 NEO 成功转入了标准地址。
    ) H% h/ }4 U" D$ L/ M9 O& Z* n% @2 d& O
    4 _3 D7 \9 U! I2 o) I2 o( i4 i

    ; C4 @5 d. E3 {5 p1 q. p) z提取 GAS 到标准地址7 D0 f* K/ B* v) ?1 ]( W2 b; Y6 |
    打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。
    1 I! X9 P0 r( z( [. M3 Z8 i: F* i( d: }% J( y
    接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13