| .. | ||
| .papi | ||
| cli | ||
| configs | ||
| contract-bindings | ||
| docker | ||
| resources | ||
| scripts | ||
| suites/e2e | ||
| utils | ||
| .gitignore | ||
| biome.json | ||
| bun.lock | ||
| bunfig.toml | ||
| package.json | ||
| README.md | ||
| TODO.md | ||
| tsconfig.json | ||
| wagmi.config.ts | ||
End-to-End Test Environment
Contents
.
├── README.md
├── configs # Configurations for test networks
└── scripts # Helper scripts for interacting with the network
Pre-requisites
- Kurtosis: For launching test networks
- Bun: TypeScript runtime and package manager
- Docker: For container management
MacOS
Important
If you are running this on a Mac,
zigis a pre-requisite for crossbuilding the node. Instructions for installation can be found here.
QuickStart
Run:
bun i
bun cli
Manual Deployment
Follow these steps to set up and interact with your test environment:
-
Deploy a minimal test environment
bun cliThis script will:
- Check for required dependencies.
- Launch a DataHaven solochain.
- Start a Kurtosis network which includes:
- 2 Ethereum Execution Layer clients (reth)
- 2 Ethereum Consensus Layer clients (lighthouse)
- Blockscout Explorer services for EL (if enabled with --blockscout)
- Dora Explorer service for CL
- Deploy DataHaven smart contracts to the Ethereum network. This can optionally include verification on Blockscout if the
--verifiedflag is used (requires Blockscout to be enabled). - Perform validator setup and funding operations.
- Launch Snowbridge relayers.
Note
If you want to also have the contracts verified on blockscout, you can run
bun start:e2e:verifiedinstead. This will do all the previous steps, but also verify the contracts on blockscout. However, note that this takes some time to complete. -
Explore the network
- Block Explorer: http://127.0.0.1:3000.
- Kurtosis Dashboard: Run
kurtosis webto access. From it you can see all the services running in the network, as well as their ports, status and logs.
Network Management
-
Stop the test environment
bun stop:e2e -
Stop the Kurtosis engine completely
bun stop:kurtosis-engine
Blockscout
Can be accessed at: http://127.0.0.1:3000.
You can also access the backend via REST API, documented here: http://127.0.0.1:3000/api-docs
Testing
E2E Tests
Tip
Remember to run the network with
bun clibefore running the tests.
bun test:e2e
Note
You can increase the logging level by setting
LOG_LEVEL=debugbefore running the tests.
Wagmi Bindings Generation
To ensure contract bindings are up-to-date, run the following command after modifying smart contracts or updating ABIs:
bun generate:wagmi
This command generates TypeScript bindings for interacting with the deployed smart contracts using Wagmi.
Troubleshooting
E2E Network Launch doesn't work
Script halts unexpectedly
When running bun cli the script appears to halt after the following:
## Setting up 1 EVM.
==========================
Chain 3151908
Estimated gas price: 2.75 gwei
Estimated total gas used for script: 71556274
Estimated amount required: 0.1967797535 ETH
==========================
This is due to how forge streams output to stdout, but is infact still deploying contracts to the chain. You should be able to see in blockscout the deploy script is indeed still working.
Errors with deploying forge scripts on kurtosis network
Try running forge clean to clear any spurious build artefacts, and running forge build again. Also try deploying manually to the still running kurtosis network.
Blockscout is empty
If you look at the browser console, if you see the following:
Content-Security-Policy: The page's settings blocked the loading of a resource (connect-src) at http://127.0.0.1:3000/node-api/proxy/api/v2/stats because it violates the following directive: "connect-src ' ...
this is a result of CORS and CSP errors due to running this as a local docker network.
Make sure you are connected directly to http://127.0.0.1:3000 (not localhost).
Alternatively, you can try installing a browser addon such as anti-CORS / anti-CSP to circumvent this problem.
Weird forge Errors
In the /contracts directory, you can try to run forge clean and forge build to see if it fixes the issue.
Linux: See if disabling ipV6 helps
I have found that ipV6 on Arch Linux does not play very nicely with Kurtosis networks. Disabling it completely fixed the issue for me.
macOS: Verify Docker networking settings
If using Docker Desktop, make sure settings have permissive networking enabled.
Polkadot-API types don't match expected runtime types
If you've made changes to the runtime types, you need to re-generate the TS types for the Polkadot-API. Don't worry, this is fully automated.
From the ./test directory run the following command:
bun generate:types
This script will:
- Compile the runtime using
cargo build --releasein the../operatordirectory. - Re-generate the Polkadot-API types using the newly built WASM binary.
Note
The script uses the
--releaseflag by default, meaning it uses the WASM binary from./operator/target/release. If you need to use a different build target, you may need to adjust the script or run the steps manually.

