3

docker 部署以太坊私链v1.10.16版本

 2 years ago
source link: https://learnblockchain.cn/article/3606
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

docker 部署以太坊私链v1.10.16版本

docker 部署以太坊私链v1.10.16版本

一. 以太坊私链镜像生成

1.1 下载以太坊基础镜像

docker pull  ethereum/client-go:v1.10.16

1.2 编写Dockerfile

# vim /opt/docker/images/geth-1.10.16/Dockerfile

FROM ethereum/client-go:v1.10.16

RUN apk update && apk add bash curl

ADD bin /root/bin
RUN chmod a+x /root/bin/*

ENTRYPOINT /root/bin/start.sh

1.3 新建存放目录—bin

mkdir /opt/docker/images/geth-1.10.16/bin

1.4 bin目录下编写执行文件

# vim /opt/docker/images/geth-1.10.16/bin/start.sh

set -e

# Init
echo ""
echo "Init geth"
geth init "/root/files/genesis.json"
sleep 3

# Start geth
echo ""
echo "Start geth"
geth --gcmode "archive" --networkid=666666 --http --http.api "db,eth,net,web3,personal,admin,miner" --http.addr "0.0.0.0" --http.port "8545"  --miner.threads 1 --mine --allow-insecure-unlock & 

sleep 10

while true; do
    sleep 1000000000
done

注意,以上指定了一个名为networkid的参数。这标志着你的以太坊网络的身份。我们在这个例子中使用了66666,应该选择一个随机数来创建你自己的网络并防止其他人无意中连接到你的网络,此ID也最好与下文genesis.json文件中的"chainId"的ID一致

http.addr 参数,含义为指定rpc服务器地址,如果目前只有这一台矿工发服务器,必须使用0.0.0.0这个地址,不然无法在宿主机外使用curl命令调用rpc远程服务调用协议来查询用户余额

--allow-insecure-unlock:允许解锁账户

1.5 为文件赋予执行权限

chmod +x /opt/docker/images/geth-1.10.16/bin/start.sh

1.6 生成以太坊私链镜像

docker build . -t privte-eth:v1.10.16

注:需要在与Dockerfile同一级目录下执行此命令

  • 查看镜像是否构建
# docker images
REPOSITORY           TAG        IMAGE ID       CREATED          SIZE
privte-eth           v1.10.16   5bf38202567b   22 minutes ago   57MB

二.以太坊私链容器生成

2.1 所需文件准备

  • 预先创建一个账户地址

使用MetaMask或者其他工具预先创建一个账户地址,并保存好私钥,后面这个地址需要作为启动挖矿的coinbase地址

  • 新建需要映射给容器存放数据的目录,此目录下存放着的是所有在此链上的交易信息
mkdir -p /opt/docker/eth/data/chain/
  • 创建矿工地址keystore存放文件夹,并将预先生成地址的keystore文件放进去
mkdir /opt/docker/eth/data/chain/keystore
  • 新建需要映射给容器存放DAG数据的目录,必须创建,不然每次启动容器都会先生成DAG数据
mkdir -p /opt/docker/eth/data/ethash
  • 新建创始区块文件,此文件是搭建以太坊私链的创世区块文件
# vim /opt/docker/eth/genesis.json

{
  "config": {
    "chainId": 666666,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0
  },
  "nonce": "0x0000000000000046",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "difficulty": "0x400",
  "coinbase": "0x3333333333333333333333333333333333333333",
  "timestamp": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "0x",
  "gasLimit": "0x800000000000",
  "alloc": {
       "0x6e60F5243e1a3F0Be3F407b5AFE9e5395ee82aa2":{
       "balance": "6660010000000000000000000000"
    }
  }
}

1、为了创建我们的私有区块链,我们将创建一个创世块。为此,...

lock.svg

剩余50%的内容购买后可查看

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

  • 发表于 1天前
  • 阅读 ( 59 )
  • 学分 ( 2 )
  • 分类:以太坊

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK