Back

blockchain - geth - 使用docker, docker-compose 启动测试网络 lightmode eth, ethereum test network rinkeby goerli

发布时间: 2022-06-08 23:42:00

refer to: https://hub.docker.com/r/ethereum/client-go    

https://geth.ethereum.org/docs/getting-started

1. 在本地创建一个文件夹 d:/workspace/blockchain/geth

2. 在该文件夹下,创建 Dockerfile

FROM ethereum/client-go:alltools-latest-amd64

3. 创建 docker-compose.yml

version: '3'
services:

  geth-20220609:
    container_name: "geth"
    build: .
    volumes:
      - /d/workspace/docker_folder/geth:/root
        #command: 'tail -F /dev/null'
    command: 'mysqld'
    ports:
      - "8545:8545"
      - "8546:8546"
      - "30303:30303"
    stdin_open: true
    tty: true
    environment:
      - SAY_HI=hi
    command: tail -f /dev/null

4. 启动docker-compose:

docker-compose up

5. 启动后,登录该docker:

$ docker exec -it 6b93 sh
/ # which geth
/usr/local/bin/geth

6. 手动启动 geth的lightweight mode, 并且链接到测试网络

 geth --rinkeby --syncmode light --http --http.addr 0.0.0.0  --ws --ws.addr 0.0.0.0
就可以看到 geth 已经以 light模式启动了。
/ # geth --rinkeby --syncmode light --http --http.addr 0.0.0.0  --ws --ws.addr 0.0.0.0
INFO [06-09|00:03:19.218] Starting Geth on Rinkeby testnet...
INFO [06-09|00:03:19.218] Dropping default light client cache      provided=1024 updated=128
INFO [06-09|00:03:19.220] Maximum peer count                       ETH=0 LES=10 total=50
INFO [06-09|00:03:19.220] Smartcard socket not found, disabling    err="stat /run/pcscd/pcscd.comm: no such file or directory"
INFO [06-09|00:03:19.241] Set global gas cap                       cap=50,000,000
WARN [06-09|00:03:19.241]
WARN [06-09|00:03:19.241] --------------------------------------------------------------------------------
WARN [06-09|00:03:19.241] Please note, Rinkeby has been deprecated. It will still work for the time being,
WARN [06-09|00:03:19.241] but there will be no further hard-forks shipped for it. Eventually the network
WARN [06-09|00:03:19.241] will be permanently halted after the other networks transition through the merge
WARN [06-09|00:03:19.241] and prove stable enough. For the most future proof testnet, choose Sepolia as
WARN [06-09|00:03:19.242] your replacement environment (--sepolia instead of --rinkeby).
WARN [06-09|00:03:19.242] --------------------------------------------------------------------------------
WARN [06-09|00:03:19.242]
INFO [06-09|00:03:19.242] Allocated cache and file handles         database=/root/.ethereum/rinkeby/geth/lightchaindata cache=64.00MiB handles=524,288
INFO [06-09|00:03:19.442] Allocated cache and file handles         database=/root/.ethereum/rinkeby/geth/les.client cache=16.00MiB handles=16
INFO [06-09|00:03:19.709] Writing custom genesis block
INFO [06-09|00:03:19.718] Persisted trie from memory database      nodes=355 size=50.43KiB time=2.385332ms gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [06-09|00:03:19.722]
INFO [06-09|00:03:19.723] ---------------------------------------------------------------------------------------------------------------------------------------------------------
INFO [06-09|00:03:19.723] Chain ID:  4 (rinkeby)
INFO [06-09|00:03:19.723] Consensus: Clique (proof-of-authority)
INFO [06-09|00:03:19.723]
INFO [06-09|00:03:19.723] Pre-Merge hard forks:
INFO [06-09|00:03:19.723]  - Homestead:                   1        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/homestead.md)
INFO [06-09|00:03:19.723]  - Tangerine Whistle (EIP 150): 2        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/tangerine-whistle.md)
INFO [06-09|00:03:19.723]  - Spurious Dragon/1 (EIP 155): 3        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)
INFO [06-09|00:03:19.723]  - Spurious Dragon/2 (EIP 158): 3        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)
INFO [06-09|00:03:19.723]  - Byzantium:                   1035301  (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/byzantium.md)
INFO [06-09|00:03:19.723]  - Constantinople:              3660663  (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/constantinople.md)
INFO [06-09|00:03:19.723]  - Petersburg:                  4321234  (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/petersburg.md)
INFO [06-09|00:03:19.723]  - Istanbul:                    5435345  (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/istanbul.md)
INFO [06-09|00:03:19.723]  - Berlin:                      8290928  (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/berlin.md)
INFO [06-09|00:03:19.723]  - London:                      8897988  (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/london.md)
INFO [06-09|00:03:19.723]
INFO [06-09|00:03:19.723] Merge not configured!
INFO [06-09|00:03:19.723]  - Hard-fork specification: https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md)
INFO [06-09|00:03:19.723] ---------------------------------------------------------------------------------------------------------------------------------------------------------
INFO [06-09|00:03:19.723]
INFO [06-09|00:03:19.727] Added trusted checkpoint                 block=10,715,135 hash=941a41..67ce00
INFO [06-09|00:03:19.728] Loaded most recent local header          number=0 hash=6341fd..67e177 td=1 age=5y2mo3w
INFO [06-09|00:03:19.728] Configured checkpoint oracle             address=0xebe8eFA441B9302A0d7eaECc277c09d20D684540 signers=4 threshold=2
INFO [06-09|00:03:19.728] Gasprice oracle is ignoring threshold set threshold=2
WARN [06-09|00:03:19.729] Error reading unclean shutdown markers   error="leveldb: not found"
INFO [06-09|00:03:19.730] Starting peer-to-peer node               instance=Geth/v1.10.19-unstable-594e3216/linux-amd64/go1.18.3
INFO [06-09|00:03:20.138] New local node record                    seq=1,654,733,000,136 id=abe8cf761f0ac9e7 ip=127.0.0.1 udp=30303 tcp=30303
INFO [06-09|00:03:20.139] Started P2P networking                   self=enode://ee8a1a5370fea4203311c4291e63ae5c6f12e3c0a7262c52f9299eb14a955d4dd1a532a0dbcf59274322347bd4d117b794f85a3990ad
[email protected]:30303
INFO [06-09|00:03:20.172] IPC endpoint opened                      url=/root/.ethereum/rinkeby/geth.ipc
INFO [06-09|00:03:20.172] HTTP server started                      endpoint=[::]:8545 auth=false prefix= cors= vhosts=localhost
INFO [06-09|00:03:20.173] WebSocket enabled                        url=ws://[::]:8546
WARN [06-09|00:03:20.173] Light client mode is an experimental feature
INFO [06-09|00:03:34.479] Looking for peers                        peercount=0 tried=1 static=0
INFO [06-09|00:03:46.153] Looking for peers                        peercount=0 tried=3 static=0
INFO [06-09|00:03:57.223] Looking for peers                        peercount=0 tried=1 static=0
INFO [06-09|00:04:08.153] Looking for peers                        peercount=0 tried=0 static=0
INFO [06-09|00:04:20.439] Looking for peers                        peercount=0 tried=1 static=0
INFO [06-09|00:04:36.227] Looking for peers                        peercount=0 tried=2 static=0
INFO [06-09|00:04:55.440] Looking for peers                        peercount=0 tried=2 static=0
INFO [06-09|00:05:08.599] Looking for peers                        peercount=0 tried=2 static=0
INFO [06-09|00:05:19.257] Looking for peers                        peercount=0 tried=0 static=0
INFO [06-09|00:05:31.290] Looking for peers                        peercount=0 tried=1 static=0
INFO [06-09|00:05:42.276] Looking for peers                        peercount=0 tried=1 static=0
INFO [06-09|00:05:52.574] Looking for peers                        peercount=0 tried=3 static=0
INFO [06-09|00:06:05.534] Looking for peers                        peercount=0 tried=0 static=0
INFO [06-09|00:06:12.079] New local node record                    seq=1,654,733,000,137 id=abe8cf761f0ac9e7 ip=183.254.61.156 udp=1755  tcp=30303
INFO [06-09|00:06:19.275] Looking for peers                        peercount=0 tried=0 static=0
INFO [06-09|00:06:29.634] Looking for peers                        peercount=0 tried=2 static=0

7. 但是发现在light 模式下,我无法查询到自己的account的最新数据。明明账户尾号 e48a 有0.15 ETH, 如下图:

但是在light 模式下, 却查不出来

curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getBalance","params": ["0xc0dD5021e298dB57bEF361C735cd1C04cef2E48A", "latest"],"id":1}' 127.0.0.1:8545
结果:
{"jsonrpc":"2.0","id":1,"result":"0x0"}

重新跑了2次,都是这个问题。查看docker占用空间,不到1MB.

root@DESKTOP-GG23M21:/mnt/d/workspace/docker_folder/geth/.ethereum# du . -kh
8.0K    ./rinkeby/geth/les.client
60K     ./rinkeby/geth/lightchaindata
16K     ./rinkeby/geth/nodes
84K     ./rinkeby/geth
0       ./rinkeby/keystore
84K     ./rinkeby
84K     .

8. 没办法,只好重新运行 goerli 测试网络, --syncmode = snap 完整命令如下:

geth --rinkeby --syncmode snap --http --http.addr 0.0.0.0 --ws --ws.addr 0.0.0.0

完整日志如下:

INFO [06-09|00:14:20.940] Starting Geth on Rinkeby testnet...
INFO [06-09|00:14:20.942] Maximum peer count                       ETH=50 LES=0 total=50
INFO [06-09|00:14:20.942] Smartcard socket not found, disabling    err="stat /run/pcscd/pcscd.comm: no such file or directory"
INFO [06-09|00:14:20.956] Set global gas cap                       cap=50,000,000
WARN [06-09|00:14:20.956]
WARN [06-09|00:14:20.956] --------------------------------------------------------------------------------
WARN [06-09|00:14:20.956] Please note, Rinkeby has been deprecated. It will still work for the time being,
WARN [06-09|00:14:20.956] but there will be no further hard-forks shipped for it. Eventually the network
WARN [06-09|00:14:20.956] will be permanently halted after the other networks transition through the merge
WARN [06-09|00:14:20.956] and prove stable enough. For the most future proof testnet, choose Sepolia as
WARN [06-09|00:14:20.956] your replacement environment (--sepolia instead of --rinkeby).
WARN [06-09|00:14:20.956] --------------------------------------------------------------------------------
WARN [06-09|00:14:20.956]
INFO [06-09|00:14:20.957] Allocated trie memory caches             clean=154.00MiB dirty=256.00MiB
INFO [06-09|00:14:20.957] Allocated cache and file handles         database=/root/.ethereum/rinkeby/geth/chaindata cache=512.00MiB handles=524,288
INFO [06-09|00:14:21.761] Opened ancient database                  database=/root/.ethereum/rinkeby/geth/chaindata/ancient readonly=false
INFO [06-09|00:14:21.762] Writing custom genesis block
INFO [06-09|00:14:21.771] Persisted trie from memory database      nodes=355 size=50.43KiB time=3.685833ms gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [06-09|00:14:21.776]
INFO [06-09|00:14:21.776] ---------------------------------------------------------------------------------------------------------------------------------------------------------
INFO [06-09|00:14:21.776] Chain ID:  4 (rinkeby)
INFO [06-09|00:14:21.776] Consensus: Clique (proof-of-authority)
INFO [06-09|00:14:21.776]
INFO [06-09|00:14:21.776] Pre-Merge hard forks:
INFO [06-09|00:14:21.777]  - Homestead:                   1        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/homestead.md)
INFO [06-09|00:14:21.777]  - Tangerine Whistle (EIP 150): 2        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/tangerine-whistle.md)
INFO [06-09|00:14:21.777]  - Spurious Dragon/1 (EIP 155): 3        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)
INFO [06-09|00:14:21.777]  - Spurious Dragon/2 (EIP 158): 3        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)
INFO [06-09|00:14:21.777]  - Byzantium:                   1035301  (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/byzantium.md)
INFO [06-09|00:14:21.777]  - Constantinople:              3660663  (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/constantinople.md)
INFO [06-09|00:14:21.777]  - Petersburg:                  4321234  (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/petersburg.md)
INFO [06-09|00:14:21.777]  - Istanbul:                    5435345  (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/istanbul.md)
INFO [06-09|00:14:21.777]  - Berlin:                      8290928  (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/berlin.md)
INFO [06-09|00:14:21.777]  - London:                      8897988  (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/london.md)
INFO [06-09|00:14:21.777]
INFO [06-09|00:14:21.777] Merge not configured!
INFO [06-09|00:14:21.777]  - Hard-fork specification: https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md)
INFO [06-09|00:14:21.777] ---------------------------------------------------------------------------------------------------------------------------------------------------------
INFO [06-09|00:14:21.777]
INFO [06-09|00:14:21.817] Initialising Ethereum protocol           network=4 dbversion=
INFO [06-09|00:14:21.818] Loaded most recent local header          number=0 hash=6341fd..67e177 td=1 age=5y2mo3w
INFO [06-09|00:14:21.818] Loaded most recent local full block      number=0 hash=6341fd..67e177 td=1 age=5y2mo3w
INFO [06-09|00:14:21.818] Loaded most recent local fast block      number=0 hash=6341fd..67e177 td=1 age=5y2mo3w
WARN [06-09|00:14:21.819] Failed to load snapshot, regenerating    err="missing or corrupted snapshot"
INFO [06-09|00:14:21.819] Rebuilding state snapshot
INFO [06-09|00:14:21.820] Resuming state snapshot generation       root=535805..8e8c2d accounts=0 slots=0 storage=0.00B dangling=0 elapsed="744.541µs"
INFO [06-09|00:14:21.826] Regenerated local transaction journal    transactions=0 accounts=0
INFO [06-09|00:14:21.826] Gasprice oracle is ignoring threshold set threshold=2
WARN [06-09|00:14:21.827] Error reading unclean shutdown markers   error="leveldb: not found"
INFO [06-09|00:14:21.827] Stored checkpoint snapshot to disk       number=0 hash=6341fd..67e177
INFO [06-09|00:14:21.828] Starting peer-to-peer node               instance=Geth/v1.10.19-unstable-594e3216/linux-amd64/go1.18.3
INFO [06-09|00:14:21.829] Generated state snapshot                 accounts=257 slots=0 storage=9.57KiB dangling=0 elapsed=9.590ms
INFO [06-09|00:14:22.068] New local node record                    seq=1,654,733,000,138 id=abe8cf761f0ac9e7 ip=127.0.0.1 udp=30303 tcp=30303
INFO [06-09|00:14:22.069] Started P2P networking                   self=enode://ee8a1a5370fea4203311c4291e63ae5c6f12e3c0a7262c52f9299eb14a955d4dd1a532a0dbcf59274322347bd4d117b794f85a3990adbe253187f0a46758461b@127.0.0.1:30303
INFO [06-09|00:14:22.073] IPC endpoint opened                      url=/root/.ethereum/rinkeby/geth.ipc
INFO [06-09|00:14:22.073] HTTP server started                      endpoint=[::]:8545 auth=false prefix= cors= vhosts=localhost
INFO [06-09|00:14:22.073] WebSocket enabled                        url=ws://[::]:8546
INFO [06-09|00:14:30.341] New local node record                    seq=1,654,733,000,139 id=abe8cf761f0ac9e7 ip=183.254.61.156 udp=1787  tcp=30303
INFO [06-09|00:14:32.074] Block synchronisation started
INFO [06-09|00:14:32.613] Looking for peers                        peercount=1 tried=19 static=0
WARN [06-09|00:14:40.953] Snapshot extension registration failed   peer=369195b1 err="peer connected on snap without compatible eth support"
INFO [06-09|00:14:40.991] Imported new block headers               count=192 elapsed=35.050ms    number=192 hash=8c570c..ba360c age=5y2mo3w
INFO [06-09|00:14:40.992] Downloader queue stats                   receiptTasks=0 blockTasks=137 itemSize=647.72B throttle=8192
INFO [06-09|00:14:40.995] Wrote genesis to ancients
INFO [06-09|00:14:41.487] Imported new block receipts              count=54  elapsed=494.523ms   number=54  hash=dafe6e..02bf13 age=5y2mo3w size=18.23KiB
INFO [06-09|00:14:41.721] Imported new block headers               count=192 elapsed=33.581ms    number=384 hash=6d95fa..a59e49 age=5y2mo3w
INFO [06-09|00:14:42.196] Imported new block receipts              count=138 elapsed=506.030ms   number=192 hash=8c570c..ba360c age=5y2mo3w size=46.20KiB
INFO [06-09|00:14:42.462] Imported new block headers               count=192 elapsed=34.046ms    number=576 hash=8cb307..7e165a age=5y2mo3w
INFO [06-09|00:14:42.654] Imported new block receipts              count=192 elapsed=454.694ms   number=384 hash=6d95fa..a59e49 age=5y2mo3w size=64.39KiB
INFO [06-09|00:14:42.700] Imported new block headers               count=192 elapsed=34.744ms    number=768 hash=d2f106..d25b87 age=5y2mo3w
INFO [06-09|00:14:43.063] Imported new block receipts              count=192 elapsed=407.514ms   number=576 hash=8cb307..7e165a age=5y2mo3w size=64.51KiB
INFO [06-09|00:14:43.121] Looking for peers                        peercount=1 tried=24 static=0
INFO [06-09|00:14:43.395] Imported new block headers               count=192 elapsed=37.311ms    number=960 hash=413833..8d126d age=5y2mo3w
INFO [06-09|00:14:43.555] Imported new block receipts              count=192 elapsed=490.070ms   number=768 hash=d2f106..d25b87 age=5y2mo3w size=64.51KiB
INFO [06-09|00:14:44.141] Imported new block headers               count=192 elapsed=37.034ms    number=1152 hash=9d3964..5b5a49 age=5y2mo3w
INFO [06-09|00:14:44.180] Imported new block receipts              count=192 elapsed=624.012ms   number=960  hash=413833..8d126d age=5y2mo3w size=64.51KiB
INFO [06-09|00:14:44.690] Imported new block receipts              count=192 elapsed=508.951ms   number=1152 hash=9d3964..5b5a49 age=5y2mo3w size=64.51KiB
INFO [06-09|00:14:44.886] Imported new block headers               count=192 elapsed=34.001ms    number=1344 hash=4524ae..5d3fff age=5y2mo3w
INFO [06-09|00:14:45.356] Imported new block receipts              count=192 elapsed=467.824ms   number=1344 hash=4524ae..5d3fff age=5y2mo3w size=64.51KiB
INFO [06-09|00:14:45.495] Imported new block headers               count=192 elapsed=35.502ms    number=1536 hash=ebcd68..10b559 age=5y2mo3w
INFO [06-09|00:14:45.737] Imported new block headers               count=192 elapsed=39.107ms    number=1728 hash=7eff72..2707a2 age=5y2mo3w
INFO [06-09|00:14:45.976] Imported new block headers               count=192 elapsed=39.811ms    number=1920 hash=d7b761..1129c2 age=5y2mo3w
INFO [06-09|00:14:46.090] Imported new block receipts              count=192 elapsed=592.190ms   number=1536 hash=ebcd68..10b559 age=5y2mo3w size=64.51KiB
INFO [06-09|00:14:46.212] Imported new block headers               count=192 elapsed=36.701ms    number=2112 hash=cc3a9a..11d37c age=5y2mo3w
INFO [06-09|00:14:46.453] Imported new block headers               count=192 elapsed=38.992ms    number=2304 hash=59a265..e4db8b age=5y2mo3w
INFO [06-09|00:14:46.610] Imported new block receipts              count=384 elapsed=519.010ms   number=1920 hash=d7b761..1129c2 age=5y2mo3w size=129.00KiB
INFO [06-09|00:14:46.689] Imported new block headers               count=192 elapsed=37.230ms    number=2496 hash=dd9acd..90331d age=5y2mo3w
INFO [06-09|00:14:46.927] Imported new block headers               count=192 elapsed=36.077ms    number=2688 hash=d6eab2..23c318 age=5y2mo3w

9. 再次测试一下:

# 在刚刚运行节点的时候,会发现无法查询
$ curl -X POST -H "Content-Type: application/json"  --data '{"jsonrpc":"2.0","method":"eth_getBalance","params": ["0xc0dd5021e298db57bef361c735cd1c04cef2e48a", "late
st"],"id":1}' localhost:8545
{"jsonrpc":"2.0","id":1,"error":{"code":-32000,"message":"getDeleteStateObject (c0dd5021e298db57bef361c735cd1c04cef2e48a) error: no suitable peers available"}}

# 在运行一段时间后(例如几分钟),就可以查询了
$ curl -X POST -H "Content-Type: application/json"  --data '{"jsonrpc":"2.0","method":"eth_getBalance","params": ["0xc0dd5021e298db57bef361c735cd1c04cef2e48a", "latest"],"id":1}' localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0x37aaa8adc98407f4"}

Back