datahaven/contracts/test/ServiceManagerBase.t.sol

60 lines
2.3 KiB
Solidity
Raw Permalink Normal View History

feat: 🏗️ Setup basic AVS contract (#4) * forge install: eigenlayer-contracts v1.1.1 * fix: :wastebasket: Cleanup dependencies from init * forge install: forge-std v1.9.6 * forge install: openzeppelin-contracts v5.2.0 * forge install: openzeppelin-contracts-upgradeable v5.2.0 * chore: :see_no_evil: Ignore IDE directories * chore: :building_construction: Modify config in `foundry.toml` based on EigenLayer's example * feat: :construction: Add `ServiceManagerBase` contract and dependencies based on eigenlayer-middleware * feat: :construction: Naive implementation of missing functions replacing AVSDirectory for AllocationManager * docs: :memo: Add first draft of contracts diagram * refactor: :fire: Remove unnecessary functions and refactor most important ones to the top * docs: :memo: Update contracts diagram * docs: :memo: Update contracts diagram * feat: :sparkles: Implement basic mocked Service Manager * test: :construction: Cleanup and start testing setup for mock ServiceManagerBase * test: :clown_face: Add mocks to setup tests * test: :clown_face: Add deployment of RewardsCoordinator * test: :white_check_mark: Deploy EigenLayer mocked contracts in test * revert: :heavy_minus_sign: Remove proglematic submodules * revert: :heavy_minus_sign: Remove forge-std dependency * forge install: forge-std v1.9.6 * forge install: openzeppelin-contracts v5.2.0 * forge install: openzeppelin-contracts-upgradeable v5.2.0 * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: Remove faulty dependency * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: remove added dependency * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: Remove openzeppelin dependencies from root project * test: :construction: Make test run after dependency mayhem * test: :white_check_mark: Add passing createOperatorSets test with empty params * style: :art: Apply forge fmt
2025-03-11 20:16:16 +00:00
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;
/* solhint-disable func-name-mixedcase */
feat: 🏗️ Setup basic AVS contract (#4) * forge install: eigenlayer-contracts v1.1.1 * fix: :wastebasket: Cleanup dependencies from init * forge install: forge-std v1.9.6 * forge install: openzeppelin-contracts v5.2.0 * forge install: openzeppelin-contracts-upgradeable v5.2.0 * chore: :see_no_evil: Ignore IDE directories * chore: :building_construction: Modify config in `foundry.toml` based on EigenLayer's example * feat: :construction: Add `ServiceManagerBase` contract and dependencies based on eigenlayer-middleware * feat: :construction: Naive implementation of missing functions replacing AVSDirectory for AllocationManager * docs: :memo: Add first draft of contracts diagram * refactor: :fire: Remove unnecessary functions and refactor most important ones to the top * docs: :memo: Update contracts diagram * docs: :memo: Update contracts diagram * feat: :sparkles: Implement basic mocked Service Manager * test: :construction: Cleanup and start testing setup for mock ServiceManagerBase * test: :clown_face: Add mocks to setup tests * test: :clown_face: Add deployment of RewardsCoordinator * test: :white_check_mark: Deploy EigenLayer mocked contracts in test * revert: :heavy_minus_sign: Remove proglematic submodules * revert: :heavy_minus_sign: Remove forge-std dependency * forge install: forge-std v1.9.6 * forge install: openzeppelin-contracts v5.2.0 * forge install: openzeppelin-contracts-upgradeable v5.2.0 * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: Remove faulty dependency * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: remove added dependency * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: Remove openzeppelin dependencies from root project * test: :construction: Make test run after dependency mayhem * test: :white_check_mark: Add passing createOperatorSets test with empty params * style: :art: Apply forge fmt
2025-03-11 20:16:16 +00:00
import {Test, console} from "forge-std/Test.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {IStrategy} from "eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol";
fix: Resolve Foundry build errors and apply code formatting (#241) ## Summary Fixes the CI build failure in the `task-ts-build` workflow caused by Foundry v1.4.2's Solar linter not being able to resolve Snowbridge's context-specific import remappings. ## Problem The Snowbridge submodule uses context-specific remappings (prefixed with `:`) for its dependencies: - `lib/snowbridge/contracts/:openzeppelin/` → OpenZeppelin contracts - `lib/snowbridge/contracts/:prb/math/` → PRB Math library Foundry v1.4.2's Solar linter doesn't understand these context-specific remappings and fails with errors like: ``` error: file openzeppelin/utils/cryptography/MerkleProof.sol not found error: file prb/math/src/UD60x18.sol not found ``` ## Solution Added global remappings that the linter can understand: ```toml "openzeppelin/=lib/snowbridge/contracts/lib/openzeppelin-contracts/contracts/", "prb/math/=lib/snowbridge/contracts/lib/prb-math/", ``` ### Why This Works - The linter can now resolve `openzeppelin/` and `prb/math/` imports globally - These global remappings take **lower precedence** than context-specific ones during compilation - The compiler still uses the context-specific remappings (with `:`) when compiling Snowbridge contracts - The linter uses the global remappings when checking all files ## Changes ### Commit 1: Add global remappings - `contracts/foundry.toml`: Added 2 global remapping entries ### Commit 2: Apply forge fmt - Applied automatic formatting via `forge fmt` to ensure code style consistency - Multi-line formatting for long import statements and function signatures - No functional changes - purely formatting updates ## Testing ✅ Local build succeeds with `forge build` ✅ No Snowbridge import resolution errors ✅ `forge fmt --check` passes with no formatting issues ✅ Only linting notes/warnings remain (not errors) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude <noreply@anthropic.com>
2025-10-20 08:20:59 +00:00
import {
IRewardsCoordinator
} from "eigenlayer-contracts/src/contracts/interfaces/IRewardsCoordinator.sol";
feat: 🏗️ Setup basic AVS contract (#4) * forge install: eigenlayer-contracts v1.1.1 * fix: :wastebasket: Cleanup dependencies from init * forge install: forge-std v1.9.6 * forge install: openzeppelin-contracts v5.2.0 * forge install: openzeppelin-contracts-upgradeable v5.2.0 * chore: :see_no_evil: Ignore IDE directories * chore: :building_construction: Modify config in `foundry.toml` based on EigenLayer's example * feat: :construction: Add `ServiceManagerBase` contract and dependencies based on eigenlayer-middleware * feat: :construction: Naive implementation of missing functions replacing AVSDirectory for AllocationManager * docs: :memo: Add first draft of contracts diagram * refactor: :fire: Remove unnecessary functions and refactor most important ones to the top * docs: :memo: Update contracts diagram * docs: :memo: Update contracts diagram * feat: :sparkles: Implement basic mocked Service Manager * test: :construction: Cleanup and start testing setup for mock ServiceManagerBase * test: :clown_face: Add mocks to setup tests * test: :clown_face: Add deployment of RewardsCoordinator * test: :white_check_mark: Deploy EigenLayer mocked contracts in test * revert: :heavy_minus_sign: Remove proglematic submodules * revert: :heavy_minus_sign: Remove forge-std dependency * forge install: forge-std v1.9.6 * forge install: openzeppelin-contracts v5.2.0 * forge install: openzeppelin-contracts-upgradeable v5.2.0 * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: Remove faulty dependency * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: remove added dependency * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: Remove openzeppelin dependencies from root project * test: :construction: Make test run after dependency mayhem * test: :white_check_mark: Add passing createOperatorSets test with empty params * style: :art: Apply forge fmt
2025-03-11 20:16:16 +00:00
import {StrategyBase} from "eigenlayer-contracts/src/contracts/strategies/StrategyBase.sol";
import {
IAllocationManagerErrors,
IAllocationManager
} from "eigenlayer-contracts/src/contracts/interfaces/IAllocationManager.sol";
import {ServiceManagerMock} from "./mocks/ServiceManagerMock.sol";
import {AVSDeployer} from "./utils/AVSDeployer.sol";
feat: 🏗️ Setup basic AVS contract (#4) * forge install: eigenlayer-contracts v1.1.1 * fix: :wastebasket: Cleanup dependencies from init * forge install: forge-std v1.9.6 * forge install: openzeppelin-contracts v5.2.0 * forge install: openzeppelin-contracts-upgradeable v5.2.0 * chore: :see_no_evil: Ignore IDE directories * chore: :building_construction: Modify config in `foundry.toml` based on EigenLayer's example * feat: :construction: Add `ServiceManagerBase` contract and dependencies based on eigenlayer-middleware * feat: :construction: Naive implementation of missing functions replacing AVSDirectory for AllocationManager * docs: :memo: Add first draft of contracts diagram * refactor: :fire: Remove unnecessary functions and refactor most important ones to the top * docs: :memo: Update contracts diagram * docs: :memo: Update contracts diagram * feat: :sparkles: Implement basic mocked Service Manager * test: :construction: Cleanup and start testing setup for mock ServiceManagerBase * test: :clown_face: Add mocks to setup tests * test: :clown_face: Add deployment of RewardsCoordinator * test: :white_check_mark: Deploy EigenLayer mocked contracts in test * revert: :heavy_minus_sign: Remove proglematic submodules * revert: :heavy_minus_sign: Remove forge-std dependency * forge install: forge-std v1.9.6 * forge install: openzeppelin-contracts v5.2.0 * forge install: openzeppelin-contracts-upgradeable v5.2.0 * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: Remove faulty dependency * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: remove added dependency * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: Remove openzeppelin dependencies from root project * test: :construction: Make test run after dependency mayhem * test: :white_check_mark: Add passing createOperatorSets test with empty params * style: :art: Apply forge fmt
2025-03-11 20:16:16 +00:00
import {IServiceManager} from "../src/interfaces/IServiceManager.sol";
import {IServiceManagerUI} from "../src/interfaces/IServiceManagerUI.sol";
import {ServiceManagerBase} from "../src/middleware/ServiceManagerBase.sol";
contract ServiceManagerBaseTest is AVSDeployer {
feat: 🏗️ Setup basic AVS contract (#4) * forge install: eigenlayer-contracts v1.1.1 * fix: :wastebasket: Cleanup dependencies from init * forge install: forge-std v1.9.6 * forge install: openzeppelin-contracts v5.2.0 * forge install: openzeppelin-contracts-upgradeable v5.2.0 * chore: :see_no_evil: Ignore IDE directories * chore: :building_construction: Modify config in `foundry.toml` based on EigenLayer's example * feat: :construction: Add `ServiceManagerBase` contract and dependencies based on eigenlayer-middleware * feat: :construction: Naive implementation of missing functions replacing AVSDirectory for AllocationManager * docs: :memo: Add first draft of contracts diagram * refactor: :fire: Remove unnecessary functions and refactor most important ones to the top * docs: :memo: Update contracts diagram * docs: :memo: Update contracts diagram * feat: :sparkles: Implement basic mocked Service Manager * test: :construction: Cleanup and start testing setup for mock ServiceManagerBase * test: :clown_face: Add mocks to setup tests * test: :clown_face: Add deployment of RewardsCoordinator * test: :white_check_mark: Deploy EigenLayer mocked contracts in test * revert: :heavy_minus_sign: Remove proglematic submodules * revert: :heavy_minus_sign: Remove forge-std dependency * forge install: forge-std v1.9.6 * forge install: openzeppelin-contracts v5.2.0 * forge install: openzeppelin-contracts-upgradeable v5.2.0 * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: Remove faulty dependency * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: remove added dependency * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: Remove openzeppelin dependencies from root project * test: :construction: Make test run after dependency mayhem * test: :white_check_mark: Add passing createOperatorSets test with empty params * style: :art: Apply forge fmt
2025-03-11 20:16:16 +00:00
function setUp() public virtual {
_deployMockEigenLayerAndAVS();
}
function beforeTestSetup(
bytes4 testSelector
) public pure returns (bytes[] memory beforeTestCalldata) {
if (testSelector == this.test_createOperatorSetsWithEmptyParams.selector) {
beforeTestCalldata = new bytes[](1);
beforeTestCalldata[0] = abi.encodePacked(this.test_registerAVS.selector);
}
}
function test_registerAVS() public {
vm.prank(avsOwner);
IServiceManagerUI(address(serviceManager)).updateAVSMetadataURI("https://example.com");
}
function test_registerAVSRevertsIfNotAVSOwner() public {
vm.prank(rewardsUpdater);
vm.expectRevert(bytes("Ownable: caller is not the owner"));
IServiceManagerUI(address(serviceManager)).updateAVSMetadataURI("https://example.com");
}
function test_createOperatorSetsWithEmptyParams() public {
vm.prank(avsOwner);
IAllocationManager.CreateSetParams[] memory emptyParams =
new IAllocationManager.CreateSetParams[](0);
ServiceManagerBase(address(serviceManager)).createOperatorSets(emptyParams);
}
function test_returnsAVSAddress() public view {
assertEq(serviceManager.avs(), address(serviceManager));
}
feat: 🏗️ Setup basic AVS contract (#4) * forge install: eigenlayer-contracts v1.1.1 * fix: :wastebasket: Cleanup dependencies from init * forge install: forge-std v1.9.6 * forge install: openzeppelin-contracts v5.2.0 * forge install: openzeppelin-contracts-upgradeable v5.2.0 * chore: :see_no_evil: Ignore IDE directories * chore: :building_construction: Modify config in `foundry.toml` based on EigenLayer's example * feat: :construction: Add `ServiceManagerBase` contract and dependencies based on eigenlayer-middleware * feat: :construction: Naive implementation of missing functions replacing AVSDirectory for AllocationManager * docs: :memo: Add first draft of contracts diagram * refactor: :fire: Remove unnecessary functions and refactor most important ones to the top * docs: :memo: Update contracts diagram * docs: :memo: Update contracts diagram * feat: :sparkles: Implement basic mocked Service Manager * test: :construction: Cleanup and start testing setup for mock ServiceManagerBase * test: :clown_face: Add mocks to setup tests * test: :clown_face: Add deployment of RewardsCoordinator * test: :white_check_mark: Deploy EigenLayer mocked contracts in test * revert: :heavy_minus_sign: Remove proglematic submodules * revert: :heavy_minus_sign: Remove forge-std dependency * forge install: forge-std v1.9.6 * forge install: openzeppelin-contracts v5.2.0 * forge install: openzeppelin-contracts-upgradeable v5.2.0 * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: Remove faulty dependency * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: remove added dependency * forge install: eigenlayer-contracts v1.3.0 * revert: :heavy_minus_sign: Remove openzeppelin dependencies from root project * test: :construction: Make test run after dependency mayhem * test: :white_check_mark: Add passing createOperatorSets test with empty params * style: :art: Apply forge fmt
2025-03-11 20:16:16 +00:00
}