Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
65bdfc4
Very basic docker setup for e2e
AryaLanjewar3005 Aug 16, 2025
7dce8bb
feat: Makefile updated for e2e
AryaLanjewar3005 Aug 16, 2025
94aee61
working setup
AryaLanjewar3005 Aug 18, 2025
348d4f2
Minor fix for e2e env makefile
AryaLanjewar3005 Aug 19, 2025
e023340
working e2e setup with anvil
AryaLanjewar3005 Aug 21, 2025
a8761d0
E2E test make-workflow added
AryaLanjewar3005 Aug 29, 2025
6700662
E2E-ready-commit
AryaLanjewar3005 Aug 29, 2025
29c1aea
CI fixes: clean env for e2e
AryaLanjewar3005 Aug 29, 2025
507f23c
temp ci changes
AryaLanjewar3005 Aug 29, 2025
698a73b
Minor fixes
AryaLanjewar3005 Sep 8, 2025
8c0819d
github workflow testing for e2e
AryaLanjewar3005 Sep 10, 2025
459c290
Solana path fix
AryaLanjewar3005 Sep 10, 2025
3b35c8c
minor issues
AryaLanjewar3005 Sep 10, 2025
e456b3e
fixed solana installation
AryaLanjewar3005 Sep 10, 2025
0999229
added official solana action
AryaLanjewar3005 Sep 10, 2025
387d3c1
CI modified
AryaLanjewar3005 Sep 10, 2025
b5861b5
test1
AryaLanjewar3005 Sep 10, 2025
5cf7ff1
test2
AryaLanjewar3005 Sep 10, 2025
ec34817
changed localhost for anvil and push-chain-node
AryaLanjewar3005 Sep 10, 2025
ed7937d
fixed wait for service error
AryaLanjewar3005 Sep 10, 2025
e533fc4
fund push account command fix for e2e
AryaLanjewar3005 Sep 10, 2025
2fb3573
test3
AryaLanjewar3005 Sep 10, 2025
9340447
fixed lib issue
AryaLanjewar3005 Sep 10, 2025
cfa7946
fixed push-chain-node link
AryaLanjewar3005 Sep 10, 2025
e5da173
test4
AryaLanjewar3005 Sep 10, 2025
be76b45
test6
AryaLanjewar3005 Sep 10, 2025
bc3a59f
test7
AryaLanjewar3005 Sep 10, 2025
89b8d77
anvil added to github ci
AryaLanjewar3005 Sep 10, 2025
3c97798
test8
AryaLanjewar3005 Sep 10, 2025
d460a38
test9
AryaLanjewar3005 Sep 10, 2025
a1524b2
test10
AryaLanjewar3005 Sep 10, 2025
193ca5f
test11
AryaLanjewar3005 Sep 10, 2025
d3bea99
test12
AryaLanjewar3005 Sep 10, 2025
6e2225d
anchor added to ci
AryaLanjewar3005 Sep 10, 2025
4763bb1
anchor added to ci 2
AryaLanjewar3005 Sep 10, 2025
acd3e50
test12
AryaLanjewar3005 Sep 10, 2025
4e776eb
test13
AryaLanjewar3005 Sep 10, 2025
36cc877
test14
AryaLanjewar3005 Sep 10, 2025
4196385
test15
AryaLanjewar3005 Sep 10, 2025
02056bf
test16
AryaLanjewar3005 Sep 10, 2025
52972cf
solana docker internal link fix
AryaLanjewar3005 Sep 11, 2025
31edfa6
changed SOLANA_RPC_URL in env sample to suite github flow
AryaLanjewar3005 Sep 11, 2025
4499cc4
alternate push-chain-sdk branch for github workflow
AryaLanjewar3005 Sep 11, 2025
212310f
test17
AryaLanjewar3005 Sep 11, 2025
0236144
added extra host in docker-compose.yml
AryaLanjewar3005 Sep 11, 2025
4211fa3
test18
AryaLanjewar3005 Sep 12, 2025
7a59599
Finalized E2E
AryaLanjewar3005 Sep 12, 2025
0bfda72
Minor fix
AryaLanjewar3005 Sep 12, 2025
bad15b3
Changed sdk link to pushchain repo
AryaLanjewar3005 Sep 12, 2025
ca42408
new script for push-chain-node start for docker
AryaLanjewar3005 Sep 12, 2025
4e8e96f
script added for e2e
AryaLanjewar3005 Sep 12, 2025
047f4be
github action condition changed
AryaLanjewar3005 Sep 12, 2025
cb3e8a5
Merge branch 'main' into e2e-test
AryaLanjewar3005 Sep 24, 2025
cb31ebc
Merge remote-tracking branch 'origin' into e2e-test
AryaLanjewar3005 Sep 30, 2025
ded3581
update e2e setup to accomodate current changes of push-chain
AryaLanjewar3005 Sep 30, 2025
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
1 change: 1 addition & 0 deletions .github/Solana-key.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[156,214,52,226,101,141,187,127,80,230,163,132,41,11,225,162,81,118,242,213,213,115,202,74,97,141,5,10,174,133,85,224,183,10,143,212,142,103,199,43,238,47,236,199,89,218,36,117,140,129,195,8,60,178,93,132,86,200,130,56,251,157,235,138]
58 changes: 58 additions & 0 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: E2E Test Workflow

on:
push:

workflow_dispatch:

jobs:
e2e-test:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1

- name: Install Solana CLI
run: |
sh -c "$(curl -sSfL https://release.anza.xyz/stable/install)"

- name: Ensure PATH includes Solana
run: echo "$HOME/.local/share/solana/install/active_release/bin" >> $GITHUB_PATH

- name: Check solana version
run: solana --version

- name: Start Solana Test Validator
run: |
solana-test-validator --reset --rpc-port 8899 --limit-ledger-size 50000000 --url https://api.devnet.solana.com \
--clone ETGtqwDKEm1Z9gq6FdvYUfyDuUZr7g4UdPSmyNLVGriX \
--clone 7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE &

- name: Install Anchor CLI
run: cargo install --git https://github.com/coral-xyz/anchor avm --locked --force
- name: Add Anchor to PATH
run: echo "$HOME/.cargo/bin" >> $GITHUB_PATH
- name: Install Anchor CLI
run: avm install latest

- name: Use Anchor CLI
run: avm use latest


- name: Wait for validator to start
run: sleep 10

- name: Set Solana Keypair
run: cp $(pwd)/.github/Solana-key.json /home/runner/.config/solana/id.json

- name: Run E2E Tests
run: make e2e
env:
PATH: $HOME/.local/share/solana/install/active_release/bin:/usr/local/bin:/usr/bin:/bin

- name: Stop Solana Test Validator
run: pkill solana-test-validator || true
1 change: 1 addition & 0 deletions .github/workflows/id.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[156,214,52,226,101,141,187,127,80,230,163,132,41,11,225,162,81,118,242,213,213,115,202,74,97,141,5,10,174,133,85,224,183,10,143,212,142,103,199,43,238,47,236,199,89,218,36,117,140,129,195,8,60,178,93,132,86,200,130,56,251,157,235,138]
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ configs/logs.json
dist/
build/
testnet/*/binary
contracts-tmp/
*node_modules
push-chain-interop-contracts/



# Create cosmos app
web/
Expand Down
27 changes: 27 additions & 0 deletions Dockerfile.e2e
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
FROM golang:1.23 AS build
WORKDIR /app

COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN make install # regular build (dynamic link)

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y bash curl jq git make && rm -rf /var/lib/apt/lists/*

# Install wasmvm v1.5.4 shared library
RUN curl -L https://github.com/CosmWasm/wasmvm/releases/download/v1.5.4/libwasmvm.aarch64.so \
-o /usr/lib/libwasmvm.aarch64.so && chmod 755 /usr/lib/libwasmvm.aarch64.so

RUN curl -L https://github.com/CosmWasm/wasmvm/releases/download/v1.5.4/libwasmvm.x86_64.so \
-o /usr/lib/libwasmvm.x86_64.so && chmod 755 /usr/lib/libwasmvm.x86_64.so

COPY --from=build /go/bin/pchaind /usr/local/bin/pchaind
COPY scripts /app/scripts
WORKDIR /app

ENV CHAIN_ID=localchain_9000-1 \
BLOCK_TIME=1000ms \
CLEAN=true

CMD ["bash", "scripts/test_node_e2e.sh"]
123 changes: 123 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -370,3 +370,126 @@ help:
@echo " generate-webapp : Create a new webapp template"

.PHONY: help

###############################################################################
### e2e... ###
###############################################################################

# ------------------------
# Docker commands (from before)
# ------------------------
docker-build:
docker build -t push-chain-node -f Dockerfile.e2e .

docker-up:
docker compose -f docker-compose.yml up --build -d

docker-down:
docker compose -f docker-compose.yml down

docker-logs:
docker compose -f docker-compose.yml logs -f

docker-reset:
docker system prune -a --volumes -f


# ------------------------
# Docker Setup flow
# ------------------------

ANVIL_URL=http://anvil:9545
PUSH_EVM_URL=http://push-chain-node:8545
CHAIN_RPC=http://push-chain-node:26657
CHAIN_ID=localchain_9000-1

# Path where contracts will be cloned
CONTRACTS_DIR := contracts-tmp
INTEROP_REPO := https://github.com/pushchain/push-chain-interop-contracts.git/
CORE_REPO := https://github.com/pushchain/push-chain-core-contracts.git
SDK_REPO := https://github.com/pushchain/push-chain-sdk.git
E2E_DIR := e2e

e2e: docker-up wait-for-services fund-acc1 deploy-interop deploy-core e2e-solana-interop-deployment e2e-solana-chain-config e2e-run-test

# Wait for services to start up
wait-for-services:
@echo "Waiting for Anvil and Push-Chain-Node to start..."
@for i in {1..30}; do \
if docker exec push-chain-node curl -s --fail http://push-chain-node:26657/status; then \
echo "Push-Chain Node is ready"; \
break; \
fi; \
echo "Waiting for Push-Chain Node..."; \
sleep 2; \
done
docker logs push-chain-node

# Fund acc1 on push-chain
fund-acc1:
@echo "waiting for Push-chain-node to setup"
sleep 10
@echo "Funding acc1 on push-chain..."
docker exec push-chain-node pchaind tx bank send push1j0v5urpud7kwsk9zgz2tc0v9d95ct6t5qxv38h \
push1w7xnyp3hf79vyetj3cvw8l32u6unun8yr6zn60 \
1000000000000000000upc \
--gas-prices 100000000000upc \
--node http://push-chain-node:26657 \
-y


# Deploy the interop contract and capture address
deploy-interop:
echo "Adding Sepolia config to push-chain" && \
docker exec push-chain-node pchaind tx uregistry add-chain-config \
--chain-config "$$(cat e2e/eth_sepolia_e2e_chain_config.json)" \
--from acc1 \
--gas-prices 100000000000upc -y

# Deploy push-core-contracts using forge script
deploy-core:
@echo "Deploying Push Core Contracts..."
@rm -rf $(CONTRACTS_DIR) && mkdir $(CONTRACTS_DIR)
cd $(CONTRACTS_DIR) && git clone $(CORE_REPO)
cd $(CONTRACTS_DIR)/push-chain-core-contracts && git submodule update --init --recursive
cd $(CONTRACTS_DIR)/push-chain-core-contracts && forge install && forge build
cd $(CONTRACTS_DIR)/push-chain-core-contracts && forge script scripts/deployFactory.s.sol \
--broadcast \
--rpc-url http://localhost:8545 \
--private-key 0x0dfb3d814afd8d0bf7a6010e8dd2b6ac835cabe4da9e2c1e80c6a14df3994dd4 \
--slow

cd $(CONTRACTS_DIR)/push-chain-core-contracts && forge script scripts/deployMock.s.sol --broadcast --rpc-url http://localhost:8545 --private-key 0x0dfb3d814afd8d0bf7a6010e8dd2b6ac835cabe4da9e2c1e80c6a14df3994dd4 --slow

e2e-solana-chain-config:
echo "Adding Solana config to push-chain"
docker exec push-chain-node pchaind tx uregistry add-chain-config --chain-config "$$(cat e2e/solana_localchain_chain_config.json)" --from acc1 --gas-prices 100000000000upc -y

e2e-solana-interop-deployment:
@echo "Funding local solana account"
solana airdrop 10 DKWx5ZiKpmdzu7s11JR93cw69PEJZkHAZpg6BNoHjVmK --url http://127.0.0.1:8899
@echo "Setting Solana CLI to local validator..."
cd $(E2E_DIR) && rm -rf push-chain-interop-contracts
solana config set --url http://127.0.0.1:8899
@echo "Deploying svm_gateway contract on solana-test-validator"
cp $(E2E_DIR)/.env.sample $(E2E_DIR)/.env
cd $(E2E_DIR) && git clone $(INTEROP_REPO)
cp $(E2E_DIR)/deploy.sh $(E2E_DIR)/push-chain-interop-contracts/contracts/svm-gateway/deploy.sh
cd $(E2E_DIR)/push-chain-interop-contracts/contracts/svm-gateway && ./deploy.sh localnet

@echo "Initializing account and funding vault..."
cd $(E2E_DIR)/solana-setup && npm install

@cd $(E2E_DIR)/solana-setup && VAULT=$$(npx ts-node --compiler-options '{"module":"commonjs"}' ./index.ts | grep 'vaultbalance' | awk '{print $$2}'); \
echo "Vault PDA is $$VAULT"; \
solana airdrop 10 $$VAULT --url http://127.0.0.1:8899


e2e-run-test:
@echo "Cloning e2e repository..."
@rm -rf $(CONTRACTS_DIR)/push-chain-sdk
cd $(CONTRACTS_DIR) && git clone $(SDK_REPO)
cd $(CONTRACTS_DIR)/push-chain-sdk && git checkout push-node-e2e-test && yarn install
cp $(E2E_DIR)/push-chain-interop-contracts/contracts/svm-gateway/target/idl/pushsolanalocker.json $(CONTRACTS_DIR)/push-chain-sdk/packages/core/src/lib/constants/abi/feeLocker.json
cp $(E2E_DIR)/.env $(CONTRACTS_DIR)/push-chain-sdk/packages/core/.env
cd $(CONTRACTS_DIR)/push-chain-sdk && npx jest core/__e2e__/pushchain.spec.ts --runInBand --detectOpenHandles
38 changes: 38 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
version: '3.8'

services:
anvil:
image: ghcr.io/foundry-rs/foundry:v1.2.3
ports:
- "9545:9545"
networks:
- pushnet
entrypoint: ["anvil"]
command: ["--host", "0.0.0.0", "--port", "9545", "--chain-id", "11155111", "--fork-url", "https://ethereum-sepolia-rpc.publicnode.com", "--block-time", "1"]

push-chain-node:
build:
context: .
dockerfile: Dockerfile.e2e
container_name: push-chain-node
environment:
- CHAIN_ID=localchain_9000-1
- BLOCK_TIME=1000ms
- CLEAN=true
command: bash scripts/test_node_e2e.sh
extra_hosts:
- "host.docker.internal:host-gateway"
ports:
- "26657:26657" # Tendermint RPC
- "1317:1317" # Cosmos REST API
- "8545:8545" # Cosmos REST API
networks:
- pushnet
depends_on:
- anvil
volumes:
- ./scripts:/app/scripts

networks:
pushnet:
driver: bridge
47 changes: 47 additions & 0 deletions e2e/.env.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# ENV files is required to run test cases







## EVM and Solana- Make sure this pk has funds on the selected network - otherwise some tests would be skipped





EVM_PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80





EVM_RPC=http://localhost:9545





SOLANA_RPC_URL=http://10.1.0.1:8899





SOLANA_PRIVATE_KEY=48sPd9RUgvzbv3poq9jhbh4afHcHK7SxTuAUdjTeeM28TFc1SCpgtDCf3ofx6virpG5XNCrZsMnzKaZiHiK2HTuB





PUSH_PRIVATE_KEY=0x0dfb3d814afd8d0bf7a6010e8dd2b6ac835cabe4da9e2c1e80c6a14df3994dd4



SOLANA_PRIVATE_KEY_HEX=9cd634e2658dbb7f50e6a384290be1a25176f2d5d573ca4a618d050aae8555e0b70a8fd48e67c72bee2fecc759da24758c81c3083cb25d8456c88238fb9deb8a




47 changes: 47 additions & 0 deletions e2e/deploy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#!/bin/bash

set -e

# Usage: ./deploy.sh devnet
CLUSTER="$1"

if [[ -z "$CLUSTER" ]]; then
echo "❌ Please specify the cluster to deploy to (e.g., devnet, testnet, localnet, mainnet-beta)"
exit 1
fi

# Optional: Custom keypair path (change this if needed)
KEYPAIR_PATH="$HOME/.config/solana/id.json"

echo "🔐 Using keypair: $KEYPAIR_PATH"

echo "📦 Building program..."
anchor build

echo "🚀 Deploying to $CLUSTER..."
solana config set --keypair "$KEYPAIR_PATH" --url "http://localhost:8899"

# Capture the output of anchor deploy
DEPLOY_OUTPUT=$(anchor deploy --provider.cluster "$CLUSTER" --provider.wallet "$KEYPAIR_PATH")

# Extract the program ID from the output
PROGRAM_ID=$(echo "$DEPLOY_OUTPUT" | grep "Program Id" | awk '{print $3}')

if [[ -z "$PROGRAM_ID" ]]; then
echo "❌ Failed to extract Program ID from deploy output!"
exit 1
fi

echo "🆔 Program ID: $PROGRAM_ID"

# Append program ID to .env files
echo "SOLANA_PROGRAM_ID=$PROGRAM_ID" >> ../../../.env
echo "SOLANA_PROGRAM_ID=$PROGRAM_ID" >> ../../../solana-setup/.env

cp target/idl/pushsolanalocker.json ../../../solana-setup/pushsolanalocker.json
cp target/types/pushsolanalocker.ts ../../../solana-setup/type_pushsolanalocker.ts

jq --arg addr "$PROGRAM_ID" '.gateway_address = $addr' ../../../solana_localchain_chain_config.json > tmp.json && mv tmp.json ../../../solana_localchain_chain_config.json


echo "✅ Successfully deployed to $CLUSTER"
28 changes: 28 additions & 0 deletions e2e/eth_sepolia_e2e_chain_config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"chain": "eip155:11155111",
"public_rpc_url": "http://anvil:9545",
"vm_type": 1,
"gateway_address": "0x05bD7a3D18324c1F7e216f7fBF2b15985aE5281A",
"block_confirmation": {
"fast_inbound": 0,
"standard_inbound": 2
},
"gateway_methods": [
{
"name": "sendFunds",
"identifier": "0x65f4dbe1",
"event_identifier": "0x313800e2e529b7d45906548dd908bb537772d390b660787b2a929ddf1facf6e4",
"confirmation_type": 1
},
{
"name": "addFunds",
"identifier": "0xf9bfe8a7",
"event_identifier": "0xb28f49668e7e76dc96d7aabe5b7f63fecfbd1c3574774c05e8204e749fd96fbd",
"confirmation_type": 2
}
],
"enabled": {
"isInboundEnabled": true,
"isOutboundEnabled": true
}
}
Loading
Loading