diff --git a/config/cap-eigen.json b/config/cap-eigen.json index f80a3810..6d528103 100644 --- a/config/cap-eigen.json +++ b/config/cap-eigen.json @@ -8,7 +8,7 @@ "implems": { "eigenServiceManager": "0xf2ded7286C54a5Ca077Df40c0C21c5a555885Ca1", "operator": "0x5a3e9F4fd0f4815A7106dFBE0a44AAC339244eE6", - "agentManager": "0x0FC2153D1455D5A02555413D88A352787ABE0268" + "agentManager": "0x9Dd8dA3f46d4b5bA1ea1E1E7421E8106E2777692" } } } \ No newline at end of file diff --git a/config/cap-infra.json b/config/cap-infra.json index bdd0db23..f6acb150 100644 --- a/config/cap-infra.json +++ b/config/cap-infra.json @@ -2,9 +2,9 @@ "1": { "implems": { "accessControl": "0x6681EB184c876D74eA3ddFaE0eCEE0C9C0f84bc1", - "capToken": "0xDb549616407f8a30799f77F12b6b85AEC936782D", + "capToken": "0xa76645E15c267b876999bf7689E0b2C1EE29BFE6", "debtToken": "0xaF2084df1Ff172b1D39a94680c9b8bd42b55E20C", - "delegation": "0x69EbEB382b0e82127CC77E7b2679bEB0E0Be7184", + "delegation": "0x7e2D738042376BF48bEbC49932869eAC3d7E38b5", "feeAuction": "0x57e1E8e5576c5CFbBB0000Ef3f1aF24E3a452074", "feeReceiver": "0xB61E527D88831f6Cb7a4C2d43be9805438ecc44F", "lender": "0x68c4F03b8640C0393a832987147BaE7A0b27aaa7", @@ -13,8 +13,8 @@ "chainlinkPoRAddressList": "0x69a8749544fF825741979D03e33F06edC6a66f3e", "gelatoHarvester": "0x624504E11049EdD5f4754903E75D096AfceE46E3", "gelatoSweeper": "0x307C0C1F1A8b3a7153842922DfF239c66f308238", - "vaultAdapter": "0xD212fA2cf56197dD79880681807Ce4d95C9Ffa2e", - "wrapper": "0x0000000000000000000000000000000000000000" + "vaultAdapter": "0xac9901D26c8B3f2381558BD30b3e2c7963bA471A", + "wrapper": "0x7925c2f66fd1Ae8663D56D70CDcc2508b1D25233" }, "infra": { "accessControl": "0x7731129a10d51e18cDE607C5C115F26503D2c683", diff --git a/config/cap-symbiotic.json b/config/cap-symbiotic.json index 8cb3fbb9..139f31e9 100644 --- a/config/cap-symbiotic.json +++ b/config/cap-symbiotic.json @@ -11,7 +11,7 @@ "implems": { "network": "0x0c1A64E562E987e650EA82C7868eb96902B1B0d2", "networkMiddleware": "0x76BaFb2C59ea83c32af8d42c2A65852dE0580006", - "agentManager": "0x3990D05A6a9e3E195DB90E11f7b0ea0Eb14f342D" + "agentManager": "0x78F7052d1AC5633EB2fcC625195f436eCEefF3ce" } } } \ No newline at end of file diff --git a/contracts/delegation/providers/eigenlayer/EigenAgentManager.sol b/contracts/delegation/providers/eigenlayer/EigenAgentManager.sol index 317e52d2..44d70f3d 100644 --- a/contracts/delegation/providers/eigenlayer/EigenAgentManager.sol +++ b/contracts/delegation/providers/eigenlayer/EigenAgentManager.sol @@ -56,6 +56,9 @@ contract EigenAgentManager is IEigenAgentManager, UUPSUpgradeable, Access, Eigen /// 3. Add the agent to the rate oracle IRateOracle($.oracle).setRestakerRate(_agentConfig.agent, _agentConfig.delegationRate); + + /// 4. Set the coverage cap for the agent + IDelegation($.delegation).setCoverageCap(_agentConfig.agent, _agentConfig.coverageCap); } /// @inheritdoc IEigenAgentManager diff --git a/contracts/delegation/providers/symbiotic/SymbioticAgentManager.sol b/contracts/delegation/providers/symbiotic/SymbioticAgentManager.sol index 6bd63910..fe6a17cc 100644 --- a/contracts/delegation/providers/symbiotic/SymbioticAgentManager.sol +++ b/contracts/delegation/providers/symbiotic/SymbioticAgentManager.sol @@ -52,6 +52,9 @@ contract SymbioticAgentManager is ISymbioticAgentManager, UUPSUpgradeable, Acces /// 3. Add the agent to the rate oracle IRateOracle($.oracle).setRestakerRate(_agentConfig.agent, _agentConfig.delegationRate); + + /// 4. Set the coverage cap for the agent + IDelegation($.delegation).setCoverageCap(_agentConfig.agent, _agentConfig.coverageCap); } /// @inheritdoc ISymbioticAgentManager diff --git a/contracts/deploy/service/providers/symbiotic/DeployCapNetworkAdapter.sol b/contracts/deploy/service/providers/symbiotic/DeployCapNetworkAdapter.sol index 406f4345..86072ed0 100644 --- a/contracts/deploy/service/providers/symbiotic/DeployCapNetworkAdapter.sol +++ b/contracts/deploy/service/providers/symbiotic/DeployCapNetworkAdapter.sol @@ -41,10 +41,12 @@ import { SymbioticAddressbook } from "../../../utils/SymbioticUtils.sol"; import { IBurnerRouter } from "@symbioticfi/burners/src/interfaces/router/IBurnerRouter.sol"; import { IOperatorRegistry } from "@symbioticfi/core/src/interfaces/IOperatorRegistry.sol"; -import { IDefaultStakerRewards } from - "@symbioticfi/rewards/src/interfaces/defaultStakerRewards/IDefaultStakerRewards.sol"; -import { IDefaultStakerRewardsFactory } from - "@symbioticfi/rewards/src/interfaces/defaultStakerRewards/IDefaultStakerRewardsFactory.sol"; +import { + IDefaultStakerRewards +} from "@symbioticfi/rewards/src/interfaces/defaultStakerRewards/IDefaultStakerRewards.sol"; +import { + IDefaultStakerRewardsFactory +} from "@symbioticfi/rewards/src/interfaces/defaultStakerRewards/IDefaultStakerRewardsFactory.sol"; import { console } from "forge-std/console.sol"; contract DeployCapNetworkAdapter is ProxyUtils { @@ -72,21 +74,21 @@ contract DeployCapNetworkAdapter is ProxyUtils { d.eigenServiceManager = _proxy(implems.eigenServiceManager); d.agentManager = _proxy(implems.agentManager); console.log("chainId: ", block.chainid); - EigenServiceManager(d.eigenServiceManager).initialize( - infra.accessControl, - IEigenServiceManager.EigenAddresses({ - allocationManager: eigenAb.eigenAddresses.allocationManager, - delegationManager: eigenAb.eigenAddresses.delegationManager, - strategyManager: eigenAb.eigenAddresses.strategyManager, - rewardsCoordinator: eigenAb.eigenAddresses.rewardsCoordinator - }), - infra.oracle, - rewardDuration - ); - - EigenAgentManager(d.agentManager).initialize( - infra.accessControl, infra.lender, cusd, infra.delegation, d.eigenServiceManager, infra.oracle - ); + EigenServiceManager(d.eigenServiceManager) + .initialize( + infra.accessControl, + IEigenServiceManager.EigenAddresses({ + allocationManager: eigenAb.eigenAddresses.allocationManager, + delegationManager: eigenAb.eigenAddresses.delegationManager, + strategyManager: eigenAb.eigenAddresses.strategyManager, + rewardsCoordinator: eigenAb.eigenAddresses.rewardsCoordinator + }), + infra.oracle, + rewardDuration + ); + + EigenAgentManager(d.agentManager) + .initialize(infra.accessControl, infra.lender, cusd, infra.delegation, d.eigenServiceManager, infra.oracle); } function _deploySymbioticNetworkAdapterInfra( @@ -99,27 +101,30 @@ contract DeployCapNetworkAdapter is ProxyUtils { d.network = _proxy(address(implems.network)); d.networkMiddleware = _proxy(address(implems.networkMiddleware)); d.agentManager = _proxy(address(implems.agentManager)); - SymbioticNetwork(d.network).initialize( - infra.accessControl, - addressbook.registries.networkRegistry, - addressbook.registries.operatorRegistry, - addressbook.services.networkOptInService, - addressbook.services.vaultOptInService, - d.networkMiddleware, - addressbook.services.networkMiddlewareService - ); - SymbioticNetworkMiddleware(d.networkMiddleware).initialize( - infra.accessControl, - d.network, - addressbook.registries.vaultRegistry, - infra.oracle, - params.vaultEpochDuration, - params.feeAllowed - ); - - SymbioticAgentManager(d.agentManager).initialize( - infra.accessControl, infra.lender, capToken, infra.delegation, d.networkMiddleware, infra.oracle - ); + SymbioticNetwork(d.network) + .initialize( + infra.accessControl, + addressbook.registries.networkRegistry, + addressbook.registries.operatorRegistry, + addressbook.services.networkOptInService, + addressbook.services.vaultOptInService, + d.networkMiddleware, + addressbook.services.networkMiddlewareService + ); + SymbioticNetworkMiddleware(d.networkMiddleware) + .initialize( + infra.accessControl, + d.network, + addressbook.registries.vaultRegistry, + infra.oracle, + params.vaultEpochDuration, + params.feeAllowed + ); + + SymbioticAgentManager(d.agentManager) + .initialize( + infra.accessControl, infra.lender, capToken, infra.delegation, d.networkMiddleware, infra.oracle + ); d.vaultFactory = address( new CapSymbioticVaultFactory( @@ -153,6 +158,9 @@ contract DeployCapNetworkAdapter is ProxyUtils { accessControl.grantAccess( IRateOracle(infra.oracle).setRestakerRate.selector, infra.oracle, address(agentManager) ); + accessControl.grantAccess( + IDelegation(infra.delegation).setCoverageCap.selector, infra.delegation, address(agentManager) + ); accessControl.grantAccess(agentManager.addAgent.selector, address(agentManager), users.middleware_admin); } @@ -185,6 +193,9 @@ contract DeployCapNetworkAdapter is ProxyUtils { accessControl.grantAccess( IRateOracle(infra.oracle).setRestakerRate.selector, infra.oracle, address(eigenAgentManager) ); + accessControl.grantAccess( + IDelegation(infra.delegation).setCoverageCap.selector, infra.delegation, address(eigenAgentManager) + ); accessControl.grantAccess( IDelegation(infra.delegation).addAgent.selector, infra.delegation, address(eigenAgentManager) ); diff --git a/contracts/interfaces/IEigenAgentManager.sol b/contracts/interfaces/IEigenAgentManager.sol index 9a511ebd..e18b70e8 100644 --- a/contracts/interfaces/IEigenAgentManager.sol +++ b/contracts/interfaces/IEigenAgentManager.sol @@ -24,6 +24,7 @@ interface IEigenAgentManager { /// @param ltv LTV /// @param liquidationThreshold Liquidation threshold /// @param delegationRate Delegation rate + /// @param coverageCap Coverage cap struct AgentConfig { address agent; address strategy; @@ -33,6 +34,7 @@ interface IEigenAgentManager { uint256 ltv; uint256 liquidationThreshold; uint256 delegationRate; + uint256 coverageCap; } /// @notice Initialize the agent manager diff --git a/contracts/interfaces/ISymbioticAgentManager.sol b/contracts/interfaces/ISymbioticAgentManager.sol index a9ba7035..ae408d51 100644 --- a/contracts/interfaces/ISymbioticAgentManager.sol +++ b/contracts/interfaces/ISymbioticAgentManager.sol @@ -16,6 +16,14 @@ interface ISymbioticAgentManager { address cusd; } + /// @dev Agent configuration + /// @param agent Agent address + /// @param vault Vault address + /// @param rewarder Rewarder address + /// @param ltv LTV + /// @param liquidationThreshold Liquidation threshold + /// @param delegationRate Delegation rate + /// @param coverageCap Coverage cap struct AgentConfig { address agent; address vault; @@ -23,6 +31,7 @@ interface ISymbioticAgentManager { uint256 ltv; uint256 liquidationThreshold; uint256 delegationRate; + uint256 coverageCap; } /// @notice Initialize the agent manager diff --git a/test/deploy/TestDeployer.sol b/test/deploy/TestDeployer.sol index 99c8b390..d67c589f 100644 --- a/test/deploy/TestDeployer.sol +++ b/test/deploy/TestDeployer.sol @@ -348,7 +348,8 @@ contract TestDeployer is rewarder: stakerRewarder, ltv: 0.5e27, liquidationThreshold: 0.7e27, - delegationRate: 0.02e27 + delegationRate: 0.02e27, + coverageCap: type(uint256).max }); SymbioticAgentManager(env.symbiotic.networkAdapter.agentManager).addAgent(agentConfig); diff --git a/test/deploy/service/provider/eigen/InitEigenDelegations.sol b/test/deploy/service/provider/eigen/InitEigenDelegations.sol index eabfe48e..0670f3f1 100644 --- a/test/deploy/service/provider/eigen/InitEigenDelegations.sol +++ b/test/deploy/service/provider/eigen/InitEigenDelegations.sol @@ -14,13 +14,16 @@ import { } from "../../../../../contracts/delegation/providers/eigenlayer/EigenAgentManager.sol"; import { EigenServiceManager } from "../../../../../contracts/delegation/providers/eigenlayer/EigenServiceManager.sol"; -import { IAllocationManager } from - "../../../../../contracts/delegation/providers/eigenlayer/interfaces/IAllocationManager.sol"; -import { IDelegationManager } from - "../../../../../contracts/delegation/providers/eigenlayer/interfaces/IDelegationManager.sol"; +import { + IAllocationManager +} from "../../../../../contracts/delegation/providers/eigenlayer/interfaces/IAllocationManager.sol"; +import { + IDelegationManager +} from "../../../../../contracts/delegation/providers/eigenlayer/interfaces/IDelegationManager.sol"; import { IStrategy } from "../../../../../contracts/delegation/providers/eigenlayer/interfaces/IStrategy.sol"; -import { IStrategyManager } from - "../../../../../contracts/delegation/providers/eigenlayer/interfaces/IStrategyManager.sol"; +import { + IStrategyManager +} from "../../../../../contracts/delegation/providers/eigenlayer/interfaces/IStrategyManager.sol"; import { IEigenOperator } from "../../../../../contracts/interfaces/IEigenOperator.sol"; import { InfraConfig } from "../../../interfaces/TestDeployConfig.sol"; import { TimeUtils } from "../../../utils/TimeUtils.sol"; @@ -90,9 +93,8 @@ contract InitEigenDelegations is Test, EigenUtils, TimeUtils { IDelegationManager.SignatureWithExpiry memory signatureWithExpiry = IDelegationManager.SignatureWithExpiry({ signature: "", expiry: currentTotpExpiryTimestamp }); - IDelegationManager(eigenAb.eigenAddresses.delegationManager).delegateTo( - eigenOperator, signatureWithExpiry, bytes32(currentTotpExpiryTimestamp) - ); + IDelegationManager(eigenAb.eigenAddresses.delegationManager) + .delegateTo(eigenOperator, signatureWithExpiry, bytes32(currentTotpExpiryTimestamp)); vm.stopPrank(); } @@ -188,8 +190,9 @@ contract InitEigenDelegations is Test, EigenUtils, TimeUtils { operatorMetadata: "", ltv: 5e26, // 50% liquidationThreshold: 8e26, // 80% - delegationRate: 2e25 // 2% - }); + delegationRate: 2e25, // 2% + coverageCap: type(uint256).max // unlimited + }); EigenAgentManager(eigenAgentManager).addEigenAgent(agentConfig); } vm.stopPrank();