Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

阿里云上的虚拟机玩转Neo私链

李悔之2015
181 0 0
配置虚拟机% j* b; Z3 r  L1 Y
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。在阿里云上可以买按量付费的虚拟机(机器都是window server)。  f  g$ V9 W; b! `& ]
记录下四台机器的内网IP地址,后面要用。
1 ^# V* I2 Y! c5 G, D% {172.xxx.xxx.1424 Z0 r3 S) O1 B" A6 h$ |
端口
! M. D$ u! E. [4 ~# U4 K, W如果你想让外部程序访问该节点的 API 需要开放防火墙端口:10331-10334, 20331-20334
/ ~$ g  n1 P! i) b0 b阿里云的vpc如果在一个安全组内就不需要设置。也可以通过安全组开放所有入口。5 ?5 i( A) B) M7 ?  h0 y! P1 u6 A
$ \2 M2 N6 W; i( P0 G
阿里云安全组0 Z, L; y1 I9 C$ q& r, P! b  }5 c
安装运行时3 W8 g6 A1 u5 `
运行环境' g3 T% f+ |8 u& P6 Y4 A2 j
; l7 k- @- a5 |$ u! u( Q  ^/ ?" l
运行 NEO 节点需要安装 .NET Core Runtime,需要安装 1.0.1 或以上版本- o! b" j( M* ]- h' T/ [$ Z4 M
Windows 系统下的安装方法" j; q5 r" ^' \% j

) M% G" O/ m4 f) Q在 Windows 系统下安装 .NET Core 非常方便,直接下载运行即可。
. b/ p9 g) Z5 {* P3 SNOTE
0 c' O! A  C# UWindows可能还需要安装Microsoft Visual C++ 2015 Redistributable Update 3(https://www.microsoft.com/en-us/download/details.aspx?id=53840) ,否则后面无法启动Neo-CLI。+ H. F" m/ O( l" F, m% @* z. y
创建钱包' q6 c# S  S; o/ [, R! ^
在四台机器上分别创建钱包数据库,数据库文件会默认生成在neo-cli的目录下面
: f& M6 S6 P+ ]0 L4 @ create wallet wallet.json9 K$ s8 z  g* t* x
db3后缀名的数据库文件不支持了" I- q5 J/ F5 ?% G! u$ ?

6 k- ^9 k6 p# n$ b5 v1 }neo1
, p1 N0 T. L- I4 u  U0 cneo> create wallet wallet.db3
; e) Y1 l8 ]) ?% |; K$ o/ x+ uWallet files in db3 format are not supported, please use a .json file extension.- y; c, x" }) ]& |+ ]: k6 A0 a! V
neo> create wallet wallet.json
; d# N+ y; i7 cpassword: ********9 V+ ?8 w2 ?1 ?! v8 O- p+ u+ s
password: ********
5 ^9 D" X) A- c0 Faddress: AS43TUy7VtuGpNJh2YC2NM3asTv3s6piyk
& ]0 b6 ?* H8 \4 W0 o  @2 L1 @+ i pubkey: 02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c
. |. B  r# L7 m/ B2 H# E5 `- W记录下另外几台机器的钱包公钥
, |1 _" f# G4 C# w- J1 Fneo23 A/ e+ X! ^) T7 X
address: AY35ZjJayg9JfmCeHg1nySN4LSMntFEq2h* b" c5 Y  h. f
pubkey: 035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb5 J9 R/ [2 j& R' U. m  C" ?! O0 O. z
neo35 j. T5 v( r: Q  V. ]& I
address: AQZNtdGVXbfot5fSaR4ijBqrEwbnFQspmH& Y; n$ I+ c$ q4 y
pubkey: 029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b1- S, M" p2 |$ c; K* n- ]
neo4" p2 m/ ~3 S- x
address: AXctyT8ctWTXtWaUFM9o5FJas8BWdBbiqe
, q& p' g$ {) W. P, E pubkey: 02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d
, \( i7 J$ A! C; {1 {修改节点的配置文件
$ _" B* C  v& f{, u8 G2 L4 Y) f1 E+ O
  "ProtocolConfiguration": {
: Y( S1 Y+ |1 _5 e$ R/ v; |- N' n    "Magic": 1,
+ f. M, U6 C  x    "AddressVersion": 23,; U4 p' p. }" |8 p/ U
    "StandbyValidators": [5 a! r' ~% K9 n
      "02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c",6 ^+ x: }- K% J" y4 o- O
      "035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb",' x+ B( O2 A4 ~: _, C
      "029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b1",  y1 M. R- m+ {3 Q) ?* }5 E
      "02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d"$ F  {& l% U* I/ ~( k7 R: R" e3 h) q
    ],
* V0 H0 a% F9 Z    "SeedList": [
; J3 }, L: O7 h      "172.24.198.142:10333",
/ P( B' l7 M' R. h5 T      "172.24.198.141:10333",1 |- u3 Y4 B7 g9 H  A
      "172.24.198.140:10333",
* X: l2 }' u) ?0 H+ D      "172.24.198.139:10333"8 a* u* u/ M6 R. {; h5 t, `0 r5 H
    ],( r# S* _! e- J( ?+ N7 ^! k
    "SystemFee": {
( m- ?+ x4 ~6 i3 ?: M; Q      "EnrollmentTransaction": 0,& D7 h) b8 Q6 l* w; E, R% j/ p2 @; ~
      "IssueTransaction": 0,- q* E- V( D/ B& ~
      "PublishTransaction": 0,
7 x8 O5 W! A8 @' q5 }6 ~" h      "RegisterTransaction": 0
% n) m$ Y7 W" r: M) U    }
$ d8 j/ Z& a, E) C# I9 l, q  }
  L; @: J- `, ?) \, D; H2 U# R}. T* l0 U: T- W+ M
打开钱包,开启共识
' W3 i4 T  W0 g) \+ {4 v: Aopen wallet wallet.json start consensus: x( i; J$ ~. {- ^, L! O# o
如果前面打开过cli,请删除chain目录下的文件,这样区块链高度会从1开始。: c1 j% x- c' \7 l9 n% D1 N9 Q

  |6 m: v* [0 ]7 M0 {6 r, T截取其中一个打印,后面方便调试的时候研究
( t+ f; P5 D% h# C2 y+ s' eneo> open wallet wallet.json
0 V2 D- N6 ]+ i$ f; Tpassword: ********
3 v9 H4 N" o- D) P  S* Xneo> start consensus
& d1 h' z+ C' P[18:04:31] OnStart
" F2 C$ \2 d5 Q6 y% h5 F! _[18:04:31] initialize: height=1 view=0 index=0 role=Backup( H% F+ z0 l, W8 L- F  O& m& @
[18:04:47] OnChangeViewReceived: height=1 view=0 index=2 nv=2
* p* [9 i5 N. J. _8 t[18:05:01] timeout: height=1 view=0 state=Backup. o2 v7 ~* U4 u" z6 s
[18:05:01] request change view: height=1 view=0 nv=1 state=Backup, ViewChanging
; }; G4 j' g( E* s. F[18:05:58] OnPrepareRequestReceived: height=1 view=0 index=1 tx=1; u5 c# C  p- ], ?) T( `6 _
[18:05:58] send perpare response3 [+ t; N' j  Z/ {6 ^9 ]2 r
[18:06:01] OnPrepareResponseReceived: height=1 view=0 index=21 H  k4 Z9 {6 F
[18:06:01] relay block: 0x8515184285fa2e454b0eca441580b5cce01cc0e5cb5dd6d7ff53ef13ec7f665e0 ~- a3 M8 w' t' k& K- n' O- F
[18:06:01] persist block: 0x8515184285fa2e454b0eca441580b5cce01cc0e5cb5dd6d7ff53ef13ec7f665e
: E4 O6 Y8 N8 v[18:06:01] initialize: height=2 view=0 index=0 role=Backup
" C& l( C/ [# N[18:06:16] OnPrepareRequestReceived: height=2 view=0 index=2 tx=1
* ~. _% K8 j# H3 D7 Y: G& f+ V[18:06:16] send perpare response! R9 k2 G5 X; _$ j% @/ n
[18:06:19] OnPrepareResponseReceived: height=2 view=0 index=1
" e8 r' |: U) _6 T) `: p' D) L[18:06:19] relay block: 0x35b163f4f524a1ebcc1ef3053e878f9bb37b1f4a8531a060ef18cfd6efefdf45$ w/ v8 |( w1 J- s- G
[18:06:19] persist block: 0x35b163f4f524a1ebcc1ef3053e878f9bb37b1f4a8531a060ef18cfd6efefdf45
" H9 B$ L- F9 t, H[18:06:19] initialize: height=3 view=0 index=0 role=Backup+ p$ R0 I* W8 U1 W
[18:06:49] timeout: height=3 view=0 state=Backup! k0 X: K' B2 v
[18:06:49] request change view: height=3 view=0 nv=1 state=Backup, ViewChanging- x( c$ F( G# }
[18:06:49] OnChangeViewReceived: height=3 view=0 index=1 nv=1
- K6 B; U' l1 Y1 k[18:06:53] OnChangeViewReceived: height=3 view=0 index=2 nv=1& j/ _  O8 N& L7 R
[18:06:53] initialize: height=3 view=1 index=0 role=Backup
0 g' ?7 Y/ u2 v3 o[18:06:55] OnPrepareRequestReceived: height=3 view=1 index=2 tx=1
: ~; r- G8 B* g# D1 b  ~! K. p[18:06:55] send perpare response& Z, B% ~& B% Q9 {. u
[18:06:55] OnPrepareResponseReceived: height=3 view=1 index=1
' \4 |" z6 {0 U[18:06:55] relay block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c4127 E1 I9 `$ C! y  u+ L8 @) q: T
[18:06:55] persist block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c412
5 E, W9 O6 _. x  j[18:06:55] initialize: height=4 view=0 index=0 role=Primary# U, e, c# O2 B- v0 u
[18:07:10] timeout: height=4 view=0 state=Primary' Q( V& ^5 p! U* o2 J
[18:07:10] send perpare request: height=4 view=0. @% x) o+ }3 e7 @4 i
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=3! x! O7 l! z1 b4 |5 N0 y
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=2; O- r' [" _7 K6 d, G
[18:07:13] relay block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091
  \$ A& C, b  L! V: E6 {- }[18:07:13] persist block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091, D7 |2 D8 O) n; m8 v
[18:07:13] initialize: height=5 view=0 index=0 role=Backup  [, F* D! L& g- g8 Q- I+ `

( O8 D& }' k7 X$ y
! K/ p7 P0 b3 A7 K- O6 Y
提取Neo' K& l* ?( e, g6 H" r
原来文章中有提取neo和gas的方法,但是我现在还不知道为什么要提取Neo,有什么意义,先跟着文档跑着看看。我用的window server会遇到crash,详情请看https://github.com/neo-project/neo-gui/issues/1713 q1 G. m1 a3 n" l
希望Neo社区的大牛能解决一下这个问题。% V  u2 B2 i' c2 P
一天后,社区给出的解决方案https://github.com/neo-project/neo-gui/issues/171,需要下载两个包9 z# B% ?1 B6 _) t5 ]
结论
$ ~- S" i5 ^5 t! R" Y2 x. j3 _虽然配置成功了,但是还不知道能干吗,需要进一步研究。提取Neo也遇到崩溃的情况,发现这个问题,也算做贡献了。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13