Geth搭建以太坊私有链并与Mist连接(Ubuntu 18.04)

2019/10/04

在4种语言编写的以太坊客户端(Geth、Eth、Pyethapp、EthereumJ),go语言实现的Geth( go-ethereum)是当前最被热捧,官方一直维护并推荐使用的客户端。这里简单介绍如何利用Geth(1.9.3)搭建本地私有链,并与以太坊钱包Mist连接,可视化进行操作。运行环境为Ubuntu 18.04。


安装geth
详见:以太坊客户端Geth的安装(ubuntu18.04)


安装Mist
Mist发行版本,找到合适的版本(博主这里是Mist-linux64-0-11-1.zip,另外注意,由于安全问题,服务团队其实已经在3月已经停止维护Mist,所以用来测试就好啦)。
下载后,unzip Mist-linux64-0-11-1.zip。之后找到./mist,直接运行。但是发现报错:关于libgconf2-4。那么sudo apt-get install libgconf2-4。在运行./mist,成功。

Geth搭建以太坊私有链并与Mist连接(Ubuntu 18.04)_第1张图片


geth搭建私有链
可以执行geth --help查看相关命令。我们直接来:

  • 创建创世区块配置文件genesis.json,该文件文件内容如下:
   {                                                                                                                                    
      "config":{
           "chainId":15,
           "homesteadBlock":0,
           "eip155Block":0,
           "eip158Block":0
           },
      "alloc":{},
      "coinbase":"0x0000000000000000000000000000000000000000",
      "difficulty":"0x60000",
      "extraData":"0x0000111122223333",
      "gasLimit":"0xffffffff",
      "nonce":"0x0000000000000001",
      "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
      "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
      "timestamp":"0x00"
  }
参数名 描述
chainId 指定了独立的区块链网络 ID。网络 ID 在连接到其他节点的时候会用到,以太坊公网的网络 ID 是 1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络 ID。不同 ID 网络的节点无法相互连接。
HomesteadBlock 当设置为0表示使用Homestead发布该链。
eip155Block eip是ethereum improvement proposal的缩写,我们的链不会提议分叉,所以设置为“0”即可
eip158Block 同上
nonce nonce就是一个64位随机数,用于挖矿,注意它和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
mixhash 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意它和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
difficulty 设置设置当前区块的难度,越大挖矿就越难。
alloc 用来预置账号以及账号的以太币数量。
coinbase 矿工账号
timestamp 设置创世块的时间戳
parentHash 上一个区块的hash,创世块就为0
extraData 附加信息
gasLimit 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和

上述参考:https://blog.csdn.net/m0_37847176/article/details/82983519

  • 初始化生成节点1(可能我们会需要多节点,所以先来个node1)
cd /home/aurora/bc/privateNet
geth --datadir node1 init genesis.json
  • 开启节点1
geth --datadir "./node1" --networkid 72 --nodiscover --port 3100
%若两个节点互联 则需指定networkid; 若加console则直接在下面进入交互界面,不好,因为日志信息会进行刷屏。可以重新打开一个窗口,然后`geth attach ipc:node1/geth.ipc` 

启动节点一之后我们进node1里面,会看到三个文件:geth.ipc(进程间通信)、keystore、geth。其中geth/chaindata存放区块数据,keysotre存放账户数据。
此时,我们可以进入console模式,进行操作,私有连理论上已经搭好。
console下的部分命令:

命令 描述
personal.newAccount() 创建账户;
personal.unlockAccount() 解锁账户;
eth.accounts 枚举系统中的账户;
eth.getBalance() 查看账户余额,返回值的单位是 Wei(Wei 是以太坊中最小货币面额单位,类似比特币中的聪,1 ether = 10^18 Wei);
eth.blockNumber 列出区块总数;
eth.getTransaction() 获取交易。EX: eth.sendTransaction({from : eth.accounts[1], to : “zskcndsjkncdskj”, value : web3.toWei(15, ‘ether’)})
eth.getBlock() 获取区块;
miner.start() 开始挖矿;
miner.stop() 停止挖矿;
web3.fromWei() Wei 换算成以太币;
web3.toWei() 以太币换算成 Wei;
txpool.status 交易池中的状:pending/queued
admin.addPeer() 连接到其他节点

部署合约部分命令,可参考:https://www.jianshu.com/p/9fa31e4cdf4d

更多命令可参考:https://github.com/ethereum/go-ethereum/wiki/Management-APIs
(以上均是基于console)


私有链连接Mist

  • 首先找到Mist的ipc(此前ctrl+c/d 关闭node1)
ps -ef|grep geth

在这里插入图片描述
/home/aurora/.ethereum/geth.ipc就是我们要找的.

  • 关闭Mist,启动node1
geth --datadir "./node1" --networkid 72 --nodiscover --port 30101 --ipcpath     /home/aurora/.ethereum/geth.ipc --rpc --rpcport 8545 --rpcaddr localhost  
%指定了ipc路径

并且在console里面输入如下:
Geth搭建以太坊私有链并与Mist连接(Ubuntu 18.04)_第2张图片
建立三个用户

  • 重启打开Mist:
    Geth搭建以太坊私有链并与Mist连接(Ubuntu 18.04)_第3张图片
    首先查看他的网络,并不是主网络也不是测试网络,左下角蓝点鼠标放上去之后显示本地网络,说明连接的我们的私有网络。另外,存在三个账户,且地址与我们console里面得到的信息相同。连接成功。

你可能感兴趣的:(Basic)