主页 > imtoken最新版本 > CentOS7安装ethereum geth客户端,创建私有区块链并挖矿

CentOS7安装ethereum geth客户端,创建私有区块链并挖矿

imtoken最新版本 2023-01-18 09:59:24

安装以太坊源码,即安装Go Ethereum(安装Geth)

1、安装 Golang

您可以使用 yum 包管理器直接安装 Golang

yum install golang

2、下载以太坊源代码(去以太坊)

先下载geth源码go-ethereum,这里是go-ethereum-1.9.7.tar.gz,直接从GitHub下载

3、安装以太坊源码(安装Geth)

接下来,解压源代码:

tar -xzf go-ethereum-1.9.7.tar.gz 

使用以下命令编译:

cd go-ethereum-1.9.7
make geth    

make geth 也可以用 make all 代替,也可以编译一些其他的程序套件

编译完成后以太坊挖矿配置,会在go-ethereum-1.9.7/build/bin中生成geth可执行文件。

输入 geth help 命令以显示所有 geth 命令和选项:

cd build/bin
./geth help

4、配置geth

直接使用geth命令可能会出现:

-bash: geth: command not found

创建一个指向其安装路径的软链接(将路径写入您解压缩它的目录)

ln -s /root/geth/go-ethereum-1.9.7/build/bin/geth  /usr/local/bin/geth

使用 geth 版本进行测试:

geth version

一个区块链由几个区块组成。

所以我们首先需要为私有链创建第一个区块(创世区块),类似于数据结构中链表的头节点。

5、创建一个创世块

首先,你需要创建一个创世块,这个块的创建应该是所有节点都知道的,并且都同意。

创建创世块的配置主要存储在一个 JSON 文件中,这里我们有一个名为 genesis.json 的文件。

为了结构更清晰,首先创建一个文件夹来存放私链相关的数据。

mkdir private_eth
cd private_eth
touch genesis.json

创建一个新文件并将其命名为:genesis.json以太坊挖矿配置,内容如下:

{
  "config": {
    "chainId": 10001,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0
  },
  "alloc": {},
  "coinbase": "0x0000000000000000000000000000000000000000",
  "difficulty": "0x20000",
  "extraData": "",
  "gasLimit": "0x2fefd8",
  "nonce": "0x0000000000000042",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "0x00"
}

如果您想为某些账户预先分配一些资金用于测试目的,您可以在配置中创建账户并分配一些资金。

此时只需要将上面的“alloc”:{}替换成如下配置即可:

"alloc": {
  "0x0000000000000000000000000000000000000001": {
    "balance": "111111111"
  },
  "0x0000000000000000000000000000000000000002": {
    "balance": "222222222"
  }
}

6、初始化区块链(1)初始化

在开始之前,先初始化:

geth init genesis.json --datadir test 

测试目录表示存储与区块链相关的数据的目录。在这里,test 和 genesis.json 文件位于同一目录中。

test目录之前不存在,执行后会自动生成。

test目录下有两个子目录:

geth:存储同步的区块链及相关数据;

keystore:保存账户文件。由于私链刚刚创建,此时keystore目录为空。

注意:如果直接执行

geth init genesis.json

可能会出现以下错误:

Fatal: Failed to write genesis block: database contains incompatible genesis (have d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3, new a3c5c170988f516e00ea3078b2461a149bcd4d0422c8c894923c6cfa22d6926b)

所以记得通过--datadir来设置存储区块链相关数据的对应目录。

(2)启动以太坊客户端

geth --rpc --rpccorsdomain="*"  --nodiscover --allow-insecure-unlock  --datadir './test' console

执行成功后,如下图所示:

以太坊一些常用参数总结:

// Ethereum参数
--config value:表示TOML配置文件的目录;
--datadir value:存储区块链相关数据的文件目录,包含geth和keystore两个文件夹(默认为 "/home/ligi/.ethereum"),geth目录存储同步区块链以及相关的数据,keystore存储账户相关数据;
--datadir.ancient value             Data directory for ancient chain segments (default = inside chaindata)
--keystore value                    账户秘钥的存储目录 (默认在datadir里面)
--networkid value                   网络标识符 (integer, 1=Frontier, 2=Morden (disused), 3=Ropsten, 4=Rinkeby) (default: 1)
--testnet                           Ropsten network: pre-configured proof-of-work test network
--rinkeby                           Rinkeby network: pre-configured proof-of-authority test network
--syncmode value                    区块链同步模式 ("fast", "full", or "light") (default: fast)
--exitwhensynced                    块同步完成后退出
--identity value                    自定义节点名称
 
 
//DEVELOPER CHAIN OPTIONS:
--dev                               拥有一些预先设置了资金的开发者账户的临时权威证明网络,并且可以直接挖矿
--dev.period value                  在开发者模式中使用块(出块)的时间,0表示只有在交易挂起的时候才会挖矿,1表示不用等有了交易才挖矿 (default: 0)
 
 
//ACCOUNT OPTIONS:
  --unlock value                      要解锁的账户列表(多个账户用逗号分隔)
  --password value                    用于非交互式密码输入的密码文件
 
 
//API AND CONSOLE OPTIONS:
  --ipcdisable                        禁用(关闭)IPC-RPC服务器
  --ipcpath value                     Filename for IPC socket/pipe within the datadir (explicit paths escape it)
  --rpc                               启用HTTP-RPC服务器
  --rpcaddr value                     HTTP-RPC服务器监听的IP地址 (default: "localhost")
  --rpcport value                     HTTP-RPC 服务器监听端口(default: 8545)
  --port:指定和其他节点连接所用的端口号(默认为 30303);
  --rpcapi value                      通过HTTP-RPC接口提供的API
  --rpc.gascap value                  设置可以在eth_call/estimateGas中使用的gas上限(默认值:0) (default: 0)
  --rpccorsdomain value               哪些域名允许访问跨域请求(多个域名用逗号分隔)(浏览器执行),"*"表示允许通过任意域名进行访问
  --rpcvhosts value                   允许哪些虚拟主机名接受请求(多个的时候用逗号分开)(服务器执行). 接受 '*' 通配符. (default: "localhost")
  --ws                                启用WS-RPC服务器
  --wsaddr value                      WS-RPC服务器监听的地址 (default: "localhost")
  --wsport value                      WS-RPC服务器监听的端口号 (default: 8546)
  --wsapi value                       WS-RPC接口提供的API
  --wsorigins value                   接受websockets请求的源
 
 
//NETWORKING OPTIONS:
  --nodiscover                        禁用节点发现机制,防止加入有同样初始配置的的陌生节点
 
 
--verbosity: 表示设置日志等级,0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 

7、开始挖矿

使用 genesis.json 中配置的账户进行挖矿:

挖矿前,将账号与矿机绑定。

矿工是 JavaScript 控制台中的内置矿工对象。可以在控制台中使用以下命令将 genesis.json 文件中“alloc”中的地址绑定到矿工对象。绑定的目的之一是明确矿机获得的奖励应该存入哪个账户?

miner.setEtherbase("0x0000000000000000000000000000000000000001")

在开始挖矿之前,我们可以查看两个临时账户的余额:

eth.getBalance("0x0000000000000000000000000000000000000001")
eth.getBalance("0x0000000000000000000000000000000000000002")

开始挖矿

miner.start()

查看当前区块链中的块数

eth.blockNumber

再次查询两个临时账户的余额

eth.getBalance("0x0000000000000000000000000000000000000001")
eth.getBalance("0x0000000000000000000000000000000000000002")

由于矿工获得了一些挖矿奖励(以太币),我们可以发现绑定矿工的账户余额增加了。

停止采矿

miner.stop()

参考:(一)以太坊私链建设及挖矿转移_头发海子的博客-CSDN博客