Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
14 changes: 14 additions & 0 deletions .github/workflows/ci-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ on:
- kii-docker
- tac-docker
- xrplevm-docker
- injective-docker
tests:
description: 'Run tests'
required: false
Expand Down Expand Up @@ -108,6 +109,10 @@ jobs:
elif [ "${CHAIN_ENV}" = "xrplevm-docker" ]; then
echo "Cloning xrplevm node repository..."
git clone --depth 1 https://github.com/xrplevm/node.git node
elif [ "${CHAIN_ENV}" = "injective-docker" ]; then
echo "Pulling Injective Docker image..."
DOCKER_DEFAULT_PLATFORM=linux/amd64 docker pull injectivelabs/injective-core:v1.18.2
echo "injectivelabs/injective-core:v1.18.2 pulled successfully"
fi

- name: Initialize multinode localnet
Expand Down Expand Up @@ -136,6 +141,9 @@ jobs:
elif [ "${CHAIN_ENV}" = "xrplevm-docker" ]; then
chmod +x init-multinode.sh
./init-multinode.sh
elif [ "${CHAIN_ENV}" = "injective-docker" ]; then
chmod +x init-multinode.sh
./init-multinode.sh
fi

- name: Start localnet
Expand Down Expand Up @@ -315,6 +323,12 @@ jobs:
elif [ "${CHAIN_ENV}" = "xrplevm-docker" ]; then
echo "=== xrplevm node0 logs (last 100 lines) ==="
docker compose logs xrplevm-node-0 --tail=100 2>/dev/null || true
elif [ "${CHAIN_ENV}" = "injective-docker" ]; then
echo "=== Injective validator1 logs (last 100 lines) ==="
docker compose --env-file .env.multinode -f docker-compose.yml logs inj-validator1 --tail=100 2>/dev/null || true
echo ""
echo "=== Injective validator2 logs (last 100 lines) ==="
docker compose --env-file .env.multinode -f docker-compose.yml logs inj-validator2 --tail=100 2>/dev/null || true
fi

- name: Stop localnet
Expand Down
11 changes: 11 additions & 0 deletions chains/injective-docker/.env.multinode
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Injective Multi-Validator Localnet Environment Variables
# Copy to .env.multinode and adjust as needed

# Injective Docker image tag
INJ_TAG=v1.18.2

# CometBFT persistent peers (auto-populated by init-multinode.sh)
PERSISTENT_PEERS=0917531b91dd4d83a762cac53168c8d65d1fc643@inj-validator1:26656,e6b599659da62c886c05f5b597d47282fef2a905@inj-validator2:26656,11537ade697cbe519f8f0e447948aba136b00950@inj-validator3:26656,a0bade4562b667c012efaa93b9d4e6dcdf4c549d@inj-validator4:26656

# Logging
LOG_LEVEL=info
11 changes: 11 additions & 0 deletions chains/injective-docker/.env.multinode.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Injective Multi-Validator Localnet Environment Variables
# Copy to .env.multinode and adjust as needed

# Injective Docker image tag
INJ_TAG=v1.18.2

# CometBFT persistent peers (auto-populated by init-multinode.sh)
PERSISTENT_PEERS=""

# Logging
LOG_LEVEL=info
165 changes: 165 additions & 0 deletions chains/injective-docker/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
# docker-compose.yml
# Injective 4-Validator Localnet for ChainSmith Testing
#
# Architecture: Each validator = 1 injectived container (CometBFT consensus + EVM in same process)
# Injective EVM RPC uses [evm-rpc] section (not [json-rpc]) — port 1317 by default.
# Cosmos REST API is moved to port 10337 to avoid conflict.
#
# Usage:
# 1. Init: ./init-multinode.sh
# 2. Start: ./start-multinode.sh (or: docker compose --env-file .env.multinode -f docker-compose.yml up -d)
# 3. Check: docker compose --env-file .env.multinode -f docker-compose.yml ps
# 4. Logs: docker compose --env-file .env.multinode -f docker-compose.yml logs -f inj-validator1
# 5. Stop: ./stop-multinode.sh

services:
# ============ Validator 1 ============
inj-validator1:
image: injectivelabs/injective-core:${INJ_TAG:-v1.18.2}
container_name: inj-validator1
restart: unless-stopped
networks:
inj-multi:
env_file:
- .env.multinode
logging:
options:
max-size: '12m'
max-file: '5'
entrypoint: ['injectived']
command: >
start
--home /root/.injectived
--p2p.laddr "tcp://0.0.0.0:26656"
--p2p.persistent_peers "${PERSISTENT_PEERS}"
--rpc.laddr "tcp://0.0.0.0:26657"
--minimum-gas-prices "160000000inj"
--pruning nothing
--log-level ${LOG_LEVEL:-info}
volumes:
- type: volume
source: inj_validator1_home
target: /root/.injectived
ports:
- '26657:26657' # CometBFT RPC
- '8545:8545' # EVM JSON-RPC ([json-rpc] section)
- '8546:8546' # EVM WebSocket
- '1317:1317' # Cosmos REST API
- '9900:9900' # gRPC
- '26656:26656' # P2P

# ============ Validator 2 ============
inj-validator2:
image: injectivelabs/injective-core:${INJ_TAG:-v1.18.2}
container_name: inj-validator2
restart: unless-stopped
networks:
inj-multi:
env_file:
- .env.multinode
logging:
options:
max-size: '12m'
max-file: '5'
entrypoint: ['injectived']
command: >
start
--home /root/.injectived
--p2p.laddr "tcp://0.0.0.0:26656"
--p2p.persistent_peers "${PERSISTENT_PEERS}"
--rpc.laddr "tcp://0.0.0.0:26657"
--minimum-gas-prices "160000000inj"
--pruning nothing
--log-level ${LOG_LEVEL:-info}
volumes:
- type: volume
source: inj_validator2_home
target: /root/.injectived
ports:
- '36657:26657'
- '28545:8545'
- '21317:1317'
- '36656:26656'

# ============ Validator 3 ============
inj-validator3:
image: injectivelabs/injective-core:${INJ_TAG:-v1.18.2}
container_name: inj-validator3
restart: unless-stopped
networks:
inj-multi:
env_file:
- .env.multinode
logging:
options:
max-size: '12m'
max-file: '5'
entrypoint: ['injectived']
command: >
start
--home /root/.injectived
--p2p.laddr "tcp://0.0.0.0:26656"
--p2p.persistent_peers "${PERSISTENT_PEERS}"
--rpc.laddr "tcp://0.0.0.0:26657"
--minimum-gas-prices "160000000inj"
--pruning nothing
--log-level ${LOG_LEVEL:-info}
volumes:
- type: volume
source: inj_validator3_home
target: /root/.injectived
ports:
- '46657:26657'
- '38545:8545'
- '31317:1317'
- '46656:26656'

# ============ Validator 4 ============
inj-validator4:
image: injectivelabs/injective-core:${INJ_TAG:-v1.18.2}
container_name: inj-validator4
restart: unless-stopped
networks:
inj-multi:
env_file:
- .env.multinode
logging:
options:
max-size: '12m'
max-file: '5'
entrypoint: ['injectived']
command: >
start
--home /root/.injectived
--p2p.laddr "tcp://0.0.0.0:26656"
--p2p.persistent_peers "${PERSISTENT_PEERS}"
--rpc.laddr "tcp://0.0.0.0:26657"
--minimum-gas-prices "160000000inj"
--pruning nothing
--log-level ${LOG_LEVEL:-info}
volumes:
- type: volume
source: inj_validator4_home
target: /root/.injectived
ports:
- '56657:26657'
- '48545:8545'
- '41317:1317'
- '56656:26656'

volumes:
inj_validator1_home:
external: true
name: inj_validator1_home
inj_validator2_home:
external: true
name: inj_validator2_home
inj_validator3_home:
external: true
name: inj_validator3_home
inj_validator4_home:
external: true
name: inj_validator4_home

networks:
inj-multi:
Loading
Loading