基于NEO的私链(Private Blockchain)
1.准备工作
1.NEO-GUI
2.NEO-CLI
3..NET Core Runtime (不能是2.x版本,官方建议是1.12,实际上我用1.14也是没有问题的)
4.四台windows操作系统的虚拟机(本文是基于AWS的,理论上本地跑虚拟机也是没问题的)
2.部署NEO节点
先给出官方文档的链接--NEO节点部署(官方文档),可以对照这个文档一起进行。
1.先准备好要充当节点的虚拟机。这里以AWS为例,打开AWS首页,注册登录,登录成功后,选择AWS管理控制台,然后再点击左上角的服务,选择EC2


2.新页面中点启动实例(PS:右上角有个节点选择,可以自由切换,我选择的是新加坡的),然后选择 windows server 2016 Base>>> 选择有符合条件的免费套餐 , 后面的默认配置就可以。关键是最后一步---核实实例启动,这里选择创建一个新密钥对,并保存好。




3.创建成功后,回到控制台,稍等几分钟,等虚拟机准备好,然后选择刚刚创建的虚拟机,点连接,会出现一个弹框,点击下载选择桌面文件,密码那里按提示操作获取密码

4.打开刚刚下载的远程桌面文件,按提示粘贴上一步获取到的密码,成功连接后,等系统初始化完成就可以操作了。初始化完成后先把虚拟机的IE安全设置关掉(不然无法下载文件,而且每打开一个网页都要警告一次,贼烦),点击左下角的搜索按钮,输入server manager,然后在Local server面板找到IE Enhanced SecurityConfiguration,点击ON,然后在弹出的面板里选择OFF,关闭掉IE安全设置



5.打开NEO节点部署(官方文档),下载NEO-GUI,NEO-CLI,.NET Core Runtime。这里说一下,为什么要下载NEO-GUI?按照官方文档的说明,理论上我们只下载NEO-CLI就可以的了。但是官方文档没有指明NEO-CLI运行需要的两个库文件具体在哪里可以下载。官方文档这里的第一步的程序包应该指的就是NEO-GUI,然后再NEO-GUI目录下的x64(或者x86,根据你的操作系统来选择)文件下可以找到这两个库文件。将这两个文件复制到NEO-CLI文件目录下。


6.安装.NET Core Runtime ,安装完成后,打开命令行,我这里用的是PowerShell,用命令行切换到NEO-CLI目录,输入 dotnet neo-cli.dll ,不出意外的话,NEO节点就部署成功了,如图所示。

3.搭建私链(或者联盟链)
官方文档在这---NEO私链搭建(官方文档),可以对照着一起来做。
1.文档中有指出需要4台虚拟机,所以我们需要4台虚拟机,并且都是部署好NEO节点的。可以按照上一步教程,将另外3台配置好。这里的给虚拟机命名的时候最好自己弄个简单的标识排序,不然后面操作起来可能会乱,比如我这里的4台虚拟机分别命名是neo-window,neo-window1,neo-window2,neo-window3。当然这些看个人习惯来。
NEO 私有链的部署至少需要 4 台服务器才能取得共识,每台服务器对应一个共识节点,每台服务器上有一个NEO 钱包文件
2.另外3台部署成功后,打开其中一台虚拟机,我这里打开的是第一台(neo-window),然后启动NEO-CLI,用create wallet xxxx.db3新建4个钱包,我这里分别创建的是wallet1.db3 ~wallet4.db3。新建好后将四个pubkey保存到一个txt文件里,后面会用到。然后将其它3个钱包文件分别复制粘贴到相应的虚拟机上。注意要放在跟neo-cli.dll同一个目录下。

3.后台打开AWS控制台,将4台虚拟机的IP地址记录下来。这一步后面修改节点配置文件的时候会用到。如图所示,要把IPv4 公有IP记录下来。

4.如果你之前有启动过neo-cli.dll,那么要先删除掉NEO-CLI目录下的Chain目录,不然做到最后面可能会出现有连接数,但是区块高度为0的状况。同样的,如果你因为好奇心打开过NEO-GUI,你也需要删除相应的Chain目录。如果没有,可以跳过删除这一步。之后打开NEO-CLI目录,用txt方式打开目录下的protocol.json 文件,这个是节点的配置文件。按照官方文档的格式进行修改

下面是我修改好的文件,修改好后,保存,并复制替换掉其它虚机上的客户端的节点配置文件。
{
"ProtocolConfiguration":{
"Magic":66123456,
"AddressVersion":23,
"StandbyValidators":[
"0264e5b51fa2af8392292fd13e0381d913288e0d197086d12aef195d6823a349fa",
"034a879e08069f89cdbc34067ff0df614d36bef7a30b014509dfe3170c6a9d7974",
"0332c8d77ca8e2a7847325af55457f2793d285e2a914e349bc329c94e301c01dd6",
"020a02297371c867c845471dc0030277dc669c89ae80071424442787535295c7a4"
],
"SeedList":[
"54.255.212.167:10333",
"52.221.255.41:10333",
"13.229.109.145:10333",
"13.228.25.57:10333"
],
"SystemFee":{
"EnrollmentTransaction":1000,
"IssueTransaction":500,
"PublishTransaction":500,
"RegisterTransaction":10000
}
}
}
5.修改虚拟机的防火墙入站规则,这里要注意的是不仅需要修改虚拟机的入站规则,而且要去AWS控制台修改安全组里的入站规则,由于我4台虚拟机用的都是同一个安全组,所以只要修改一个就行了。虚拟机里windows操作系统的入站规则我就不具体写了,在控制面板里操作,这个比较简单。其实,如果想简单粗暴点,直接关掉windows的防火墙应该就可以了。


6.在四台虚拟机上分别用neo-cli打开相对应的钱包,这里以第一台虚拟机为例。运行 dotnet neo-cil.dll 命令,如果你想检查当前的区块状态,可以使用show state,初始状态应该是高度为0,节点为0。然后打开本机对应的钱包文件,这台虚拟机对应的wallet1.db3。
输入命令 open wallet wallet1.db3打开钱包
然后输入 start consensus 开启共识
其他虚拟机一样操作,分别打开对应的钱包文件,然后输入命令开启共识。不出意外的话就会出现如图所示的界面。关掉其中一台的话,其它三台依然可以产生共识


7.利用NEO-GUI提取NEO和GAS。安装好NEO-GUI后,将NEO-CLI目录下的 protocol.json 文件覆盖掉NEO-GUI目录下的protocol.json,然后运行neo-gui.exe。进行多方签名的设置。


但是有一个问题,这里有点比较坑的地方,文档里也没有明说。NEO-CLI和NEO-GUI是不能同时启动的,也就是说用 dotnet neo-cli.dll 启动了neo-cli的时候,不能运行neo-gui.exe,反之亦然。所以当产生共识之后,我们需要关闭其中一个节点的NEO-CLI,然后在这个节点上的NEO-GUI客户端进行操作。依次打开4个钱包,进行多方签名的设置和重建钱包索引的操作,这个操作是在同一台虚拟机上完成的。这个一定要注意。
然后把 NEO 从合约地址转到普通地址中,打开 4 个钱包中的任意一个,点击交易 >>> 转账输入标准地址和数额,将 1 亿 NEO 转到这个地址中。

然后系统会提示“交易构造完成,但没有足够的签名”,然后将代码复制下来,打开第二个钱包,点击交易签名粘贴刚才复制的代码,点击签名,然后将代码复制下来,打开第三个钱包,点击交易签名粘贴刚才复制的代码,点击签名,这时你会发现窗口中出现了一个广播按钮,代表交易已经签名完成(达到多方签名合约要求的最少签名数量)可以广播,点击广播后转账交易开始广播,约 15 秒后转账成功。
上面的操作也是在同一个客户端完成的。这里多说一句,我第一次弄的时候没有注意,我是在4个节点客户端上分别操作的,也就是说多方签名的设置和重建钱包索引操作,我是在4台虚拟机上分别完成的。这就造成了我没有正在运行的节点了(因为neo-cli和neo-gui不能同时运行,而neo-gui没有共识功能)。然后,到了提取NEO和GAS这一步时,就造成了,我的交易签名成功了,而且广播了,但是并没有转帐成功。造成这样的原因是因为我虽然广播了,但是此时没有节点帮我把这个交易打包上去。所以,我的交易转账当然不成功,在普通地址上也就没看到那些相应的NEO。这点是因为自己对区块链的概念不够深,我这里被困扰了很久。

8.GAS的提取教程基本上差不多,这里的不多说废话了,官方教程已经说得很详细了。
以上转载自 https://mp.weixin.qq.com/s/vidjSg3KhQY5RWIPnNDxMw
基于NEO的私链(Private Blockchain)的更多相关文章
- 区块链(Blockchain)
一 .什么是区块链? 区块链(Blockchain)是由节点参与的分布式数据库系统[1],它的特点是不可更改,不可伪造,也可以将其理解为账簿系统(ledger).它是比特币的一个重要概念,完整比特币区 ...
- [转]EOS智能合约 & 私链激活 & 基本操作
链接:https://www.jianshu.com/p/90dea623ffdf 简介 本篇文章,将跟大家介绍eos私链的激活.基础智能合约的安装,以及为大家演示转账等基础操作.还没有安装eos私链 ...
- 基于Tendermint的区块链漂流瓶简单实现
本文主要借demo介绍基于Tendermint的区块链应用开发,这个demo很简单,主要包含以下功能: 扔漂流瓶 捞漂流瓶 之后投放者和打捞者可以相互传递[加密]信息 代码已上传至github. Te ...
- neo-thinsdk-cs 之 thinWallet 接入私链
neo-thinsdk-cs 之 thinWallet 接入私链 2017年底刚开始接触区块链,目前在被 NEO 折磨. 一开始被官方文档和 NEO-GUI 搞得体无完肤(尤其是传说中的 F12),也 ...
- 以太坊geth区块链私链建立
以太坊geth区块链私链建立 geth的github https://github.com/ethereum/go-ethereum 下载最新(1.8)的geth,windows下安装很简单 关于 ...
- c#实战开发:以太坊私链搭建(一)
1.第一步环境搭建 运行环境:window 客户端版本:Go语言geth 下载地址https://ethereum.github.io/go-ethereum/downloads/ 以太坊API中文 ...
- c#实战开发:以太坊钱包对接私链 (二)
上一篇讲了 以太坊私链搭建 首先下载Ethereum Wallet 钱包 可以直接百度 下载如果直接打开它会默认连接公链 所以我们要通过命令打开 "F:\Program Files\Ethe ...
- IPFS私链搭建及常用操作命令
1. 共享密钥 同一个IPFS私链内的所有节点必须共享同一个密钥才能加入. 首先我们使用密钥创建工具,创建一个密钥. 下载地址:https://github.com/Kubuxu/go-ipfs-sw ...
- win10下搭建私链
首先要下载geth,下载地址:https://gethstore.blob.core.windows.net/builds/geth-windows-amd64-1.7.0-6c6c7b2a.exe ...
随机推荐
- 2.Liunx 系统设置
1.基本命令:clear 2.环境变量: alias .export 大纲 系统管理命令 1.用户管理:adduser .passwd. userdel 2.用户组管理:groupadd.groupd ...
- MSSQL数据库后台进程(线程)
与Oracle数据库类似,微软数据库产品MSSQL也有诸多后台进程来保证数据库系统的高效正常运转,由于MSSQL采用的是线程模型,应该叫做后台线程,为了大家易于理解,我们在暂且称之为后台进程,下面我们 ...
- GsonFormat根据返回值json快速构建Model
Json是一个插件,我们只需要在Android studio中进行安装一下,即可使用. 根据平时的操作,根据浏览器中返回中的数据一行一行敲,其实这样非常麻烦. 有一个简单的方法,可以瞬间生成一个实体类 ...
- JS 控制只能输入数字并且最多允许两位小数点
<html lang="en"> <head> <meta charset="UTF-8"> <title>JS ...
- Linux安装Nginx报错: ./configure: error: C compiler cc is not found
CentOS 7.3 下 安装 Nginx 执行配置命令 ./configure 时提示以下错误: checking for OS + Linux 2.6.32-431.el6.x86_64 x86_ ...
- POJ 2373 Dividing the Path(DP + 单调队列)
POJ 2373 Dividing the Path 描述 农夫约翰的牛发现,在他的田里沿着山脊生长的三叶草是特别好的.为了给三叶草浇水,农夫约翰在山脊上安装了喷水器. 为了使安装更容易,每个喷头必须 ...
- TCP_NODELAY算法使用事项
当有一个TCP数据段不足MSS,比如要发送700Byte数据,MSS为1460Byte的情况.nagle算法会延迟这个数据段的发送,等待,直到有足够的数据填充成一个完整数据段.也许有人会问,这有什么影 ...
- Java连接SqlServer 2008数据库
将sqljdbc4.jar包添加到工程 连接SqlServer 2008数据库 import java.sql.Connection; import java.sql.DriverManager; i ...
- (C/C++学习笔记) 二十一. 异常处理
二十一. 异常处理 ● 异常的概念 程序的错误通常包括:语法错误.逻辑错误.运行异常. 语法错误指书写的程序语句不合乎编译器的语法规则,这种错误在编译.连接时由编译器指出. 逻辑错误是指程序能顺利运行 ...
- C++基础知识:STL简介
1.标准模板库STL ― STL , 即 : Standard Template Library , 是 C++的一部分― STL是常用数据结构和算法的集合― STL的目标是标准化组件 , 提高开发效 ...