Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

蓝天天使2017
92 0 0
是否,参加了各种Neo活动,对Neo颇感兴趣,希望从源头了解这个世界上为数不多的支持智能合约的公链?- t6 r& x' v! b) V7 p& C5 H
是否,总是想参照Neo文档建立一个自己的私链,但是总是没有那么多时间去昨晚,抑或没走几步总是会遇到各种拦路虎?
8 ?! _& m5 B6 L0 s) ?$ Z" w是否,想研究Neo智能合约,但是苦于主网(mainnet)gas太贵,测试网(testnet)申请又太麻烦(而且一般都不那么慷慨)?
5 i+ y# ~7 y8 I4 n0 N是否,希望给大家炫个富,“嘿,看,我有1亿Neo!”?% z  P' e2 q  R9 G  i* g
恭喜你,阅读这篇文章就能解决以上问题。请跟随笔者一步一步进行操作,每一步都是笔者的成功的操作记录,请放心食用。本教程已经预设了多项参数,在一般情况下,按照本教程操作就能立即坐拥1亿Neo并供你尽情挥霍。  e  I9 M; M1 \9 |  z* F5 {
本文面向私链体验者,5步构建私链,7步Neo过亿。& L: u0 R) b* _7 K9 p; `' \0 s# _
如果大侠需要详加参详或者只是想体验更简单的快速搭建Cli节点,请详阅https://github.com/NewEconoLab/neo-cli-docker) {$ D5 d( H2 g% O9 l
以下操作以Linux指令为主:& V7 a$ A/ O# {3 Z9 E
第1步,建立Docker环境
( C, c: L# H( ?* K建议参考Docker官网https://docs.docker.com/engine/installation/构建Docker环境,具体操作不再赘述。, Y* A7 s& O" F' J' _) U+ C
Docker支持所有系统,包括Linux、Windows、Mac,Linux为原生支持。
7 p9 s2 Y4 Q+ q9 ^$ k* B! w7 T" r笔者以CentOS 7.4 x64为实验环境,但是其他系统亦可,最终Docker层都是用CentOS的。
, i* a, W( U  R' h+ z服务器或虚拟机建议不要低于2u4G。) b% g& j- F8 ~" ]4 T& E: m2 g
第2步,引用笔者编制好的dockerfile构建Neo Cli Docker镜像,后面将以次为依托派生容器。0 [+ O3 z; V4 k
打开CentOS终端或使用SSH远程,输入并运行如下命令:/ s! |5 n, t  @+ g5 q, V, z- g
docker build -t neo-cli:v0.3 https://github.com/NewEconoLab/neo-cli-docker.git#:dockerfile/privatenet
  a) x' O2 ^  p2 r/ c这条命令会从NEL的github自动应用私链镜像构建脚本,主要进行如下操作:
- V! g; R- y% e# o构建CentOS Docker镜像6 n4 }7 u+ ?5 e7 D7 |/ f
安装dotnet sdk环境
& X! b3 K+ h/ l安装Neo必须的leveldb-devel库+ u9 b# G) f1 |9 u9 w. r/ s0 x0 D9 z
安装git
! j/ w5 m; S( O2 |2 S从Neo官方github克隆neo-cli项目最新代码" b# U' R4 X; H
使用dotnet sdk编译neo-cli
1 f, O1 _0 |; f' c  a从NEL官方github克隆neo-cli-docker项目
% Y2 o$ p( D4 Q: ^& |将neo-cli-docker项目中预先配置好的私链版config.json和protocol.json文件替换到neo-cli根目录+ e8 u! q, x: X9 O2 |
第3步,安装Docker官方容器编排工具docker-compose,为后面一键派生4个记账人节点容器做准备。: L! y4 m' w0 l7 s4 E* S8 Z+ o& U* w
输入并运行:! p2 R# z  M  {6 h
sudo pip install -U docker-compose3 V) N( F# c% T9 l- [
pipuninstall urllib3  u8 Q% S( Q0 G7 q4 s
pipuninstall chardet9 n* ]" L- u6 m# q, B
pip install requests; q) b# A( I- C
docker-compose –version
0 }8 L; v7 [5 }$ p3 y第4步,引用笔者预先设置好的容器编排模板一键生成Neo链最小规模的4个记账人节点容器(实际最少3个仍能继续共识出块)# X' \  v: f- s
输入并运行:! i( m6 M! g9 B+ Z; a. x: D) ]
cd /home. U# ?! N" C' J, M
sudo yum -y install  git
3 V7 {; v. k/ \git clone https://github.com/NewEconoLab/neo-cli-docker.git
: D( ?  U2 o$ c. m/ d3 c; I, Jcp neo-cli-docker/dockerfile/privatenet/docker-compose.ymldocker-compose.yml/ k( F1 J' z" T. u2 j2 z# c  ~
docker-compose up -d
% J$ |4 N- ^" Y: Adocker-compose ps
6 i$ f5 ?8 F$ K( x6 [1 A  V7 a0 O/ N. L, g9 C% w: U- v
看到这个样子就表示4个记账人节点的容器已经成功启动(此时节点还未启动)
3 l8 }! u* x2 ]  z: K) r第5步,分别进入容器,启动节点,打开记账人钱包,启动共识
; k7 Y& Z6 I# W+ {' ^4 S* S输入并运行:% k6 X1 u3 T4 X
docker attach cli0进入第一个容器,其后一次为cli1、cli2、cli3
1 M9 h5 H! v+ v& l这里开始是容器内部环境:
6 T" N: ^% d# H1 `& ^7 g3 B/ Ycd /home/cli && dotnet neo-cli.dll /rpc启动Cli节点2 t7 ~& I2 B- l
open wallet ./docs/neo_private_net_0.json打开记账人钱包,其后依次为neo_private_net_1.json、neo_private_net_2.json、neo_private_net_3.json
9 _* K: I# N) r/ V5 c$ J. ]7 s钱包密码123456$ ~" _+ i% o" o: B
start consensus启动共识/ R" B& I- q- s$ M% ^3 ~
最后切记使用特别的组合键【Ctrl】+ (【P】->【Q】),即按住【Ctrl】再依次按【P】、【Q】,退出并不停止当前容器。2 p" u6 N& ]. ~- Q3 A7 n
其他3个节点容器类似依次操作,不在赘述2 U' M4 |' R7 a8 u9 s+ P1 X
最后一个节点启动后,稍等片刻,可以看到私链已近开始运行:, z- I1 [0 k7 m9 W7 |! z
, _3 H# z# |1 N( E" d
可以看出,主记账人角色是交替承担的* @" G* T  K6 w
至此,私链已经搭建完成,后面2步是私链的应用。9 n! d8 Z0 \9 |- s3 I6 g: f- v1 [
**, p" h. r# b3 q+ A! z  k' ?& @0 T5 Q7 |3 n
第6步,通过Cli jsonRPC api查看私链运行状态**
9 O! p& q& b7 N; z( t' K安装postman等api测试程序7 t; r# l, y" C. S3 G
使用get方式请求:% x" o  h) U5 X4 k! t, q
http://116.62.160.38:10332/?jsonrpc=2.0&method=getblockcount¶ms=[]&id=1. i* V: ?! A% c1 i2 O% a, D+ i. N: h
其中IP部分要替换成你的电脑或虚拟机的实际ip。' Z1 l2 E" Q1 Z8 k2 t1 q3 k
# ~+ d) t& W0 F. K0 ^
然后就能看到当前私链总的区块数,要查看其它信息,可参考NeoCli api文档
( w8 M& z- N7 o7 @3 ?第7步,从记账人多重签名合约中取出初始块中的1亿Neo转到一个非记账人钱包中
  C& f  T/ a: J0 H. K构建能够连接当前私链的config.json和protocol.json文件8 r/ Y$ s5 Y4 R; Z3 u. U6 [1 X7 b0 Z( D
config.json参考:
3 `5 b0 D) f$ Z- q: ]{
1 p/ w6 F  S6 l- M  "ApplicationConfiguration": {
% s& r. y6 T9 k: x    "Paths": {
3 E. M* ~( w9 |      "Chain":"ChainPrivate",
* {  t! t; C3 c' K      "Notifications":"NotificationsPrivate"6 q& u7 `+ J" [0 ]- E
    },# b. \) A, X" a
    "P2P": {
2 b5 a5 c) w! ~9 b      "Port": 10333,5 Y9 Q* Z/ C1 d+ x
      "WsPort": 10334
& y* F7 P$ Z9 ?1 @  n/ p! l    },
& K, L5 Z! `7 J& _: G    "RPC": {0 s, g& b; b7 h  X( v
      "Port": 10332,
3 Y* _/ l% {. i- B: |0 H. i; i      "SslCert": "",
! n) b4 F8 T0 B8 s5 r; `2 O      "SslCertPassword": ""  O; E0 p4 N" s: ^  g, @5 D
    }
# Y5 H2 l4 \9 C( p  }. d5 x0 d5 }- _
}/ U- x. F% q2 [. o7 ~4 P
protocol.json参考:; H9 e, Q3 d4 v& r6 s( W  {8 R
{
* }( o# Y( x4 g  "ProtocolConfiguration": {6 W. J3 f9 j! [8 x# p
    "Magic": 9726190,
$ }5 @# ?6 M4 z; Q    "AddressVersion": 23,2 B) w% i  I# _# B; T7 D
    "StandbyValidators": [
" L# u$ N6 @: v0 x     "0249b419692a17fb519c3b42ffbe82ae34855a45e54783a9bc940135b1c2753ece",+ P9 u6 e% d6 b' C, _
     "03298a54cdfb2b5ffae0638c60633de24e3956b76a44867475e81db5ce87b2a16b",4 n% G9 T) S, m+ z( C4 j, Q! X
      "02b795b3322f0a171c7e7658371131c0caa77a9279818b85b9d0728a5a63452ff8",
& {, {6 \% U, X     "0366440bd2a1fe4e0d1dcb9bf35995c5c6e858af846abef145064ab2b5e8ebfce8"% a8 u9 c0 [- X$ H4 b9 \. O2 ?* D3 N
    ],
9 v. a9 x/ y. J# t/ L, x    "SeedList": [7 o& z1 |9 O6 X! s
      "seed0.nel.group:10333",
+ Y8 i; ?, u) T1 W      "seed0.nel.group:20333",# z/ A: `$ N; n$ y  k& K; ?% m
      "seed0.nel.group:30333",# W. V0 V& }9 f# L2 Q# @8 d/ L/ X
      "seed0.nel.group:40333",
% u' Q9 z: @2 E5 @. G    ],0 c+ l5 I" A) A) ^: y* K. E
    "SystemFee": {
. a2 ^& [0 E  P; B  N* f      "EnrollmentTransaction": 1000,* K5 ?6 `" ~2 N" a1 f) z
      "IssueTransaction": 500,
: P3 }, h/ g, y3 b" @: J* b$ L4 ~      "PublishTransaction": 500,( N; Z2 m6 R2 _
      "RegisterTransaction": 100004 S" g% H2 [' p" F* u/ f& M
    }5 U# l2 u% F/ t4 C: @; z& O7 U
  }. e. C  K4 k3 z
}
3 P9 ^) C9 V: }* [2 X" z+ nseed0.nel.group需要替换成你的电脑或虚拟机的实际ip5 ?+ s+ d% _( O/ _1 k( Z
下载笔者预制好的记账人钱包和非记账人钱包6 d  {$ d3 H. @- X+ u6 Y
下载 https://github.com/NewEconoLab/neo-cli-dockerZIP
. C3 l0 E* V/ g" z在/dockerfile/privatenet/docs可以找到相关文件  h. b% w0 ^, B+ o
下载Neo官方GUI钱包,建议是2.6.0.0以上将其中config.json和protocol.json替换成以上内容,然后运行。打开neo_private_net_0.json  0号记账人钱包,密码123456/ E9 L6 Z2 E" |
: W# o1 G0 ]: W* y9 _5 n
可以看到一个合约地址中有1亿Neo(是不是有点小兴奋啊),这个合约地址是由4个记账人公钥构造的多重签名地址合约,需要至少3个记账人钱包签名才能转出。
" ]9 s) q% @  w% {4 E最终转出
8 L8 C6 t2 Y# D+ Q! c0 t6 X新建一个新的非记账人钱包,比如neo_private_net_test_0.json
3 `: Y* {, e4 X4 f+ h! P  ~记住它的地址,比如AWSuQXpjuY3v22gCbEFL2vHbSLMMVK1QD68 V5 j' r3 b% ]$ j, f3 }2 q' J3 s7 @
打开0号记账人钱包,并【交易】-【转账】到上面地址/ d9 r9 u5 {/ a. V2 G
$ x3 ?+ x( f1 D; T# S% @! C
确定后会提示签名不足2 r( e; e+ H1 `/ e

, ]# k  q; v& T" ?# m+ t0 }没事,我们先把整个内容复制出来,然后打开1号记账人钱包,【交易】-【签名】对这笔转账交易进行第二人签名。
' g) l+ {" K2 f3 B$ C( f8 s: {6 `- J  l1 P; v0 A& P: {+ N/ u# e8 [
复制输出,然后打开2号记账人钱包,【交易】-【签名】对这笔转账交易进行第三人签名。
6 [7 C4 O  q6 o) X5 j" j  M) h
& J# }/ G2 A" ?# o此时,左下角出现【广播】按钮,代表交易签名已经完备。* r9 \. R  w4 `1 J$ ]/ q. z
点击【广播】将交易发送到私链上进行共识
" @& P) n3 j+ y/ R% n' c1 ~等到15秒左右,1亿Neo就到你建立的那个AWSuQXpjuY3v22gCbEFL2vHbSLMMVK1QD6地址中了。
6 E) _) ?% A/ u0 R+ T, ]; f
4 p% J6 P+ d3 T% ^GAS是通过生成区块,按照Neo持有量,不断产生的。
6 P$ ?2 v& G5 \1 ]. |) w2 U1 `通过对自己地址转账,然后【高级】-【提取NeoGas】就能将GAS提取到自己地址。
! z4 B4 C3 I/ N% S( P: ~( v好了,至此你有用了一条新的Neo链、1亿Neo、无数Gas,开始你的表演吧。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10