Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

蓝天天使2017
96 0 0
是否,参加了各种Neo活动,对Neo颇感兴趣,希望从源头了解这个世界上为数不多的支持智能合约的公链?
6 Z" B1 K' f) N1 b' M是否,总是想参照Neo文档建立一个自己的私链,但是总是没有那么多时间去昨晚,抑或没走几步总是会遇到各种拦路虎?
, o3 l# F  V7 ?% E是否,想研究Neo智能合约,但是苦于主网(mainnet)gas太贵,测试网(testnet)申请又太麻烦(而且一般都不那么慷慨)?  j# J2 r# a; q1 [) g$ d
是否,希望给大家炫个富,“嘿,看,我有1亿Neo!”?$ C1 I' ^9 K1 H( v8 a. v) O
恭喜你,阅读这篇文章就能解决以上问题。请跟随笔者一步一步进行操作,每一步都是笔者的成功的操作记录,请放心食用。本教程已经预设了多项参数,在一般情况下,按照本教程操作就能立即坐拥1亿Neo并供你尽情挥霍。
: I$ r4 N8 t" r& h. N/ P# l# e. W! C本文面向私链体验者,5步构建私链,7步Neo过亿。) ?( s) g' p& q, z' y1 _' X
如果大侠需要详加参详或者只是想体验更简单的快速搭建Cli节点,请详阅https://github.com/NewEconoLab/neo-cli-docker
3 s5 V5 W% ^/ \- Y8 h3 D以下操作以Linux指令为主:/ v7 Y% k( o3 g$ C7 C7 g8 O
第1步,建立Docker环境
" y6 F2 j2 C7 F8 C' b& D建议参考Docker官网https://docs.docker.com/engine/installation/构建Docker环境,具体操作不再赘述。
' E( e1 g) f! ~1 jDocker支持所有系统,包括Linux、Windows、Mac,Linux为原生支持。
- w9 J& \4 {8 z& j) T5 K# C0 Z8 F! q笔者以CentOS 7.4 x64为实验环境,但是其他系统亦可,最终Docker层都是用CentOS的。
+ O) P7 e+ l# p8 X$ |- s$ B. y服务器或虚拟机建议不要低于2u4G。0 N  v5 e# }: B8 C7 j
第2步,引用笔者编制好的dockerfile构建Neo Cli Docker镜像,后面将以次为依托派生容器。
. K5 ^8 E4 J% |/ E打开CentOS终端或使用SSH远程,输入并运行如下命令:2 w# L. j; c$ A: y
docker build -t neo-cli:v0.3 https://github.com/NewEconoLab/neo-cli-docker.git#:dockerfile/privatenet
7 H# C5 n) G1 R这条命令会从NEL的github自动应用私链镜像构建脚本,主要进行如下操作:
- y  ?* Q' W: \6 U构建CentOS Docker镜像4 r) G( }6 o. P
安装dotnet sdk环境- G1 l) U1 @3 I7 ~4 U
安装Neo必须的leveldb-devel库
$ u7 K* R. Y1 ~# {  J/ Z安装git2 x( q& I. U  c
从Neo官方github克隆neo-cli项目最新代码5 F& i) x* Q- Y0 b9 f) o1 @2 o0 k
使用dotnet sdk编译neo-cli
* K5 C# U; l8 ^" t$ T0 k7 @* s* q7 o5 u从NEL官方github克隆neo-cli-docker项目* T8 }, `& Q  I8 a/ h
将neo-cli-docker项目中预先配置好的私链版config.json和protocol.json文件替换到neo-cli根目录
+ }0 [3 ^8 ~( W% G第3步,安装Docker官方容器编排工具docker-compose,为后面一键派生4个记账人节点容器做准备。) L% p8 d1 E( ^/ Y& w1 P2 ?
输入并运行:, i! [; G+ r) Y6 W) N+ A* t
sudo pip install -U docker-compose
2 f" `# o2 y# [7 c) l  D/ G4 R% Fpipuninstall urllib3% P9 {+ o6 _0 W4 y2 ]/ E
pipuninstall chardet
$ ^+ G' f3 T, V- \* c+ Y; ipip install requests% A( D) {2 q1 X& E* V3 T! ?( q
docker-compose –version/ B+ y* {, w0 ~8 P2 [
第4步,引用笔者预先设置好的容器编排模板一键生成Neo链最小规模的4个记账人节点容器(实际最少3个仍能继续共识出块). h9 X$ y) m/ M3 B
输入并运行:4 U1 j6 v: s& M
cd /home/ X6 Y* T- O* G0 U& P0 l/ _
sudo yum -y install  git
0 ]* S) {$ Z# v. h5 ^; hgit clone https://github.com/NewEconoLab/neo-cli-docker.git
% K0 {) l2 `/ ]. E! q: Fcp neo-cli-docker/dockerfile/privatenet/docker-compose.ymldocker-compose.yml
: |4 y' @2 k, R5 ?6 p5 f$ w7 ]/ Wdocker-compose up -d
8 {% u6 Y2 {" C9 x, C$ y9 S$ z* Ydocker-compose ps
) ?2 c8 |5 R6 l. K" a4 O  o5 x- O
看到这个样子就表示4个记账人节点的容器已经成功启动(此时节点还未启动). `5 C6 ^- t. g  i# S# k9 }- ?9 z! L
第5步,分别进入容器,启动节点,打开记账人钱包,启动共识: W* W; Q0 F4 y" F3 {- C/ W
输入并运行:7 A! e3 H  m: k7 |" {* |( d" z! v
docker attach cli0进入第一个容器,其后一次为cli1、cli2、cli39 q) ?- L9 U% e$ g' b; o; Z
这里开始是容器内部环境:
2 A! A: w6 [7 }8 H5 ?cd /home/cli && dotnet neo-cli.dll /rpc启动Cli节点+ P% E1 x0 m$ [$ G5 v
open wallet ./docs/neo_private_net_0.json打开记账人钱包,其后依次为neo_private_net_1.json、neo_private_net_2.json、neo_private_net_3.json
; D' G, o3 ^" H5 x" H9 C钱包密码123456
9 D% Z: r3 J- _7 D  r) U+ |, ?start consensus启动共识% L4 s6 H  T. [! @. ^0 F% r% Q5 Z$ c
最后切记使用特别的组合键【Ctrl】+ (【P】->【Q】),即按住【Ctrl】再依次按【P】、【Q】,退出并不停止当前容器。8 x& G2 \& L  A  M7 l: j
其他3个节点容器类似依次操作,不在赘述
1 s' s2 e3 b8 \" _5 a' R最后一个节点启动后,稍等片刻,可以看到私链已近开始运行:# S% g. r) z+ Y- T7 ~
7 {; L7 A# v5 q. V
可以看出,主记账人角色是交替承担的3 Q) U1 c) g, a9 s: j8 v: V
至此,私链已经搭建完成,后面2步是私链的应用。; M2 D. D, x  G( z* i9 V$ i
**/ |- n+ ?: q/ T$ A  m
第6步,通过Cli jsonRPC api查看私链运行状态**& G, u, E& W$ [& B' {: x
安装postman等api测试程序
9 z  L; y. V2 y* W: \使用get方式请求:
8 q  m! g' R6 e# Q' x7 Phttp://116.62.160.38:10332/?jsonrpc=2.0&method=getblockcount¶ms=[]&id=1, }) ]7 Z/ d, s+ ^) P4 Y& y
其中IP部分要替换成你的电脑或虚拟机的实际ip。
8 n1 Y" u# O9 L7 I2 t, Y  k' z! i" O
然后就能看到当前私链总的区块数,要查看其它信息,可参考NeoCli api文档
6 Z7 ^7 y& g9 F; Q+ V; X第7步,从记账人多重签名合约中取出初始块中的1亿Neo转到一个非记账人钱包中. g9 H# T; v/ e( c! |2 o" B
构建能够连接当前私链的config.json和protocol.json文件$ |+ T% ^" E. {
config.json参考:- b! I# o0 l* \+ v( T9 ^
{1 U4 Z, D  y6 }1 g* u, y
  "ApplicationConfiguration": {
8 m) N4 n+ F5 e    "Paths": {# F" |5 b; l+ w$ O; l2 T
      "Chain":"ChainPrivate",
3 {1 U' [4 U6 a) g  _1 \      "Notifications":"NotificationsPrivate"
6 a) ]7 k' i  z! J9 j8 s9 f    },
7 k: ?' x" Q* z$ x# M    "P2P": {  M7 A- W: g# w1 l. t4 s  U
      "Port": 10333,4 q) w- [- F( L; J" `9 v' g
      "WsPort": 103348 R, R0 z" I& E2 E  t* F
    },
, S% v, {4 T' J2 \; J4 b    "RPC": {, h5 Z- L: V. O- G1 k; F! M$ n7 ~
      "Port": 10332,
8 F# ^0 p5 I. ~) P" r6 `      "SslCert": "",7 T( v" @8 `0 G1 @9 G- D  X; V
      "SslCertPassword": ""
6 Z; G- A. w* s& I0 r    }
  {( O/ ~  L  S  }
7 W# e9 t. X1 x}
; `, @6 k2 _- D, v# V7 ]" ~5 q% Eprotocol.json参考:8 s4 j4 f5 x# e! Q! x
{/ V; A0 e/ Z3 l5 X0 G
  "ProtocolConfiguration": {4 u# R: @3 }# _9 x4 D4 ]
    "Magic": 9726190,
4 B2 p% ^; b* V    "AddressVersion": 23,! u: h8 q( d  H: B+ q
    "StandbyValidators": [
$ t% Y1 c/ H! d9 j# `     "0249b419692a17fb519c3b42ffbe82ae34855a45e54783a9bc940135b1c2753ece",/ m7 N6 h6 ?8 j4 Y6 P. @' v
     "03298a54cdfb2b5ffae0638c60633de24e3956b76a44867475e81db5ce87b2a16b",
+ z2 D, K, a9 M) ]      "02b795b3322f0a171c7e7658371131c0caa77a9279818b85b9d0728a5a63452ff8",
% [  T% |) p/ R/ W8 C/ v     "0366440bd2a1fe4e0d1dcb9bf35995c5c6e858af846abef145064ab2b5e8ebfce8"
+ o# G4 ]1 m" K2 ]! A% w' @$ k    ],
( n6 b" m, ~( v    "SeedList": [
# D  `/ Y! Y$ `& X) H. V      "seed0.nel.group:10333",
. g+ G% w1 @+ q% m      "seed0.nel.group:20333",5 P. `2 A2 K" q( @- t
      "seed0.nel.group:30333",
& G& V) I; ~9 f& q* _4 c      "seed0.nel.group:40333"," E1 p2 X% a$ U7 w/ m  ~# r
    ],
+ U- H) d$ c! M! M% `: h0 F. U    "SystemFee": {2 F9 Y- z! k8 Q; o( ~
      "EnrollmentTransaction": 1000,
9 B: E9 S5 _; w% Z. u" \+ H      "IssueTransaction": 500,& e* I% ?1 l9 R( v9 }* f+ I
      "PublishTransaction": 500,% _' d: @6 K. D- c. E1 Z
      "RegisterTransaction": 10000
- T: k" N& U- J" E    }
' f- B7 c  V8 b; G  }, x+ @3 j! N; G
}/ D) ]- m. |1 j, d4 [2 E
seed0.nel.group需要替换成你的电脑或虚拟机的实际ip4 Q' |5 x5 N# i
下载笔者预制好的记账人钱包和非记账人钱包- x" y1 z6 _1 b6 @4 n: u: C# ^3 V; b
下载 https://github.com/NewEconoLab/neo-cli-dockerZIP/ x5 D# w5 c( D% A+ u
在/dockerfile/privatenet/docs可以找到相关文件# O! J& G1 {: Z
下载Neo官方GUI钱包,建议是2.6.0.0以上将其中config.json和protocol.json替换成以上内容,然后运行。打开neo_private_net_0.json  0号记账人钱包,密码123456
" y9 s' C$ e3 u2 q; X- v; w9 k5 W- [- D" t; [- {8 Q$ y  O
可以看到一个合约地址中有1亿Neo(是不是有点小兴奋啊),这个合约地址是由4个记账人公钥构造的多重签名地址合约,需要至少3个记账人钱包签名才能转出。* t7 W( s5 E; z- n3 Y) w7 V
最终转出
8 j$ o% n5 n' J4 T& v  U' u( {新建一个新的非记账人钱包,比如neo_private_net_test_0.json
4 e1 Z$ V+ O- |2 C2 T记住它的地址,比如AWSuQXpjuY3v22gCbEFL2vHbSLMMVK1QD62 ^, E/ _3 B* x# Z, S# G
打开0号记账人钱包,并【交易】-【转账】到上面地址
# z$ }$ o( o+ h: Y  a2 l, l3 {  Q1 a# L) b7 S8 G
确定后会提示签名不足
$ f0 \: I" a  C* `2 o
3 K! e- R. J, {4 `6 T0 Y( ?7 I8 Q没事,我们先把整个内容复制出来,然后打开1号记账人钱包,【交易】-【签名】对这笔转账交易进行第二人签名。
* T) h/ c- P$ j! F( @2 K& Y/ I# f! g" X+ E
复制输出,然后打开2号记账人钱包,【交易】-【签名】对这笔转账交易进行第三人签名。
' T: M' E! s* R) f- H1 m4 ~5 [
) a: R; v, w2 L" Q6 h此时,左下角出现【广播】按钮,代表交易签名已经完备。0 {; N  b3 C# [1 S) g" A6 y9 V
点击【广播】将交易发送到私链上进行共识* F+ |! \' r2 b
等到15秒左右,1亿Neo就到你建立的那个AWSuQXpjuY3v22gCbEFL2vHbSLMMVK1QD6地址中了。
7 E- V7 H4 P( |9 `8 ~- p3 E+ e0 D- [' l4 F- V8 L! @& O
GAS是通过生成区块,按照Neo持有量,不断产生的。
) r! f& ]( i) B0 }0 V$ q通过对自己地址转账,然后【高级】-【提取NeoGas】就能将GAS提取到自己地址。" {/ [5 i/ i: I' \2 f
好了,至此你有用了一条新的Neo链、1亿Neo、无数Gas,开始你的表演吧。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10