阿里云上的虚拟机玩转Neo私链
李悔之2015
发表于 2022-12-18 07:08:21
97
0
0
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。在阿里云上可以买按量付费的虚拟机(机器都是window server)。8 O( m7 S. }3 X5 M$ h# x) ]
记录下四台机器的内网IP地址,后面要用。! P% q$ n2 V* M1 x" q5 J
172.xxx.xxx.1424 z' i4 d* G! C; d+ a
端口1 `/ b0 p3 P- a
如果你想让外部程序访问该节点的 API 需要开放防火墙端口:10331-10334, 20331-20334$ Y, v1 g* E7 W8 N( u) {$ I. l
阿里云的vpc如果在一个安全组内就不需要设置。也可以通过安全组开放所有入口。
3 Y3 U) ?! b: G! _0 M5 R% O" V x
阿里云安全组7 L1 O% M# ?! `2 k m9 u* Y
安装运行时: d$ O- u6 u- M+ {$ M+ s* m
运行环境
运行 NEO 节点需要安装 .NET Core Runtime,需要安装 1.0.1 或以上版本
Windows 系统下的安装方法, r! z B* d0 r: g s4 y! ~
在 Windows 系统下安装 .NET Core 非常方便,直接下载运行即可。7 q% [) ^7 ?9 Z# T
NOTE
Windows可能还需要安装Microsoft Visual C++ 2015 Redistributable Update 3(https://www.microsoft.com/en-us/download/details.aspx?id=53840) ,否则后面无法启动Neo-CLI。
创建钱包( `; H6 I# m7 i, [' ^9 W' F4 |
在四台机器上分别创建钱包数据库,数据库文件会默认生成在neo-cli的目录下面
create wallet wallet.json
db3后缀名的数据库文件不支持了( E0 Z4 c3 X" r2 f# p# G6 {, H) t
* I2 X+ ?. {0 Z) v8 l' U! l; Q
neo1
neo> create wallet wallet.db3/ t/ F! ^/ V+ a% o4 ?
Wallet files in db3 format are not supported, please use a .json file extension.
neo> create wallet wallet.json4 {* U* R8 a. f0 N, Q# i
password: ********
password: ********
address: AS43TUy7VtuGpNJh2YC2NM3asTv3s6piyk7 c4 O5 `! ]+ ^1 J8 |* ^# d/ t* z; H
pubkey: 02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c
记录下另外几台机器的钱包公钥' i5 K- I5 z% K
neo2
address: AY35ZjJayg9JfmCeHg1nySN4LSMntFEq2h
pubkey: 035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb- G# t% z5 w6 ?0 Y$ f+ R! @
neo39 Y% g: c. O3 {$ V9 N
address: AQZNtdGVXbfot5fSaR4ijBqrEwbnFQspmH; T3 O: R2 W) h
pubkey: 029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b1
neo40 O6 g0 ^- h `, P( ~
address: AXctyT8ctWTXtWaUFM9o5FJas8BWdBbiqe# |+ ^! P, u) ~ F4 a4 J! V
pubkey: 02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d5 {/ X( G W5 p. z
修改节点的配置文件
{" K/ L" d% |$ G, T/ F
"ProtocolConfiguration": {# v6 h5 }; W$ {, Z' ^
"Magic": 1,
"AddressVersion": 23,2 Q/ h$ e4 {: M- ]* o D
"StandbyValidators": [
"02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c",
"035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb",( E" \4 i, Z% G& F7 @% P; B, g/ h
"029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b1",& {: q% w7 n; }; `
"02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d"
],: i; n8 t& j/ X% e
"SeedList": [% g- e+ Y- C: ~$ u' S
"172.24.198.142:10333",$ U- Z3 U) O+ k: I% P7 ~" v1 x
"172.24.198.141:10333",5 j7 N# \' q" S# n
"172.24.198.140:10333",
"172.24.198.139:10333"
],
"SystemFee": {) K/ v) S. c3 Z% x( i6 n
"EnrollmentTransaction": 0,* G2 v( R a2 W' J. s4 P2 X
"IssueTransaction": 0,3 ^7 |3 I6 v8 k7 D* [
"PublishTransaction": 0,) W2 C1 F" k; T9 W* l4 o7 H
"RegisterTransaction": 0
}
}5 \- U; V/ ]3 ?4 N3 d0 G8 ?' i
}
打开钱包,开启共识
open wallet wallet.json start consensus
如果前面打开过cli,请删除chain目录下的文件,这样区块链高度会从1开始。: Q2 ~4 X/ X3 s5 k+ s
截取其中一个打印,后面方便调试的时候研究/ h7 ~. v- r8 A
neo> open wallet wallet.json
password: ********3 u$ u& ], y6 g, M8 }# w' l
neo> start consensus
[18:04:31] OnStart; H6 S$ q% S ?$ z! b. @
[18:04:31] initialize: height=1 view=0 index=0 role=Backup
[18:04:47] OnChangeViewReceived: height=1 view=0 index=2 nv=2( ^$ ?! p: ?( O5 o2 G& v
[18:05:01] timeout: height=1 view=0 state=Backup0 `7 F* q* P! d K, U6 ` N
[18:05:01] request change view: height=1 view=0 nv=1 state=Backup, ViewChanging
[18:05:58] OnPrepareRequestReceived: height=1 view=0 index=1 tx=1
[18:05:58] send perpare response
[18:06:01] OnPrepareResponseReceived: height=1 view=0 index=2
[18:06:01] relay block: 0x8515184285fa2e454b0eca441580b5cce01cc0e5cb5dd6d7ff53ef13ec7f665e
[18:06:01] persist block: 0x8515184285fa2e454b0eca441580b5cce01cc0e5cb5dd6d7ff53ef13ec7f665e' k4 m5 L( c% D, |1 L( y% q/ c, I
[18:06:01] initialize: height=2 view=0 index=0 role=Backup6 L/ q! p: ?8 M7 [ g& b
[18:06:16] OnPrepareRequestReceived: height=2 view=0 index=2 tx=1: r0 H; X) b, n( \9 e7 u
[18:06:16] send perpare response1 R3 H& Y; L* a; u5 s' J9 n& F# P
[18:06:19] OnPrepareResponseReceived: height=2 view=0 index=1) w6 j, M3 p+ |7 E! D
[18:06:19] relay block: 0x35b163f4f524a1ebcc1ef3053e878f9bb37b1f4a8531a060ef18cfd6efefdf45
[18:06:19] persist block: 0x35b163f4f524a1ebcc1ef3053e878f9bb37b1f4a8531a060ef18cfd6efefdf45
[18:06:19] initialize: height=3 view=0 index=0 role=Backup
[18:06:49] timeout: height=3 view=0 state=Backup4 b0 |; m0 n# T6 E
[18:06:49] request change view: height=3 view=0 nv=1 state=Backup, ViewChanging
[18:06:49] OnChangeViewReceived: height=3 view=0 index=1 nv=1
[18:06:53] OnChangeViewReceived: height=3 view=0 index=2 nv=1
[18:06:53] initialize: height=3 view=1 index=0 role=Backup
[18:06:55] OnPrepareRequestReceived: height=3 view=1 index=2 tx=1
[18:06:55] send perpare response1 z) ?8 i: A4 z# l8 o
[18:06:55] OnPrepareResponseReceived: height=3 view=1 index=1$ A) S4 T2 I; h. j. o. E/ U
[18:06:55] relay block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c412
[18:06:55] persist block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c412; V; @4 u7 q. N
[18:06:55] initialize: height=4 view=0 index=0 role=Primary0 `. o6 R0 Y1 }6 }1 `
[18:07:10] timeout: height=4 view=0 state=Primary; U& ?! @; G; A5 @& l" F, y: g0 K1 l
[18:07:10] send perpare request: height=4 view=0. Z0 r& H0 m% Y5 m
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=3
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=2
[18:07:13] relay block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091
[18:07:13] persist block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091' m, {% l3 s4 n: B3 G! v2 e9 K
[18:07:13] initialize: height=5 view=0 index=0 role=Backup G# ~6 s. V+ Q8 ?8 j
( k% i& |$ d2 ?8 c
提取Neo
原来文章中有提取neo和gas的方法,但是我现在还不知道为什么要提取Neo,有什么意义,先跟着文档跑着看看。我用的window server会遇到crash,详情请看https://github.com/neo-project/neo-gui/issues/171# c: q" ^ ^, R/ S2 f8 V+ v' l8 ?
希望Neo社区的大牛能解决一下这个问题。
一天后,社区给出的解决方案https://github.com/neo-project/neo-gui/issues/171,需要下载两个包( Y# Y q" v" }! ?1 d
结论
虽然配置成功了,但是还不知道能干吗,需要进一步研究。提取Neo也遇到崩溃的情况,发现这个问题,也算做贡献了。
成为第一个吐槽的人