Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

蓝天天使2017
91 0 0
是否,参加了各种Neo活动,对Neo颇感兴趣,希望从源头了解这个世界上为数不多的支持智能合约的公链?# B1 g# ?" [  p5 L0 A0 {5 e, G; J
是否,总是想参照Neo文档建立一个自己的私链,但是总是没有那么多时间去昨晚,抑或没走几步总是会遇到各种拦路虎?8 x/ E5 Y2 y6 ]
是否,想研究Neo智能合约,但是苦于主网(mainnet)gas太贵,测试网(testnet)申请又太麻烦(而且一般都不那么慷慨)?; x8 {! U: L- q8 B1 [5 L) M; a
是否,希望给大家炫个富,“嘿,看,我有1亿Neo!”?& V: Q& C; ?7 E' t2 e
恭喜你,阅读这篇文章就能解决以上问题。请跟随笔者一步一步进行操作,每一步都是笔者的成功的操作记录,请放心食用。本教程已经预设了多项参数,在一般情况下,按照本教程操作就能立即坐拥1亿Neo并供你尽情挥霍。/ T/ j/ M9 _/ m* f! g
本文面向私链体验者,5步构建私链,7步Neo过亿。
* z# L9 \& G6 b; v. i如果大侠需要详加参详或者只是想体验更简单的快速搭建Cli节点,请详阅https://github.com/NewEconoLab/neo-cli-docker. B0 M( l" R6 `4 I- q0 u
以下操作以Linux指令为主:/ {$ N+ u  @& E8 O) |$ i$ G5 H
第1步,建立Docker环境
) B6 s. ?4 v* q建议参考Docker官网https://docs.docker.com/engine/installation/构建Docker环境,具体操作不再赘述。
' T& \" z; _% D5 @2 a! x. nDocker支持所有系统,包括Linux、Windows、Mac,Linux为原生支持。* p: [, c( [9 W* S6 e1 [! [* ?
笔者以CentOS 7.4 x64为实验环境,但是其他系统亦可,最终Docker层都是用CentOS的。
$ V8 V8 T8 k1 U8 A服务器或虚拟机建议不要低于2u4G。
( F) U6 {, S2 d5 e9 s7 {! T第2步,引用笔者编制好的dockerfile构建Neo Cli Docker镜像,后面将以次为依托派生容器。
! ^/ N" T: H( Q1 D; K+ F" S打开CentOS终端或使用SSH远程,输入并运行如下命令:
) L! Z0 I2 p, {0 Pdocker build -t neo-cli:v0.3 https://github.com/NewEconoLab/neo-cli-docker.git#:dockerfile/privatenet0 C% c2 y. `/ e6 s$ ~8 ~3 @/ c! K
这条命令会从NEL的github自动应用私链镜像构建脚本,主要进行如下操作:* W8 m- ?8 H1 A4 _; Z9 Y3 B
构建CentOS Docker镜像7 U4 _' U# e3 d+ i2 i$ D( S" A4 I
安装dotnet sdk环境8 E3 @, G" u8 b* |* x7 R% G  b* F( E. F
安装Neo必须的leveldb-devel库
8 a4 s/ I7 _- a9 ]安装git
' S1 w% i/ X& V" Y# }7 R从Neo官方github克隆neo-cli项目最新代码
; e- D) G# G7 E使用dotnet sdk编译neo-cli
/ d, o, L3 \4 |: ^从NEL官方github克隆neo-cli-docker项目: C6 a% X. K, R2 `' o3 v" V7 N6 M
将neo-cli-docker项目中预先配置好的私链版config.json和protocol.json文件替换到neo-cli根目录
. {6 f- k5 y5 y5 @第3步,安装Docker官方容器编排工具docker-compose,为后面一键派生4个记账人节点容器做准备。
; n9 g8 A/ [3 n! N5 ]! g输入并运行:
8 e$ ^6 @7 N' W* Bsudo pip install -U docker-compose
2 s: s! [9 n! |& v+ i* G% Mpipuninstall urllib3
) y6 W4 k1 ]) K" I, l4 c' xpipuninstall chardet
! k  L: V8 S; M, G, x! ?pip install requests
1 Q# O5 w; \+ I6 K. k4 [0 h/ Pdocker-compose –version
2 A- H* v5 A0 P& _$ V* j* m0 r- Q第4步,引用笔者预先设置好的容器编排模板一键生成Neo链最小规模的4个记账人节点容器(实际最少3个仍能继续共识出块)
( Z9 H) i. L% ?3 `8 }输入并运行:
( L  o4 i+ P' A' g, V' s/ ?cd /home+ r# Z! W) U% `
sudo yum -y install  git7 B( Y5 s/ A" g) U1 k/ J
git clone https://github.com/NewEconoLab/neo-cli-docker.git
1 H6 W: ~( X1 ?" F5 u$ [cp neo-cli-docker/dockerfile/privatenet/docker-compose.ymldocker-compose.yml
9 b; |" T! R, F0 [* z0 mdocker-compose up -d
/ n8 D  I* ]2 c7 E3 G1 U) }; Idocker-compose ps
7 q- }9 z4 v1 t8 u& C
, R9 g: `& q2 G4 d- E' M; v# Q看到这个样子就表示4个记账人节点的容器已经成功启动(此时节点还未启动)/ U# X/ N* B! Z! `- d3 u' f
第5步,分别进入容器,启动节点,打开记账人钱包,启动共识
8 Y$ c0 g8 E( c  T* S: Y! K. b输入并运行:* Q6 e. h" r( I" }7 B2 G4 \/ S& s
docker attach cli0进入第一个容器,其后一次为cli1、cli2、cli36 X2 p  F: S1 T4 i/ |  P
这里开始是容器内部环境:
5 y; V2 e" R0 G% T; U& I+ Xcd /home/cli && dotnet neo-cli.dll /rpc启动Cli节点
" D( ~# X/ |, {open wallet ./docs/neo_private_net_0.json打开记账人钱包,其后依次为neo_private_net_1.json、neo_private_net_2.json、neo_private_net_3.json2 Y; a& c) q( s. z" v+ ?6 A
钱包密码123456" Y$ L! ]: |) e# Z6 K
start consensus启动共识
. ~5 D& \/ [$ o+ ]最后切记使用特别的组合键【Ctrl】+ (【P】->【Q】),即按住【Ctrl】再依次按【P】、【Q】,退出并不停止当前容器。
( z8 |* Y  Q8 {- E2 R其他3个节点容器类似依次操作,不在赘述
: h. v% s$ d* U2 q2 g- Y- x6 J最后一个节点启动后,稍等片刻,可以看到私链已近开始运行:
  D( s) A7 a! q& }  N4 f. N5 H. Q" ?9 Y; L  y. d/ ~" `
可以看出,主记账人角色是交替承担的; _0 \  ?" C9 \8 D2 c% A- m3 f7 J
至此,私链已经搭建完成,后面2步是私链的应用。4 Y& `; D' n: u$ [9 t, u
**3 y, l3 v1 i- y! J- v2 g( w* ?
第6步,通过Cli jsonRPC api查看私链运行状态**- H! u) H+ `6 H
安装postman等api测试程序
* g- |) N7 m: e* n使用get方式请求:
: u+ I4 ~% i! p, qhttp://116.62.160.38:10332/?jsonrpc=2.0&method=getblockcount¶ms=[]&id=1/ g6 |5 Z' P- H" O# d
其中IP部分要替换成你的电脑或虚拟机的实际ip。
" Q5 z# e3 |  A$ H7 {0 }* D$ m
7 X: x  {, S4 a( d$ u* G2 W然后就能看到当前私链总的区块数,要查看其它信息,可参考NeoCli api文档
# W8 r; a- E. n! o+ I第7步,从记账人多重签名合约中取出初始块中的1亿Neo转到一个非记账人钱包中. A3 Q* k* [8 C6 z( |2 u$ a8 i- _
构建能够连接当前私链的config.json和protocol.json文件7 \2 U! Q6 p# b! z1 G* p9 L1 l
config.json参考:
4 L; T5 D& |. B{
* {  I1 L& D* z) x8 k  "ApplicationConfiguration": {5 u7 F) @/ P  M, n, V) H2 K/ z
    "Paths": {% Y# n9 w$ K3 y
      "Chain":"ChainPrivate",  j) f8 S; g+ {& M% I# e9 K/ H! S; C
      "Notifications":"NotificationsPrivate"* z2 `' W0 B4 {
    },
8 p) b+ ^& B9 }+ T' x    "P2P": {
1 h6 R% N  F6 ?6 g5 N8 g# ]& z      "Port": 10333,
8 m4 C2 A0 t0 L( ?* W      "WsPort": 10334
* O$ J, U0 k1 d7 |1 t. k$ ?    },6 ]4 T' C/ M6 w- [4 ^$ X5 C
    "RPC": {
& z! S' U, K# G, D. [" @      "Port": 10332,
0 l; s' E, w' W* f4 G      "SslCert": "",- I% s3 J1 D. \; x* C
      "SslCertPassword": "", d6 s& P# t+ J. B- H
    }* g  Z. [' m4 Y* y
  }
+ ]3 t) w: T* ^6 o$ R2 N( D}! K) {2 q+ E: Y7 i
protocol.json参考:
8 |% m5 r4 P3 \: ~* z{
# o0 P2 R$ a, [" i  "ProtocolConfiguration": {; P6 O! `8 Z( x. R- Q3 c
    "Magic": 9726190,+ K8 w# s. {( x+ k
    "AddressVersion": 23,; _) \- Q4 n; ]# y; Y( o6 u
    "StandbyValidators": [
7 ^% x7 F, N% B/ r  j4 e& Y" s     "0249b419692a17fb519c3b42ffbe82ae34855a45e54783a9bc940135b1c2753ece",
1 I* p# `- r: `* v     "03298a54cdfb2b5ffae0638c60633de24e3956b76a44867475e81db5ce87b2a16b",& G8 Q' u! R. V7 N9 a  p
      "02b795b3322f0a171c7e7658371131c0caa77a9279818b85b9d0728a5a63452ff8",
. }1 ]1 F0 \* l0 b; w% b! ~/ r0 f* o7 M     "0366440bd2a1fe4e0d1dcb9bf35995c5c6e858af846abef145064ab2b5e8ebfce8"/ N4 c* Q# Y0 B* R* l6 R
    ],  S+ u) i1 E8 u
    "SeedList": [
7 b" a+ `/ I3 v( h2 I% c. p      "seed0.nel.group:10333",
3 I, u! P2 K( S2 `4 k      "seed0.nel.group:20333",
% s- S% ^5 W1 p2 g( ?. ~/ f0 G      "seed0.nel.group:30333",
$ L4 E% J, q0 ?! O" q9 f+ b! c' i      "seed0.nel.group:40333",9 c; c) V" m! W% G
    ],
& t8 Q5 W6 O5 v! P/ @% v4 O    "SystemFee": {& m0 k0 {# Z: U  V
      "EnrollmentTransaction": 1000,1 l  {0 G0 t( i8 M0 S3 y
      "IssueTransaction": 500,) A) h2 i5 A. f) W0 p  ]
      "PublishTransaction": 500,( Y$ z) I0 q0 g9 R
      "RegisterTransaction": 10000$ B, q$ o* A  ]% U# x0 I0 X
    }
) n7 a5 K8 s. e, m! F  }, K2 c. P$ G0 \0 |, |
}2 C$ j2 `5 q0 l2 e' h. d' R/ ^' u3 ]
seed0.nel.group需要替换成你的电脑或虚拟机的实际ip
" P7 H) c' A- h) \7 D  ~. e' E下载笔者预制好的记账人钱包和非记账人钱包
, Z7 `/ G; H7 A7 _4 C8 l$ ]5 h下载 https://github.com/NewEconoLab/neo-cli-dockerZIP! h% d; f0 M$ w. @# M5 P3 B9 G1 a
在/dockerfile/privatenet/docs可以找到相关文件' {. O7 `! p) R. b) T" o
下载Neo官方GUI钱包,建议是2.6.0.0以上将其中config.json和protocol.json替换成以上内容,然后运行。打开neo_private_net_0.json  0号记账人钱包,密码123456
1 W% F' c( g+ ]& ^6 s. F& s0 p
+ _7 o: I, J: a8 Q# h可以看到一个合约地址中有1亿Neo(是不是有点小兴奋啊),这个合约地址是由4个记账人公钥构造的多重签名地址合约,需要至少3个记账人钱包签名才能转出。
1 \1 M! P4 z+ [  G/ N4 U* }最终转出
: A3 e3 E% |" Q1 E0 V新建一个新的非记账人钱包,比如neo_private_net_test_0.json
& b2 |$ Y; f+ a) o% N* ]记住它的地址,比如AWSuQXpjuY3v22gCbEFL2vHbSLMMVK1QD6
; W1 r" R5 ?. t& I" \* ^8 N) ?  `5 G打开0号记账人钱包,并【交易】-【转账】到上面地址# O% j$ U" P& _# T+ Q3 J1 v0 ~. Z
8 ]4 C. E. h" {( Q+ S& Z
确定后会提示签名不足5 }/ f, z$ E! U3 y. z- r; P" T- g
3 o- q+ J1 d! x% x# |: o
没事,我们先把整个内容复制出来,然后打开1号记账人钱包,【交易】-【签名】对这笔转账交易进行第二人签名。$ D" W. @  \( D: ^9 W5 r" X
( Z% U. W+ m) u' `
复制输出,然后打开2号记账人钱包,【交易】-【签名】对这笔转账交易进行第三人签名。/ E( y  C/ k& f

5 P0 r; C( c' j, Q此时,左下角出现【广播】按钮,代表交易签名已经完备。
* e' C3 k- H( c+ o点击【广播】将交易发送到私链上进行共识
' e' V! T/ F9 Q等到15秒左右,1亿Neo就到你建立的那个AWSuQXpjuY3v22gCbEFL2vHbSLMMVK1QD6地址中了。
9 C1 ]; K. C2 N6 i- L. J0 G( h4 C+ Y( S6 B, d! M
GAS是通过生成区块,按照Neo持有量,不断产生的。0 `. i) R  h3 \+ g( O
通过对自己地址转账,然后【高级】-【提取NeoGas】就能将GAS提取到自己地址。- R- u  b& Q8 L3 J9 x
好了,至此你有用了一条新的Neo链、1亿Neo、无数Gas,开始你的表演吧。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10