Skip to content

Commit

Permalink
extension -> plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrey Korokhov committed May 16, 2024
1 parent 8502d2a commit 8215686
Show file tree
Hide file tree
Showing 13 changed files with 88 additions and 89 deletions.
20 changes: 10 additions & 10 deletions script/deploy/Core.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import "forge-std/Script.sol";

import {MigratablesRegistry} from "src/contracts/MigratablesRegistry.sol";
import {NonMigratablesRegistry} from "src/contracts/NonMigratablesRegistry.sol";
import {MetadataExtension} from "src/contracts/extensions/MetadataExtension.sol";
import {MiddlewareExtension} from "src/contracts/extensions/MiddlewareExtension.sol";
import {NetworkOptInExtension} from "src/contracts/extensions/NetworkOptInExtension.sol";
import {MetadataPlugin} from "src/contracts/plugins/MetadataPlugin.sol";
import {MiddlewarePlugin} from "src/contracts/plugins/MiddlewarePlugin.sol";
import {NetworkOptInPlugin} from "src/contracts/plugins/NetworkOptInPlugin.sol";

import {Vault} from "src/contracts/Vault.sol";

Expand All @@ -21,18 +21,18 @@ contract CoreScript is Script {
NonMigratablesRegistry operatorRegistry = new NonMigratablesRegistry();
MigratablesRegistry vaultRegistry = new MigratablesRegistry(owner);
NonMigratablesRegistry networkRegistry = new NonMigratablesRegistry();
MetadataExtension operatorMetadataExtension = new MetadataExtension(address(operatorRegistry));
MetadataExtension networkMetadataExtension = new MetadataExtension(address(networkRegistry));
MiddlewareExtension networkMiddlewareExtension = new MiddlewareExtension(address(networkRegistry));
NetworkOptInExtension networkOptInExtension =
new NetworkOptInExtension(address(operatorRegistry), address(networkRegistry));
MetadataPlugin operatorMetadataPlugin = new MetadataPlugin(address(operatorRegistry));
MetadataPlugin networkMetadataPlugin = new MetadataPlugin(address(networkRegistry));
MiddlewarePlugin networkMiddlewarePlugin = new MiddlewarePlugin(address(networkRegistry));
NetworkOptInPlugin networkOptInPlugin =
new NetworkOptInPlugin(address(operatorRegistry), address(networkRegistry));

address vault = address(
new Vault(
address(networkRegistry),
address(operatorRegistry),
address(networkMiddlewareExtension),
address(networkOptInExtension)
address(networkMiddlewarePlugin),
address(networkOptInPlugin)
)
);
vaultRegistry.whitelist(vault);
Expand Down
6 changes: 3 additions & 3 deletions src/contracts/Extension.sol → src/contracts/Plugin.sol
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

import {IExtension} from "src/interfaces/IExtension.sol";
import {IPlugin} from "src/interfaces/IPlugin.sol";
import {IFactory} from "src/interfaces/IFactory.sol";

contract Extension is IExtension {
contract Plugin is IPlugin {
/**
* @inheritdoc IExtension
* @inheritdoc IPlugin
*/
address public immutable REGISTRY;

Expand Down
23 changes: 11 additions & 12 deletions src/contracts/Vault.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ pragma solidity 0.8.25;
import {IVault} from "src/interfaces/IVault.sol";
import {ICollateral} from "src/interfaces/ICollateral.sol";
import {IFactory} from "src/interfaces/IFactory.sol";
import {IMiddlewareExtension} from "src/interfaces/extensions/IMiddlewareExtension.sol";
import {INetworkOptInExtension} from "src/interfaces/extensions/INetworkOptInExtension.sol";
import {IMiddlewarePlugin} from "src/interfaces/plugins/IMiddlewarePlugin.sol";
import {INetworkOptInPlugin} from "src/interfaces/plugins/INetworkOptInPlugin.sol";

import {MigratableEntity} from "./MigratableEntity.sol";
import {ERC6372} from "./utils/ERC6372.sol";
Expand Down Expand Up @@ -57,12 +57,12 @@ contract Vault is MigratableEntity, ERC6372, ReentrancyGuardUpgradeable, AccessC
/**
* @inheritdoc IVault
*/
address public immutable NETWORK_MIDDLEWARE_EXTENSION;
address public immutable NETWORK_MIDDLEWARE_PLUGIN;

/**
* @inheritdoc IVault
*/
address public immutable NETWORK_OPT_IN_EXTENSION;
address public immutable NETWORK_OPT_IN_PLUGIN;

/**
* @inheritdoc IVault
Expand Down Expand Up @@ -190,7 +190,7 @@ contract Vault is MigratableEntity, ERC6372, ReentrancyGuardUpgradeable, AccessC
}

modifier onlyNetworkMiddleware(address network) {
if (IMiddlewareExtension(NETWORK_MIDDLEWARE_EXTENSION).middleware(network) != msg.sender) {
if (IMiddlewarePlugin(NETWORK_MIDDLEWARE_PLUGIN).middleware(network) != msg.sender) {
revert NotNetworkMiddleware();
}
_;
Expand All @@ -213,13 +213,13 @@ contract Vault is MigratableEntity, ERC6372, ReentrancyGuardUpgradeable, AccessC
constructor(
address networkRegistry,
address operatorRegistry,
address networkMiddlewareExtension,
address networkOptInExtension
address networkMiddlewarePlugin,
address networkOptInPlugin
) {
NETWORK_REGISTRY = networkRegistry;
OPERATOR_REGISTRY = operatorRegistry;
NETWORK_MIDDLEWARE_EXTENSION = networkMiddlewareExtension;
NETWORK_OPT_IN_EXTENSION = networkOptInExtension;
NETWORK_MIDDLEWARE_PLUGIN = networkMiddlewarePlugin;
NETWORK_OPT_IN_PLUGIN = networkOptInPlugin;
}

/**
Expand Down Expand Up @@ -512,9 +512,8 @@ contract Vault is MigratableEntity, ERC6372, ReentrancyGuardUpgradeable, AccessC
revert NetworkNotOptedIn();
}

bool optedInNetwork = INetworkOptInExtension(NETWORK_OPT_IN_EXTENSION).isOperatorOptedIn(operator, network);
uint48 lastOperatorOptOut =
INetworkOptInExtension(NETWORK_OPT_IN_EXTENSION).lastOperatorOptOut(operator, network);
bool optedInNetwork = INetworkOptInPlugin(NETWORK_OPT_IN_PLUGIN).isOperatorOptedIn(operator, network);
uint48 lastOperatorOptOut = INetworkOptInPlugin(NETWORK_OPT_IN_PLUGIN).lastOperatorOptOut(operator, network);
if (!optedInNetwork && lastOperatorOptOut < block.timestamp - epochDuration) {
revert OperatorNotOptedInNetwork();
}
Expand Down
24 changes: 0 additions & 24 deletions src/contracts/extensions/MiddlewareExtension.sol

This file was deleted.

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

import {IMetadataExtension} from "src/interfaces/extensions/IMetadataExtension.sol";
import {IMetadataPlugin} from "src/interfaces/plugins/IMetadataPlugin.sol";

import {Extension} from "src/contracts/Extension.sol";
import {Plugin} from "src/contracts/Plugin.sol";

contract MetadataExtension is Extension, IMetadataExtension {
contract MetadataPlugin is Plugin, IMetadataPlugin {
/**
* @inheritdoc IMetadataExtension
* @inheritdoc IMetadataPlugin
*/
mapping(address entity => string value) public metadataURL;

constructor(address registry) Extension(registry) {}
constructor(address registry) Plugin(registry) {}

/**
* @inheritdoc IMetadataExtension
* @inheritdoc IMetadataPlugin
*/
function setMetadataURL(string calldata metadataURL_) external onlyEntity {
metadataURL[msg.sender] = metadataURL_;
Expand Down
24 changes: 24 additions & 0 deletions src/contracts/plugins/MiddlewarePlugin.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

import {IMiddlewarePlugin} from "src/interfaces/plugins/IMiddlewarePlugin.sol";

import {Plugin} from "src/contracts/Plugin.sol";

contract MiddlewarePlugin is Plugin, IMiddlewarePlugin {
/**
* @inheritdoc IMiddlewarePlugin
*/
mapping(address entity => address value) public middleware;

constructor(address registry) Plugin(registry) {}

/**
* @inheritdoc IMiddlewarePlugin
*/
function setMiddleware(address middleware_) external onlyEntity {
middleware[msg.sender] = middleware_;

emit SetMiddleware(msg.sender, middleware_);
}
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

import {INetworkOptInExtension} from "src/interfaces/extensions/INetworkOptInExtension.sol";
import {INetworkOptInPlugin} from "src/interfaces/plugins/INetworkOptInPlugin.sol";
import {IFactory} from "src/interfaces/IFactory.sol";

import {Extension} from "src/contracts/Extension.sol";
import {Plugin} from "src/contracts/Plugin.sol";
import {ERC6372} from "src/contracts/utils/ERC6372.sol";

contract NetworkOptInExtension is Extension, ERC6372, INetworkOptInExtension {
contract NetworkOptInPlugin is Plugin, ERC6372, INetworkOptInPlugin {
/**
* @inheritdoc INetworkOptInExtension
* @inheritdoc INetworkOptInPlugin
*/
address public immutable NETWORK_REGISTRY;

/**
* @inheritdoc INetworkOptInExtension
* @inheritdoc INetworkOptInPlugin
*/
mapping(address operator => mapping(address network => bool value)) public isOperatorOptedIn;

/**
* @inheritdoc INetworkOptInExtension
* @inheritdoc INetworkOptInPlugin
*/
mapping(address operator => mapping(address network => uint48 timestamp)) public lastOperatorOptOut;

Expand All @@ -30,12 +30,12 @@ contract NetworkOptInExtension is Extension, ERC6372, INetworkOptInExtension {
_;
}

constructor(address operatorRegistry, address networkRegistry) Extension(operatorRegistry) {
constructor(address operatorRegistry, address networkRegistry) Plugin(operatorRegistry) {
NETWORK_REGISTRY = networkRegistry;
}

/**
* @inheritdoc INetworkOptInExtension
* @inheritdoc INetworkOptInPlugin
*/
function optIn(address network) external onlyEntity isNetwork(network) {
if (isOperatorOptedIn[msg.sender][network]) {
Expand All @@ -46,7 +46,7 @@ contract NetworkOptInExtension is Extension, ERC6372, INetworkOptInExtension {
}

/**
* @inheritdoc INetworkOptInExtension
* @inheritdoc INetworkOptInPlugin
*/
function optOut(address network) external onlyEntity isNetwork(network) {
if (!isOperatorOptedIn[msg.sender][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;

interface IExtension {
interface IPlugin {
error NotEntity();

/**
Expand Down
4 changes: 2 additions & 2 deletions src/interfaces/IVault.sol
Original file line number Diff line number Diff line change
Expand Up @@ -154,9 +154,9 @@ interface IVault {
*/
function OPERATOR_REGISTRY() external view returns (address);

function NETWORK_MIDDLEWARE_EXTENSION() external view returns (address);
function NETWORK_MIDDLEWARE_PLUGIN() external view returns (address);

function NETWORK_OPT_IN_EXTENSION() external view returns (address);
function NETWORK_OPT_IN_PLUGIN() external view returns (address);

/**
* @notice Get a URL with a vault's metadata.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

import {IExtension} from "src/interfaces/IExtension.sol";
import {IPlugin} from "src/interfaces/IPlugin.sol";

interface IMetadataExtension is IExtension {
interface IMetadataPlugin is IPlugin {
/**
* @notice Emitted when a metadata URL is set for an entity.
* @param entity address of the entity
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

import {IExtension} from "src/interfaces/IExtension.sol";
import {IPlugin} from "src/interfaces/IPlugin.sol";

interface IMiddlewareExtension is IExtension {
interface IMiddlewarePlugin is IPlugin {
/**
* @notice Emitted when a middleware is set for an entity.
* @param entity address of the entity
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

import {IExtension} from "src/interfaces/IExtension.sol";
import {IPlugin} from "src/interfaces/IPlugin.sol";

interface INetworkOptInExtension is IExtension {
interface INetworkOptInPlugin is IPlugin {
error NotNetwork();
error OperatorAlreadyOptedIn();
error OperatorNotOptedIn();
Expand Down
32 changes: 16 additions & 16 deletions test/Vault.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import {Test, console2} from "forge-std/Test.sol";

import {MigratablesRegistry} from "src/contracts/MigratablesRegistry.sol";
import {NonMigratablesRegistry} from "src/contracts/NonMigratablesRegistry.sol";
import {MetadataExtension} from "src/contracts/extensions/MetadataExtension.sol";
import {MiddlewareExtension} from "src/contracts/extensions/MiddlewareExtension.sol";
import {NetworkOptInExtension} from "src/contracts/extensions/NetworkOptInExtension.sol";
import {MetadataPlugin} from "src/contracts/plugins/MetadataPlugin.sol";
import {MiddlewarePlugin} from "src/contracts/plugins/MiddlewarePlugin.sol";
import {NetworkOptInPlugin} from "src/contracts/plugins/NetworkOptInPlugin.sol";

import {Vault} from "src/contracts/Vault.sol";
import {IVault} from "src/interfaces/IVault.sol";
Expand All @@ -30,10 +30,10 @@ contract VaultTest is Test {
NonMigratablesRegistry operatorRegistry;
MigratablesRegistry vaultRegistry;
NonMigratablesRegistry networkRegistry;
MetadataExtension operatorMetadataExtension;
MetadataExtension networkMetadataExtension;
MiddlewareExtension networkMiddlewareExtension;
NetworkOptInExtension networkOptInExtension;
MetadataPlugin operatorMetadataPlugin;
MetadataPlugin networkMetadataPlugin;
MiddlewarePlugin networkMiddlewarePlugin;
NetworkOptInPlugin networkOptInPlugin;

IVault vault;

Expand All @@ -47,18 +47,18 @@ contract VaultTest is Test {
operatorRegistry = new NonMigratablesRegistry();
vaultRegistry = new MigratablesRegistry(owner);
networkRegistry = new NonMigratablesRegistry();
operatorMetadataExtension = new MetadataExtension(address(operatorRegistry));
networkMetadataExtension = new MetadataExtension(address(networkRegistry));
networkMiddlewareExtension = new MiddlewareExtension(address(networkRegistry));
networkOptInExtension = new NetworkOptInExtension(address(operatorRegistry), address(networkRegistry));
operatorMetadataPlugin = new MetadataPlugin(address(operatorRegistry));
networkMetadataPlugin = new MetadataPlugin(address(networkRegistry));
networkMiddlewarePlugin = new MiddlewarePlugin(address(networkRegistry));
networkOptInPlugin = new NetworkOptInPlugin(address(operatorRegistry), address(networkRegistry));

vaultRegistry.whitelist(
address(
new Vault(
address(networkRegistry),
address(operatorRegistry),
address(networkMiddlewareExtension),
address(networkOptInExtension)
address(networkMiddlewarePlugin),
address(networkOptInPlugin)
)
)
);
Expand Down Expand Up @@ -2641,7 +2641,7 @@ contract VaultTest is Test {
function _registerNetwork(address user, address middleware) internal {
vm.startPrank(user);
networkRegistry.register();
networkMiddlewareExtension.setMiddleware(middleware);
networkMiddlewarePlugin.setMiddleware(middleware);
vm.stopPrank();
}

Expand Down Expand Up @@ -2763,13 +2763,13 @@ contract VaultTest is Test {

function _networkOptIn(address user, address network) internal {
vm.startPrank(user);
networkOptInExtension.optIn(network);
networkOptInPlugin.optIn(network);
vm.stopPrank();
}

function _networkOptOut(address user, address network) internal {
vm.startPrank(user);
networkOptInExtension.optOut(network);
networkOptInPlugin.optOut(network);
vm.stopPrank();
}
}

0 comments on commit 8215686

Please sign in to comment.