2025-03-06 17:35:05 +00:00
|
|
|
[profile.default]
|
2025-03-11 20:16:16 +00:00
|
|
|
# Project Configuration
|
2025-03-06 17:35:05 +00:00
|
|
|
|
2025-03-11 20:16:16 +00:00
|
|
|
# Path to contract sources relative to the root of the project.
|
|
|
|
|
src = "src"
|
|
|
|
|
# Path to the test contract sources relative to the root of the project.
|
|
|
|
|
test = "test"
|
|
|
|
|
# Path to the script contract sources relative to the root of the project.
|
|
|
|
|
script = "script"
|
|
|
|
|
# Path to store contract artifacts relative to the root of the project.
|
|
|
|
|
out = "out"
|
|
|
|
|
# Array of paths that contain libraries, relative to the root of the project.
|
|
|
|
|
libs = ["lib"]
|
|
|
|
|
|
|
|
|
|
# Solidity Compiler Configuration
|
|
|
|
|
|
|
|
|
|
# Defines paths for Solidity imports.
|
|
|
|
|
remappings = [
|
|
|
|
|
"forge-std/=lib/forge-std/src/",
|
|
|
|
|
"ds-test/=lib/ds-test/src/",
|
|
|
|
|
"eigenlayer-contracts/=lib/eigenlayer-contracts/",
|
2025-03-14 13:47:33 +00:00
|
|
|
"snowbridge/=lib/snowbridge/contracts/",
|
2025-04-11 23:54:20 +00:00
|
|
|
"@openzeppelin/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/",
|
|
|
|
|
"@openzeppelin-upgrades/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/",
|
2025-03-14 13:47:33 +00:00
|
|
|
"lib/eigenlayer-contracts/:@openzeppelin/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/",
|
|
|
|
|
"lib/eigenlayer-contracts/:@openzeppelin-upgrades/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/",
|
|
|
|
|
"lib/snowbridge/contracts/:openzeppelin/=lib/snowbridge/contracts/lib/openzeppelin-contracts/contracts/",
|
|
|
|
|
"lib/snowbridge/contracts/:prb/math/=lib/snowbridge/contracts/lib/prb-math/",
|
2025-10-20 08:20:59 +00:00
|
|
|
"openzeppelin/=lib/snowbridge/contracts/lib/openzeppelin-contracts/contracts/",
|
|
|
|
|
"prb/math/=lib/snowbridge/contracts/lib/prb-math/",
|
2025-03-11 20:16:16 +00:00
|
|
|
]
|
|
|
|
|
# Specifies the exact version of Solidity to use, overriding auto-detection.
|
2025-03-14 13:47:33 +00:00
|
|
|
solc_version = '0.8.28'
|
2025-03-11 20:16:16 +00:00
|
|
|
# If enabled, treats Solidity compiler warnings as errors, preventing artifact generation if warnings are present.
|
2025-03-14 13:47:33 +00:00
|
|
|
deny_warnings = false
|
2025-03-11 20:16:16 +00:00
|
|
|
# If set to true, changes compilation pipeline to go through the new IR optimizer.
|
|
|
|
|
via_ir = false
|
|
|
|
|
# Whether or not to enable the Solidity optimizer.
|
|
|
|
|
optimizer = true
|
2025-03-14 13:47:33 +00:00
|
|
|
# The number of runs specifies roughly how often each opcode of the deployed code will be executed
|
|
|
|
|
# across the life-time of the contract. This means it is a trade-off parameter between code size (deploy cost)
|
2025-03-11 20:16:16 +00:00
|
|
|
# and code execution cost (cost after deployment).
|
|
|
|
|
optimizer_runs = 200
|
|
|
|
|
|
|
|
|
|
# Test Configuration
|
|
|
|
|
|
|
|
|
|
# Verbosity level during test execution. Higher levels provide more detailed information:
|
|
|
|
|
# - 2 (-vv): Logs emitted during tests are displayed.
|
|
|
|
|
# - 3 (-vvv): Stack traces for failing tests are displayed.
|
|
|
|
|
# - 4 (-vvvv): Stack traces for all tests and setup traces for failing tests are displayed.
|
|
|
|
|
# - 5 (-vvvvv): Stack and setup traces are always displayed.
|
|
|
|
|
verbosity = 0
|
2025-03-14 13:47:33 +00:00
|
|
|
# Enables the Foreign Function Interface (FFI) cheatcode.
|
2025-03-11 20:16:16 +00:00
|
|
|
# WARNING: This allows arbitrary programs to run on your computer, which poses security risks.
|
|
|
|
|
ffi = true
|
|
|
|
|
# Contracts to include in gas reports. By default, all contracts are included.
|
|
|
|
|
gas_reports = ["./src/**/*"]
|
|
|
|
|
# Show test execution progress if set to true.
|
|
|
|
|
show_progress = true
|
|
|
|
|
# Sparse mode only compiles files that match certain criteria.
|
|
|
|
|
sparse_mode = true
|
2025-03-14 13:47:33 +00:00
|
|
|
|
2025-03-11 20:16:16 +00:00
|
|
|
gas_limit = 5000000000
|
|
|
|
|
no-match-contract = "FFI"
|
|
|
|
|
fs_permissions = [{ access = "read-write", path = "./" }]
|
|
|
|
|
|
|
|
|
|
[profile.default.fmt]
|
|
|
|
|
# Single-line vs multi-line statement blocks
|
|
|
|
|
single_line_statement_blocks = "preserve" # Options: "single", "multi", "preserve"
|
|
|
|
|
# Formatting style for long function headers
|
|
|
|
|
multiline_func_header = "params_first" # Options: "attributes_first", "params_first", "all"
|
|
|
|
|
# Sort import statements alphabetically
|
2025-03-14 13:47:33 +00:00
|
|
|
sort_imports = false
|
2025-03-11 20:16:16 +00:00
|
|
|
# Maximum line length where formatter will wrap the line
|
|
|
|
|
line_length = 100 # Default: 120
|
|
|
|
|
# Number of spaces per indentation level
|
|
|
|
|
tab_width = 4 # Default: 4
|
|
|
|
|
# Whether to print spaces between brackets
|
2025-03-14 13:47:33 +00:00
|
|
|
bracket_spacing = false
|
2025-03-11 20:16:16 +00:00
|
|
|
# Style of uint/int256 types
|
|
|
|
|
int_types = "long" # Options: "long", "short", "preserve"
|
|
|
|
|
# Quotation mark style
|
|
|
|
|
quote_style = "double" # Options: "double", "single", "preserve"
|
|
|
|
|
# Style of underscores in number literals
|
|
|
|
|
number_underscore = "remove" # Options: "preserve", "thousands", "remove"
|
|
|
|
|
# Whether or not to wrap comments at line_length
|
2025-03-14 13:47:33 +00:00
|
|
|
wrap_comments = false
|
2025-03-11 20:16:16 +00:00
|
|
|
# List of files to ignore during formatting (can use glob patterns)
|
|
|
|
|
# ignore = [
|
|
|
|
|
# "./script/**/*",
|
|
|
|
|
# "./test/**/*"
|
|
|
|
|
# ]
|
|
|
|
|
|
|
|
|
|
# TODO: Decide if we want to enable this.
|
|
|
|
|
# [profile.test.fmt]
|
|
|
|
|
# int_types = "short"
|
|
|
|
|
# line_length = 140
|
|
|
|
|
# ignore = [
|
|
|
|
|
# "./src/**/*"
|
|
|
|
|
# ]
|
|
|
|
|
|
|
|
|
|
[profile.ci.fuzz]
|
|
|
|
|
optimizer = false
|
|
|
|
|
runs = 32
|
|
|
|
|
|
|
|
|
|
[profile.intense.fuzz]
|
|
|
|
|
optimizer = false
|
|
|
|
|
runs = 5000
|
|
|
|
|
|
|
|
|
|
[profile.forktest.fuzz]
|
|
|
|
|
runs = 16
|
|
|
|
|
|
|
|
|
|
[rpc_endpoints]
|
|
|
|
|
mainnet = "${RPC_MAINNET}"
|
|
|
|
|
holesky = "${RPC_HOLESKY}"
|
feat: ✨ Datahaven contracts deployment on public testnet (#123)
## Summary
This PR introduces support for deploying Datahaven contracts to
different chains (hoodi, holesky, mainnet), as well as a new cli command
to manage this deployment separately from the regular deployment, while
maintaining compatibility with it.
#### New CLI command
- **`bun cli contracts deploy`** - Deploy contracts to supported chains
(Hoodi, Holesky, Mainnet)
- **`bun cli contracts status`** - Check deployment configuration and
status
- **`bun cli contracts verify`** - Verify contracts on block explorers
- Commands need the chain parameter: `--chain <hoodi | holesky |
mainnet>`
- Right now only `hoodi` and `holesky` are supported
### Deployment
#### Hoodi & Holesky Network Support
- Added **DeployBase.s.sol** as common ground for
**DeployTestnet.s.sol** (also new) and **DeployLocal.s.sol** (existing).
- **Hoodi configuration** (`contracts/config/hoodi.json`) with deployed
EigenLayer contract addresses to reference.
- **Holesky configuration** (`contracts/config/hoodi.json`) with
deployed EigenLayer contract addresses to reference.
#### Contracts being deployed
- **DataHaven**: ServiceManager, VetoableSlasher, RewardsRegistry
- **Snowbridge**: BeefyClient, AgentExecutor, Gateway, RewardsAgent
- **EigenLayer**: References existing deployed contracts (not
re-deployed)
#### Deployment files
When the deployment is done, a new file under `contracts/deployments` is
generated with the addresses of the deployed contracts, for each chain
(it will be overriden per chain if run multiple times). So we would have
one `anvil.json`, `hoodi.json`, `holesky.json`, etc, with the addresses
of the deployed contracts for reference and for later verification.
#### Todo
- [x] Test compatibility with existing `bun cli launch` and `bun cli
deploy` commands
#### For follow-up PRs
- Fix verification issue with `foundry verify-contracts` when specifying
the `chain` or `chain-id` parameter, needed for hoodi
(https://github.com/foundry-rs/foundry/issues/7466).
- Add `redeploy` feature to only override implementation contract and
leave the proxy address untouched
## Usage Examples
```bash
# Deploy to Hoodi network
bun cli contracts deploy --chain hoodi
# Check deployment status
bun cli contracts status --chain hoodi
# Verify contracts on block explorer
bun cli contracts verify --chain hoodi
```
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added deployment and configuration support for new networks "hoodi"
and "holesky", including new configuration and deployment files.
* Introduced a CLI tool for managing contract deployments, status
checks, and verification across supported chains.
* Added example environment configuration and comprehensive deployment
documentation.
* Enabled contract verification and status reporting via the CLI with
support for block explorer integration.
* **Improvements**
* Refactored deployment scripts for modularity, supporting both local
and testnet environments.
* Centralized and extended configuration loading to support additional
contract addresses and network parameters.
* Enhanced deployment utilities and typings to support multi-network
deployments.
* **Bug Fixes**
* Improved input validation and error handling in CLI commands and
deployment scripts.
* Added explicit handling for zero address in operator strategy
retrieval.
* **Chores**
* Updated documentation and configuration templates for easier
onboarding and deployment management.
* Improved logging and output formatting for deployment and verification
processes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Steve Degosserie <723552+stiiifff@users.noreply.github.com>
Co-authored-by: Ahmad Kaouk <56095276+ahmadkaouk@users.noreply.github.com>
2025-08-21 10:02:31 +00:00
|
|
|
hoodi = "https://rpc.hoodi.ethpandaops.io"
|
2025-04-03 17:06:32 +00:00
|
|
|
anvil = "http://localhost:8545"
|
2025-03-11 20:16:16 +00:00
|
|
|
|
2025-04-03 17:06:32 +00:00
|
|
|
# [etherscan]
|
|
|
|
|
# mainnet = { key = "${ETHERSCAN_API_KEY}" }
|
|
|
|
|
# holesky = { key = "${ETHERSCAN_API_KEY}" }
|