- 操作系统:MacOS 10.15以上版本(win一样)
- 阿里云服务器(ubuntu 16.04)
1.购买云服务器(略过)
2.更改云服务器连接密码,点击右上角的三个小点,然后点击重置实例密码
输入并牢记密码,通过终端远程登录时需要用到
3.点击配置安全组配置安全组规则,点击右侧的配置规则
点击快速添加,点击SSH(22),方便后续终端远程连接服务器
4.打开终端,输入ssh root@xxx.xxx.xxx.xxx(服务器的公网IP)
按要求输入密码,成功连接并控制云服务器
三、ubuntu中下载以太坊源码1.更新软件包信息
apt-get upadate
2.添加ppa到当前库中并且自动导入公钥
apt-get install software-properties-common
add-apt-repository -y ppa:ethereum/ethereum
add-apt-repository -y ppa:ethereum/ethereum-dev
apt-get update
3.安装以太坊
apt-get install ethereum
4.查看版本号确认安装成功
四、以太坊账户创建 搭建以太坊私链之前要先创建相应的账户,可以创建在任意位置创建任意数量的账户,在这里举一个简单的例子,在云服务器上创建一个账户,在自己的电脑上创建三个账户。
1.连接云服务器,创建一个用来装节点的文件夹
mkdir MyEth(你喜欢的名字,什么都行)
2.进入文件夹中
cd MyEth
3.使用命令创建第一个账户,输入命令后,按要求输入两次密码,即可得到该账户的公钥地址,牢记
geth --datadir node1/data account new
4.在自己的本地电脑上,创建一个文件夹,同样用来装节点信息,推荐和云服务器上的文件夹名字相同
5.同样的方式,通过终端进入该文件夹,创建三个账户 node2,node3,node4
cd MyEth
geth --datadir node2/data account new
geth --datadir node3/data account new
geth --datadir node4/data account new
同样,牢记公钥地址,配置创始区块时需要
五、配置创世区块以太坊的私链想要达成节点互连,有两个必要条件:
1.创世区块配置文件相同
2.有相同的ChainID
我们通过已有的puppeth工具创建配置区块文件
1.切换到云服务器中,在MyEth文件夹下,输入命令puppeth,输入该配置的名称,任意都行,此处我填写sdh
填写之后,工具会检测该配置是否存在,如果不存在,第二个选项则是配置新的创世区块,否则是管理该配置,这里展示配置新创世区块的选项
选择2,配置新的创世区块,之后的选项1是创建新的创世区块,2是导入一个已经存在的配置,这里选择1
这里的选项是选择该链所用的共识机制,第一个是以太坊的公链共识机制PoW,显然不适合私链或者联盟链,所以这里选择2 Clique,该共识机制是基于PoA的,此处不详细解释
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vxbfIVdb-1633176499175)(/Users/sundaohan/Library/Application Support/typora-user-images/image-20201224213843219.png)]
这里是出块时间,没有特殊需求默认就行(直接回车或者打上15再回车都行)
这里就比较重要了,是允许挖矿的账户,上一步我们创建了共四个账户,一个是在云服务器上的node1,和在本地的三个账户node2,node3,node4,我们可以选择一个或者多个当做挖矿节点,我这里选择了node3,填写完成以回车结束该选项
这一部分是设置预置资金账号,这部分账号里可以有初始资金,这里我设置了node1和node3
这一步选择是否给刚才设置的预置资金账号存点钱,yes就行
这一步很重要,关系到能否互连,是设置chainID,如果两个节点想要互连,那么输入的chainID必须相同,输入一个能记住的号,最好大于5
到这里创世区块配置就完成了,再出现的二号选项就变成了管理已经存在的配置,选择2进入管理界面
选择2,将已经配置好的创世区块文件导出
我这里报了错误,还没弄明白是为什么,但是并不影响使用,搞定后直接ctrl+c退出puppeth
然后打开自己电脑的本地终端,输入以下命令将刚才已经导出的创世区块配置文件下载到本地电脑下的MyEth文件夹中
scp root@8.131.78.39:/root/MyEth/sdh.json /Users/sundaohan/MyEth
该命令的格式为
scp root@xxx.xxx.xxx.xxx(云服务器公网IP) :/xx/xx/xx.xx(远程目录) 『空格』 /xxx/xxx/xxx(目标目录)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dV3yEC17-1633176499185)(/Users/sundaohan/Library/Application Support/typora-user-images/image-20201224215922977.png)]
可以看到该文件已经下载成功了
至此,创世区块配置的准备工作已经全部完成
六、初始化私有链回到云服务器终端上,在MyEth文件下,输入命令
geth --datadir node1/data init sdh.json(创世区块配置文件名称)
在自己电脑的本地文件夹下,也运行同样的命令,记得把node1改成相应节点的名字
geth --datadir node2/data init sdh.json
geth --datadir node3/data init sdh.json
geth --datadir node4/data init sdh.json
全部运行成功后,四个节点的初始化就完成了
七、启动节点 1.首先启动云服务器的节点,先切换到云服务器的MyEth文件夹下,运行如下命令
geth --datadir node1/data --nodiscover --networkid 98512 --port 3000 console
其中
datadir:指定数据库和keystore密钥的数据目录
nodiscover(重要):禁止节点发现,只允许手动添加节点,如果不写这个我们的私链可能会被别人发现,但是写了这个选项会增强链的隐蔽性,只能手动添加
networkid: 网络标识符,这个在创世区块的配置时已经写定,所有想要加入这个私链中的节点都要写相同的网络标识符
port:网卡监听端口,每个节点都要有这个端口号,默认是30303,保证每个节点使用的都不同
还有很多其他选项,这里不再赘述
命令输入成功后,node1就启动完毕了
2.切换回自己的电脑终端,开启多个终端窗口,分别启动node2、node3、node4,命令与刚才相似
geth --datadir node2/data --networkid 98512 --port 3001 console
geth --datadir node3/data --networkid 98512 --port 3002 console
geth --datadir node4/data --networkid 98512 --port 3003 console
至此,节点已经全部启动
八、连接 节点启动后,开始进行连接操作,连接使用的admin.addPeer(encode)命令,首先在四个已经启动的节点下输入如下命令查看每个节点的encode值
admin.nodeInfo
第一行中的
“enode://94900340edefd9f8b1d269682bea6df2a4394966b972026d930c50356e2b90a6f2de74beccab042324a81d108ea419d9336d889c261b8f0ce932a8b01206f8ed@127.0.0.1:3000?discport=0”
即是节点的encode值,如果要连接的节点不在同一个网络下,比如我们启动的node1是在云服务器上,node2、node3、node4是在自己的电脑上,那么node2、node3、node4即在同一网络下,而node1与另外三个节点就不在同一节点下,此时如果想要使他们互连,就要将encode中127.0.0.1换成节点的真实的IP地址。我的云服务器公网地址是8.131.78.39,那我如果想要用node2连接node1,就要在node2的终端中输入
admin.addPeer(“enode://94900340edefd9f8b1d269682bea6df2a4394966b972026d930c50356e2b90a6f2de74beccab042324a81d108ea419d9336d889c261b8f0ce932a8b01206f8ed@8.131.78.39:3000?discport=0”)
如果输入正确,会返回true,但是并不代表已经连接上了
此时切换到node1的节点终端,输入命令
admin.peers
可以看到所有已经连接上的节点,此时我们看到node2已经连接上了
继续将剩下的节点连接,一条完整的基于PoA共识机制的私链就完成了,等到下次再开启节点时,他们会自动连接



