Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

5步构建私链,7步Neo过亿

蓝天天使2017
94 0 0
是否,参加了各种Neo活动,对Neo颇感兴趣,希望从源头了解这个世界上为数不多的支持智能合约的公链?
  V3 C9 _1 q7 _5 s" G* D1 B( E是否,总是想参照Neo文档建立一个自己的私链,但是总是没有那么多时间去昨晚,抑或没走几步总是会遇到各种拦路虎?
0 q$ n+ X9 E2 G+ \3 O* @* }2 C7 P) g是否,想研究Neo智能合约,但是苦于主网(mainnet)gas太贵,测试网(testnet)申请又太麻烦(而且一般都不那么慷慨)?
$ S, _" ]6 ?: J' H8 Z" Z! a是否,希望给大家炫个富,“嘿,看,我有1亿Neo!”?
# m; u: b& y8 [" `& {恭喜你,阅读这篇文章就能解决以上问题。请跟随笔者一步一步进行操作,每一步都是笔者的成功的操作记录,请放心食用。本教程已经预设了多项参数,在一般情况下,按照本教程操作就能立即坐拥1亿Neo并供你尽情挥霍。) [# S9 z- o, A+ K6 ~) v& J1 _$ W
本文面向私链体验者,5步构建私链,7步Neo过亿。- k9 M9 v' s0 X* c: H$ d/ D
如果大侠需要详加参详或者只是想体验更简单的快速搭建Cli节点,请详阅https://github.com/NewEconoLab/neo-cli-docker) J/ E( ?3 B2 \* L4 x
以下操作以Linux指令为主:
0 K& t! O/ v- r9 L. y5 {第1步,建立Docker环境
- W( ]" K1 s" ^3 O建议参考Docker官网https://docs.docker.com/engine/installation/构建Docker环境,具体操作不再赘述。/ x& Q7 n* |; j3 Y! b) g
Docker支持所有系统,包括Linux、Windows、Mac,Linux为原生支持。
8 S! r; T" V2 x! ~笔者以CentOS 7.4 x64为实验环境,但是其他系统亦可,最终Docker层都是用CentOS的。( H' f+ I7 ~: [2 U; f9 z
服务器或虚拟机建议不要低于2u4G。
2 ~: a; ]5 F4 U/ n8 m) W第2步,引用笔者编制好的dockerfile构建Neo Cli Docker镜像,后面将以次为依托派生容器。
6 n) {; w! N; A3 L2 X打开CentOS终端或使用SSH远程,输入并运行如下命令:% f  ?0 W: @- d) K6 \
docker build -t neo-cli:v0.3 https://github.com/NewEconoLab/neo-cli-docker.git#:dockerfile/privatenet
' l& |, g& g7 V& V这条命令会从NEL的github自动应用私链镜像构建脚本,主要进行如下操作:  F7 ], m2 a" k! B9 k' N# A
构建CentOS Docker镜像
/ f8 x3 P  @" z5 }4 }安装dotnet sdk环境
7 h& S( l+ Y# {' S5 X  m, Q4 X, ?安装Neo必须的leveldb-devel库+ I4 p2 i& Z& c  K* S& i* R) l* r' ?
安装git
' H: l( Y$ B8 e% `, s2 W$ L从Neo官方github克隆neo-cli项目最新代码
! J( D- s' X; X1 z* |3 g9 O7 K1 b使用dotnet sdk编译neo-cli" M1 N, Y7 f/ A, {& j- r
从NEL官方github克隆neo-cli-docker项目  s# }6 W" p/ @% \) T7 u( a
将neo-cli-docker项目中预先配置好的私链版config.json和protocol.json文件替换到neo-cli根目录% O- _0 u- U$ ]
第3步,安装Docker官方容器编排工具docker-compose,为后面一键派生4个记账人节点容器做准备。. h) u1 \/ B4 h8 M: ?$ q+ w4 n; _
输入并运行:$ u: i( h% ~& u( K
sudo pip install -U docker-compose4 e0 h7 D! N: G# {  t: F/ R  o
pipuninstall urllib3
4 L; L  r* i1 X) Ipipuninstall chardet
$ w0 N8 f: \8 r5 X* Z; y9 X( Kpip install requests
9 w6 \. S) p( Y4 `. Y8 U- udocker-compose –version
6 k* F* D9 K( a" q5 M3 ?7 `第4步,引用笔者预先设置好的容器编排模板一键生成Neo链最小规模的4个记账人节点容器(实际最少3个仍能继续共识出块)
. ^. w4 T9 U/ p8 y) S. P* h输入并运行:4 m8 G+ R2 S- V, D# C
cd /home
  {6 W0 g- X$ f+ Wsudo yum -y install  git
' l+ T2 Q6 D; t) r4 Zgit clone https://github.com/NewEconoLab/neo-cli-docker.git
. N0 a8 u, j7 z; p# J0 e0 J0 Dcp neo-cli-docker/dockerfile/privatenet/docker-compose.ymldocker-compose.yml
- C1 P1 f6 I0 I  x* vdocker-compose up -d
$ A% h' Q1 T, c0 cdocker-compose ps
5 w. E: l3 s. M- [! l9 a' w; a1 ]- K7 S+ Z' s( D9 f# y, d, d- j
看到这个样子就表示4个记账人节点的容器已经成功启动(此时节点还未启动)
9 {! [5 Q- H4 J5 L8 b8 \6 l第5步,分别进入容器,启动节点,打开记账人钱包,启动共识
+ z- l) K, r- |$ i# W输入并运行:8 L$ X0 i  L4 B' ?4 O0 d% I# L
docker attach cli0进入第一个容器,其后一次为cli1、cli2、cli3
5 X; ~) Z7 C0 W) [这里开始是容器内部环境:
1 w/ K  w7 o4 d1 s. _: o, Y  Rcd /home/cli && dotnet neo-cli.dll /rpc启动Cli节点
* `1 j" f+ Q6 Y3 a: Sopen wallet ./docs/neo_private_net_0.json打开记账人钱包,其后依次为neo_private_net_1.json、neo_private_net_2.json、neo_private_net_3.json
6 n0 j2 m6 C) m钱包密码123456! g: g) O8 Y- g; d
start consensus启动共识
& i9 r" q; X2 V& H# _- i最后切记使用特别的组合键【Ctrl】+ (【P】->【Q】),即按住【Ctrl】再依次按【P】、【Q】,退出并不停止当前容器。
0 w5 C8 g$ t" H. ]( f其他3个节点容器类似依次操作,不在赘述
. ?. y  r5 v( E% G$ a最后一个节点启动后,稍等片刻,可以看到私链已近开始运行:7 B+ c! p  B! R8 n/ w% Y
, b1 K+ B' {4 I& p" p8 E6 E0 e
可以看出,主记账人角色是交替承担的, a, K) G. x# T2 Y  Z
至此,私链已经搭建完成,后面2步是私链的应用。/ m0 L: D3 U+ Q+ }
**5 u3 T% R7 Z/ i% i' U  Y
第6步,通过Cli jsonRPC api查看私链运行状态**/ i! k, t. k- W2 q$ }
安装postman等api测试程序
0 N# k) Q* f5 D" T使用get方式请求:
  _* ^+ a( u% Ihttp://116.62.160.38:10332/?jsonrpc=2.0&method=getblockcount¶ms=[]&id=1
0 w& N' c- m# H& G其中IP部分要替换成你的电脑或虚拟机的实际ip。7 \7 ?0 D% _. U: c) D5 Q3 \, y

" w1 x5 h% F+ |/ u4 g+ |然后就能看到当前私链总的区块数,要查看其它信息,可参考NeoCli api文档: B1 }7 r0 t# L) ^8 j# @. u; A2 v
第7步,从记账人多重签名合约中取出初始块中的1亿Neo转到一个非记账人钱包中& [* _: S! c  K8 |7 G/ J+ q6 E; f
构建能够连接当前私链的config.json和protocol.json文件
( l8 P1 k  C; p+ g$ M  ?# q8 v- U5 A1 O! \  hconfig.json参考:
$ u9 ]+ q+ Z, N" g: k; r$ p8 {{
+ P; T1 m) `' u1 e' w% p8 V! ^7 o- Q; d  "ApplicationConfiguration": {
1 r1 O2 y$ H- k/ R  E    "Paths": {) ?# B  J8 b: B  W5 x$ a% {" j% S
      "Chain":"ChainPrivate",
' `2 i) v# V. Y1 ]8 J      "Notifications":"NotificationsPrivate"
. Z2 t0 g# B2 o$ t7 {2 N8 B  B    },
, k. \7 `( m5 w* [& w7 W2 H    "P2P": {
/ S) p5 ?; i- A- ~( F3 J      "Port": 10333,) y/ j( `* ^, C7 X- ]* m! j
      "WsPort": 10334
9 P! k: S: p8 a3 e" @+ U    },5 s# P; z; d% w, c3 Z
    "RPC": {& ]: m1 K  b" u( H. v
      "Port": 10332,
9 j0 z- C+ Q2 w6 @4 S+ ~; H      "SslCert": "",) l5 n1 @. |) u* G! H) p
      "SslCertPassword": ""+ S5 V! J3 w! o8 b* t
    }1 ^2 a' S- B- H) {
  }3 C7 Y& H* U' W+ J! b6 w5 J" `
}
/ A1 m) ]6 U0 T# F) k! r0 \protocol.json参考:2 R/ K7 y4 O! _5 G3 @
{
6 @+ o7 S- i- Y. M/ E0 N+ w- M; Z% I  "ProtocolConfiguration": {( p% h  v5 X: H; H' ~
    "Magic": 9726190,$ P4 \0 P) i& T3 b
    "AddressVersion": 23,8 s6 s: Y$ B( T3 t$ n
    "StandbyValidators": [
, @* d% _7 k$ k9 t4 F4 S7 i- p     "0249b419692a17fb519c3b42ffbe82ae34855a45e54783a9bc940135b1c2753ece",
0 r1 L* K: L! m8 `% W     "03298a54cdfb2b5ffae0638c60633de24e3956b76a44867475e81db5ce87b2a16b",1 C2 w, Y" P' m6 u
      "02b795b3322f0a171c7e7658371131c0caa77a9279818b85b9d0728a5a63452ff8",( C# a+ r( h  P+ i/ I
     "0366440bd2a1fe4e0d1dcb9bf35995c5c6e858af846abef145064ab2b5e8ebfce8"
' ~2 B( e0 I9 z6 N7 R    ],- Y" {0 K0 ^' h9 n# Q  w2 Z& C
    "SeedList": [9 @  \  ^4 i$ T3 o& J, K8 x
      "seed0.nel.group:10333",
+ c9 U- G. O- Z9 n0 E) i' Z3 y( O      "seed0.nel.group:20333",, g8 ]2 U$ j3 ^. x4 q- @
      "seed0.nel.group:30333",
$ g% S6 ?. |8 |2 x      "seed0.nel.group:40333",0 [% d3 ]) I) @: I8 Y
    ],- S$ [4 m' f) _% N
    "SystemFee": {. s3 r% {  C% I+ x7 j6 Q" p% p+ q
      "EnrollmentTransaction": 1000,
( H2 M* v, w) e; Z0 Y4 }3 [      "IssueTransaction": 500,; Y& M( W. s. K# w
      "PublishTransaction": 500,: U  k1 _  w5 J; M6 r
      "RegisterTransaction": 10000: D3 y* S9 Z, R- }
    }
% `1 r8 n) |) _, Q  }
% x8 V' D% U; w% K/ E& W8 Z}
! E# L2 ]) V( z" B. a' c0 mseed0.nel.group需要替换成你的电脑或虚拟机的实际ip# H* b6 e9 n2 b) A; c7 V- c
下载笔者预制好的记账人钱包和非记账人钱包
5 @# ^  q7 h' i- [7 M下载 https://github.com/NewEconoLab/neo-cli-dockerZIP
/ l, A0 @0 y" E0 @4 J5 i: I在/dockerfile/privatenet/docs可以找到相关文件" i5 k5 E3 Q" _+ w+ A; `8 Y9 `
下载Neo官方GUI钱包,建议是2.6.0.0以上将其中config.json和protocol.json替换成以上内容,然后运行。打开neo_private_net_0.json  0号记账人钱包,密码123456
: ~9 l; e; k; A4 u# W9 N' h6 }, E
可以看到一个合约地址中有1亿Neo(是不是有点小兴奋啊),这个合约地址是由4个记账人公钥构造的多重签名地址合约,需要至少3个记账人钱包签名才能转出。8 \, O( c1 U1 R2 o
最终转出
5 j! }& i, ?% O7 W8 Y- u新建一个新的非记账人钱包,比如neo_private_net_test_0.json
' S6 A) X5 B1 y6 M2 h; h! \1 ?记住它的地址,比如AWSuQXpjuY3v22gCbEFL2vHbSLMMVK1QD6
" S9 x: V8 y3 A; l  g4 i/ y打开0号记账人钱包,并【交易】-【转账】到上面地址( I+ E7 f( s  L% b- X

; T7 {, H% ?2 ?8 M+ F确定后会提示签名不足6 V+ G2 s$ Q5 b" |1 s
3 C$ |8 A2 |% L6 o  b
没事,我们先把整个内容复制出来,然后打开1号记账人钱包,【交易】-【签名】对这笔转账交易进行第二人签名。; L4 c( O8 \* B. m9 R( ~8 ^' d
  v2 ^7 e0 M0 E9 X$ u% C
复制输出,然后打开2号记账人钱包,【交易】-【签名】对这笔转账交易进行第三人签名。
* z: a, E$ V( ^
: Q2 J6 K* U2 X  g3 y此时,左下角出现【广播】按钮,代表交易签名已经完备。
0 I6 o' k1 t" i' B点击【广播】将交易发送到私链上进行共识
6 a" s) F4 z7 S8 C. d8 Q+ Y, X等到15秒左右,1亿Neo就到你建立的那个AWSuQXpjuY3v22gCbEFL2vHbSLMMVK1QD6地址中了。0 P+ Z+ b& Q! x( {1 c. q
: q" u- w. \* t, B
GAS是通过生成区块,按照Neo持有量,不断产生的。0 {/ }$ r' c( U2 K; X
通过对自己地址转账,然后【高级】-【提取NeoGas】就能将GAS提取到自己地址。$ b/ h$ Y. i/ H. d
好了,至此你有用了一条新的Neo链、1亿Neo、无数Gas,开始你的表演吧。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10