datahaven/contracts/foundry.toml
Ahmad Kaouk 4a16de1061
fix: resolve forge build warnings (#398)
## Summary

### Configuration
- Remove deprecated `deny_warnings` config key from foundry.toml
- Add global `[lint]` config to suppress naming convention warnings for
AVS/EL/ERC patterns (`mixed-case-function`, `mixed-case-variable`)

### DataHavenServiceManager Refactoring
- Rename immutable variables to SCREAMING_SNAKE_CASE
(`_allocationManager` → `_ALLOCATION_MANAGER`, `_rewardsCoordinator` →
`_REWARDS_COORDINATOR`)
- Wrap modifier logic in internal functions (`_checkRewardsInitiator`,
`_checkValidator`, `_checkAllocationManager`) to reduce contract size
- Add `_toAddress` helper with assembly for safe bytes-to-address
conversion

### Safe Typecasting
- Replace direct typecasts with OpenZeppelin's SafeCast library in
deploy scripts and test utilities
- Use `.toUint32()`, `.toUint64()`, `.toUint160()` for
overflow-protected conversions
- Replace `bytes32("wrong origin")` string cast with hex literal in test
deployer

### Code Cleanup
- Remove 25+ unused imports across script and test files
- Convert plain imports to named imports for better clarity
- Use `SafeERC20.safeTransfer()` for token transfers in tests
- Change `view` to `pure` where appropriate

## Test plan

- [x] `forge build` completes with no warnings
- [x] `forge test` passes all 10 tests
2026-01-22 09:48:27 -03:00

123 lines
4.9 KiB
TOML

[profile.default]
# Project Configuration
# 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/",
"eigenlayer-contracts/=lib/eigenlayer-contracts/",
"snowbridge/=lib/snowbridge/contracts/",
"@openzeppelin/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/",
"@openzeppelin-upgrades/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable-v4.9.0/",
"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/",
"openzeppelin/=lib/snowbridge/contracts/lib/openzeppelin-contracts/contracts/",
"prb/math/=lib/snowbridge/contracts/lib/prb-math/",
]
# Specifies the exact version of Solidity to use, overriding auto-detection.
solc_version = '0.8.28'
# 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
# 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)
# 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
# Enables the Foreign Function Interface (FFI) cheatcode.
# 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
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
sort_imports = false
# 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
bracket_spacing = false
# 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
wrap_comments = false
# 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}"
hoodi = "${RPC_HOODI}"
anvil = "http://localhost:8545"
# [etherscan]
# mainnet = { key = "${ETHERSCAN_API_KEY}" }
[lint]
# Global lint suppressions for naming conventions
exclude_lints = [
"mixed-case-function", # Keep AVS/EL/ERC naming conventions
"mixed-case-variable", # Keep __GAP, ethPOSDeposit, _metadataURI naming
]