以太坊私鏈測試,通過docker多節點本地部署挖礦、轉賬


)

1.準備geth工具

https://geth.ethereum.org/downloads/

geth --help

2.預先創建帳戶,初始化創始區塊

1. 創建密碼文件
> echo "111111" > .passwd

2. 爲node1創建帳戶
> for ((n=0;n<2;n++)); do geth account new --password .passwd --datadir ./node1; done

3. 爲node2創建帳戶
> for ((n=0;n<2;n++)); do geth account new --password .passwd --datadir ./node2; done

4.創建創世區塊 genesis.json 
{
  "config": {
    "chainId": 150,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "alloc": {},
  "coinbase": "0x0000000000000000000000000000000000000000",
  "difficulty": "0x20000",
  "extraData": "",
  "gasLimit": "0x2fefd8",
  "nonce": "0x0000000000000042",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "0x00"
}

4.初始化鏈數據
> geth init --datadir ./node1 genesis.json 
> geth init --datadir ./node2 genesis.json
節點 挖礦賬戶 資金賬戶
node1 0xd8e6708334bdf3e9144a62859c99998caa7df32d 0x23eaf35e78a350041cd56d88a04d7b77d45c9844
node2 0x4beff4fceff14ef1c24956fb81387d21f24ca04b 0xae5ed5d1b2137ebc9304cff4cd6192bbb6ea965a

3.配置Dockerfile

FROM golang:1.10-alpine as builder

RUN apk add --no-cache make gcc musl-dev linux-headers git
RUN git clone --depth 1 --branch release/1.8 https://github.com/ethereum/go-ethereum /go-ethereum
RUN cd /go-ethereum && make all

FROM alpine:latest
RUN apk add --no-cache ca-certificates
COPY --from=builder /go-ethereum/build/bin/* /usr/local/bin/

WORKDIR "/opt"

ENV coinbase=""
ENV datadir=""

CMD exec geth --datadir ./$datadir  --verbosity=4 --rpc --rpcapi "eth,web3,personal,net,miner,admin,debug,db" --rpcaddr "0.0.0.0" --rpccorsdomain "*" --syncmode=full --mine --unlock $coinbase --password .passwd

EXPOSE 8545
EXPOSE 30303

4.配置docker-compose

version: "3"

services:
  sealnode-1:
    container_name: sealnode-1
    hostname: sealnode-1
    environment:
      coinbase: d8e6708334bDF3e9144a62859C99998CAa7dF32D
      datadir: node1
    build:
      context: .
    ports:
      - 8545:8545
      - 30303:30303
    volumes:
      - .:/opt
    networks:
      - mynet

  sealnode-2:
    container_name: sealnode-2
    hostname: sealnode-2
    environment:
      coinbase: 4bEfF4FceFf14Ef1C24956Fb81387D21f24CA04b
      datadir: node2
    build:
      context: .
    ports:
      - 8546:8545
      - 30304:30303
    volumes:
      - .:/opt
    networks:
      - mynet

networks:
  default:
    driver: bridge
  mynet:
    driver: bridge

5.啓動環境

當前目錄結構
├── .passwd
├── docker-compose.yaml
├── dockerfile
├── genesis.json
├── node1
│   ├── geth
│   ├── geth.ipc
│   └── keystore
└── node2
    ├── geth
    ├── geth.ipc
    └── keystore

準備多個終端

終端1 掛起docker作爲日誌查看
>docker-compose up

終端2 進入geth控制檯
> docker-compose ps 
> docker exec -it sealnode-1 /bin/sh
> geth attach node1/geth.ipc 

終端3 改下容器ID重複步驟。

在這裏插入圖片描述

6.測試單節點挖礦+轉賬

#查看當前節點賬戶
> eth.accounts
#查看賬戶1的餘額(單位wei轉換爲Eth)
> web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
#查看賬戶2的餘額
> web3.fromWei(eth.getBalance(eth.accounts[1]), "ether")
#從賬戶1轉入3個ETH給賬戶2
> eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value:web3.toWei(3, "ether")})
#設置挖礦收益賬戶
> miner.setEtherbase(eth.accounts[0])
#挖礦
> miner.start()
#停止挖礦
> miner.stop()

在這裏插入圖片描述

7.綁定多節點

另起一終端查看容器的IP
>docker network ls
>docker network inspect testblock_mynet

在這裏插入圖片描述

可知node1爲172.18.0.3,node2爲172.18.0.2
回到原來的geth控制檯裏查看 節點唯一標誌

node1
> admin.nodeInfo.enode
"enode://53cb3c9cea25b8bc2c6a2deffdc96674a55dcbab658424dcb5da412c4cf2fe3fb443585be3d64169a061381fb8ef19fe47de7c0c59688d01e7e666cc43142357@127.0.0.1:30303"

node2
> admin.nodeInfo.enode
"enode://cae5cf06b4662cb5baaa7919a8ca715a3ed7d737a03c5241b181d6a6240747bf3325441050f871b18ae069e398ec9f720e368ecabfb328b51fb0436cb93446c7@127.0.0.1:30303"

任意綁定節點即可,這裏在node1綁定node2
>admin.addPeer("enode://cae5cf06b4662cb5baaa7919a8ca715a3ed7d737a03c5241b181d6a6240747bf3325441050f871b18ae069e398ec9f720e368ecabfb328b51fb0436cb93446c7@172.18.0.2:30303")
#查看綁定的節點
>admin.peers

#查看區塊高度一致,一致即完成節點同步。
>eth.blockNumber

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章