mirror of
https://github.com/datahaven-xyz/datahaven
synced 2026-05-24 09:50:01 +00:00
### New Features
1. Add the `deploy` command to our CLI.
1. Conditionally deploys kurtosis eth network if we're in `stagenet`
environment.
2. Deploys DH nodes.
3. Deploys contracts (all of them). In `mainnet` and `testnet` it
shouldn't deploy EL contracts, but for now that's not implemented.
4. Configures parameters, validators and relayers in the same way as
`launch`.
5. Currently, it only deploys `beefy` and `beacon` relayers, `execution`
and `solochain` relayers are pending for a subsequent PR.
2. Add `waitFor` utility function that receives a lambda.
### Refactors
1. Several common functionalities used both by the `launch` and `deploy`
command have been moved to the `cli/handlers/common` directory, from
where both commands use them. These include
1. Checks for installed dependencies.
2. Common constants.
3. The `LaunchedNetwork` class has been moved to this directory.
4. DataHaven nodes common functions.
5. Kurtosis common functions.
6. Relayer common functions.
7. Kubernetes functions (although only used by `deploy`, it seemed
fitting to have it here still).
8. Remove CLI questions and separator prints from `deploy-contracts.ts`
and `set-datahaven-parameters.ts` scripts. These things should be in the
`cli/launch` folder, which consumes the functions in these scripts.
9. Remove `setParametersFromCollection` from `utils` folder and put it
in `cli`.
10. Create base snowbridge relayer configs for `local` and `stagenet` as
two separate directories.
### Fixes
1. Sets the default time of the `deploy` command to 6s as Lodestar is
slower than Lighthouse.
2. In `runShellCommandWithLogger` only print `stderr` if the command
fails.
### Additional Minor Changes
1. K8s secret key names changed from `dh-beefy-relay-eth-key` to
`dh-beefy-relay-ethereum-key` and `dh-beacon-relay-sub-key` to
`dh-beacon-relay-substrate-key`, for simplicity in the deployment
script.
11. Update suggested configs for `.vscode` configs.
---------
Co-authored-by: Steve Degosserie <723552+stiiifff@users.noreply.github.com>
152 lines
6.5 KiB
Markdown
152 lines
6.5 KiB
Markdown
# DataHaven 🫎
|
|
|
|
An EVM compatible Substrate chain, powered by StorageHub and secured by EigenLayer.
|
|
|
|
## Repo Structure
|
|
|
|
```bash
|
|
datahaven/
|
|
├── .github/ # GitHub Actions workflows.
|
|
├── contracts/ # Implementation of the DataHaven AVS (Autonomous Verifiable Service) smart contracts to interact with EigenLayer.
|
|
├── operator/ # DataHaven node based on Substrate. The "Operator" in EigenLayer terms.
|
|
├── test/ # Integration tests for the AVS and Operator.
|
|
├── resources/ # Miscellaneous resources for the DataHaven project.
|
|
└── README.md
|
|
```
|
|
|
|
## E2E CLI
|
|
|
|
This repo comes with a CLI for launching a local DataHaven network, packaged with:
|
|
|
|
1. A full Ethereum network with:
|
|
- 2 x Execution Layer clients (e.g., reth)
|
|
- 2 x Consensus Layer clients (e.g., lodestar)
|
|
- Blockscout Explorer services for EL (if enabled with --blockscout)
|
|
- Dora Explorer service for CL
|
|
- Contracts deployed and configured for the DataHaven network.
|
|
2. A DataHaven solochain.
|
|
3. Snowbridge relayers for cross-chain communication.
|
|
|
|
To launch the network, follow the instructions in the [test README](./test/README.md).
|
|
|
|
## Docker
|
|
|
|
This repo publishes images to [DockerHub](https://hub.docker.com/r/moonsonglabs/datahaven).
|
|
|
|
> [!TIP]
|
|
>
|
|
> If you cannot see this repo you must be added to the permission list for the private repo.
|
|
|
|
To aid with speed it employs the following:
|
|
|
|
- [sccache](https://github.com/mozilla/sccache/tree/main): De-facto caching tool to speed up rust builds.
|
|
- [cargo chef](https://lpalmieri.com/posts/fast-rust-docker-builds/): A method of caching building the dependencies as a docker layer to cut down compilation times.
|
|
- [buildx cache mounts](https://docs.docker.com/build/cache/optimize/#use-cache-mounts): Using buildx's new feature to mount an externally restored cache into a container.
|
|
- [cache dance](https://github.com/reproducible-containers/buildkit-cache-dance): Weird workaround (endorsed by docker themselves) to inject caches into containers and return the result back to the CI.
|
|
|
|
To run a docker image locally (`moonsonglabs/datahaven:local`), from the `/test` folder run:
|
|
|
|
```sh
|
|
bun build:docker:operator
|
|
```
|
|
|
|
## Working with IDEs
|
|
|
|
### VS Code (and its forks)
|
|
|
|
IDE configurations are ignored from this repo's version control, to allow for personalisation. However, there are a few key configurations that we suggest for a better experience. Here are the key suggested configurations to add to your `.vscode/settings.json` file:
|
|
|
|
#### Rust
|
|
|
|
```json
|
|
{
|
|
"rust-analyzer.linkedProjects": ["./operator/Cargo.toml"],
|
|
"rust-analyzer.cargo.allTargets": true,
|
|
"rust-analyzer.procMacro.enable": false,
|
|
"rust-analyzer.server.extraEnv": {
|
|
"CARGO_TARGET_DIR": "target/.rust-analyzer",
|
|
"SKIP_WASM_BUILD": 1
|
|
},
|
|
"rust-analyzer.diagnostics.disabled": ["unresolved-macro-call"],
|
|
"rust-analyzer.cargo.buildScripts.enable": false
|
|
}
|
|
```
|
|
|
|
These settings optimise Rust Analyzer for the DataHaven codebase:
|
|
|
|
- Marks the `operator/` folder as a linked project for analysis. The root of this repo is a workspace, and this is the rust project that should be analysed by `rust-analyzer`.
|
|
- Disables proc macros and build scripts to improve performance. Otherwise, Substrate's proc macros will make iterative checks from `rust-analyzer` unbearably slow.
|
|
- Sets a dedicated target directory for Rust Analyzer to avoid conflicts with other build targets like `release` builds.
|
|
- Disables WASM builds during analysis for faster feedback.
|
|
|
|
#### Solidity
|
|
|
|
For [Juan Blanco's Solidity Extension](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity), add the following to your `.vscode/settings.json` file:
|
|
|
|
```json
|
|
{
|
|
"solidity.formatter": "forge",
|
|
"solidity.compileUsingRemoteVersion": "v0.8.28+commit.7893614a",
|
|
"[solidity]": {
|
|
"editor.defaultFormatter": "JuanBlanco.solidity"
|
|
}
|
|
}
|
|
```
|
|
|
|
These settings configure Solidity support:
|
|
|
|
- Uses Forge as the formatter for consistency with the project's tooling.
|
|
- Sets a specific Solidity version for compilation. This one should match the version used in [foundry.toml](./contracts/foundry.toml).
|
|
- Sets the Solidity extension as the default formatter.
|
|
|
|
#### Typescript
|
|
|
|
This repo uses [Biome](https://github.com/biomejs/biome) for TypeScript linting and formatting. To make the extension work nicely with this repo, add the following to your `.vscode/settings.json` file:
|
|
|
|
```json
|
|
{
|
|
"biome.lsp.bin": "test/node_modules/.bin/biome",
|
|
"[typescript]": {
|
|
"editor.defaultFormatter": "biomejs.biome",
|
|
"editor.codeActionsOnSave": {
|
|
"source.organizeImports.biome": "always"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
- Sets the Biome binary to the one in the `test/` folder.
|
|
- Sets Biome as the default formatter for TypeScript.
|
|
- Sets Biome to always organise imports on save.
|
|
|
|
## CI
|
|
|
|
Using the [act](https://github.com/nektos/act) binary, you can run GitHub Actions locally.
|
|
|
|
For example, to run the entire `e2e` workflow:
|
|
|
|
```bash
|
|
act -W .github/workflows/e2e.yml -s GITHUB_TOKEN="$(gh auth token)"
|
|
```
|
|
|
|
Which results in:
|
|
|
|
```bash
|
|
INFO[0000] Using docker host 'unix:///var/run/docker.sock', and daemon socket 'unix:///var/run/docker.sock'
|
|
INFO[0000] Start server on http://192.168.1.97:34567
|
|
[E2E - Kurtosis Deploy and Verify/kurtosis] ⭐ Run Set up job
|
|
[E2E - Kurtosis Deploy and Verify/kurtosis] 🚀 Start image=catthehacker/ubuntu:rust-24.04
|
|
[E2E - Kurtosis Deploy and Verify/kurtosis] 🐳 docker pull image=catthehacker/ubuntu:rust-24.04 platform= username= forcePull=true
|
|
[E2E - Kurtosis Deploy and Verify/kurtosis] using DockerAuthConfig authentication for docker pull
|
|
[E2E - Kurtosis Deploy and Verify/kurtosis] 🐳 docker create image=catthehacker/ubuntu:rust-24.04 platform= entrypoint=["tail" "-f" "/dev/null"] cmd=[] network="host"
|
|
[E2E - Kurtosis Deploy and Verify/kurtosis] 🐳 docker run image=catthehacker/ubuntu:rust-24.04 platform= entrypoint=["tail" "-f" "/dev/null"] cmd=[] network="host"
|
|
[E2E - Kurtosis Deploy and Verify/kurtosis] 🐳 docker exec cmd=[node --no-warnings -e console.log(process.execPath)] user= workdir=
|
|
[E2E - Kurtosis Deploy and Verify/kurtosis] ✅ Success - Set up job
|
|
[E2E - Kurtosis Deploy and Verify/kurtosis] ☁ git clone 'https://github.com/oven-sh/setup-bun' # ref=v2
|
|
...
|
|
[E2E - Kurtosis Deploy and Verify/kurtosis] ✅ Success - Post Install Foundry [212.864597ms]
|
|
[E2E - Kurtosis Deploy and Verify/kurtosis] ⭐ Run Complete job
|
|
[E2E - Kurtosis Deploy and Verify/kurtosis] Cleaning up container for job kurtosis
|
|
[E2E - Kurtosis Deploy and Verify/kurtosis] ✅ Success - Complete job
|
|
[E2E - Kurtosis Deploy and Verify/kurtosis] 🏁 Job succeeded
|
|
```
|