阿里云上的虚拟机玩转Neo私链
李悔之2015
发表于 2022-12-18 07:08:21
187
0
0
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。在阿里云上可以买按量付费的虚拟机(机器都是window server)。4 ]2 E( j/ n6 U5 @2 S
记录下四台机器的内网IP地址,后面要用。" b* I/ r4 x- q- }
172.xxx.xxx.142! Q K& L: j% p3 d( X
端口
如果你想让外部程序访问该节点的 API 需要开放防火墙端口:10331-10334, 20331-203340 O+ b% q1 c% Y0 q; k
阿里云的vpc如果在一个安全组内就不需要设置。也可以通过安全组开放所有入口。
; q; \. o0 k0 [6 X2 w
阿里云安全组6 W8 x9 l8 T, t8 r) C* N
安装运行时! m' d* h. g' H6 {* r/ q6 _
运行环境, a& d* R' O: l7 \/ g, ?
O/ {$ E% g) t% ?2 y8 T4 o! _
运行 NEO 节点需要安装 .NET Core Runtime,需要安装 1.0.1 或以上版本
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。* ^6 Q9 w. V; [6 P1 t' d
创建钱包
在四台机器上分别创建钱包数据库,数据库文件会默认生成在neo-cli的目录下面
create wallet wallet.json
db3后缀名的数据库文件不支持了- c7 o1 i7 g5 ?4 c* }
( v' |; J8 L3 _$ y* ^
neo1* {3 ~* n e& H B1 V1 ?- y
neo> create wallet wallet.db3, ]9 K& S6 v6 ]6 F: y. O
Wallet files in db3 format are not supported, please use a .json file extension. A6 s. O( x7 E! J2 q U. [
neo> create wallet wallet.json/ ?: R! V4 I! R" X# G2 b
password: ********
password: ********: f; w+ b- X& R% ^. u* K0 r
address: AS43TUy7VtuGpNJh2YC2NM3asTv3s6piyk( c3 F5 F+ W7 H6 a! P
pubkey: 02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c
记录下另外几台机器的钱包公钥; z7 N8 L0 a5 S# N* w3 j; i( K
neo2
address: AY35ZjJayg9JfmCeHg1nySN4LSMntFEq2h
pubkey: 035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb- n4 @ F/ a6 s5 o
neo38 s1 |5 M9 {/ |% r* l+ V
address: AQZNtdGVXbfot5fSaR4ijBqrEwbnFQspmH' w2 Y4 D- l4 b2 Z" P
pubkey: 029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b1
neo4
address: AXctyT8ctWTXtWaUFM9o5FJas8BWdBbiqe
pubkey: 02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d
修改节点的配置文件
{/ X+ V; k$ e& }
"ProtocolConfiguration": {8 W4 s+ ]: p. A% a, c5 f
"Magic": 1,
"AddressVersion": 23,
"StandbyValidators": [
"02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c",7 M$ z" Z/ A5 N) [, Z. A
"035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb",
"029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b1",
"02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d"7 J; H+ X( Y/ O6 w# j9 c
],
"SeedList": [
"172.24.198.142:10333",1 z4 ~$ |2 [: Y# T$ o3 w
"172.24.198.141:10333"," B, m" y8 d' |/ U
"172.24.198.140:10333",% V5 l, U6 |$ Z
"172.24.198.139:10333"
],
"SystemFee": {+ V! z; F! H `4 i* o* m: u$ I
"EnrollmentTransaction": 0,, q2 T* p6 U6 h5 `' P) x" S5 z
"IssueTransaction": 0,' g9 F: Z, f! |( J4 e7 |3 Y
"PublishTransaction": 0,
"RegisterTransaction": 0
}
}$ U0 X- K) Y: Z' _- z) C0 k
}
打开钱包,开启共识
open wallet wallet.json start consensus. S- U6 T7 h& j Y9 L3 ]
如果前面打开过cli,请删除chain目录下的文件,这样区块链高度会从1开始。
截取其中一个打印,后面方便调试的时候研究# |4 i* L$ L% p' @" `
neo> open wallet wallet.json6 @4 j$ V$ J2 U# ]1 Y) E# N0 `2 R
password: ********% x- j+ p9 h, {6 ~ o
neo> start consensus# ?/ J, v$ j: H
[18:04:31] OnStart& R4 B! v0 H! Y* m- H* y
[18:04:31] initialize: height=1 view=0 index=0 role=Backup4 Z& h, i8 q8 x: w3 n& c! x# a. {
[18:04:47] OnChangeViewReceived: height=1 view=0 index=2 nv=27 G1 h' U5 i1 `) X5 R c/ S
[18:05:01] timeout: height=1 view=0 state=Backup
[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=11 ^0 d1 ^5 |8 a
[18:05:58] send perpare response
[18:06:01] OnPrepareResponseReceived: height=1 view=0 index=2
[18:06:01] relay block: 0x8515184285fa2e454b0eca441580b5cce01cc0e5cb5dd6d7ff53ef13ec7f665e( h7 }, |, t4 [! d+ V
[18:06:01] persist block: 0x8515184285fa2e454b0eca441580b5cce01cc0e5cb5dd6d7ff53ef13ec7f665e
[18:06:01] initialize: height=2 view=0 index=0 role=Backup! O% U0 \3 i! V p- X4 W4 _
[18:06:16] OnPrepareRequestReceived: height=2 view=0 index=2 tx=1
[18:06:16] send perpare response' @8 p- k# L8 B3 ]; C
[18:06:19] OnPrepareResponseReceived: height=2 view=0 index=1! G% q" _& N# b) @
[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=Backup8 b8 E O* d9 p/ X( [
[18:06:49] request change view: height=3 view=0 nv=1 state=Backup, ViewChanging$ K3 ^7 }( Y: b
[18:06:49] OnChangeViewReceived: height=3 view=0 index=1 nv=1 b$ B; }1 i, O& k. S
[18:06:53] OnChangeViewReceived: height=3 view=0 index=2 nv=1% _# S. A. Q5 }+ P- e% |0 N
[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/ p9 t6 y% e) V. ?( ^ x6 R" {# j
[18:06:55] OnPrepareResponseReceived: height=3 view=1 index=1( E/ B) g/ F0 P r) r
[18:06:55] relay block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c412
[18:06:55] persist block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c412$ e% A% U" Y" P9 X+ u) L6 f
[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=05 R1 @0 U" q T
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=3) T) y2 K$ O# G0 t7 P! K
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=2
[18:07:13] relay block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091
[18:07:13] persist block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091$ o9 Z3 T ~7 j8 M4 x L( f$ A N
[18:07:13] initialize: height=5 view=0 index=0 role=Backup
5 ~7 l. F6 t+ T" P
提取Neo
原来文章中有提取neo和gas的方法,但是我现在还不知道为什么要提取Neo,有什么意义,先跟着文档跑着看看。我用的window server会遇到crash,详情请看https://github.com/neo-project/neo-gui/issues/171$ u: H3 R8 B; _3 i2 L! F' D
希望Neo社区的大牛能解决一下这个问题。( P2 n/ J/ x( A5 L6 I" N" b8 u
一天后,社区给出的解决方案https://github.com/neo-project/neo-gui/issues/171,需要下载两个包
结论
虽然配置成功了,但是还不知道能干吗,需要进一步研究。提取Neo也遇到崩溃的情况,发现这个问题,也算做贡献了。
成为第一个吐槽的人