Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
213 changes: 213 additions & 0 deletions docker-compose.apphash-crash.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
version: "3"

services:
# --------------------------------------------------------------------------
# Setup Service (Initialize Data)
# --------------------------------------------------------------------------
setup:
build:
context: ../../../evm
dockerfile: contrib/images/evmd-env/Dockerfile
user: root
entrypoint: []
command: |
sh -c "
# Initialize 4 nodes normally
evmd testnet init-files --validator-count 4 --output-dir /data --chain-id crash-test --keyring-backend test

echo 'Enabling MemLogger...'
find /data -name app.toml -exec sed -i 's/enabled = false/enabled = true/g' {} +

# Configure first 3 nodes normally
for i in 0 1 2; do
sed -i 's/127.0.0.1/0.0.0.0/g' /data/node$$i/evmd/config/config.toml
done

echo 'Enabling MemLogger...'
find /data -name app.toml -exec sed -i 's/enabled = false/enabled = true/g' {} +

# Node 3: Intentionally corrupt genesis to cause apphash mismatch
echo 'Corrupting node3 genesis to trigger apphash crash...'
# Change initial_height to cause state mismatch (match numeric value)
sed -i 's/\"initial_height\": 1,/\"initial_height\": 999,/' /data/node3/evmd/config/genesis.json
echo 'Changed initial_height from 1 to 999'

chown -R 1025:1025 /data
"
volumes:
- ./crash-test-data:/data:Z

# --------------------------------------------------------------------------
# EVM Node 0 & Shipper 0
# --------------------------------------------------------------------------
evmdnode0:
container_name: evmdnode0
build:
context: ../evm
dockerfile: contrib/images/evmd-env/Dockerfile
environment:
- DEBUG=0
- ID=0
- LOG=${LOG:-evmd.log}
depends_on:
setup:
condition: service_completed_successfully
command: start --chain-id crash-test --minimum-gas-prices 0atest --json-rpc.enable true --json-rpc.api eth,txpool,personal,net,debug,web3
ports:
- "26656-26657:26656-26657"
- "1317:1317"
- "8545:8545"
volumes:
- ./crash-test-data:/data:Z
networks:
- localnet

walship0:
container_name: walship0
restart: always
build:
context: ../cosmos-analyzer-shipper
dockerfile: Dockerfile
depends_on:
- evmdnode0
volumes:
# Mount the same data directory to access node config and WAL
- ./crash-test-data:/data:ro
environment:
# Point to the specific node's root directory inside the volume
- WALSHIP_ROOT=/data/node0/evmd
# Remote analytics backend URL
- WALSHIP_REMOTE_URL=${WALSHIP_REMOTE_URL:-http://host.docker.internal:8080/v1/ingest/wal-frames}
- WALSHIP_AUTH_KEY=${WALSHIP_AUTH_KEY:-dev-local-test-1234}
networks:
- localnet

# --------------------------------------------------------------------------
# EVM Node 1 & Shipper 1
# --------------------------------------------------------------------------
evmdnode1:
container_name: evmdnode1
build:
context: ../evm
dockerfile: contrib/images/evmd-env/Dockerfile
environment:
- DEBUG=0
- ID=1
- LOG=${LOG:-evmd.log}
depends_on:
setup:
condition: service_completed_successfully
command: start --chain-id crash-test --minimum-gas-prices 0atest --json-rpc.enable true --json-rpc.api eth,txpool,personal,net,debug,web3
ports:
- "26666-26667:26656-26657"
- "1318:1317"
- "8555:8545"
volumes:
- ./crash-test-data:/data:Z
networks:
- localnet

walship1:
container_name: walship1
restart: always
build:
context: ../cosmos-analyzer-shipper
dockerfile: Dockerfile
depends_on:
- evmdnode1
volumes:
- ./crash-test-data:/data:ro
environment:
- WALSHIP_ROOT=/data/node1/evmd
- WALSHIP_REMOTE_URL=${WALSHIP_REMOTE_URL:-http://host.docker.internal:8080/v1/ingest/wal-frames}
- WALSHIP_AUTH_KEY=${WALSHIP_AUTH_KEY:-dev-local-test-1234}
networks:
- localnet

# --------------------------------------------------------------------------
# EVM Node 2 & Shipper 2
# --------------------------------------------------------------------------
evmdnode2:
container_name: evmdnode2
build:
context: ../evm
dockerfile: contrib/images/evmd-env/Dockerfile
environment:
- DEBUG=0
- ID=2
- LOG=${LOG:-evmd.log}
depends_on:
setup:
condition: service_completed_successfully
command: start --chain-id crash-test --minimum-gas-prices 0atest --json-rpc.enable true --json-rpc.api eth,txpool,personal,net,debug,web3
ports:
- "26676-26677:26656-26657"
- "1319:1317"
- "8565:8545"
volumes:
- ./crash-test-data:/data:Z
networks:
- localnet

walship2:
container_name: walship2
restart: always
build:
context: ../cosmos-analyzer-shipper
dockerfile: Dockerfile
depends_on:
- evmdnode2
volumes:
- ./crash-test-data:/data:ro
environment:
- WALSHIP_ROOT=/data/node2/evmd
- WALSHIP_REMOTE_URL=${WALSHIP_REMOTE_URL:-http://host.docker.internal:8080/v1/ingest/wal-frames}
- WALSHIP_AUTH_KEY=${WALSHIP_AUTH_KEY:-dev-local-test-1234}
networks:
- localnet

# --------------------------------------------------------------------------
# EVM Node 3 & Shipper 3
# --------------------------------------------------------------------------
evmdnode3:
container_name: evmdnode3
build:
context: ../evm
dockerfile: contrib/images/evmd-env/Dockerfile
environment:
- DEBUG=0
- ID=3
- LOG=${LOG:-evmd.log}
depends_on:
setup:
condition: service_completed_successfully
command: start --chain-id crash-test --minimum-gas-prices 0atest --json-rpc.enable true --json-rpc.api eth,txpool,personal,net,debug,web3
ports:
- "26686-26687:26656-26657"
- "1320:1317"
- "8575:8545"
volumes:
- ./crash-test-data:/data:Z
networks:
- localnet

walship3:
container_name: walship3
restart: always
build:
context: ../cosmos-analyzer-shipper
dockerfile: Dockerfile
depends_on:
- evmdnode3
volumes:
- ./crash-test-data:/data:ro
environment:
- WALSHIP_ROOT=/data/node3/evmd
- WALSHIP_REMOTE_URL=${WALSHIP_REMOTE_URL:-http://host.docker.internal:8080/v1/ingest/wal-frames}
- WALSHIP_AUTH_KEY=${WALSHIP_AUTH_KEY:-dev-local-test-1234}
networks:
- localnet

networks:
localnet:
driver: bridge
Loading