主页 > imtoken安全下载 > 搭建以太坊私有链(单节点、多节点、windows、linux)
搭建以太坊私有链(单节点、多节点、windows、linux)
网上有很多关于如何搭建私链的文章,但是看起来都一样,都是一样的,很难找到不同的地方。 新鲜知识很难。 本文是总结那些文章的内容,从使用私有链的角度来写的。 比较全面的一篇博客,包括以下几点: 1. windows单节点安装geth
下载地址:下载后为.exe文件,安装即可。 安装完成后,将geth安装目录添加到系统环境变量的路径中。 验证是否安装成功,打开cmd窗口,输入geth version。 如果出现以下内容,则表示安装完成。 (如果不加任何参数直接运行geth,此时会自动连接以太坊公网并开始同步区块)
初始化创世块
新建一个空文件夹,比如
然后在里面新建一个first.json文件,文件名可选,内容如下:
{
"config": {
"chainId": 10,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
然后打开cmd窗口,跳转到当前目录执行命令:
geth --datadir .\nodedata0 init first.json
上面命令的主体是geth init,意思是初始化区块链。 该命令可以有选项和参数,其中-datadir选项后跟一个目录名,这里是nodedata0,表示指定的数据存放目录为nodedata0,first.json为init 命令的参数为json文件刚刚创建
当出现Successfully时以太坊全节点搭建,表示初始化成功(将这行命令保存为.cmd命令备份)。 这时候你会发现在你的目录下自动生成了一个nodedata0文件夹,目录如下:
其中,区块数据存放在geth/chaindata,账户数据存放在keystore。
起始节点
执行订单:
geth --rpc --nodiscover --datadir "./nodedata0" --port 30303 --rpcapi "db,eth,net,web3" --rpccorsdomain "*" --networkid 1001 --ipcdisable console 2>>geth.log
参数说明
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络
--rpc 启用ipc服务,默认端口号8545
--datadir 区块链数据存储目录
--port 网络监听端口,默认30303
--rpcapi 表示可以通过ipc调用的对象
--rpccorsdomain 指定可以访问APi的domain地址,设置为“*”则任何地址都可以访问,这样做不安全
--networkid 网络标识,私有链取一个大于4的随意的值
console 打开一个可交互的javascript环境
2>>geth.log 把geth中的log信息导入geth.log,也可以不加这个,把信息直接输出在console里,这样直观
更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
http://www.yaozihao.cn/2017/07/07/geth%E5%91%BD%E4%BB%A4%E9%80%89%E9%A1%B9%E4%BB%8B%E7%BB%8D/
出现javascript控制台说明节点启动成功,同时也生成了geth.log文件
保存启动命令以及start0.cmd命令,以后启动节点直接双击cmd即可。
节点相关基本操作
目前没有账号
个人的。 新账户()
passphrase是输入密码,下面repeat passphrase是重复输入密码,创建的账户地址是:
0x8b2bd44cec6caedcc0664f965d895a17db326e0a
这里我们会看到在nodedata0文件夹下的keystore下会有一个额外的文件,就是用来保存账户信息的
再次查看账户列表,发现有一个账户
如果不记得个人的方法,可以执行个人命令查看。 其他eth和矿工也是如此
miner.start()
看到null不要惊慌,因为你的日志信息已经保存在geth.log文件中了。 您可以理解下面的小图标代表什么。
挖了半天,挖了多少块? 你赚了多少以太币?看看查询余额,看看下面的区块数
另外,节点挖出的以太坊会自动存入eth.coinbase账户。 默认是 eth.accounts 中的第一个。 您也可以自己指定 coinbase。
矿工。 停止()
伦理。 取得平衡
eth.accounts[0]得到的是账户地址,这么大的值大家可能会奇怪,为什么会有这么多以太币?一个以太币等于10的wei的18次方,这里的值就是数量wei,要显示ether的数量,可以用下面的命令,405 ether,如果是真的,简直不要太爽,ether V神,方方的创始人,一定在家里偷偷挖了很多前。
eth.blockNumber
81个区块,每个区块奖励5 ETH
先创建第二个账户,然后指定第二个账户为coinbase,修改前后有变化
先创建第三个没有币的账户,从账户1转5个比特币到账户3,有同学会问,账户2不是有吗,你怎么不用? 因为转账发起交易,但发起交易只是发起交易。 为了被确认,交易需要被打包到区块中。 这就是挖矿的作用。 本身挖矿的收益会存放在coinbase账户中,现在coinbase账户是一个账户2,所以不考虑账户2
然后查看coinbase账户2的余额,不仅挖矿奖励,还收取了交易手续费。
出口
验证私有链
写了这么多,操作起来猛如虎。 可以使用这个私人链接吗?
我们使用 remix 来验证,连接到这个私有链
将显示帐户和余额信息。 如果您的工具找不到您的私有链,请确认启动节点的参数中是否设置了--rpccorsdomain "*"
单节点写到这里,下面是多节点的内容
2.windows多节点
上面我们已经创建了一个节点,下面我们直接创建第二个节点,然后将两个节点连接起来,第二个节点的创建必须满足以下条件
就是用同一个.json配置文件初始化,因为区块链的本质是所有节点记录的账本都是一样的,所以第一个区块的数据也必须一致
节点1启动的命令没有rpcport这个参数,默认值8545,我们用9545,端口用30306
初始化创世块
geth --datadir .\nodedata1 init first.json
自动创建存放节点数据的文件夹nodedata1
起始节点
geth --rpc --rpcport 9545 --nodiscover --datadir "./nodedata1" --port 30306 --rpcapi "db,eth,net,web3" --rpccorsdomain "*" --networkid 1001 --ipcdisable console
nodiscover以太坊全节点搭建,ipcdisable,这两个参数很重要,windows没有ipcdisable参数,第二个节点启动会报错。 nodiscover 防止节点 2 被节点 1 自动扫描。
节点1和节点2建立连接
我们使用节点2主动添加节点1,只要两个节点中的一个主动建立连接,另一个就会自动获取连接,效果是一样的。
首先查看节点1的enode信息作为节点2的admin.addPeer()方法的参数
节点1的控制台:
节点2的控制台:
再看节点1的控制台:
然后使用 remix 连接到我们的节点 2
windows多节点私有链是这样的
3、linux创建节点并与windows节点建立连接
下载文件并上传到服务器解压:
注意你的linux有多少二进制文件就可以下载多少,我的是32位的,所以我就下载32位的
然后将geth复制到/usr/bin目录下,我们就可以使用geth命令了,geth help,出现如下界面,说明成功。
网上其他文章都是先安装go语言,然后下载geth源码编译安装。 最后的效果是一样的。
然后执行初始化块的命令:
geth --datadir nodedata2 init first.json
命令和windows下类似,自动生成的nodedata2文件夹也是一样的
启动节点,步骤同windous
geth --rpc --rpcport 8545 --rpcaddr 65.49.132.28 --nodiscover --datadir "/root/privatechain/nodedata2" --port 30303 --rpcapi "db,eth,net,web3" --rpccorsdomain "*" --networkid 1001 --ipcdisable console
还有一个命令:
--rpcaddr 65.49.132.28
这个ip就是linux服务器的地址。 如果我们想在windows本地访问服务器的私有链接,必须加上这个参数
已经启动了,我们可以在命令行窗口执行一些geth命令
windows电脑上的remix访问linux的私有链接:
一个帐户,地址是相同的,它正在工作。
附加操作:将启动命令保存为linux可执行文件,方便以后启动:
linux私链运行成功,然后我们把window节点和linux节点连接起来(由于网络原因,没有实现,仅想法)
windows上已经有两个节点了,现在我们的linux需要访问这两个节点,所以这两个节点的启动命令都要加上--rpcaddr参数,但是这部分实现不了,因为我的电脑是连着Router的,不能直接用公网ip+端口号访问自己的电脑,需要在路由器上做端口映射才能让服务器访问你的电脑,我没有路由器的登录权限,所以我做不到(有一些软件可以帮自己的电脑生成外网ip,有兴趣的朋友可以百度一下,然后继续往下看)
1、端口映射方法:
2、节点的连接方式要和windous连接点一样。 关键是在节点启动的时候加上--rpcaddr参数
3.祝你好运!