一、 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=
进入到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