阿里云上的虚拟机玩转Neo私链
李悔之2015
发表于 2022-12-18 07:08:21
182
0
0
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。在阿里云上可以买按量付费的虚拟机(机器都是window server)。: V0 @0 s- S8 J# c$ N; u
记录下四台机器的内网IP地址,后面要用。
172.xxx.xxx.1421 C0 k, m# [! _4 ]
端口
如果你想让外部程序访问该节点的 API 需要开放防火墙端口:10331-10334, 20331-20334
阿里云的vpc如果在一个安全组内就不需要设置。也可以通过安全组开放所有入口。
阿里云安全组) a. Q: |+ e( b5 X
安装运行时4 S8 i) A5 f l* L% v* b
运行环境0 D8 C# U, A K/ q5 o8 Q# o
运行 NEO 节点需要安装 .NET Core Runtime,需要安装 1.0.1 或以上版本
Windows 系统下的安装方法
7 @0 t+ ~4 O: o" a9 ]4 W) ]
在 Windows 系统下安装 .NET Core 非常方便,直接下载运行即可。
NOTE& O; n$ F% f4 R) o) `6 x" M
Windows可能还需要安装Microsoft Visual C++ 2015 Redistributable Update 3(https://www.microsoft.com/en-us/download/details.aspx?id=53840) ,否则后面无法启动Neo-CLI。& m6 I/ u, u: J7 H+ J1 @; J
创建钱包
在四台机器上分别创建钱包数据库,数据库文件会默认生成在neo-cli的目录下面1 s8 r4 e& c! P& K' g% I
create wallet wallet.json
db3后缀名的数据库文件不支持了
neo1
neo> create wallet wallet.db3
Wallet files in db3 format are not supported, please use a .json file extension.
neo> create wallet wallet.json
password: ********
password: ********" D! g F/ [0 j# m& C8 c f, y
address: AS43TUy7VtuGpNJh2YC2NM3asTv3s6piyk+ i$ b( f4 m% j1 Z$ Y: K
pubkey: 02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c5 [# }7 J9 M" ~' U9 M$ [
记录下另外几台机器的钱包公钥1 p {) G6 X# j$ W7 c
neo24 n& |3 ], L% O8 u2 [4 U
address: AY35ZjJayg9JfmCeHg1nySN4LSMntFEq2h
pubkey: 035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb8 J! c8 O0 b2 m2 u; w; }2 ?
neo3
address: AQZNtdGVXbfot5fSaR4ijBqrEwbnFQspmH
pubkey: 029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b1
neo4
address: AXctyT8ctWTXtWaUFM9o5FJas8BWdBbiqe
pubkey: 02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d
修改节点的配置文件
{# G6 y L( Y c* v% E* m- D+ ^5 Z) i5 R
"ProtocolConfiguration": {0 I2 g. A) f' ]0 T0 d
"Magic": 1,
"AddressVersion": 23,
"StandbyValidators": [
"02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c",3 |! k4 \ \4 x$ o7 u
"035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb",, R- [5 c( S9 h: u2 R+ `
"029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b1",% z( M) d3 a4 Y- t
"02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d"
],& ^" N c4 s7 g7 p( s+ l) [
"SeedList": [! \: Z" z" `1 V7 ?+ W- L x
"172.24.198.142:10333",8 F/ ~/ u* E2 r+ a6 p3 T
"172.24.198.141:10333",2 X- }& M& ?6 \
"172.24.198.140:10333"," D& |, h, E: \. Y% Q
"172.24.198.139:10333"6 h, m* `* Q( s0 e% ^, C
],
"SystemFee": {
"EnrollmentTransaction": 0,& [$ X& J; q& Y7 O/ C3 z
"IssueTransaction": 0,! _" F) [1 Q1 |% h; F' f
"PublishTransaction": 0,% D7 l) Y6 X! O6 H6 _% S/ l
"RegisterTransaction": 0
}
}2 M# a- \9 }5 y: F* X7 `- Z
} r( C! v+ j! M( |9 ^, }
打开钱包,开启共识
open wallet wallet.json start consensus
如果前面打开过cli,请删除chain目录下的文件,这样区块链高度会从1开始。
截取其中一个打印,后面方便调试的时候研究
neo> open wallet wallet.json5 H" u# D6 @. F% q4 r
password: ********
neo> start consensus4 f. e/ |; [0 G: f
[18:04:31] OnStart! Y: f4 p S( N. p$ @! x
[18:04:31] initialize: height=1 view=0 index=0 role=Backup( Z' d% Z/ Y5 E3 u: X; `5 ]
[18:04:47] OnChangeViewReceived: height=1 view=0 index=2 nv=2
[18:05:01] timeout: height=1 view=0 state=Backup# C9 k2 A1 _; b8 |
[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% x# D, m9 N F+ Y$ d3 r
[18:05:58] send perpare response2 o% n5 J/ X% |& }
[18:06:01] OnPrepareResponseReceived: height=1 view=0 index=2
[18:06:01] relay block: 0x8515184285fa2e454b0eca441580b5cce01cc0e5cb5dd6d7ff53ef13ec7f665e% |1 ~" W2 `$ P- n
[18:06:01] persist block: 0x8515184285fa2e454b0eca441580b5cce01cc0e5cb5dd6d7ff53ef13ec7f665e
[18:06:01] initialize: height=2 view=0 index=0 role=Backup
[18:06:16] OnPrepareRequestReceived: height=2 view=0 index=2 tx=1
[18:06:16] send perpare response7 e8 P, o' @5 d! O- i* o! c
[18:06:19] OnPrepareResponseReceived: height=2 view=0 index=12 f6 A- m( e; e4 ^, ~
[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
[18:06:49] request change view: height=3 view=0 nv=1 state=Backup, ViewChanging2 G7 W, u4 o0 f5 }9 S3 d7 F/ x
[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 response
[18:06:55] OnPrepareResponseReceived: height=3 view=1 index=1
[18:06:55] relay block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c412+ }7 n- F: m: N2 z
[18:06:55] persist block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c412
[18:06:55] initialize: height=4 view=0 index=0 role=Primary
[18:07:10] timeout: height=4 view=0 state=Primary
[18:07:10] send perpare request: height=4 view=07 r/ X5 [9 M6 Y6 q& \
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=36 F% N* R4 G: B8 X
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=2, a q& y8 _; A1 Z
[18:07:13] relay block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091
[18:07:13] persist block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091, A5 P( e( s4 ]/ T
[18:07:13] initialize: height=5 view=0 index=0 role=Backup) b# m" W( {; {! H% S ]
" q, g9 W- f. d& i
提取Neo
原来文章中有提取neo和gas的方法,但是我现在还不知道为什么要提取Neo,有什么意义,先跟着文档跑着看看。我用的window server会遇到crash,详情请看https://github.com/neo-project/neo-gui/issues/171
希望Neo社区的大牛能解决一下这个问题。
一天后,社区给出的解决方案https://github.com/neo-project/neo-gui/issues/171,需要下载两个包
结论
虽然配置成功了,但是还不知道能干吗,需要进一步研究。提取Neo也遇到崩溃的情况,发现这个问题,也算做贡献了。
成为第一个吐槽的人