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¶ms=[]&id=1
POST:1
2
3
4
5
6
7http://somewebsite.com:10332
{
"jsonrpc": "2.0",
"method": "getblockcount",
"params": [],
"id": 1
}
最后
接下来就是neo-gui的操作了,转到自己的账号上啦巴拉巴拉,有了测试链才能开始学习啊喂。
OKOK,收工
补充cli rpc 开启–log选项说明
使用cli rpc 只要有能发包的工具就行,但是理所当然的没有找到很好的浏览器插件,就用burpsuite了
通常的api都是可以调用的,api查看
好吧,但是我调用这个就是为了查看notify输出信息。
之后调用 cli rpc 查看智能合约notify的时候发现,getapplicationlog api是不行的
感觉应该是两步起来的私有链里面的cli并没有开--log
功能。(之后尝试修改的时候发现确实是这样)
那么接下来就去私链里面开–log,操作就是——进入docker-关掉neo cli-修改-重开
此处还有另一个操作,就是再起一个cli节点,修改配置文件,开log连接至私有链,就不必去动docker
进入docker:
docker exec -it neo-privatenet /bin/bash
关掉:
screen -ls
:查看4个命令行正在运行四个共识节点neo-cliscreen -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,不然还是会一样的不行
补充加上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-docker
。docker-compose restart neo-scan
即可
崩溃处理
2018/09/04更新。
今天用着用着私链崩溃,无法同步,也无法生成区块了。在写代码,不想再花精力去弄,直接删掉镜像和数据,重启了一个私有链。
结果发现有一个节点莫名其妙的开始区块超前。简直无法理解啊。但是三个节点仍然可以生成区块的,也没考虑那么多。
使用neon.js从neoscan读取节点广播交易的时候发现,一直都广播失败,很绝望。最后发现,选取节点广播交易时,都会使用区块高度最高的那个节点,去广播交易。
就是一直在使用坏掉的那个节点。所以一直广播失败。直接把那个节点关了即可。
个人感觉应该是docker镜像数据残留的问题?但是处理好了,万幸。
基于官方docker镜像起私有链
讲的还是比较清楚的,没必要多余说明,但是有一些坑啊。
无法启动neo-cli
当donet neo-cli.dll /rpc
的时候
是官方配置文件有问题
感觉是老版本的cli配置文件。需要修改为右边的ApplicationLogs
,就可以启动
私有链端口映射有问题
以上是通过官方镜像compose产生的4个镜像
端口映射:
- cli0 10331-10334 -> 10331-10334
- cli1 20331-20334 -> 10331-10334
- cli2 30331-30334 -> 10331-10334
- cli3 40331-40334 -> 10331-10334
实际上一个 cli容器 只会映射出一个端口