阿里云上的虚拟机玩转Neo私链
李悔之2015
发表于 2022-12-18 07:08:21
190
0
0
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。在阿里云上可以买按量付费的虚拟机(机器都是window server)。- ?9 ~ j- C8 e0 c! Y& a4 c2 H
记录下四台机器的内网IP地址,后面要用。
172.xxx.xxx.1429 G# A) G/ F6 c9 {3 D0 M. F
端口
如果你想让外部程序访问该节点的 API 需要开放防火墙端口:10331-10334, 20331-203349 H {: l- P" }) H
阿里云的vpc如果在一个安全组内就不需要设置。也可以通过安全组开放所有入口。
( g5 E; i) I, j- E7 \8 [
阿里云安全组2 o7 ]- N+ o9 H, V8 Z! T
安装运行时
运行环境
运行 NEO 节点需要安装 .NET Core Runtime,需要安装 1.0.1 或以上版本
Windows 系统下的安装方法$ s7 ?% m) y, H, F$ c6 w n/ B
- j5 @* c2 D6 Y6 y" p
在 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。
创建钱包
在四台机器上分别创建钱包数据库,数据库文件会默认生成在neo-cli的目录下面$ ?2 O u, c* P; H( j. D/ x d) B: l& E
create wallet wallet.json4 d6 E! m5 J% M5 Y" h! M
db3后缀名的数据库文件不支持了
neo15 H+ Q! f& t# s, J$ i: D
neo> create wallet wallet.db3
Wallet files in db3 format are not supported, please use a .json file extension.7 U5 u: x% H {; H& z& S6 o
neo> create wallet wallet.json" u, Q! }, o# M6 K: b+ X! |
password: ********
password: ********
address: AS43TUy7VtuGpNJh2YC2NM3asTv3s6piyk
pubkey: 02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c
记录下另外几台机器的钱包公钥
neo28 g# g$ h U6 N7 P) n4 y! j' P6 D. x
address: AY35ZjJayg9JfmCeHg1nySN4LSMntFEq2h! g8 W$ Y' D/ | j8 M
pubkey: 035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb
neo3
address: AQZNtdGVXbfot5fSaR4ijBqrEwbnFQspmH
pubkey: 029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b11 P0 s2 a+ K7 G0 u
neo45 h4 I/ E6 f2 V$ |1 h" o; i: F# E
address: AXctyT8ctWTXtWaUFM9o5FJas8BWdBbiqe
pubkey: 02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d. o( Z0 _9 r! C% ^7 F9 r
修改节点的配置文件
{6 l7 m# r/ K- I0 u" d
"ProtocolConfiguration": {
"Magic": 1,6 s$ ?' X% e! E" a: ?
"AddressVersion": 23,
"StandbyValidators": [
"02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c",
"035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb",. V9 C3 O& T% q* Y* s4 F
"029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b1",( i5 b7 Y8 ~9 [+ R N! K- u1 F
"02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d"9 K: @) T0 G9 R1 v2 }6 S
],8 F1 h) h& V; X7 k+ U/ y
"SeedList": [* {, B& t% D) j$ `) x# W Q/ R
"172.24.198.142:10333",
"172.24.198.141:10333",) t8 `# M& P" z
"172.24.198.140:10333",3 o. ~( M2 J& e+ S! s& l1 O
"172.24.198.139:10333"5 ?- ?/ Y. b& [& E" U( `% R2 O% y- M
],- W$ r! v2 j( s/ l1 p6 \
"SystemFee": {
"EnrollmentTransaction": 0,
"IssueTransaction": 0,
"PublishTransaction": 0,: A! {8 Z) M$ s3 h4 B% X
"RegisterTransaction": 0/ n& J3 B* B4 l* g8 ? j. f: S/ U
}2 }. Q5 l4 R2 E) B% N
}* X! r- f c) ^: @- @; S
}/ k+ c" Y# {& P, p% q- b9 Z
打开钱包,开启共识) ?) f+ u \" U5 \
open wallet wallet.json start consensus2 O: y0 ~5 p E5 ]% @; Q$ k0 O3 I
如果前面打开过cli,请删除chain目录下的文件,这样区块链高度会从1开始。, ^9 B, o: @5 e& m# s" E8 _) ?' v
9 @, c: t: B! [1 }0 s
截取其中一个打印,后面方便调试的时候研究
neo> open wallet wallet.json
password: ********) |6 r! \( l7 L% `
neo> start consensus* Q& ?; z8 Z7 c0 r
[18:04:31] OnStart& l$ ~! O& [" J$ ] x% h& M/ ~ o
[18:04:31] initialize: height=1 view=0 index=0 role=Backup/ \3 @. C5 {$ {
[18:04:47] OnChangeViewReceived: height=1 view=0 index=2 nv=2
[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+ z* H6 O8 ?5 D/ q
[18:05:58] OnPrepareRequestReceived: height=1 view=0 index=1 tx=1) M& n' ^& ?7 N
[18:05:58] send perpare response, L# t9 t8 v6 B! B
[18:06:01] OnPrepareResponseReceived: height=1 view=0 index=28 @2 w4 |; ]7 j! v. f9 a
[18:06:01] relay block: 0x8515184285fa2e454b0eca441580b5cce01cc0e5cb5dd6d7ff53ef13ec7f665e
[18:06:01] persist block: 0x8515184285fa2e454b0eca441580b5cce01cc0e5cb5dd6d7ff53ef13ec7f665e
[18:06:01] initialize: height=2 view=0 index=0 role=Backup2 v$ w4 y' K# d+ d; ?, v) }! v
[18:06:16] OnPrepareRequestReceived: height=2 view=0 index=2 tx=16 a: R w" c! k- m
[18:06:16] send perpare response2 Z3 p( ?/ j, Q' y: U
[18:06:19] OnPrepareResponseReceived: height=2 view=0 index=1) m, o( D' R! R- \) d4 E
[18:06:19] relay block: 0x35b163f4f524a1ebcc1ef3053e878f9bb37b1f4a8531a060ef18cfd6efefdf45 k# q* {1 Q2 U" O7 y1 \
[18:06:19] persist block: 0x35b163f4f524a1ebcc1ef3053e878f9bb37b1f4a8531a060ef18cfd6efefdf45
[18:06:19] initialize: height=3 view=0 index=0 role=Backup- P5 x7 G& F$ t, m; ~9 @; S7 G
[18:06:49] timeout: height=3 view=0 state=Backup: M. S, i- V! s4 Y* D3 V3 n
[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% i; T" \% M5 H9 m
[18:06:53] OnChangeViewReceived: height=3 view=0 index=2 nv=1
[18:06:53] initialize: height=3 view=1 index=0 role=Backup, ^9 W% j& @+ M$ v0 m% y
[18:06:55] OnPrepareRequestReceived: height=3 view=1 index=2 tx=1$ U9 G1 q# \! S2 [
[18:06:55] send perpare response
[18:06:55] OnPrepareResponseReceived: height=3 view=1 index=16 g$ o* A# F, M
[18:06:55] relay block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c412' ?( f$ ^ y, K/ B" w
[18:06:55] persist block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c412; U; w/ j) a: _3 T+ p6 v$ l/ G
[18:06:55] initialize: height=4 view=0 index=0 role=Primary
[18:07:10] timeout: height=4 view=0 state=Primary2 k; i! ~8 S6 a0 ~ `
[18:07:10] send perpare request: height=4 view=0/ A* G% `% k' o; b( D
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=31 R% {& Q$ u6 y& V. z, V
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=27 f: s6 V! K% ~5 s
[18:07:13] relay block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091, {8 j9 f+ z* m
[18:07:13] persist block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091
[18:07:13] initialize: height=5 view=0 index=0 role=Backup' l7 L4 B+ }4 w/ P- {
! P2 K9 X! _, Y! {
1 m! F9 V7 s$ m
提取Neo% w% r4 g4 P1 `) F6 [
原来文章中有提取neo和gas的方法,但是我现在还不知道为什么要提取Neo,有什么意义,先跟着文档跑着看看。我用的window server会遇到crash,详情请看https://github.com/neo-project/neo-gui/issues/171& a% @2 d+ H' I9 H) n
希望Neo社区的大牛能解决一下这个问题。! a* B( \+ V- u
一天后,社区给出的解决方案https://github.com/neo-project/neo-gui/issues/171,需要下载两个包, B3 c, u( F+ M# {
结论# X4 `4 P' M4 D j$ i
虽然配置成功了,但是还不知道能干吗,需要进一步研究。提取Neo也遇到崩溃的情况,发现这个问题,也算做贡献了。
成为第一个吐槽的人