Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

用虚拟机搭建NEO私有链

杨小公子君莫邪
169 0 0
用虚拟机搭建私有链2 A, Z8 Q3 N) T- \# N/ L& e
本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。
) k8 Z: Y, P6 C配置虚拟机% f9 H0 r* R  z+ x! ^
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。- Z4 r% X( L3 i
7 o& `+ K4 f* n$ y# c
创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。
& U9 T' e7 U( v9 t$ h# @, u9 e
! p; c" o0 f7 t) a, p& r9 U[!Note]
9 I. t' m3 K2 W( Z如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组/ {0 ~8 }- @$ e& N" \7 t& s; ^
Azure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。8 F* T3 N, `/ x" J; j

( i, G1 R  D3 u4 ~2 S创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。( H0 U1 I- K. _/ H! Y8 z4 l
安装 NEO-CLI; Q" t: b3 m0 F/ D
分别在四台虚拟机上进行如下操作:
( ^7 N  H3 j+ ?3 Y7 A& Y& M) i
  • 参考 安装 NEO-CLI ,安装 NEO 客户端。
  • 下载 SimplePolicy 插件并将解压后的 Plugins 文件夹拷贝到 neo-cli 目录下。
    . Q0 K8 ]5 v+ p
    ; Z) D$ c' w2 A! I( G6 {创建钱包6 d! ~: u- H' f" {! k' _1 H9 J8 a. D
  • 3 M7 ^( \7 _, ]2 R$ k1 E
    在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。( q& Q" u/ x: [: Z
    6 L3 E, ]0 c/ `
  • + s+ P# r6 F; N, z1 y# g" A0 b4 g: v+ z
    将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的                                                                            list key 命令查看公钥再复制。! e; `$ E# W6 D1 j

  • 8 W1 M# a% U) g将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。6 V9 Q3 O) Z0 I% [4 f8 t) [
    . [9 B1 a) b5 J: s
    ) {" h. q+ T2 ~) Y/ C
    修改节点配置文件
    1 G+ w5 D8 e. p) B% ]0 u$ x8 s
  • ! v) C2 o( F% U' g) f  [
    配置每个节点的 protocol.json 文件 ,修改以下参数:
    ) S1 y  t9 m( n& B6 Q
  • Magic :Magic 用于识别消息的来源网络,指定不同的 Magic 确保 NEO 区块链中的不同网络信息在传输过程中不会发送到其它网络。Magic 的类型为 uint,注意填写的数值要在 [0 - 4294967295] 区间内。
  • StandbyValidators:将创建好的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。" S' k3 q) n: P! [) M7 O

    ! r6 Q( f; I0 M0 [; ^" l, G{2 D7 \9 u' l1 v9 G1 A/ j; O
      "ProtocolConfiguration": {3 ~- S0 ^: M% {" {! u% d- I2 R
        "Magic": 123456,& O. `5 l  g( d& N' b- d
        "AddressVersion": 23,
    % p$ U0 k' ], T, g# I    "SecondsPerBlock": 15,0 }1 b' _' m$ A! C: A
        "LowPriorityThreshold": 0.001,     
    % [  E& N3 p+ F, z    "StandbyValidators": [      "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3",      "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4",      "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",
    * W9 Z' r1 v5 ~- e "03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f": X5 @5 p3 h  n! J
        ],4 b1 z% \' C3 |( N
        "SeedList": [; X  y, c! r9 u. N+ f  {
          "13.75.112.62:10333",, N3 f6 z% y0 m1 Z
          "137.116.173.200:10333",- g, w( g! Y( t# b& @
          "168.63.206.73:10333",
    + x! r2 v1 M; q& t$ o      "137.116.171.134:10333"
    & X7 ~4 h  g  l7 J    ],; P1 X% d7 k) n- }! Q4 K& |5 r# N. P
        "SystemFee": {) R5 j- j- ?% w/ z2 J. s0 V+ k% f
          "EnrollmentTransaction": 10,
    # \9 E9 B7 P6 a, o+ b$ `' O6 i2 k      "IssueTransaction": 5,
    9 F4 ]6 J! |) w      "PublishTransaction": 5,7 ?. H$ H* K2 ~' A6 C
          "RegisterTransaction": 100( @# X' ^5 _& d4 t! k' i7 H8 i) F
        }, `7 }8 b. b5 j
      }3 C3 A0 z3 e: L7 J2 \2 l
    }) e" k9 _) C- p. l( ]& Z3 j% A

  • / b0 ?6 W( |% _配置每个节点的 config.json 文件,以便打开钱包,开启共识:
    3 g- v2 Z. E# H9 e5 B- V
  • Path:设置对应的钱包名称。
  • Password:钱包密码。
  • StartConsensus:设置为 true 开启共识。
    " j. T3 g; x! r. `  ]" i
    ' V) D& v8 S- ?; F( {8 e+ a- m
    "UnlockWallet": {
    6 i. |" l& t5 X$ M! {. e, m+ r/ w7 C5 x  "Path": "1.json",
    , q4 a3 C8 R8 U: f# r; ~  "Password": "11111111",1 j7 [2 G& |8 |/ x9 A5 T0 T  z
      "StartConsensus": true,/ \7 y4 f2 i  @* S% Y
      "IsActive": true: w# W# }2 l& D
    }6 S& e5 |. ?0 W% R2 u! L
    % x+ X5 B6 {* a& B+ K7 a& h, Z( S; k

    + S6 P& O+ y# e% w; {( w1 [启动私有链
    8 t3 M2 p% k  m# s. S( V3 `在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。; O" _, y2 s( ]" K- O7 W
    如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:
    & m/ j" y7 M7 h/ q
    6 l0 M  g/ d+ C* m4 个节点即使关掉一台依然可以达成共识,如图所示
    + Q0 D, K4 P5 r. Y0 ]% M* i1 K/ j1 h
    : a( y# A% B' c. Y提取 NEO 和 GAS
    # D. I. O  e5 M$ b% {+ V在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。
    . U6 o; O' x/ J  ]1 \' v- l& H/ S安装并配置 NEO-GUI
    6 r8 T, E1 x; F* }5 c7 d$ J4 e
  • 从 Github 上下载 NEO-GUI 并解压。
  • 修改 NEO-GUI 配置文件 protocol.json 使其连接到私有链中:
    + R: _/ ]" n2 _% ]7 H2 ?1 s
  • StandbyValidators`:将前面创建的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。
    : ~4 {8 \5 u: J& ~0 e
  • 配置 config.json 文件,设置端口与其它四个节点端口不冲突。如果端口冲突,NEO-GUI 将无法与 NEO-CLI 同时运行。
    0 d- c- ~9 g( v( V
    & q# c6 z) W+ j' }" U- l运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。; ]8 L8 W( ?2 D& b1 E* j
    创建多方签名地址
    - b1 _9 z/ {2 D8 w在 NEO-GUI 中依次打开四个钱包,进行以下操作:# C* ^- M) J6 p% }
  • ! B! c% Y9 o  H9 h
    右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。
    # S" f3 R7 T; F( _2 k8 J, G5 Q' G6 C
  • 2 ]6 B- @% J$ G: e% l
    输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。
    : R- h8 T1 Z% `" {; S" P) {2 X, p
  • ' ]& p* H; D* {9 i- p
    点击 钱包 -> 重建钱包索引。# q+ }7 i2 ]3 X# ]) k
    , U; o7 H) [2 @8 |6 E2 ^$ Q

    9 y$ V0 q( [* j# Q
    6 w/ V8 ~/ Q3 _7 ?[!Note]
    6 e" A: [# |( U7 d, v+ }四个钱包都要添加多方签名地址,否则签名会失败。
    0 \- F2 }2 x1 l1 N$ d9 P$ }
    6 b  k% X' E5 \( l/ l
    你将看到合约地址中出现了 1 亿 NEO,如图所示。
    - e  S9 F" W" o! K  U9 \$ `; t& f. S' D* J5 K! k
    提取 NEO 到标准地址
    . {2 J6 G3 s5 |( B/ x% u进行如下操作,将 NEO 从合约地址转到标准地址中:
    9 l" g8 y& n6 r; k: N2 u9 M1 c

  • 4 X# }# Q2 d; T9 M7 `* w( n7 J打开四个钱包中的任意一个,点击 交易-> 转账。, y2 [; X1 e, C: ~1 S& ?
  •   H. _7 a6 s- \- e
    输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。7 U1 N; ~. F( o" ]) Y7 J6 L

  • ; n% [* ~& w  o/ o+ I系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。
    . z3 G+ n- Z# C# a$ c) j. w, Z3 e
  • 2 n  g1 y! N" |$ i( `
    打开第二个钱包,点击 交易 ->签名 。
    # {6 l! h; a  `4 d4 w! O

  • & V/ i$ O8 S6 W/ t3 ?2 r粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。
    ; z3 N. `4 Z, J% B% Y  m
  • ; V, g9 {7 S& u% |) }! l5 I# a
    打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。
    , p6 v  ~" D+ H; M# j; j这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。
    % W6 z! Y2 x4 }7 z
  • " @  E! T5 c$ x* G. |
    点击 广播 完成转账交易。
    ) P! O; k) d4 X6 t* K等待片刻后将看到 1 亿 NEO 成功转入了标准地址。
    + ?  L2 J$ K$ t' W) f) v  p
    / z) p, L5 ]  H+ [. Q1 A$ w! W+ I5 u" T8 _- Y
    2 `9 b) [9 }4 J- k
    提取 GAS 到标准地址
    8 H7 K) f# W& h- d. K. m( E5 i打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。
    0 \+ B; Y4 ~* {) T1 R- Z9 \9 O9 D' c* X8 j
    接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13