Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

蓝天天使2017
192 0 0
是否,参加了各种Neo活动,对Neo颇感兴趣,希望从源头了解这个世界上为数不多的支持智能合约的公链?- g+ |8 }( P1 _$ o& M
是否,总是想参照Neo文档建立一个自己的私链,但是总是没有那么多时间去昨晚,抑或没走几步总是会遇到各种拦路虎?
+ v# Y6 K7 f, K1 M9 d2 r* k  x是否,想研究Neo智能合约,但是苦于主网(mainnet)gas太贵,测试网(testnet)申请又太麻烦(而且一般都不那么慷慨)?6 o. j7 b+ k* X$ Q* \$ A' g) [
是否,希望给大家炫个富,“嘿,看,我有1亿Neo!”?
4 q" n8 _+ Q: D- ]( L4 Q- F恭喜你,阅读这篇文章就能解决以上问题。请跟随笔者一步一步进行操作,每一步都是笔者的成功的操作记录,请放心食用。本教程已经预设了多项参数,在一般情况下,按照本教程操作就能立即坐拥1亿Neo并供你尽情挥霍。
& f7 v9 X  M& t2 R4 D# Z, e本文面向私链体验者,5步构建私链,7步Neo过亿。
3 N1 \$ b/ O/ W! {如果大侠需要详加参详或者只是想体验更简单的快速搭建Cli节点,请详阅https://github.com/NewEconoLab/neo-cli-docker
7 Y% H1 _/ R  `9 Z+ D2 s. N以下操作以Linux指令为主:1 T' q# _8 i! Q  O( m5 p
第1步,建立Docker环境5 l% b& w) u' |1 o* a) N
建议参考Docker官网https://docs.docker.com/engine/installation/构建Docker环境,具体操作不再赘述。2 j( ^" z5 r* B
Docker支持所有系统,包括Linux、Windows、Mac,Linux为原生支持。: L8 G0 m2 }) B2 B+ Z
笔者以CentOS 7.4 x64为实验环境,但是其他系统亦可,最终Docker层都是用CentOS的。
% g" z( E- Q$ ^. h  i; U服务器或虚拟机建议不要低于2u4G。
( D& i" Z- ^/ ]) {% I8 M6 B. o7 v第2步,引用笔者编制好的dockerfile构建Neo Cli Docker镜像,后面将以次为依托派生容器。
- ?$ i! \% n' |& L% t8 }# \打开CentOS终端或使用SSH远程,输入并运行如下命令:0 ?3 z) V5 Z4 W8 a7 [
docker build -t neo-cli:v0.3 https://github.com/NewEconoLab/neo-cli-docker.git#:dockerfile/privatenet
& L" \' U& U& u- x$ e+ [这条命令会从NEL的github自动应用私链镜像构建脚本,主要进行如下操作:
: L! g; Q# u6 j; `/ x( f构建CentOS Docker镜像) P7 b# a: B5 Z, v' f" v
安装dotnet sdk环境
3 _' ?$ J' w8 X- J% X; z+ u( ]安装Neo必须的leveldb-devel库
) m% _* P% H7 S6 d4 a+ R/ I1 d  l安装git
5 ^6 a  m" v% h: i! s! h从Neo官方github克隆neo-cli项目最新代码
- T. o7 u7 `6 [0 l, j& u# p+ T使用dotnet sdk编译neo-cli  R! x! S" ^- w7 F1 O
从NEL官方github克隆neo-cli-docker项目* C+ f; v: t6 D/ m+ m# v2 X6 R" ~
将neo-cli-docker项目中预先配置好的私链版config.json和protocol.json文件替换到neo-cli根目录
/ L3 [- R5 @1 z8 L8 Y1 i( B第3步,安装Docker官方容器编排工具docker-compose,为后面一键派生4个记账人节点容器做准备。, q3 g4 n" K+ y: u' f; ^) Q
输入并运行:; J9 {1 S1 N% @& q: P' J
sudo pip install -U docker-compose1 O7 V' k6 a- Z5 q
pipuninstall urllib37 |% ]4 l' s7 C3 Q7 u5 {' U
pipuninstall chardet
2 S) C9 W, D1 N1 e2 d8 i% q% ypip install requests
3 O8 f4 }% s, J" E+ t9 Ndocker-compose –version
) P9 }& a2 ?' o8 L第4步,引用笔者预先设置好的容器编排模板一键生成Neo链最小规模的4个记账人节点容器(实际最少3个仍能继续共识出块)  ~  B5 d+ Y2 ]6 h- C& g" r6 c
输入并运行:7 [" P. s# S# {1 ?7 _1 i
cd /home
+ t8 q" t1 z( w- x5 }( f3 {' b3 Qsudo yum -y install  git
3 e/ g0 V0 N) e+ k6 m2 y( Agit clone https://github.com/NewEconoLab/neo-cli-docker.git4 F2 B2 A5 U; I$ h/ N
cp neo-cli-docker/dockerfile/privatenet/docker-compose.ymldocker-compose.yml
" C7 s" S& N5 b6 {8 Q2 gdocker-compose up -d
6 [0 K$ O" |0 i- @$ @docker-compose ps
. @& ^6 u/ N* ?2 V7 F$ ?( ?5 A! y# v. s$ |5 ^1 V4 r& Y- X% N& Y
看到这个样子就表示4个记账人节点的容器已经成功启动(此时节点还未启动)6 f9 s$ c! A1 @  L# c9 h$ d! N) h
第5步,分别进入容器,启动节点,打开记账人钱包,启动共识" |# N3 K( q% G' r* g$ z
输入并运行:# E0 U0 ]" M$ e' P! U& {
docker attach cli0进入第一个容器,其后一次为cli1、cli2、cli3. Z" ^2 y4 z5 e- n4 I
这里开始是容器内部环境:
1 x9 K/ ?: o! m. i$ B/ z0 j, t2 u2 m" fcd /home/cli && dotnet neo-cli.dll /rpc启动Cli节点5 Q1 x# V' T; O1 a: e8 |
open wallet ./docs/neo_private_net_0.json打开记账人钱包,其后依次为neo_private_net_1.json、neo_private_net_2.json、neo_private_net_3.json2 `7 j7 P/ a+ W
钱包密码123456
% O' W! ^. [2 h, t& ]( F. O- @start consensus启动共识& N0 v1 v% d& \8 v
最后切记使用特别的组合键【Ctrl】+ (【P】->【Q】),即按住【Ctrl】再依次按【P】、【Q】,退出并不停止当前容器。( i9 t" b9 A1 e, |$ f3 i
其他3个节点容器类似依次操作,不在赘述+ F% W8 g# F, J. w* _$ P5 K
最后一个节点启动后,稍等片刻,可以看到私链已近开始运行:
  t5 A' @2 Z" v  y5 k( w8 x
7 ]6 I- J: r+ i4 f  e; M可以看出,主记账人角色是交替承担的
8 |8 Q1 e2 s, J. v+ d/ `+ G至此,私链已经搭建完成,后面2步是私链的应用。
3 n* F# T/ ]: D; ~: p, C0 N, D**- K" u  k* I) M+ E  n
第6步,通过Cli jsonRPC api查看私链运行状态**
5 u, P$ a' o$ W安装postman等api测试程序
1 c! a" l* O' n3 K) b使用get方式请求:4 _. @! |. s" w
http://116.62.160.38:10332/?jsonrpc=2.0&method=getblockcount¶ms=[]&id=1( m! A# v" |; n) m
其中IP部分要替换成你的电脑或虚拟机的实际ip。8 i. R- j" @) b0 j" `4 z6 K) y
. N1 U: M5 W& t: V# I! g
然后就能看到当前私链总的区块数,要查看其它信息,可参考NeoCli api文档% ?" f" @+ I+ Z5 y, C" x0 @
第7步,从记账人多重签名合约中取出初始块中的1亿Neo转到一个非记账人钱包中% W- l8 I$ o( m1 S9 t
构建能够连接当前私链的config.json和protocol.json文件, ^! o/ L9 j" o3 ~
config.json参考:: m8 y4 O7 y' W( F
{
  W# K& ~2 r; {0 f4 X: L5 R6 G  "ApplicationConfiguration": {
- c2 i3 w+ H. m6 H2 L    "Paths": {& J& W; {: [$ W3 V
      "Chain":"ChainPrivate",
& ~, ^6 d& n' o; R2 u8 E      "Notifications":"NotificationsPrivate"5 \; P+ P$ B+ b3 N- m  q
    },
' ~3 t8 r! g* v; B/ K& e0 q* B    "P2P": {
' {! H: T, \* b5 @5 J      "Port": 10333,$ h6 T- O9 I: r0 \
      "WsPort": 10334- A! k' h( h$ S& h. t. w3 |: n
    },: Z. C4 W. B9 d, W- A* Z! W0 E) @3 f
    "RPC": {
, T, \' x; C. P' c      "Port": 10332,; u2 C( O8 t- }
      "SslCert": "",: D( d, m, j/ q
      "SslCertPassword": ""6 k" \' l: i7 y* @1 H" u6 N! V* e
    }2 g& @* z5 c4 J$ k. h* q# {1 @9 M
  }  C/ k" ^$ K9 T
}
7 b, x3 E$ k0 ^) Mprotocol.json参考:* t- @& b/ D3 j& X
{" v  S" }" q, e6 u4 Q/ }. M
  "ProtocolConfiguration": {
. v  S1 O* k8 L: G6 s    "Magic": 9726190,: z' Z3 b$ z7 @& u2 |9 z
    "AddressVersion": 23,% \4 @# z7 m3 X5 s2 a$ \6 B
    "StandbyValidators": [% |5 x) _6 x0 l" P4 ]8 p4 m
     "0249b419692a17fb519c3b42ffbe82ae34855a45e54783a9bc940135b1c2753ece",0 I4 q9 X8 F& j2 W( `9 W+ w8 s, k7 x1 [
     "03298a54cdfb2b5ffae0638c60633de24e3956b76a44867475e81db5ce87b2a16b",- a/ ?) Q/ l9 ^( A
      "02b795b3322f0a171c7e7658371131c0caa77a9279818b85b9d0728a5a63452ff8",' v  j. t5 b2 J
     "0366440bd2a1fe4e0d1dcb9bf35995c5c6e858af846abef145064ab2b5e8ebfce8"2 ~* U4 D: J# ~4 U: c/ A4 l
    ],
" E0 l  D" y3 t% i  s: L! I    "SeedList": [
( d6 v, [& o9 b2 D3 G  n  o      "seed0.nel.group:10333",
" E# y9 a3 D  {! ^      "seed0.nel.group:20333",
7 {! E- C$ {: s6 }8 m      "seed0.nel.group:30333",- {& J# k: i0 C. X( d( B
      "seed0.nel.group:40333",, {; ?, x! b+ G! U
    ],
( f2 r5 W1 A" T    "SystemFee": {2 O3 _% J$ o; x2 h" ~) x% E" C+ n/ d
      "EnrollmentTransaction": 1000,7 t6 g, \$ A( u* ]8 _6 _
      "IssueTransaction": 500,
$ G8 k1 _" f2 U4 l/ P) ~' E      "PublishTransaction": 500,3 |4 Q9 V  n9 f2 o+ Z2 |
      "RegisterTransaction": 10000# j! f6 c6 X( g) p. @+ O( X7 W
    }7 J2 o' Q* \5 ], a/ u
  }4 o3 {2 J$ n, z7 [) S6 q. _
}- h' G' q$ x( j* X5 N
seed0.nel.group需要替换成你的电脑或虚拟机的实际ip
0 ?+ i! D( o% D# _1 b下载笔者预制好的记账人钱包和非记账人钱包
- d' g( X. w3 R8 O3 d" `下载 https://github.com/NewEconoLab/neo-cli-dockerZIP2 s. x8 p6 d  u, K- K4 W
在/dockerfile/privatenet/docs可以找到相关文件
7 J9 E! N& M+ I/ U% ]下载Neo官方GUI钱包,建议是2.6.0.0以上将其中config.json和protocol.json替换成以上内容,然后运行。打开neo_private_net_0.json  0号记账人钱包,密码123456
1 u) k# b: t! b7 ?
8 ?8 U! [( `0 B" n( C. b' R' M可以看到一个合约地址中有1亿Neo(是不是有点小兴奋啊),这个合约地址是由4个记账人公钥构造的多重签名地址合约,需要至少3个记账人钱包签名才能转出。
1 ~3 t$ I5 b5 A6 [+ \7 E最终转出
# C! q7 c  _/ p- l' S* M1 G新建一个新的非记账人钱包,比如neo_private_net_test_0.json% m. r/ K5 E; s* n& C
记住它的地址,比如AWSuQXpjuY3v22gCbEFL2vHbSLMMVK1QD6% H4 a7 Y2 Y" Y4 Y. j- ]" [, w
打开0号记账人钱包,并【交易】-【转账】到上面地址9 j) h# u: ]* r+ R+ E6 q5 R
/ I$ `& G6 Q% s4 m( }
确定后会提示签名不足
: c$ A5 u5 E2 K' s: P" N" b' Z' p: y, A/ d8 x, t0 @. u
没事,我们先把整个内容复制出来,然后打开1号记账人钱包,【交易】-【签名】对这笔转账交易进行第二人签名。5 [2 }2 K7 A3 E8 e! d6 m

6 C0 h( j8 ^% p复制输出,然后打开2号记账人钱包,【交易】-【签名】对这笔转账交易进行第三人签名。! \3 [1 G$ \2 b+ b. D* D

1 V; v" H: Q& ]" N此时,左下角出现【广播】按钮,代表交易签名已经完备。
8 r# u6 o  [- L0 I4 \$ q7 p$ S点击【广播】将交易发送到私链上进行共识4 [  ^) F4 J' ^& q+ M( {* ?
等到15秒左右,1亿Neo就到你建立的那个AWSuQXpjuY3v22gCbEFL2vHbSLMMVK1QD6地址中了。! b) g' u1 \: E# m" [

/ V5 X: v' y% d( F- R* G, JGAS是通过生成区块,按照Neo持有量,不断产生的。
4 u2 ~6 n7 `( n6 ~, c: b通过对自己地址转账,然后【高级】-【提取NeoGas】就能将GAS提取到自己地址。
" k" o' t! I5 |) a好了,至此你有用了一条新的Neo链、1亿Neo、无数Gas,开始你的表演吧。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10