NEO-搭建私有链

— cityofzion大法好 —

前言


因为测试链不给GAS…只能自己搭建私有链。

关于NEO私有链的搭建,官网有教程,NEL有教程,毫无疑问,这些教程都很详细,很深入,很透彻……很麻烦…..
感觉搭建一个私有链,就是已经要了解整个区块链的机制哎,难道不是先给个实验的地方,然后一步步慢慢去了解么,都感觉本末倒置了。

没有链 -> 雾里看花 -> 测试链不给币 -> 搭建私有链 -> 超多麻烦 -> 还是没有链 = 劝退

然后cityofzion的看上去最简单的拿着试了下。
cityofzion大法好!本以为会是一如既往艰难险阻疑无路的大坑,没想到!真的几步就好了!哇,这个社区太给力了
好好学习英语!

docker镜像及说明
CityOfZion通过docker搭建NEO私有链

– 09.07 更新 –
重新更新,因为COZ的私有链 使用的不是最新版本的cli。
个人需要使用最近版本来验证一个漏洞,重新开始弄一个最新版本的私有链。
根据 官方的docker镜像 来构建私有链,稍微会麻烦一点,但是镜像会持续拉取最新版本的cli。

基于CityOfZion的docker私有链

可以只起neo私有链,还可以起配合neoscan的neo私有链。后者看后面的补充,可一步到位。

两步搭建


前提 装好docker,会使用docker

1.下载镜像
docker pull cityofzion/neo-privatenet
2.运行镜像
docker run --rm -d --name neo-privatenet -p 20333-20336:20333-20336/tcp -p 30333-30336:30333-30336/tcp cityofzion/neo-privatenet

两步配置neo-gui


为了不出错,新下载一个neo-gui客户端来链接测试链,因为改测试链上的 需要删区块,没必要

1.拷贝protocol.json到新neo-gui目录下
2.拷贝config.json到新neo-gui目录下

如果docker不是在本机运行,而是在虚拟机或其他服务器上运行,修改以上两个配置文件中的 127.0.0.1/localhost 为 对应虚拟机IP地址

启动 neo-gui 等待同步完成

两步确认运行


如果不放心可以去确认区块的生成

docker exec -it neo-privatenet /bin/bash
screen -d -r node1

一步有钱


neo-gui中右键-导入-导入WIF-KxDgvEKzgSBPPfuVfw67oPQBSjidEiqTHURKSDL1R7yGaGYAeYnr

搞定

远程调用rpc


远程调用rpc 就是利用neo-cli读取链上信息,以上操作已经开放远程调用。

私有链的远程调用端口是:30333-30336

官网说明:这里

使用方法:
GET:

1
http://somewebsite.com:10332?jsonrpc=2.0&method=getblockcount&params=[]&id=1

POST:

1
2
3
4
5
6
7
http://somewebsite.com:10332
{
"jsonrpc": "2.0",
"method": "getblockcount",
"params": [],
"id": 1
}

最后


接下来就是neo-gui的操作了,转到自己的账号上啦巴拉巴拉,有了测试链才能开始学习啊喂。

OKOK,收工


补充cli rpc 开启–log选项说明



使用cli rpc 只要有能发包的工具就行,但是理所当然的没有找到很好的浏览器插件,就用burpsuite了
通常的api都是可以调用的,api查看

22.png

好吧,但是我调用这个就是为了查看notify输出信息。
之后调用 cli rpc 查看智能合约notify的时候发现,getapplicationlog api是不行的

11.png

感觉应该是两步起来的私有链里面的cli并没有开--log功能。(之后尝试修改的时候发现确实是这样)
那么接下来就去私链里面开–log,操作就是——进入docker-关掉neo cli-修改-重开

此处还有另一个操作,就是再起一个cli节点,修改配置文件,开log连接至私有链,就不必去动docker

进入docker:

  • docker exec -it neo-privatenet /bin/bash

关掉

  • screen -ls:查看4个命令行正在运行四个共识节点neo-cli
  • screen -d -r node1:进入这个命令行
  • ctrl + c:终止这个进程
  • 相同的重复四次 终止 node1 到 node4 每一个终止完需要等一会,会自动回到原来命令行

修改

  • vi /opt/start_consensus_node.sh:修改已有的脚本
  • spawn dotnet neo-cli.dll --rpc -> spawn dotnet neo-cli.dll --rpc --log
  • :wq保存

重开

  • cd /opt:移动目录
  • ./run.sh:执行已有的脚本,这个脚本调用了我们刚才改的脚本
  • 一段时间之后ctrl+c终止脚本,另外四个进程其实已经在后台运行了

检查:看自己gui会不会更新,或者前文提到的检查docker内部

提醒:记得等上链之后再调用rpc,不然还是会一样的不行

33.png

补充加上neonscan

因为要使用neon.js,需要有数据库层面对外的接口按照教程重新加了下。
教程

需要停掉之前的cityofzion/neo-privatenet镜像
docker stop 对应的容器id

自动起环境
git clone git@github.com:slipo/neo-scan-docker.git
cd neo-scan-docker
docker-compose up:这个地方会自动进入neon-scan的页面,等到同步速度变慢,就是在正常出块了,然后放着不管就好了

修改host文件
vi /etc/host:我的是在这里
127.0.0.1 neo-privnet:添加这一行,必须修改,neonscan到neon私有链是通过这个neo-privnet域名链接的,具体可以看dockerfile

其实直接用这个这个还更方便更全面emm
如果是从一开始私有链过来的,私有链的所有块都可以直接继承,账号也是,之前设置的 neo-gui 可以直接用

但是需要cli rpc 开启–log选项的话,需要按照之前的操作重复一次,并且之前的log也都会不见

私有链搭建在另一台服务器中时,把 服务器ip neo-privnet 写到自己本机的host中 可以避免使用neon.js的一个坑

发现scan 有时候会莫名崩溃,不是特别的理解。但是重启就可以解决,进入拥有compose文件的neo-scan-docker目录cd neo-scan-dockerdocker-compose restart neo-scan即可

崩溃处理

2018/09/04更新。

今天用着用着私链崩溃,无法同步,也无法生成区块了。在写代码,不想再花精力去弄,直接删掉镜像和数据,重启了一个私有链。

结果发现有一个节点莫名其妙的开始区块超前。简直无法理解啊。但是三个节点仍然可以生成区块的,也没考虑那么多。

使用neon.js从neoscan读取节点广播交易的时候发现,一直都广播失败,很绝望。最后发现,选取节点广播交易时,都会使用区块高度最高的那个节点,去广播交易。

就是一直在使用坏掉的那个节点。所以一直广播失败。直接把那个节点关了即可。

个人感觉应该是docker镜像数据残留的问题?但是处理好了,万幸。

基于官方docker镜像起私有链

官方教程

讲的还是比较清楚的,没必要多余说明,但是有一些坑啊。

无法启动neo-cli

donet neo-cli.dll /rpc的时候

坑0.png

是官方配置文件有问题

坑1.png

感觉是老版本的cli配置文件。需要修改为右边的ApplicationLogs,就可以启动

坑3.png

私有链端口映射有问题

坑4.png

以上是通过官方镜像compose产生的4个镜像
端口映射:

  • cli0 10331-10334 -> 10331-10334
  • cli1 20331-20334 -> 10331-10334
  • cli2 30331-30334 -> 10331-10334
  • cli3 40331-40334 -> 10331-10334

实际上一个 cli容器 只会映射出一个端口