Skip to content

Commit

Permalink
Merge pull request #2 from symbioticfi/new-arch
Browse files Browse the repository at this point in the history
rename stakingController to slasher
  • Loading branch information
1kresh authored Jun 19, 2024
2 parents 804feaf + 737b67f commit d1e618c
Show file tree
Hide file tree
Showing 15 changed files with 3,329 additions and 3,329 deletions.
86 changes: 43 additions & 43 deletions script/deploy/Core.s.sol
Original file line number Diff line number Diff line change
@@ -1,49 +1,49 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.25;
// // SPDX-License-Identifier: UNLICENSED
// pragma solidity 0.8.25;

import "forge-std/Script.sol";
// import "forge-std/Script.sol";

import {MetadataService} from "src/contracts/MetadataService.sol";
import {NetworkMiddlewareService} from "src/contracts/NetworkMiddlewareService.sol";
import {NetworkOptInService} from "src/contracts/NetworkOptInService.sol";
import {NetworkRegistry} from "src/contracts/NetworkRegistry.sol";
import {OperatorOptInService} from "src/contracts/OperatorOptInService.sol";
import {OperatorRegistry} from "src/contracts/OperatorRegistry.sol";
import {VaultFactory} from "src/contracts/VaultFactory.sol";
import {Vault} from "src/contracts/vault/v1/Vault.sol";
// import {MetadataService} from "src/contracts/MetadataService.sol";
// import {NetworkMiddlewareService} from "src/contracts/NetworkMiddlewareService.sol";
// import {NetworkOptInService} from "src/contracts/NetworkOptInService.sol";
// import {NetworkRegistry} from "src/contracts/NetworkRegistry.sol";
// import {OperatorOptInService} from "src/contracts/OperatorOptInService.sol";
// import {OperatorRegistry} from "src/contracts/OperatorRegistry.sol";
// import {VaultFactory} from "src/contracts/VaultFactory.sol";
// import {Vault} from "src/contracts/vault/v1/Vault.sol";

contract CoreScript is Script {
function run(address owner) public {
vm.startBroadcast();
(,, address deployer) = vm.readCallers();
// contract CoreScript is Script {
// function run(address owner) public {
// vm.startBroadcast();
// (,, address deployer) = vm.readCallers();

VaultFactory vaultFactory = new VaultFactory(deployer);
NetworkRegistry networkRegistry = new NetworkRegistry();
OperatorRegistry operatorRegistry = new OperatorRegistry();
MetadataService operatorMetadataService = new MetadataService(address(operatorRegistry));
MetadataService networkMetadataService = new MetadataService(address(networkRegistry));
NetworkMiddlewareService networkMiddlewareService = new NetworkMiddlewareService(address(networkRegistry));
NetworkOptInService networkVaultOptInService =
new NetworkOptInService(address(networkRegistry), address(vaultFactory));
OperatorOptInService operatorVaultOptInService =
new OperatorOptInService(address(operatorRegistry), address(vaultFactory));
OperatorOptInService operatorNetworkOptInService =
new OperatorOptInService(address(operatorRegistry), address(networkRegistry));
// VaultFactory vaultFactory = new VaultFactory(deployer);
// NetworkRegistry networkRegistry = new NetworkRegistry();
// OperatorRegistry operatorRegistry = new OperatorRegistry();
// MetadataService operatorMetadataService = new MetadataService(address(operatorRegistry));
// MetadataService networkMetadataService = new MetadataService(address(networkRegistry));
// NetworkMiddlewareService networkMiddlewareService = new NetworkMiddlewareService(address(networkRegistry));
// NetworkOptInService networkVaultOptInService =
// new NetworkOptInService(address(networkRegistry), address(vaultFactory));
// OperatorOptInService operatorVaultOptInService =
// new OperatorOptInService(address(operatorRegistry), address(vaultFactory));
// OperatorOptInService operatorNetworkOptInService =
// new OperatorOptInService(address(operatorRegistry), address(networkRegistry));

vaultFactory.whitelist(
address(
new Vault(
address(vaultFactory),
address(networkRegistry),
address(networkMiddlewareService),
address(networkVaultOptInService),
address(operatorVaultOptInService),
address(operatorNetworkOptInService)
)
)
);
vaultFactory.transferOwnership(owner);
// vaultFactory.whitelist(
// address(
// new Vault(
// address(vaultFactory),
// address(networkRegistry),
// address(networkMiddlewareService),
// address(networkVaultOptInService),
// address(operatorVaultOptInService),
// address(operatorNetworkOptInService)
// )
// )
// );
// vaultFactory.transferOwnership(owner);

vm.stopBroadcast();
}
}
// vm.stopBroadcast();
// }
// }
72 changes: 36 additions & 36 deletions script/deploy/Vault.s.sol
Original file line number Diff line number Diff line change
@@ -1,41 +1,41 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.25;
// // SPDX-License-Identifier: UNLICENSED
// pragma solidity 0.8.25;

import "forge-std/Script.sol";
// import "forge-std/Script.sol";

import {IMigratablesFactory} from "src/interfaces/base/IMigratablesFactory.sol";
import {IVault} from "src/interfaces/vault/v1/IVault.sol";
// import {IMigratablesFactory} from "src/interfaces/base/IMigratablesFactory.sol";
// import {IVault} from "src/interfaces/vault/v1/IVault.sol";

contract VaultScript is Script {
function run(
address vaultFactory,
address owner,
address collateral,
uint48 epochDuration,
uint48 vetoDuration,
uint48 executeDuration,
address rewardsDistributor,
uint256 adminFee,
bool depositWhitelist
) public {
vm.startBroadcast();
// contract VaultScript is Script {
// function run(
// address vaultFactory,
// address owner,
// address collateral,
// uint48 epochDuration,
// uint48 vetoDuration,
// uint48 executeDuration,
// address rewardsDistributor,
// uint256 adminFee,
// bool depositWhitelist
// ) public {
// vm.startBroadcast();

IMigratablesFactory(vaultFactory).create(
IMigratablesFactory(vaultFactory).lastVersion(),
owner,
abi.encode(
IVault.InitParams({
collateral: collateral,
epochDuration: epochDuration,
vetoDuration: vetoDuration,
executeDuration: executeDuration,
rewardsDistributor: rewardsDistributor,
adminFee: adminFee,
depositWhitelist: depositWhitelist
})
)
);
// IMigratablesFactory(vaultFactory).create(
// IMigratablesFactory(vaultFactory).lastVersion(),
// owner,
// abi.encode(
// IVault.InitParams({
// collateral: collateral,
// epochDuration: epochDuration,
// vetoDuration: vetoDuration,
// executeDuration: executeDuration,
// rewardsDistributor: rewardsDistributor,
// adminFee: adminFee,
// depositWhitelist: depositWhitelist
// })
// )
// );

vm.stopBroadcast();
}
}
// vm.stopBroadcast();
// }
// }
8 changes: 4 additions & 4 deletions src/contracts/defaultLimiter/DefaultLimiter.sol
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,9 @@ contract DefaultLimiter is Initializable, IDefaultLimiter, AccessControlUpgradea
mapping(address vault => mapping(address operator => mapping(address network => Limit limit))) internal
_operatorNetworkLimit;

modifier onlyStakingController(address vault) {
if (IVault(vault).stakingController() != msg.sender) {
revert NotStakingController();
modifier onlySlasher(address vault) {
if (IVault(vault).slasher() != msg.sender) {
revert NotSlasher();
}
_;
}
Expand Down Expand Up @@ -194,7 +194,7 @@ contract DefaultLimiter is Initializable, IDefaultLimiter, AccessControlUpgradea
address resolver,
address operator,
uint256 slashedAmount
) external onlyStakingController(vault) {
) external onlySlasher(vault) {
uint256 networkResolverLimit_ = networkResolverLimit(vault, network, resolver);
uint256 operatorNetworkLimit_ = operatorNetworkLimit(vault, operator, network);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

import {IStakingController} from "src/interfaces/stakingController/v1/IStakingController.sol";
import {ISlasher} from "src/interfaces/slasher/v1/ISlasher.sol";
import {IRegistry} from "src/interfaces/base/IRegistry.sol";
import {IVault} from "src/interfaces/vault/v1/IVault.sol";
import {ILimiter} from "src/interfaces/ILimiter.sol";
Expand All @@ -14,9 +14,9 @@ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Ini
import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
import {Time} from "@openzeppelin/contracts/utils/types/Time.sol";

contract StakingController is Initializable, IStakingController {
contract Slasher is Initializable, ISlasher {
/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
address public immutable VAULT_FACTORY;

Expand All @@ -26,52 +26,52 @@ contract StakingController is Initializable, IStakingController {
address internal constant DEAD = address(0xdEaD);

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
address public immutable NETWORK_VAULT_OPT_IN_SERVICE;

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
address public immutable OPERATOR_VAULT_OPT_IN_SERVICE;

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
address public immutable OPERATOR_NETWORK_OPT_IN_SERVICE;

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
address public immutable NETWORK_REGISTRY;

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
address public immutable NETWORK_MIDDLEWARE_SERVICE;

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
address public vault;

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
address public limiter;

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
SlashRequest[] public slashRequests;

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
uint48 public vetoDuration;

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
uint48 public executeDuration;

Expand All @@ -96,14 +96,14 @@ contract StakingController is Initializable, IStakingController {
}

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
function slashRequestsLength() external view returns (uint256) {
return slashRequests.length;
}

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
function slashableAmountIn(
address network,
Expand All @@ -121,7 +121,7 @@ contract StakingController is Initializable, IStakingController {
}

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
function slashableAmount(address network, address resolver, address operator) public view returns (uint256) {
return Math.min(
Expand All @@ -134,7 +134,7 @@ contract StakingController is Initializable, IStakingController {
}

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
function minStakeDuring(
address network,
Expand Down Expand Up @@ -173,7 +173,7 @@ contract StakingController is Initializable, IStakingController {
}

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
function requestSlash(
address network,
Expand Down Expand Up @@ -242,7 +242,7 @@ contract StakingController is Initializable, IStakingController {
}

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
function executeSlash(uint256 slashIndex) external returns (uint256 slashedAmount) {
if (slashIndex >= slashRequests.length) {
Expand Down Expand Up @@ -281,7 +281,7 @@ contract StakingController is Initializable, IStakingController {
}

/**
* @inheritdoc IStakingController
* @inheritdoc ISlasher
*/
function vetoSlash(uint256 slashIndex) external {
if (slashIndex >= slashRequests.length) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

import {StakingController} from "./StakingController.sol";
import {Slasher} from "./Slasher.sol";
import {Registry} from "src/contracts/base/Registry.sol";

import {IStakingControllerFactory} from "src/interfaces/stakingController/v1/IStakingControllerFactory.sol";
import {ISlasherFactory} from "src/interfaces/slasher/v1/ISlasherFactory.sol";

import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";

contract StakingControllerFactory is Registry, IStakingControllerFactory {
contract SlasherFactory is Registry, ISlasherFactory {
using Clones for address;

address private immutable STAKING_CONTROLLER_IMPLEMENTATION;
address private immutable SLASHER_IMPLEMENTATION;

constructor(
address networkRegistry,
Expand All @@ -21,8 +21,8 @@ contract StakingControllerFactory is Registry, IStakingControllerFactory {
address operatorVaultOptInService,
address operatorNetworkOptInService
) {
STAKING_CONTROLLER_IMPLEMENTATION = address(
new StakingController(
SLASHER_IMPLEMENTATION = address(
new Slasher(
vaultFactory,
networkRegistry,
networkMiddlewareService,
Expand All @@ -34,14 +34,14 @@ contract StakingControllerFactory is Registry, IStakingControllerFactory {
}

/**
* @inheritdoc IStakingControllerFactory
* @inheritdoc ISlasherFactory
*/
function create(address vault, uint48 vetoDuration, uint48 executeDuration) external returns (address) {
address stakingController = STAKING_CONTROLLER_IMPLEMENTATION.clone();
StakingController(stakingController).initialize(vault, vetoDuration, executeDuration);
address slasher = SLASHER_IMPLEMENTATION.clone();
Slasher(slasher).initialize(vault, vetoDuration, executeDuration);

_addEntity(stakingController);
_addEntity(slasher);

return stakingController;
return slasher;
}
}
Loading

0 comments on commit d1e618c

Please sign in to comment.