阿里云上的虚拟机玩转Neo私链
李悔之2015
发表于 2022-12-18 07:08:21
101
0
0
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。在阿里云上可以买按量付费的虚拟机(机器都是window server)。0 ?! T% {* Q! J0 J2 }7 h! K: q1 Q) W
记录下四台机器的内网IP地址,后面要用。
172.xxx.xxx.142
端口, N6 `3 U8 M4 u |/ e+ h
如果你想让外部程序访问该节点的 API 需要开放防火墙端口:10331-10334, 20331-20334
阿里云的vpc如果在一个安全组内就不需要设置。也可以通过安全组开放所有入口。
1 i2 I* o3 S. x8 U* j" Y
阿里云安全组5 J( g0 y3 K; Y. W7 M& `0 c
安装运行时
运行环境% f5 p. Q& ?* t; C( ^
9 n( k! X' x) ?. ~% S- A8 R/ F
运行 NEO 节点需要安装 .NET Core Runtime,需要安装 1.0.1 或以上版本( Q9 e6 A& ~4 D6 `9 R5 M+ E: P- ~
Windows 系统下的安装方法
在 Windows 系统下安装 .NET Core 非常方便,直接下载运行即可。
NOTE
Windows可能还需要安装Microsoft Visual C++ 2015 Redistributable Update 3(https://www.microsoft.com/en-us/download/details.aspx?id=53840) ,否则后面无法启动Neo-CLI。0 H* v- J$ h: T4 ~
创建钱包
在四台机器上分别创建钱包数据库,数据库文件会默认生成在neo-cli的目录下面0 E) Y# b9 V8 I3 k- }
create wallet wallet.json
db3后缀名的数据库文件不支持了
4 T( U6 v* t! n0 S5 l; n
neo1
neo> create wallet wallet.db3$ a, Y9 I# a% O" _
Wallet files in db3 format are not supported, please use a .json file extension., M$ ?/ ]+ z! K" C# S/ V' W
neo> create wallet wallet.json3 p% {* }9 a+ s% \2 j
password: ********% }( f5 s8 w" \. U, x
password: ********. j7 U: z) U3 b6 b
address: AS43TUy7VtuGpNJh2YC2NM3asTv3s6piyk S. o* A! x4 e. D$ b7 \
pubkey: 02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c& P5 V; z; A/ [
记录下另外几台机器的钱包公钥
neo2
address: AY35ZjJayg9JfmCeHg1nySN4LSMntFEq2h! L$ N) [5 U3 ]9 r0 Q p' j8 Y* v
pubkey: 035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb
neo32 T* `* d8 L+ T- S/ }# k3 U0 e
address: AQZNtdGVXbfot5fSaR4ijBqrEwbnFQspmH+ R1 B+ p+ B B2 j$ R( o
pubkey: 029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b1
neo4
address: AXctyT8ctWTXtWaUFM9o5FJas8BWdBbiqe- O- {( \ \( K/ w
pubkey: 02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d
修改节点的配置文件
{
"ProtocolConfiguration": {) J: a6 e; F- F4 W4 V, F
"Magic": 1,
"AddressVersion": 23,
"StandbyValidators": [. |9 `& ]8 b+ d: h! [$ |; l4 p; p: D
"02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c",
"035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb",
"029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b1",
"02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d": Z2 ^4 {0 F3 h$ }* X7 t
],7 Z: n) Z( f3 y, M1 Q7 x# K
"SeedList": [8 K0 {& {0 H/ \6 Z# P
"172.24.198.142:10333",; E/ D; L2 P5 z5 g, X% E
"172.24.198.141:10333",6 Q% m, v7 S+ J4 t0 Z
"172.24.198.140:10333",+ r4 D% c7 b7 k% u7 l
"172.24.198.139:10333"- _! m# S" `; _ D
],9 Y- Z/ W" [) C: C
"SystemFee": {# l( U& o1 F; M
"EnrollmentTransaction": 0,
"IssueTransaction": 0,3 n! M. ]& p$ D) h- z t% N3 H
"PublishTransaction": 0,/ |$ N3 I2 X: f" c) N" \/ P# w
"RegisterTransaction": 0
}
}/ B+ k. y( j& a6 F3 i8 x
}
打开钱包,开启共识
open wallet wallet.json start consensus, W4 r2 s: u8 x( X4 N
如果前面打开过cli,请删除chain目录下的文件,这样区块链高度会从1开始。
截取其中一个打印,后面方便调试的时候研究: ]" s$ B, A O
neo> open wallet wallet.json* P( q/ a* {' t% ^: i
password: ********
neo> start consensus1 E: u+ E& [; b2 o
[18:04:31] OnStart+ D' a" M) f( f' J, F
[18:04:31] initialize: height=1 view=0 index=0 role=Backup0 W' D; p& S7 d3 x
[18:04:47] OnChangeViewReceived: height=1 view=0 index=2 nv=25 N) \" _4 t% @, V8 r. L$ { g1 Z8 m
[18:05:01] timeout: height=1 view=0 state=Backup& r7 v! X4 X( v% f& o
[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=23 \& L2 j- T3 m2 f$ ?
[18:06:01] relay block: 0x8515184285fa2e454b0eca441580b5cce01cc0e5cb5dd6d7ff53ef13ec7f665e
[18:06:01] persist block: 0x8515184285fa2e454b0eca441580b5cce01cc0e5cb5dd6d7ff53ef13ec7f665e% j. l2 l6 a8 I; R7 U
[18:06:01] initialize: height=2 view=0 index=0 role=Backup
[18:06:16] OnPrepareRequestReceived: height=2 view=0 index=2 tx=19 z. y! y9 \5 v& u! O
[18:06:16] send perpare response
[18:06:19] OnPrepareResponseReceived: height=2 view=0 index=1' ?( a1 h2 j: R8 q9 m( j
[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=Backup( f4 C6 E9 E' T6 ^9 T
[18:06:49] request change view: height=3 view=0 nv=1 state=Backup, ViewChanging9 f! L! r/ B; @6 W8 c8 P9 D
[18:06:49] OnChangeViewReceived: height=3 view=0 index=1 nv=1
[18:06:53] OnChangeViewReceived: height=3 view=0 index=2 nv=1( }: p0 N5 s4 R) a7 x/ N/ s
[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 response
[18:06:55] OnPrepareResponseReceived: height=3 view=1 index=1
[18:06:55] relay block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c412
[18:06:55] persist block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c412
[18:06:55] initialize: height=4 view=0 index=0 role=Primary" j- D: Q$ U* l. L
[18:07:10] timeout: height=4 view=0 state=Primary: k% h; \" Y7 m, t5 z H1 Q
[18:07:10] send perpare request: height=4 view=0$ E3 Q+ A' K. V3 V
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=3& }9 V4 o) s0 {) u& l; j! L
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=2
[18:07:13] relay block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091
[18:07:13] persist block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091
[18:07:13] initialize: height=5 view=0 index=0 role=Backup; S. b. Q: Q& k
1 X1 `( B- n# t1 t* Q9 j. p
提取Neo. P, T: W" ^ u8 p( J- W
原来文章中有提取neo和gas的方法,但是我现在还不知道为什么要提取Neo,有什么意义,先跟着文档跑着看看。我用的window server会遇到crash,详情请看https://github.com/neo-project/neo-gui/issues/171
希望Neo社区的大牛能解决一下这个问题。$ a$ q0 e3 D, b2 P& c
一天后,社区给出的解决方案https://github.com/neo-project/neo-gui/issues/171,需要下载两个包
结论
虽然配置成功了,但是还不知道能干吗,需要进一步研究。提取Neo也遇到崩溃的情况,发现这个问题,也算做贡献了。
成为第一个吐槽的人