以太坊私有链环境搭建

一、   Ubuntu下安装Geth客户端

因为以太坊的官方对Ubuntu支持的很好,是在各个Linux系统中安装最简单。

添加以太坊官方 APT 源,并安装以太坊客户端。

  进入ubuntu命令行,执行如下命令:

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
geth version

 查看版本是否安装成功。

geth account new 创建用户

 二、准备创世区块

配置自己的创世块是为了区分公有链,同一个网络中,创世块必须是一样的,否则无法联通,此方法在windows和Ubuntu下通用。

   新建文件genesis.json,输入如下内容并保存。

{

    "nonce":"0x0000000000000042",

    "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",

    "difficulty": "0x4000",

    "alloc": {},

    "coinbase":"0x0000000000000000000000000000000000000000",

    "timestamp": "0x00",

    "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",

    "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",

    "gasLimit":"0xffffffff"

}

解释一下各个参数的作用:

 

mixhash

与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。.

nonce

nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。

difficulty

设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度

alloc

用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。

coinbase

矿工的账号,随便填

timestamp

设置创世块的时间戳

parentHash

上一个区块的hash值,因为是创世块,所以这个值是0

extraData

附加信息,随便填,可以填你的个性信息

gasLimit

该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

 三、启动区块链参数

启动Geth即可以启动以太坊的区块链,为了构建私有链 ,需要在Geth启动时加入一些参数,Geth参数含义如下: 

identity

区块链的标示,随便填写,用于标示目前网络的名字

init

指定创世块文件的位置,并创建初始块

datadir

设置当前区块链网络数据存放的位置

port

网络监听端口

rpc

启动rpc通信,可以进行智能合约的部署和调试

rpcapi

设置允许连接的rpc的客户端,一般为db,eth,net,web3

networkid

设置当前区块链的网络ID,用于区分不同的网络,是一个数字

console

启动命令行模式,可以在Geth中执行命令

四、Ubuntu中启动

在Ubuntu下,首先切换到打算运行的目录,目录下应该有配置好的genesis.json文件,执行如下命令

geth  --datadir "./chain" init genesis.json  

home/user : 用户当前目录下。

geth --datadir "./chain" --networkid 20140628 --rpc --rpccorsdomain "*" --nodiscover --port 16333 --rpcport 8546 console

rpccorsdomain是允许chrome插件MetaMask,remix等跨域访问web3接口。

geth --datadir "~/chain" init genesis.json   ----直接打印日志启动方式
geth --datadir "~/chain"  console 2>> ~/console2.log ----将日志输入到另外文件
tail -f ~/geth/logs/console.log

查看打印日志。

五、 连接其他节点:

首先要知道自己的节点信息,在Geth命令行界面下输入命令,注意大小写

admin.nodeInfo

    系统会显示

  enode:"enode://1e3c1727cd3bee9f25edeb5dbb3b880e03e41f8eec99566557f3ee0422734a8fcad17c161aa93d61bdbfb28ed152c143c7eb501db58bc63502a104a84b62d742@0.0.0.0:30303“

    其中

enode://1e3c1727cd3bee9f25edeb5dbb3b880e03e41f8eec99566557f3ee0422734a8fcad17c161aa93d61bdbfb28ed152c143c7eb501db58bc63502a104a84b62d742@0.0.0.0:30303

    就是自己节点的信息,注意要把“0.0.0.0“换成你自己的IP。将这个信息发送给其他节点,在其他节点的命令行中输入:

admin.addPeer(‘enode://1e3c1727cd3bee9f25edeb5dbb3b880e03e41f8eec99566557f3ee0422734a8fcad17c161aa93d61bdbfb28ed152c143c7eb501db58bc63502a104a84b62d742@192.168.1.101:30303’)

    如果添加成功,输入admin.peers显示如下:
[{
    caps: ["eth/63"],
    id: "3a121cee81c04bcd6c8faeac0e377b934cc76e588de391744adea7ce8bc1dbe87c06ee6a924359c9465d9ec99e7d5ec1e9c9614c266f7454558db00bd9b1828e",
    name: "Geth/v1.8.15-stable-89451f7c/linux-amd64/go1.10",
    network: {
      inbound: false,
      localAddress: "192.168.124.1:64029",
      remoteAddress: "192.168.124.128:30303",
      static: true,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 131072,
        head: "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0",
        version: 63
      }
    }
}]

六、挖矿

在Geth命令行界面下,输入miner.start()即启动挖矿,挖矿后,会不停刷屏,输入miner.stop()即停止,不用管刷屏导致的命令不全,命令会正常执行。

七、Geth命令总结

geth --datadir chain init genesis.json 

------创建创世块,其中chain区块数据目录。

geth --datadir "./chain" --nodiscover console 2>>geth.log 

-------nodiscover 使用这个参数,你的节点就不会被其他人发现,除非手动添加你的节点。否则,就只有一个被无意添加到一个陌生区块链上的机会。

personal.newAccount("123456")

-------创建用户,其中123456是密码。

eth.accounts  -----查看账户

eth.blockNumber -----查看区块高度

eth.getBlock(0) ------查看创世区块

miner.start(1)  -------表示仅以一个线程挖矿

eth.getBlock(eth.blockNumber).miner -----拿到挖到最后一个区块的矿工的名字

miner.setEtherbase(eth.accounts[0])  ------将这个账户设置为矿工etherbase

miner.stop() ------停止挖矿

admin.nodeInfo ------查看当前节点信息

admin.nodeInfo.enode ---// 自己节点的URL,在其他的客户端上执行admin.addPeer("自己节点的URL")告诉它们添加自己的节点

eth.getBalance(eth.accounts[0])  ------查看余额

7、MIST浏览器不能连接私有链

搭建好私有链后,不能通过MIST浏览器链接,显示错误。

解决方案:

通过命令行 , geth --datadir   "./"启动私有链,并找到 url=

 

以太坊私有链环境搭建_第1张图片

进入到MIST的主目录。

然后通过命令行 ,设定rpc 参数,启动mist

顺利启动,链接私有链。 

参考文章:

https://blog.csdn.net/m0_37327416/article/details/72864859

https://segmentfault.com/a/1190000014497682?utm_source=index-hottest

https://ethfans.org/wikis/%E6%98%9F%E7%81%AB%E8%8A%82%E7%82%B9%E8%AE%A1%E5%88%92-Ubuntu-%E6%8E%A5%E5%85%A5%E6%96%87%E6%A1%A3

https://www.imooc.com/article/details/id/23644

https://blog.csdn.net/weixin_42120841/article/details/80779095

 

 

 

 

 

 

 

 

你可能感兴趣的:(区块链)