阿里云上的虚拟机玩转Neo私链
李悔之2015
发表于 2022-12-18 07:08:21
82
0
0
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点。在阿里云上可以买按量付费的虚拟机(机器都是window server)。! N2 Q- v/ Y) K" X/ Q4 d. \
记录下四台机器的内网IP地址,后面要用。
172.xxx.xxx.1422 J! c) B, z! d: G6 R
端口
如果你想让外部程序访问该节点的 API 需要开放防火墙端口:10331-10334, 20331-20334
阿里云的vpc如果在一个安全组内就不需要设置。也可以通过安全组开放所有入口。& s6 F2 J7 [: x8 a
+ c; W6 k- x9 d2 f6 p" N4 Y
阿里云安全组
安装运行时/ u7 n' l8 k7 G
运行环境, e% }8 [" r( y% X# f/ u
$ }- Q! G! t. M8 h
运行 NEO 节点需要安装 .NET Core Runtime,需要安装 1.0.1 或以上版本
Windows 系统下的安装方法- ]9 H6 E n7 a9 E% m7 M; g
7 P/ v) G! a5 I$ o0 m: B
在 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的目录下面
create wallet wallet.json' @/ D! r" O* B+ t# D$ I, w
db3后缀名的数据库文件不支持了
neo14 T) G' g- o# u+ C
neo> create wallet wallet.db3- {1 s7 l5 b& q! d9 L
Wallet files in db3 format are not supported, please use a .json file extension.
neo> create wallet wallet.json
password: ********! H* w8 i& y& x" h5 e0 P, \
password: ********
address: AS43TUy7VtuGpNJh2YC2NM3asTv3s6piyk. h1 Q" S' y& e. V1 X
pubkey: 02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c+ m$ d5 }) g0 z' @8 i8 h
记录下另外几台机器的钱包公钥
neo2( d4 y' [$ w8 B% P/ m/ P/ h
address: AY35ZjJayg9JfmCeHg1nySN4LSMntFEq2h" E7 U- |# p1 A
pubkey: 035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb
neo3
address: AQZNtdGVXbfot5fSaR4ijBqrEwbnFQspmH' E9 v9 \4 R6 G' x; _
pubkey: 029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b1
neo4! {7 Z* A3 i, w% C5 r3 a9 h1 t
address: AXctyT8ctWTXtWaUFM9o5FJas8BWdBbiqe) Q e( V" h. e
pubkey: 02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d
修改节点的配置文件$ G+ Y% [+ u9 A, _& h+ u
{
"ProtocolConfiguration": {
"Magic": 1,, w& ~' n/ E, M: q" g0 s
"AddressVersion": 23,9 q/ |- W; O7 I$ T a
"StandbyValidators": [$ e# i- \. U& {2 F/ P6 n$ \
"02d57c9bbc42b45943867dff0180cb9df266b46db7d027a283eabc7c4b8819c86c",
"035022ce81faca930ebe6b9f8e830526150e47692f19f58affe1311e42cd0d43bb",3 b2 l0 i* @3 a2 J" {
"029f21d56f9422e55f0ef7cf75c092854e01c99aeee73f0effeaa489a96fc7d2b1",
"02dc0e750e21c386537618079d89836eea39fad396206e2e56cfba16bdc014dc5d", X$ e, k) L8 U \7 [, _6 b3 w
],& o/ q2 q1 Z3 n. \/ I, c& c
"SeedList": [& K2 n) T+ w0 D
"172.24.198.142:10333",
"172.24.198.141:10333",
"172.24.198.140:10333",
"172.24.198.139:10333"
],1 X. c# T1 I; O% k
"SystemFee": {
"EnrollmentTransaction": 0,4 K0 }4 G- c% f. h& m9 d: Z
"IssueTransaction": 0,
"PublishTransaction": 0,
"RegisterTransaction": 02 ]' e5 U+ l$ A/ ^) n7 ?- ~1 S7 a3 H: S
}, Y# G4 W& Y* g8 q, y% D7 u9 ?
}3 T; h9 P3 D7 [- v
}
打开钱包,开启共识
open wallet wallet.json start consensus, l/ w1 a+ Z& Q& a5 h9 r
如果前面打开过cli,请删除chain目录下的文件,这样区块链高度会从1开始。
: c% ?. g# H7 J. R( q3 u2 r3 X+ |
截取其中一个打印,后面方便调试的时候研究
neo> open wallet wallet.json
password: ********# X$ N1 Q6 }2 \* U* d. y' {
neo> start consensus
[18:04:31] OnStart+ Y( [" F' G$ g
[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$ f7 Q( x4 _' I# R* f2 e
[18:05:01] request change view: height=1 view=0 nv=1 state=Backup, ViewChanging' h7 O$ q+ }, j- Y3 t. h4 z, F: |
[18:05:58] OnPrepareRequestReceived: height=1 view=0 index=1 tx=1% R) e: P5 m8 J% q( R7 }
[18:05:58] send perpare response8 `% x! }- {# r ^, `
[18:06:01] OnPrepareResponseReceived: height=1 view=0 index=2
[18:06:01] relay block: 0x8515184285fa2e454b0eca441580b5cce01cc0e5cb5dd6d7ff53ef13ec7f665e
[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 response
[18:06:19] OnPrepareResponseReceived: height=2 view=0 index=1
[18:06:19] relay block: 0x35b163f4f524a1ebcc1ef3053e878f9bb37b1f4a8531a060ef18cfd6efefdf45
[18:06:19] persist block: 0x35b163f4f524a1ebcc1ef3053e878f9bb37b1f4a8531a060ef18cfd6efefdf452 T7 p) v9 N8 B) ?$ X S: @; V
[18:06:19] initialize: height=3 view=0 index=0 role=Backup& Q% v2 J1 s- |
[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+ [0 G6 I: k R9 @' o( |1 f+ I9 a
[18:06:49] OnChangeViewReceived: height=3 view=0 index=1 nv=1
[18:06:53] OnChangeViewReceived: height=3 view=0 index=2 nv=1) A9 a z% |" @, X/ o- M, c
[18:06:53] initialize: height=3 view=1 index=0 role=Backup
[18:06:55] OnPrepareRequestReceived: height=3 view=1 index=2 tx=1) J1 U$ C1 r3 q) _) {6 d
[18:06:55] send perpare response
[18:06:55] OnPrepareResponseReceived: height=3 view=1 index=13 l" R: a O* _* f5 R& }' W+ j
[18:06:55] relay block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c412
[18:06:55] persist block: 0x1766a0602903f513f76561c93fddf312f70d30801310abfecacc89feace5c412
[18:06:55] initialize: height=4 view=0 index=0 role=Primary" k) y q$ A) h2 _
[18:07:10] timeout: height=4 view=0 state=Primary
[18:07:10] send perpare request: height=4 view=0& F1 E$ y" `8 a/ v
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=3; l7 _4 G5 A2 g8 y" x
[18:07:13] OnPrepareResponseReceived: height=4 view=0 index=24 W6 N( l( Y$ Z: i& U
[18:07:13] relay block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091- _8 I! k# M2 J
[18:07:13] persist block: 0x5233d9086db97e59f86d73e8735093c1b3fe4569759697ff8a04e0eb8f389091
[18:07:13] initialize: height=5 view=0 index=0 role=Backup
% B, d! r7 A5 f
" z+ |: Q: S( g$ p+ G
提取Neo8 m$ I- H4 U( {8 d9 ]
原来文章中有提取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,需要下载两个包$ g, M [) x( C+ I
结论8 v2 r% u" j4 V8 F
虽然配置成功了,但是还不知道能干吗,需要进一步研究。提取Neo也遇到崩溃的情况,发现这个问题,也算做贡献了。
成为第一个吐槽的人