阿里云上的虚拟机玩转Neo私链
李悔之2015
发表于 2022-12-18 07:08:21
99
0
0
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。在阿里云上可以买按量付费的虚拟机(机器都是window server)。
记录下四台机器的内网IP地址,后面要用。
172.xxx.xxx.1425 u3 z* ~1 T! H' y! b3 d
端口
如果你想让外部程序访问该节点的 API 需要开放防火墙端口:10331-10334, 20331-203349 b( R" k* v) F" r
阿里云的vpc如果在一个安全组内就不需要设置。也可以通过安全组开放所有入口。 c v7 C9 R( |3 j; R
& J) z5 _& f! y9 D) B% L
阿里云安全组
安装运行时
运行环境% l4 t* U2 k; i. v T, t% B
运行 NEO 节点需要安装 .NET Core Runtime,需要安装 1.0.1 或以上版本( M) g0 P {# u2 q
Windows 系统下的安装方法
在 Windows 系统下安装 .NET Core 非常方便,直接下载运行即可。4 L, L1 P7 k4 H2 G! a! Z. [
NOTE- q1 s8 O2 r* @ g7 W
Windows可能还需要安装Microsoft Visual C++ 2015 Redistributable Update 3(https://www.microsoft.com/en-us/download/details.aspx?id=53840) ,否则后面无法启动Neo-CLI。
创建钱包; t$ g2 H/ D3 @( L- b9 y6 o' o
在四台机器上分别创建钱包数据库,数据库文件会默认生成在neo-cli的目录下面7 }/ ^* T8 D/ d% y# h$ I5 y2 Q
create wallet wallet.json1 [6 A$ k. s% o4 w. b0 _
db3后缀名的数据库文件不支持了- i9 L( j: {( E/ Z& t$ D( \/ K: ^' E
neo1
neo> create wallet wallet.db3, a3 r: L0 E2 b" L* g
Wallet files in db3 format are not supported, please use a .json file extension.3 A& U& p( r s( N
neo> create wallet wallet.json
password: ********
password: ********" I: v' K. W1 b5 i4 G5 D) e
address: AS43TUy7VtuGpNJh2YC2NM3asTv3s6piyk3 U8 s* Y4 u4 R/ B
pubkey: 02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c
记录下另外几台机器的钱包公钥
neo2
address: AY35ZjJayg9JfmCeHg1nySN4LSMntFEq2h
pubkey: 035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb
neo38 C$ z( b5 e/ G$ q9 B
address: AQZNtdGVXbfot5fSaR4ijBqrEwbnFQspmH9 b) [: q1 y% ~4 m0 [
pubkey: 029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b1
neo4, v3 g, J e$ H r
address: AXctyT8ctWTXtWaUFM9o5FJas8BWdBbiqe1 J, A6 t4 N( H1 t! y
pubkey: 02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d
修改节点的配置文件7 S5 i4 M% o( d3 S' p% c7 a: r. P
{
"ProtocolConfiguration": {
"Magic": 1,: Z* R" X8 K2 j1 ?8 Z! C# m; C
"AddressVersion": 23,% [3 @5 o5 Z# P" ^3 o+ O5 D
"StandbyValidators": [
"02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c",
"035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb",
"029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b1",/ L. |) E! F5 U. R
"02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d"
],
"SeedList": [5 I" |3 J( j% {8 U( R% P; d( a
"172.24.198.142:10333",
"172.24.198.141:10333",9 L2 N- @' w6 O5 `6 d$ T
"172.24.198.140:10333",
"172.24.198.139:10333". I1 h5 l+ O# F, ^7 r
],' s( e/ B" z3 {# L% [0 l# A
"SystemFee": {
"EnrollmentTransaction": 0,8 z% s+ n3 b6 q: W% v/ \; _% \
"IssueTransaction": 0,3 f( A8 P" _: K7 t# M$ F6 N
"PublishTransaction": 0,, p4 [2 b* x0 P. O% z; |* B& f
"RegisterTransaction": 0
}
}. m7 r( _# v4 S0 Y. e) O
}1 a7 F0 ^* \2 ~
打开钱包,开启共识
open wallet wallet.json start consensus7 z+ P2 @4 J0 P8 t
如果前面打开过cli,请删除chain目录下的文件,这样区块链高度会从1开始。
截取其中一个打印,后面方便调试的时候研究) w0 V$ P, G( w4 C4 L
neo> open wallet wallet.json5 Y6 K! j" V1 s
password: ********
neo> start consensus
[18:04:31] OnStart
[18:04:31] initialize: height=1 view=0 index=0 role=Backup
[18:04:47] OnChangeViewReceived: height=1 view=0 index=2 nv=2
[18:05:01] timeout: height=1 view=0 state=Backup. D& h' o4 {4 e$ \
[18:05:01] request change view: height=1 view=0 nv=1 state=Backup, ViewChanging7 m j3 O, a5 F& m1 v# m+ K3 Q
[18:05:58] OnPrepareRequestReceived: height=1 view=0 index=1 tx=1
[18:05:58] send perpare response$ \/ b# Z3 ?, {& ^
[18:06:01] OnPrepareResponseReceived: height=1 view=0 index=2& z/ S- O i2 ?
[18:06:01] relay block: 0x8515184285fa2e454b0eca441580b5cce01cc0e5cb5dd6d7ff53ef13ec7f665e! h9 q0 {1 d5 K S/ c5 N: ~
[18:06:01] persist block: 0x8515184285fa2e454b0eca441580b5cce01cc0e5cb5dd6d7ff53ef13ec7f665e
[18:06:01] initialize: height=2 view=0 index=0 role=Backup$ l/ h/ K1 H# e7 G! K' ?
[18:06:16] OnPrepareRequestReceived: height=2 view=0 index=2 tx=1
[18:06:16] send perpare response
[18:06:19] OnPrepareResponseReceived: height=2 view=0 index=1
[18:06:19] relay block: 0x35b163f4f524a1ebcc1ef3053e878f9bb37b1f4a8531a060ef18cfd6efefdf45
[18:06:19] persist block: 0x35b163f4f524a1ebcc1ef3053e878f9bb37b1f4a8531a060ef18cfd6efefdf45
[18:06:19] initialize: height=3 view=0 index=0 role=Backup6 @; s5 P2 ]) [$ W6 M, g6 B! H
[18:06:49] timeout: height=3 view=0 state=Backup
[18:06:49] request change view: height=3 view=0 nv=1 state=Backup, ViewChanging% \% ~3 ~7 H# L" P: J5 `
[18:06:49] OnChangeViewReceived: height=3 view=0 index=1 nv=1
[18:06:53] OnChangeViewReceived: height=3 view=0 index=2 nv=1- M' T% i; ?9 x
[18:06:53] initialize: height=3 view=1 index=0 role=Backup* w$ _$ A9 J2 l- ^8 t
[18:06:55] OnPrepareRequestReceived: height=3 view=1 index=2 tx=14 c$ G! D, q0 { |2 K
[18:06:55] send perpare response
[18:06:55] OnPrepareResponseReceived: height=3 view=1 index=19 W/ V5 Q: Z$ h: ]
[18:06:55] relay block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c412
[18:06:55] persist block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c4123 s1 }" H+ @3 f U4 w# ^5 Y
[18:06:55] initialize: height=4 view=0 index=0 role=Primary% y* z! {0 F' {; a& C
[18:07:10] timeout: height=4 view=0 state=Primary
[18:07:10] send perpare request: height=4 view=07 i: k/ M& t* v* V
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=3" k* N% p) C3 m
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=2
[18:07:13] relay block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091
[18:07:13] persist block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091. G" V" W0 s' ^# ?
[18:07:13] initialize: height=5 view=0 index=0 role=Backup5 c; X3 S X% s$ x1 J
v! G7 Z$ k0 t1 z9 y Z
提取Neo X5 y. c/ e' s: f c
原来文章中有提取neo和gas的方法,但是我现在还不知道为什么要提取Neo,有什么意义,先跟着文档跑着看看。我用的window server会遇到crash,详情请看https://github.com/neo-project/neo-gui/issues/171
希望Neo社区的大牛能解决一下这个问题。3 q r! R' D8 M- f! @& A
一天后,社区给出的解决方案https://github.com/neo-project/neo-gui/issues/171,需要下载两个包( l6 T1 l* ^0 c- W
结论+ s0 u4 G6 @3 ]' A7 v
虽然配置成功了,但是还不知道能干吗,需要进一步研究。提取Neo也遇到崩溃的情况,发现这个问题,也算做贡献了。
成为第一个吐槽的人