Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

用虚拟机搭建NEO私有链

杨小公子君莫邪
94 0 0
用虚拟机搭建私有链# K, Q+ Y: L( S& ~3 d$ R( R
本文将介绍如何使用四台虚拟机来搭建私有链,以及如何从自己的私有链中提取 NEO 和 GAS。+ i# J% U/ ?; r+ N
配置虚拟机# Y  e/ l4 X2 c# n
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。为了演示,我们在 Azure 上创建了 4 台 Windows 虚拟机,大小为 Standard DS1 v2 (1 核心,3.5 GB 内存),你也可以在局域网中或虚拟机中部署私有链。
6 P! Y0 ~6 N  b: X! C: g6 z+ P
# I) ~) m8 b& z6 I创建好后,要开通 10331-10334 端口,具体方法为在系统的 防火墙-> 高级设置-> 入站规则 中新建规则,然后添加端口 10331-10334。* |) a, i( o1 q" [0 P

' t! a$ B$ d8 C) }  _0 K[!Note]& @, `* o) j, ?( f8 W
如果你在云服务器上创建的虚拟机,还要登录虚拟机的管理后台,设置网络安全组- k/ F; B1 x- [. ^' S
Azure 上的设置方法为:网络-> 入站端口规则 -> 添加端口 10331-10334。
: {+ U6 j, l4 e

2 a8 E/ P- V3 D创建好虚拟机后,将四台虚拟机的 IP 地址保存下来以备后用。8 h2 Q5 B! i& N' _# h: f
安装 NEO-CLI
2 Z5 k' P4 ^" {) p分别在四台虚拟机上进行如下操作:; K) m8 \# N7 w7 K9 t
  • 参考 安装 NEO-CLI ,安装 NEO 客户端。
  • 下载 SimplePolicy 插件并将解压后的 Plugins 文件夹拷贝到 neo-cli 目录下。% b* M. T3 }! e# [, W
    ( p7 m& I/ ^! H. O" z" e
    创建钱包$ m/ I( j8 B7 R+ m( \, }& ^
  • & \( P0 H: @$ T3 P
    在任意一台虚拟机上使用 NEO-CLI 或 NEO-GUI 创建四个钱包文件,下图以在 NEO-CLI 上创建为例。/ N5 W. `) {* J

    " R* d/ Y8 V% F2 X6 d6 c# \

  • / C$ W: h" h4 e  r- m将四个钱包的公钥保存下来以备后用。可以直接复制上面的公钥或者用 CLI 命令 中的                                                                            list key 命令查看公钥再复制。
    1 l8 j% z- T6 C. d0 {5 g
  • 5 X- ~: k) O  {
    将四个钱包文件分别复制到四个虚拟机的 neo-cli 节点目录下。
    6 E' a' U7 f( Z1 e' H8 h' B) J( c
    , E2 q) S# C& D( h- Q; m* x8 X' V/ c
    修改节点配置文件
    / e! x0 L% n  r! O( T* L8 h

  • + B+ t4 g3 B2 g& U. A配置每个节点的 protocol.json 文件 ,修改以下参数:
    ! _3 I- i4 m  A
  • Magic :Magic 用于识别消息的来源网络,指定不同的 Magic 确保 NEO 区块链中的不同网络信息在传输过程中不会发送到其它网络。Magic 的类型为 uint,注意填写的数值要在 [0 - 4294967295] 区间内。
  • StandbyValidators:将创建好的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。
    6 @" I4 e. [: f$ X: [1 Q
    9 p- P" W7 m! V5 m3 {
    {1 ]7 }$ N: d$ I) l: B( Y' J
      "ProtocolConfiguration": {* k% q2 E& z3 q4 R
        "Magic": 123456,: n2 p2 ?1 j% p2 I% U, s
        "AddressVersion": 23,
    0 V5 ]2 K4 J8 S0 [+ F( H    "SecondsPerBlock": 15,
    1 `. v; k' I0 L( J# n    "LowPriorityThreshold": 0.001,     # H# e7 m4 E+ {( S8 m
        "StandbyValidators": [      "03072384ece95c4febe7211ee4833cd36cdf0f255ec5263b28a4be1f2af7a3d7f3",      "0208da33cee651a4dc119654b5b8067ade533e39e63a8b4fdbd160d97f80c4cfb4",      "026f0af815d5c3895205e9f54b9402329f3ecc4d249fc0c8500e9b3ea8a3ec9d5b",
    % n+ U, `. }7 k$ x" s "03b4e070988627e2a5710b2c8c79f0f0be18821e1af5875b7beeb3fa8a921cde3f": _+ Z; ]: V9 C# L7 D  X" F
        ],
    - c  ~3 m+ V8 T' z, V* l    "SeedList": [
    , J# y8 e* V5 \, \! |      "13.75.112.62:10333",
    ) n9 ~; [; j% L3 `( U; P3 u; U) ]  W      "137.116.173.200:10333",, L* L4 E6 F) `- ~$ X& B
          "168.63.206.73:10333",
    + Y. d: R7 c( n4 l8 k      "137.116.171.134:10333"2 a9 p; k, j" A- y4 F: m& _. t
        ],
    4 d5 I, \/ w, {+ ^    "SystemFee": {6 ^7 u$ B1 N9 o* E
          "EnrollmentTransaction": 10,! |- m! }. b( d2 d( \. W6 s
          "IssueTransaction": 5,
    " |3 j4 k4 [' t# I. H0 Q      "PublishTransaction": 5," l+ A- {( U! B: }/ ]1 @$ v
          "RegisterTransaction": 1004 n; d6 G  y4 L4 Y. T
        }7 X+ y6 R' b- d' }: Z, z
      }( O  q+ V/ H0 P
    }
    3 @: M4 A- ]- S! d& Q9 |

  • * A8 |$ J6 A3 v配置每个节点的 config.json 文件,以便打开钱包,开启共识:+ l+ L' }! x  H5 `5 N! {4 j
  • Path:设置对应的钱包名称。
  • Password:钱包密码。
  • StartConsensus:设置为 true 开启共识。0 b1 G$ q% r) ?+ Q6 X- D, x  {' @

    6 T# ^  c, f4 i8 d/ H"UnlockWallet": {: f8 V% c( \2 {3 K% i
      "Path": "1.json",
    ' ^" V( u% t: }: w* z  "Password": "11111111",: R% ~& @* Q) Q' ?; `) v: y
      "StartConsensus": true,
    / t4 I: a* Z# E+ R5 k! O( D  "IsActive": true
    6 c( ^$ l% p. i9 @}
      r% k$ o; W) U  O5 R& r* X3 i, L1 y
    6 ?9 ^  d: R3 D: B1 l2 g" o
    启动私有链
    6 ?& S9 o$ h5 A" J4 [: m2 J在四台虚拟机上依次运行命令行,进入 neo-cli 目录并输入命令 dotnet neo-cli.dll /rpc 启动节点,这时程序会自动打开钱包并开启共识。" z- t, V# Q% s' h/ g; X
    如果上述操作成功,可以运行 show state 来查看节点状态。若高度发生变化,则说明共识过程正常。4个节点的共识过程如图所示:% H' P, X/ q! _  y- G
    , w) J* X2 U7 v$ E3 Z  o
    4 个节点即使关掉一台依然可以达成共识,如图所示" R  o8 w/ @7 E( y# e: f; U
    ( \3 H/ i5 f& F+ Y
    提取 NEO 和 GAS
    3 |9 p3 |/ t" L, X2 v在 NEO 网络的创世块中存放着 1 亿份 NEO,当私链搭建起来后,Gas 也将伴着新区块的生成而生成。你可以使用 NEO-GUI 从多方签名合约中提取出这部分 NEO 和 GAS 以便内部开发测试使用。1 Z$ `5 h9 Q3 q  P6 p
    安装并配置 NEO-GUI; j4 r( r4 b! p/ E
  • 从 Github 上下载 NEO-GUI 并解压。
  • 修改 NEO-GUI 配置文件 protocol.json 使其连接到私有链中:) a! \$ A4 P$ j: b3 ]
  • StandbyValidators`:将前面创建的四个钱包的公钥填写在这里。
  • SeedList:将四台虚拟机的 IP 地址填写在这里,端口号保持不变。9 X" |+ x- h  D; H5 V7 |" W. [: {
  • 配置 config.json 文件,设置端口与其它四个节点端口不冲突。如果端口冲突,NEO-GUI 将无法与 NEO-CLI 同时运行。
    " ?2 F9 Y! v- s3 B2 ]# x8 K* f! D0 }* d( a# j. M( |: j
    运行 NEO-GUI,打开任意钱包,如果左下角有连接数不为零,而且一直在同步区块,表示该客户端已经成功地连接到了私有链中。
    + b- y6 Z# l; n' m$ E6 {创建多方签名地址3 _& {4 R6 c! z  l+ P+ o  b
    在 NEO-GUI 中依次打开四个钱包,进行以下操作:
    : L# G5 S3 v- B1 ?! B  V3 r

  • ) U& m9 b6 b. N: U; M右键单击账户页面空白处,选择创建合约地址 -> 多方签名在每个钱包里添加多方签名地址。
    ; t  A0 ~+ L+ z9 p
  • 9 K: p) v$ n$ F7 E& F5 m% w% \4 M
    输入四个钱包的公钥,设置最小签名数量为 3(共识节点数量 / 2 + 1),点击 确定。3 l8 [) E8 o5 R+ I

    3 ]7 d. ^/ v) `
  • 1 h$ Y! N) f( y: f3 A, S" J4 Z) e) o
    点击 钱包 -> 重建钱包索引。
    5 }! G9 c: S: L
    ( @# U# e/ }5 z% n( ?1 p' b! S, _' M) V$ n1 N
    7 Q9 N+ L$ m4 l
    [!Note]
    % u; k6 w0 j3 l四个钱包都要添加多方签名地址,否则签名会失败。
    ( g+ Y+ K3 ]6 d0 s4 X& X: {+ j5 `) j

    " C2 [- E! k1 \: Q7 {% d你将看到合约地址中出现了 1 亿 NEO,如图所示。; L$ Z2 ^9 P7 @3 ]
    % Z! \; a% M3 p0 w9 Y2 t
    提取 NEO 到标准地址
    2 H' L- I  h* e进行如下操作,将 NEO 从合约地址转到标准地址中:
    + U, P. i" G. c) _, W& w. I; E

  • ) E. U/ H/ R2 w/ D- a; o" a打开四个钱包中的任意一个,点击 交易-> 转账。- t: O- g8 ]/ N; j

  • - Y& P  X8 X0 D输入要转入的标准地址,将 1 亿 NEO 转到这个地址中。
    8 r* h7 `! P. {* Z/ p4 v

  • 5 O7 B6 W1 @; ?% n) P2 J系统会提示“交易构造完成,但没有足够的签名”,将代码复制下来。8 f) Z9 b5 a/ s. }/ j' }
  • 3 T8 H! c0 A, b" u
    打开第二个钱包,点击 交易 ->签名 。$ M5 U/ |9 Z2 W( n* X" B
  • , l* z) d  u$ U; C/ u
    粘贴刚才复制的代码,点击 签名, 然后将生成的代码复制下来。
    1 n: n7 k: R9 o" `4 n. w5 ]8 s

  • 9 A# I9 C  H8 V打开第三个钱包,点击 交易-> 签名,粘贴刚才复制的代码,点击 签名。6 N  O* N7 d, B# G% Y
    这时窗口中显示 广播 按钮,代表交易已经签名完成,达到多方签名合约要求的最少签名数量,可以广播。
    7 g* B# {* z# w3 s( m) D

  • 5 g- b# ]  _* _4 P9 |& i点击 广播 完成转账交易。9 O( {0 k7 ]0 V, I8 _0 O$ E# T! C
    等待片刻后将看到 1 亿 NEO 成功转入了标准地址。" L* O% D) ^3 v+ ~

    & a$ E  D: U) R, |- o3 y
    $ l" E4 S0 f4 X+ f% z' c
    & U- h; W8 L/ l提取 GAS 到标准地址
    2 Q1 G& F) V' i% `打开要转入 GAS 的钱包账户,点击 高级 -> 提取 NeoGas -> 全部提取。
    ; x  O% U" n. L" R+ |6 g$ r; t3 q8 o0 c  }
    接下来的操作与转账 NEO 类似,将没有足够签名的代码复制下来,依次打开第二个和第三个钱包,完成交易签名和广播。提取成功后如下图所示。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      13