Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

用虚拟机搭建NEO私有链

杨小公子君莫邪
100 0 0
用虚拟机搭建私有链
8 o& E/ g+ v1 o1 ?" w' ^* [本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。" t9 p' m4 u" T+ l+ P! R
配置虚拟机
" c* B( l7 W* _. D) z! n1 SNEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。
& A% E8 P: A9 n! q& {8 T: K; y# e. v. A& I  }
创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。
4 l9 S9 l( q2 l7 o* d5 W8 h5 x
[!Note]
  ]& z- H3 m4 H" m% d% E( x' E如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组
3 N, p- g% F) K) b+ x% [Azure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。& ?/ ^' P; t  P# }8 N
9 d- H1 w4 a; W6 x6 n; o$ J6 ^
创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。2 S. u! a) ^' ]0 B
安装 NEO-CLI: R% {4 G# J' k
分别在四台虚拟机上进行如下操作:/ f/ I; g  J8 b, F# N+ L
  • 参考 安装 NEO-CLI ,安装 NEO 客户端。
  • 下载 SimplePolicy 插件并将解压后的 Plugins 文件夹拷贝到 neo-cli 目录下。
    0 H  ~3 Y$ n2 u6 X6 o$ O- Y, k& H! w' B/ e/ }
    创建钱包
    ) X7 H$ I' K' ]
  • 5 i! z7 Z/ t, R7 p- B( T* d, N8 L- n
    在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。# \" G( S. j6 L8 k! X' o2 E8 |
    2 P5 N/ ~) l- z. W! J

  • ! j  @, e7 b: t) y4 T$ X将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的                                                                            list key 命令查看公钥再复制。
    & ?8 T5 {/ Z2 s0 @9 M& e# D

  • * d; r9 Y. Z1 E7 a4 y' o; V将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。: c& F, X. l( F: [" {' k( B
    " L+ I; Z& m6 f5 _, o
    ' F( i( u8 @( H. T2 J
    修改节点配置文件2 i5 R9 ~; V. Y  J) L8 P& g7 R& m
  • 3 H+ n6 A8 K9 G9 e. F7 ?
    配置每个节点的 protocol.json 文件 ,修改以下参数:
    ; z- |, d1 f0 ~1 M# G% b0 {- i8 Z
  • Magic :Magic 用于识别消息的来源网络,指定不同的 Magic 确保 NEO 区块链中的不同网络信息在传输过程中不会发送到其它网络。Magic 的类型为 uint,注意填写的数值要在 [0 - 4294967295] 区间内。
  • StandbyValidators:将创建好的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。( V( R& @* _9 Y* Z) h
    . P8 h7 V( [$ d1 ]. o+ ^# d+ V5 d0 N) I
    {
    . L5 b' J$ j! W8 b  "ProtocolConfiguration": {  y6 Y: {4 a# w- x' U5 E* h4 `8 P
        "Magic": 123456,$ _- o* q- t8 R0 n
        "AddressVersion": 23,
    ( B2 A# h2 n4 m4 s    "SecondsPerBlock": 15,
    7 N1 r! y0 N' k0 Q3 D    "LowPriorityThreshold": 0.001,     
    9 S9 ?  t# P% |" [- q    "StandbyValidators": [      "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3",      "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4",      "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",
    % s1 R: e  u" @: R+ b/ S9 w "03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f") n: e. a, Z# G) }. I) Q
        ],+ b( O; A, K# D# P
        "SeedList": [( g  X) z& L& Y# U- }9 {9 E/ S
          "13.75.112.62:10333",
    6 B6 s: y6 N1 M; d6 h' i      "137.116.173.200:10333",7 [0 F! S5 ?4 H
          "168.63.206.73:10333",
    2 g( O; S1 q3 ?' @$ |2 M' @      "137.116.171.134:10333"
    1 k; Y) v: r. d+ n    ],1 P3 G) u- _3 C8 V
        "SystemFee": {
    . G: ^7 b: V" ?$ A% q      "EnrollmentTransaction": 10,, k4 k3 r* v7 T. ]/ ]! G  l
          "IssueTransaction": 5,+ H6 n( Z- q3 i
          "PublishTransaction": 5,
    * y1 \- h" B9 @/ g" k; _/ V      "RegisterTransaction": 100% t& T3 k* S1 p7 L# `" E3 s2 p* X
        }
    : o5 \3 g% W. q; E' O1 Y7 K" T# F, Z  }7 ?3 |) m% Q* V& V; Q- J7 ~  Q# T
    }7 g& Y" }0 u; I# c
  • 8 K& f7 x) s2 d% i# S
    配置每个节点的 config.json 文件,以便打开钱包,开启共识:. S: A  |# b1 N" a4 P+ O8 R- _
  • Path:设置对应的钱包名称。
  • Password:钱包密码。
  • StartConsensus:设置为 true 开启共识。6 S3 R8 ], r5 H& H" Z" z9 U

    . c/ Q; o9 @. X* h; `( K"UnlockWallet": {
    4 t6 l$ ^( o% D. p  "Path": "1.json",
    ) V9 m" p) ]+ {  "Password": "11111111",3 D4 I9 |2 J- B
      "StartConsensus": true,1 V0 X" p( ?4 v
      "IsActive": true
    ! l3 V- C, n1 V6 T7 p% I4 Z}
    2 G5 _" U5 N- k: D+ ~8 l+ p# O; G( n/ x- V

    2 Q/ P* b& X5 o! @启动私有链
    - {9 f& Z' ?' a- A, E% h8 G在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。
    $ l' S) I- i- _- E8 B. j2 _如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:
    # ~8 D3 x7 T* X! i0 W* |* F% Z1 h3 _3 {  S4 H5 z6 M
    4 个节点即使关掉一台依然可以达成共识,如图所示: k( A# s3 K( c4 r

    8 l7 i' _  W$ @$ V8 M提取 NEO 和 GAS
    5 o$ ]# z% C$ \' C% l% Q( V在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。9 T: K7 J) {. J; o2 X0 @( k
    安装并配置 NEO-GUI
    ! y% U$ f7 {/ C, A
  • 从 Github 上下载 NEO-GUI 并解压。
  • 修改 NEO-GUI 配置文件 protocol.json 使其连接到私有链中:1 }* w0 \4 t/ Q" F$ a6 L7 B8 U0 _) A" P+ V
  • StandbyValidators`:将前面创建的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。
    . S4 |$ b0 E, m! x7 _
  • 配置 config.json 文件,设置端口与其它四个节点端口不冲突。如果端口冲突,NEO-GUI 将无法与 NEO-CLI 同时运行。/ m: d* `9 E0 `; L* K( g
    ' e6 Y/ }0 i# ^2 D( |# n
    运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。1 m8 s& X7 g' v4 Z$ ~) z
    创建多方签名地址9 {) k! u7 k- O# I. N" _+ R
    在 NEO-GUI 中依次打开四个钱包,进行以下操作:- t. b9 {8 u8 F. \
  • 2 Y; n; H/ ]5 F
    右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。! T1 x7 J1 v% `2 V) J( g: O) \" _

  • ) k9 V' p5 P* ?# }: _6 v) ]8 c9 J9 v输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。- B% W2 A- D( D9 }% J" N$ @
    + d- C* d0 M  H3 Q8 r) j: C8 p; R

  • # ]' x- Z1 X& S- z/ ?  N点击 钱包 -> 重建钱包索引。
    3 b( c* V- {; ]0 M+ ]1 L
    : X1 E) }  l1 K' H+ Z% }: I, O4 z
    " p& h$ K1 t! g8 o1 b$ f. m0 B- h& R4 ?$ J+ D
    [!Note]3 d: X  V" C1 h7 M+ K# ~
    四个钱包都要添加多方签名地址,否则签名会失败。& ~$ b  ~1 `; U+ d

    ) z* e  Z! j, B* _你将看到合约地址中出现了 1 亿 NEO,如图所示。+ d! {7 W/ ]" ?% x1 p+ N5 V

    / m. s. a: ^# i8 f: v9 y% u提取 NEO 到标准地址
    : g; R% V; g; s( A2 i6 X6 M: q* q进行如下操作,将 NEO 从合约地址转到标准地址中:
    / U3 l: R4 T* q0 J, o; w

  •   u  r; }+ u7 X4 S; [打开四个钱包中的任意一个,点击 交易-> 转账。
    5 d8 {, E" @: Q, q; d- S# t. H4 D

  • 9 X) c' `* M, N- w- F$ w0 O" D输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。
    $ R# P8 `& o& F
  • ' G9 S; R" [" }& f- U6 Z( u
    系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。: }2 E+ {: Q& x
  • + |) x: U6 k) f" M% p1 k+ f& h- O
    打开第二个钱包,点击 交易 ->签名 。
    7 R9 S8 S- Y0 a" U$ A$ g5 [

  • ! j' \3 f. }* t1 D$ Z( V' r; o粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。+ y! [3 l) r& h& d- A- I' Y3 P8 g
  • 4 H" n# m$ P  D' t$ A; e# w
    打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。
    & Y9 V/ S. L, m# L* d这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。
    , B  I1 N! e& ]: ^, {  d

  • % |% Y5 c  W! s' K0 R% B3 c/ k5 C点击 广播 完成转账交易。
    1 d4 t' d: [7 V6 i& F等待片刻后将看到 1 亿 NEO 成功转入了标准地址。2 C( @/ L& k/ Q3 }3 R( }1 `7 W

    " A5 ?. A8 e9 w$ d7 m6 O; W1 T2 @' F6 q1 u

    ' o) D2 x# ]% ]8 S0 {+ ]' [2 S提取 GAS 到标准地址
    ; R" G9 ?+ T! B3 [4 V打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。; q: n5 ]1 h; _) }) u  D) l4 Z

    7 t3 {( x# m' l/ M  h" W1 w6 r/ k4 d6 D接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13