Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

蓝天天使2017
95 0 0
是否,参加了各种Neo活动,对Neo颇感兴趣,希望从源头了解这个世界上为数不多的支持智能合约的公链?
" r% w" d' Q1 i& L; R+ Z, Y是否,总是想参照Neo文档建立一个自己的私链,但是总是没有那么多时间去昨晚,抑或没走几步总是会遇到各种拦路虎?# c# ]. y* _* y
是否,想研究Neo智能合约,但是苦于主网(mainnet)gas太贵,测试网(testnet)申请又太麻烦(而且一般都不那么慷慨)?
+ S. t- v4 Q/ r( S0 [! E是否,希望给大家炫个富,“嘿,看,我有1亿Neo!”?
  P! d! q0 b5 O, m* x# ~恭喜你,阅读这篇文章就能解决以上问题。请跟随笔者一步一步进行操作,每一步都是笔者的成功的操作记录,请放心食用。本教程已经预设了多项参数,在一般情况下,按照本教程操作就能立即坐拥1亿Neo并供你尽情挥霍。
2 z7 l" @. F( @, }本文面向私链体验者,5步构建私链,7步Neo过亿。
+ Z. m* i4 X, R# p如果大侠需要详加参详或者只是想体验更简单的快速搭建Cli节点,请详阅https://github.com/NewEconoLab/neo-cli-docker
) f" a, R6 `. {* y8 `$ V# H以下操作以Linux指令为主:2 d! _. N: E$ n8 d9 @
第1步,建立Docker环境
% u! m2 R6 b/ i. ~; Z" B* _# n, \建议参考Docker官网https://docs.docker.com/engine/installation/构建Docker环境,具体操作不再赘述。
! V5 \6 D# ~# K3 s3 i/ P- Z6 C0 L; i9 }Docker支持所有系统,包括Linux、Windows、Mac,Linux为原生支持。
- @* |$ e6 X( }5 B' l笔者以CentOS 7.4 x64为实验环境,但是其他系统亦可,最终Docker层都是用CentOS的。
; I  b1 ~) t$ i. Z9 g服务器或虚拟机建议不要低于2u4G。2 |& m; j0 U' }+ q" f- \; o* C6 o
第2步,引用笔者编制好的dockerfile构建Neo Cli Docker镜像,后面将以次为依托派生容器。
5 d5 [" {- L+ }& L" U- K打开CentOS终端或使用SSH远程,输入并运行如下命令:( ?9 w* d4 X2 R/ |5 z! Z3 \
docker build -t neo-cli:v0.3 https://github.com/NewEconoLab/neo-cli-docker.git#:dockerfile/privatenet
( g) f! e' g( A8 R2 [9 {, g这条命令会从NEL的github自动应用私链镜像构建脚本,主要进行如下操作:
6 |* F) ]9 x2 ?构建CentOS Docker镜像
$ j1 d  [5 ~6 z& h0 s% O安装dotnet sdk环境
/ ]0 Z7 E; `  W& N安装Neo必须的leveldb-devel库! v4 Y3 e' T. I6 f0 D# m; e
安装git4 ~# n/ [, I. ^3 W' `% M& e
从Neo官方github克隆neo-cli项目最新代码
' N1 c! {$ C1 l8 p, S, ^' C: z- R使用dotnet sdk编译neo-cli
$ d6 q7 J8 R, P) A7 [" }从NEL官方github克隆neo-cli-docker项目
( Z5 k' ~% j8 L" ^将neo-cli-docker项目中预先配置好的私链版config.json和protocol.json文件替换到neo-cli根目录
: K! P" G( G9 N* Z6 j! R4 M3 y第3步,安装Docker官方容器编排工具docker-compose,为后面一键派生4个记账人节点容器做准备。: g! o% V# Q: a
输入并运行:
& F+ V9 y; Z5 m$ ]4 L8 K$ O$ i4 Lsudo pip install -U docker-compose
) F2 W, C7 I* }pipuninstall urllib3" [2 H  H8 r3 r. A8 x
pipuninstall chardet
! K$ M: {9 Z% ?, b$ [1 @) rpip install requests
, j- P1 E- }% U2 R7 L+ X( n5 Udocker-compose –version
5 A- _4 j/ ]4 `第4步,引用笔者预先设置好的容器编排模板一键生成Neo链最小规模的4个记账人节点容器(实际最少3个仍能继续共识出块). j  a' f* s2 v% q" H' J5 E
输入并运行:
2 m. y) H7 u+ q- @+ _' dcd /home
! e! x+ L! R; d, {3 n  _# P$ Wsudo yum -y install  git+ c7 H" ~, L. k* s* `, [$ `
git clone https://github.com/NewEconoLab/neo-cli-docker.git3 m( e9 g" n7 g2 H" G8 J
cp neo-cli-docker/dockerfile/privatenet/docker-compose.ymldocker-compose.yml
3 N7 h, l' A0 q* [6 a3 Xdocker-compose up -d
8 a. F* R; i9 Z$ f8 A% wdocker-compose ps
5 M' f2 E  x* n" D* A6 l" R( [7 k
7 x/ P' \3 K* ]) R% _6 x* h看到这个样子就表示4个记账人节点的容器已经成功启动(此时节点还未启动)! x/ t! @% ~  s, d$ Q7 n
第5步,分别进入容器,启动节点,打开记账人钱包,启动共识# C, ^2 @+ y1 f2 t7 N3 G; S
输入并运行:5 ?, Y9 L( r1 [9 G6 Q
docker attach cli0进入第一个容器,其后一次为cli1、cli2、cli3
4 `+ n3 @0 t$ o  q& n) l8 L% I这里开始是容器内部环境:
9 M! v) b5 |6 q3 h( [cd /home/cli && dotnet neo-cli.dll /rpc启动Cli节点% i6 V# _1 T  y% D9 i" ]
open wallet ./docs/neo_private_net_0.json打开记账人钱包,其后依次为neo_private_net_1.json、neo_private_net_2.json、neo_private_net_3.json8 v- [  F8 [/ j  C
钱包密码123456
  K) C+ v+ u/ i/ {2 ustart consensus启动共识0 {9 J* c* E) k  D# {7 |
最后切记使用特别的组合键【Ctrl】+ (【P】->【Q】),即按住【Ctrl】再依次按【P】、【Q】,退出并不停止当前容器。) h& o& |- Q0 w0 S
其他3个节点容器类似依次操作,不在赘述/ M0 i( q! J, v6 s5 @; P
最后一个节点启动后,稍等片刻,可以看到私链已近开始运行:
8 a9 n7 L. s1 e
4 @# k7 w# P4 e4 C可以看出,主记账人角色是交替承担的. b6 k2 g3 E0 L* ?" _  v8 I9 u7 a* [
至此,私链已经搭建完成,后面2步是私链的应用。; Y( y% R+ O6 U
**0 _2 n1 v; E$ U' H4 _3 [) k7 _
第6步,通过Cli jsonRPC api查看私链运行状态**5 z! A6 \: c# N) `' s% o
安装postman等api测试程序
4 I& K0 ]4 Y  h, \: D使用get方式请求:
% H  o! s9 `7 r. c' I4 jhttp://116.62.160.38:10332/?jsonrpc=2.0&method=getblockcount¶ms=[]&id=1
. C$ c  e9 h$ y! ?其中IP部分要替换成你的电脑或虚拟机的实际ip。
7 M7 K% j2 X' K  v. Z3 h0 G& Z& D* h8 v2 l0 ~, z5 R* I
然后就能看到当前私链总的区块数,要查看其它信息,可参考NeoCli api文档
5 ]+ h& u  L9 ^第7步,从记账人多重签名合约中取出初始块中的1亿Neo转到一个非记账人钱包中. c4 f' ^4 A) ?" ~  \5 Q) J
构建能够连接当前私链的config.json和protocol.json文件
" O7 E  I8 y# @+ O6 uconfig.json参考:
- x# r0 `- D, g. K9 f# r0 B{' O9 R) n7 Q5 z, h/ i& c
  "ApplicationConfiguration": {5 @2 J  I% Y4 k% {
    "Paths": {& x3 F4 \1 w3 j. y- S1 s' ?2 ?. B
      "Chain":"ChainPrivate",& ]/ W! {! R$ Z$ `
      "Notifications":"NotificationsPrivate"
3 D7 o8 C' G! H6 N& f    },6 w% G; `& d* S& E/ i; x
    "P2P": {" m& Z# G# c, @$ M
      "Port": 10333,$ C4 o' _6 W) k2 z! J9 ^$ w
      "WsPort": 10334
1 ?# ]" G( u8 @) i    },
7 k' c3 F( l8 q$ m+ N9 t: N0 B    "RPC": {
  R+ M3 u' I  c- z, p      "Port": 10332,
( Y* ~5 h  _; C/ t7 h      "SslCert": "",: n" `' Z2 W4 M# s. {" C* i
      "SslCertPassword": ""
9 {4 H& X1 K( }3 h6 Q) ~" x    }# W% G' ?9 H. {/ d
  }
! r4 r( z7 @  b9 s}
4 Y& i6 Q% I7 b% @. J6 j; nprotocol.json参考:8 P; x+ P6 v, C. G
{
& L; e+ d9 P6 @, u( l  "ProtocolConfiguration": {' Y0 ]2 ~: [6 H- D
    "Magic": 9726190,* }6 [9 ^- V" ]" M6 @; G
    "AddressVersion": 23,
& K, s/ N' ?% N- u    "StandbyValidators": [
% R* X- J' [" E, [4 C; U/ R8 e9 w     "0249b419692a17fb519c3b42ffbe82ae34855a45e54783a9bc940135b1c2753ece",
, K1 C# M6 _1 V6 T9 u     "03298a54cdfb2b5ffae0638c60633de24e3956b76a44867475e81db5ce87b2a16b",
% m1 c: _3 S7 R/ W1 g      "02b795b3322f0a171c7e7658371131c0caa77a9279818b85b9d0728a5a63452ff8",0 H) B6 s& P2 ^* Z
     "0366440bd2a1fe4e0d1dcb9bf35995c5c6e858af846abef145064ab2b5e8ebfce8"6 i, L! U1 T6 u: m9 _8 E- g
    ],8 m. i" h' ?& D) Z( f% _
    "SeedList": [% y# T; }4 [+ `
      "seed0.nel.group:10333",+ t1 ]  a* [. w7 X! u
      "seed0.nel.group:20333",# h) x3 W& T1 ^* V
      "seed0.nel.group:30333",0 ^% k% G5 |8 {2 F
      "seed0.nel.group:40333",6 c/ B4 W9 L' I0 {5 z4 @
    ],
6 J3 N, K- v  [3 \1 K/ d    "SystemFee": {; e' ]2 Y/ _$ f" Y
      "EnrollmentTransaction": 1000,
- j/ H# _4 L! C* }2 ]      "IssueTransaction": 500,
- |, X5 T  X* c0 t      "PublishTransaction": 500,* U8 C# l/ @5 O- m  s/ g
      "RegisterTransaction": 10000
4 D7 E; _* O! r: [3 I$ [# l    }6 H4 ~. C: [; V! {. a+ c( Q" Z! g
  }% z* E1 s+ P6 P( U
}
$ z$ J; P) M+ ]( `4 |- Tseed0.nel.group需要替换成你的电脑或虚拟机的实际ip4 P) R/ O* I: D8 y$ h$ G" C9 O6 F9 O- a
下载笔者预制好的记账人钱包和非记账人钱包3 ?* e1 @$ f/ z9 k0 Z
下载 https://github.com/NewEconoLab/neo-cli-dockerZIP
6 U9 h3 ~! d- c" {( j5 ?在/dockerfile/privatenet/docs可以找到相关文件
0 W& h% `+ T: i0 t# X2 S" {+ [! p) o2 c下载Neo官方GUI钱包,建议是2.6.0.0以上将其中config.json和protocol.json替换成以上内容,然后运行。打开neo_private_net_0.json  0号记账人钱包,密码123456' m$ W% [4 M3 Q9 b# ]
4 _! S& a& M# ^
可以看到一个合约地址中有1亿Neo(是不是有点小兴奋啊),这个合约地址是由4个记账人公钥构造的多重签名地址合约,需要至少3个记账人钱包签名才能转出。
2 q7 n5 i* T# U最终转出) ^# z0 h# _& l0 T5 O' C* F8 b
新建一个新的非记账人钱包,比如neo_private_net_test_0.json
; m' c" y$ R0 O0 f记住它的地址,比如AWSuQXpjuY3v22gCbEFL2vHbSLMMVK1QD6- j' ]5 z" v4 K: W6 R
打开0号记账人钱包,并【交易】-【转账】到上面地址! T" T$ ^) J' i, m2 g& I

  s) p, n) O% Q2 \确定后会提示签名不足2 J( c/ N5 T# u  u8 [0 _+ D
! C3 r$ S5 E1 ^
没事,我们先把整个内容复制出来,然后打开1号记账人钱包,【交易】-【签名】对这笔转账交易进行第二人签名。3 i3 n0 Z2 m& M' N3 ~

; l1 B& D2 ?! F( ^) [+ j; j3 A* u复制输出,然后打开2号记账人钱包,【交易】-【签名】对这笔转账交易进行第三人签名。1 E' f* T$ G6 U# [' G7 g

7 h' h2 h: r7 T8 R7 K, I此时,左下角出现【广播】按钮,代表交易签名已经完备。/ J( W: `# j9 G( \1 d* ?
点击【广播】将交易发送到私链上进行共识
" y* f/ i7 Q/ Q8 f1 c等到15秒左右,1亿Neo就到你建立的那个AWSuQXpjuY3v22gCbEFL2vHbSLMMVK1QD6地址中了。
/ e1 i7 B) r& _+ ?7 T3 q) z
: S$ K1 W1 [2 a9 \8 tGAS是通过生成区块,按照Neo持有量,不断产生的。8 z! t- \& R! j+ w8 i* F
通过对自己地址转账,然后【高级】-【提取NeoGas】就能将GAS提取到自己地址。
/ D; B* F2 e( o2 w# w9 W好了,至此你有用了一条新的Neo链、1亿Neo、无数Gas,开始你的表演吧。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

蓝天天使2017 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10