From 71d2630d64ec19a3ae9edbc73dca024a9e93dc59 Mon Sep 17 00:00:00 2001 From: Krishang Date: Thu, 31 Aug 2023 13:01:55 -0400 Subject: [PATCH 1/2] Cleanup natspec comments across repo files --- src/core/Router.sol | 20 ++++++--- src/core/RouterPayable.sol | 8 +++- src/example/RouterImmutable.sol | 2 +- src/example/RouterRegistryConstrained.sol | 12 ++--- src/interface/IExtension.sol | 11 +++-- src/interface/IExtensionManager.sol | 54 ++++++++++++++--------- src/interface/IRouter.sol | 24 ++++++---- src/interface/IRouterPayable.sol | 8 ++-- src/interface/IRouterState.sol | 14 +++--- src/interface/IRouterStateGetters.sol | 21 ++++++--- src/lib/ExtensionManagerStorage.sol | 9 ++-- src/lib/StringSet.sol | 4 +- src/presets/BaseRouter.sol | 12 +++-- src/presets/BaseRouterWithDefaults.sol | 29 +++++++++--- src/presets/DefaultExtensionSet.sol | 24 +++++++--- src/presets/ExtensionManager.sol | 39 +++++++++++++--- test/utils/MockContracts.sol | 3 ++ 17 files changed, 206 insertions(+), 88 deletions(-) diff --git a/src/core/Router.sol b/src/core/Router.sol index 71bbfae..171639b 100644 --- a/src/core/Router.sol +++ b/src/core/Router.sol @@ -1,14 +1,20 @@ // SPDX-License-Identifier: MIT -// @author: thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) - pragma solidity ^0.8.0; import "../interface/IRouter.sol"; +/// @title ERC-7504 Dynamic Contracts: Router. +/// @author thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) +/// @notice Routes an incoming call to an appropriate implementation address. + abstract contract Router is IRouter { + /** + * @notice delegateCalls the appropriate implementation address for the given incoming function call. + * @dev The implementation address to delegateCall MUST be retrieved from calling `getImplementationForFunction` with the + * incoming call's function selector. + */ fallback() external payable virtual { - /// @dev delegate calls the appropriate implementation smart contract for a given function. address implementation = getImplementationForFunction(msg.sig); require(implementation != address(0), "Router: function does not exist."); _delegate(implementation); @@ -40,6 +46,10 @@ abstract contract Router is IRouter { } } - /// @dev Returns the implementation contract address for a given function signature. - function getImplementationForFunction(bytes4 _functionSelector) public view virtual returns (address); + /** + * @notice Returns the implementation address to delegateCall for the given function selector. + * @param _functionSelector The function selector to get the implementation address for. + * @return implementation The implementation address to delegateCall for the given function selector. + */ + function getImplementationForFunction(bytes4 _functionSelector) public view virtual returns (address implementation); } \ No newline at end of file diff --git a/src/core/RouterPayable.sol b/src/core/RouterPayable.sol index edbd41e..2913eda 100644 --- a/src/core/RouterPayable.sol +++ b/src/core/RouterPayable.sol @@ -1,10 +1,14 @@ // SPDX-License-Identifier: MIT -// @author: thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) - pragma solidity ^0.8.0; import "./Router.sol"; +/// @title IRouterPayable. +/// @author thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) +/// @notice A Router with `receive` as a fixed function. + abstract contract RouterPayable is Router { + + /// @notice Lets a contract receive native tokens. receive() external payable virtual {} } \ No newline at end of file diff --git a/src/example/RouterImmutable.sol b/src/example/RouterImmutable.sol index 62aea18..771643c 100644 --- a/src/example/RouterImmutable.sol +++ b/src/example/RouterImmutable.sol @@ -17,7 +17,7 @@ contract RouterImmutable is BaseRouterWithDefaults { Overrides //////////////////////////////////////////////////////////////*/ - /// @dev Returns whether a function can be disabled in an extension in the given execution context. + /// @dev Returns whether all relevant permission and other checks are met before any upgrade. function isAuthorizedCallToUpgrade() internal view virtual override returns (bool) { return false; } diff --git a/src/example/RouterRegistryConstrained.sol b/src/example/RouterRegistryConstrained.sol index 2479d80..846eafa 100644 --- a/src/example/RouterRegistryConstrained.sol +++ b/src/example/RouterRegistryConstrained.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.0; -import "../presets/BaseRouterWithDefaults.sol"; +import "../presets/BaseRouter.sol"; /** * This smart contract is an EXAMPLE, and is not meant for use in production. @@ -26,18 +26,18 @@ contract ExtensionRegistry { /** * This smart contract is an EXAMPLE, and is not meant for use in production. */ -contract RouterRegistryConstrained is BaseRouterWithDefaults { +contract RouterRegistryConstrained is BaseRouter { address public admin; ExtensionRegistry public registry; - // @dev Cannot initialize with extensions before registry is set, so we pass empty array to base constructor. - constructor(address _registry) BaseRouterWithDefaults(new Extension[](0)) { + /// @dev Cannot initialize with extensions before registry is set, so we pass empty array to base constructor. + constructor(address _registry) { admin = msg.sender; registry = ExtensionRegistry(_registry); } - // @dev Sets the admin address. + /// @dev Sets the admin address. function setAdmin(address _admin) external { require(msg.sender == admin, "RouterUpgradeable: Only admin can set a new admin"); admin = _admin; @@ -47,7 +47,7 @@ contract RouterRegistryConstrained is BaseRouterWithDefaults { Overrides //////////////////////////////////////////////////////////////*/ - /// @dev Returns whether a function can be disabled in an extension in the given execution context. + /// @dev Returns whether all relevant permission and other checks are met before any upgrade. function isAuthorizedCallToUpgrade() internal view virtual override returns (bool) { return msg.sender == admin; } diff --git a/src/interface/IExtension.sol b/src/interface/IExtension.sol index f2b9cf4..cb3dca5 100644 --- a/src/interface/IExtension.sol +++ b/src/interface/IExtension.sol @@ -1,15 +1,18 @@ // SPDX-License-Identifier: MIT -// @author: thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) - pragma solidity ^0.8.0; + +/// @title IExtension +/// @author thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) +/// @notice Provides an `Extension` abstraction for a router's implementation contracts. + interface IExtension { /*/////////////////////////////////////////////////////////////// Structs //////////////////////////////////////////////////////////////*/ /** - * @notice A extension's metadata. + * @notice An interface to describe an extension's metadata. * * @param name The unique name of the extension. * @param metadataURI The URI where the metadata for the extension lives. @@ -22,7 +25,7 @@ interface IExtension { } /** - * @notice An interface to describe a extension's function. + * @notice An interface to describe an extension's function. * * @param functionSelector The 4 byte selector of the function. * @param functionSignature Function signature as a string. E.g. "transfer(address,address,uint256)" diff --git a/src/interface/IExtensionManager.sol b/src/interface/IExtensionManager.sol index b5398aa..9ed6b17 100644 --- a/src/interface/IExtensionManager.sol +++ b/src/interface/IExtensionManager.sol @@ -1,56 +1,70 @@ // SPDX-License-Identifier: MIT - pragma solidity ^0.8.0; import "./IExtension.sol"; +/// @title IExtensionManager +/// @author thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) +/// @notice Defined storage and API for managing a router's extensions. + interface IExtensionManager is IExtension { + /*/////////////////////////////////////////////////////////////// + Events + //////////////////////////////////////////////////////////////*/ + + /// @dev Emitted when a extension is added. + event ExtensionAdded(string indexed name, address indexed implementation, Extension extension); + + /// @dev Emitted when a extension is replaced. + event ExtensionReplaced(string indexed name, address indexed implementation, Extension extension); + + /// @dev Emitted when a extension is removed. + event ExtensionRemoved(string indexed name, Extension extension); + + /// @dev Emitted when a function is enabled i.e. made callable. + event FunctionEnabled(string indexed name, bytes4 indexed functionSelector, ExtensionFunction extFunction, ExtensionMetadata extMetadata); + + /// @dev Emitted when a function is disabled i.e. made un-callable. + event FunctionDisabled(string indexed name, bytes4 indexed functionSelector, ExtensionMetadata extMetadata); + /*/////////////////////////////////////////////////////////////// External functions //////////////////////////////////////////////////////////////*/ /** * @notice Add a new extension to the router. + * @param extension The extension to add. */ function addExtension(Extension memory extension) external; /** * @notice Fully replace an existing extension of the router. + * @dev The extension with name `extension.name` is the extension being replaced. + * @param extension The extension to replace or overwrite. */ function replaceExtension(Extension memory extension) external; /** * @notice Remove an existing extension from the router. + * @param extensionName The name of the extension to remove. */ function removeExtension(string memory extensionName) external; /** * @notice Enables a single function in an existing extension. + * @dev Makes the given function callable on the router. + * + * @param extensionName The name of the extension to which `extFunction` belongs. + * @param extFunction The function to enable. */ function enableFunctionInExtension(string memory extensionName, ExtensionFunction memory extFunction) external; /** * @notice Disables a single function in an Extension. + * + * @param extensionName The name of the extension to which the function of `functionSelector` belongs. + * @param functionSelector The function to disable. */ function disableFunctionInExtension(string memory extensionName, bytes4 functionSelector) external; - - /*/////////////////////////////////////////////////////////////// - Events - //////////////////////////////////////////////////////////////*/ - - /// @dev Emitted when a extension is added. - event ExtensionAdded(string indexed name, address indexed implementation, Extension extension); - - /// @dev Emitted when a extension is added. - event ExtensionReplaced(string indexed name, address indexed implementation, Extension extension); - - /// @dev Emitted when a extension is added. - event ExtensionRemoved(string indexed name, Extension extension); - - /// @dev Emitted when a function is updated. - event FunctionAdded(string indexed name, bytes4 indexed functionSelector, ExtensionFunction extFunction, ExtensionMetadata extMetadata); - - /// @dev Emitted when a function is removed. - event FunctionRemoved(string indexed name, bytes4 indexed functionSelector, ExtensionMetadata extMetadata); } \ No newline at end of file diff --git a/src/interface/IRouter.sol b/src/interface/IRouter.sol index 5cf86fc..7db14ec 100644 --- a/src/interface/IRouter.sol +++ b/src/interface/IRouter.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT - pragma solidity ^0.8.0; -/** - * @title ERC-7504 Dynamic Contracts. - * @dev Fallback function delegateCalls `getImplementationForFunction(msg.sig)` for a given incoming call. - * NOTE: The ERC-165 identifier for this interface is 0xce0b6013. - */ +/// @title ERC-7504 Dynamic Contracts: IRouter. +/// @author thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) +/// @notice Routes an incoming call to an appropriate implementation address. +/// @dev Fallback function delegateCalls `getImplementationForFunction(msg.sig)` for a given incoming call. +/// NOTE: The ERC-165 identifier for this interface is 0xce0b6013. + interface IRouter { /** @@ -16,6 +16,14 @@ interface IRouter { */ fallback() external payable; - /// @dev Returns the implementation address to delegateCall for the given function selector. - function getImplementationForFunction(bytes4 _functionSelector) external view returns (address); + /*/////////////////////////////////////////////////////////////// + View Functions + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Returns the implementation address to delegateCall for the given function selector. + * @param _functionSelector The function selector to get the implementation address for. + * @return implementation The implementation address to delegateCall for the given function selector. + */ + function getImplementationForFunction(bytes4 _functionSelector) external view returns (address implementation); } \ No newline at end of file diff --git a/src/interface/IRouterPayable.sol b/src/interface/IRouterPayable.sol index c437a8a..82ca0eb 100644 --- a/src/interface/IRouterPayable.sol +++ b/src/interface/IRouterPayable.sol @@ -1,11 +1,13 @@ // SPDX-License-Identifier: MIT -// @author: thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) - pragma solidity ^0.8.0; import "./IRouter.sol"; -/// @dev See {IRouter}. +/// @title IRouterPayable. +/// @author thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) +/// @notice A Router with `receive` as a fixed function. + interface IRouterPayable is IRouter { + /// @notice Lets a contract receive native tokens. receive() external payable; } \ No newline at end of file diff --git a/src/interface/IRouterState.sol b/src/interface/IRouterState.sol index d1ccf15..c0b5fec 100644 --- a/src/interface/IRouterState.sol +++ b/src/interface/IRouterState.sol @@ -1,19 +1,21 @@ // SPDX-License-Identifier: MIT - pragma solidity ^0.8.0; import "./IExtension.sol"; -/** - * @title ERC-7504 Dynamic Contracts. - * NOTE: The ERC-165 identifier for this interface is 0x4a00cc48. - */ +/// @title ERC-7504 Dynamic Contracts: IRouterState. +/// @author thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) +/// @notice Defines an API to expose a router's extensions. + interface IRouterState is IExtension { /*/////////////////////////////////////////////////////////////// View Functions //////////////////////////////////////////////////////////////*/ - /// @dev Returns all extensions of the Router. + /** + * @notice Returns all extensions of the Router. + * @return allExtensions An array of all extensions. + */ function getAllExtensions() external view returns (Extension[] memory allExtensions); } \ No newline at end of file diff --git a/src/interface/IRouterStateGetters.sol b/src/interface/IRouterStateGetters.sol index 977c689..5593a23 100644 --- a/src/interface/IRouterStateGetters.sol +++ b/src/interface/IRouterStateGetters.sol @@ -1,18 +1,29 @@ // SPDX-License-Identifier: MIT -// @author: thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) - pragma solidity ^0.8.0; import "./IExtension.sol"; +/// @title IRouterStateGetters. +/// @author thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) +/// @notice Helper view functions to inspect a router's state. + interface IRouterStateGetters is IExtension { + /*/////////////////////////////////////////////////////////////// View functions //////////////////////////////////////////////////////////////*/ - /// @dev Returns the extension metadata for a given function. - function getMetadataForFunction(bytes4 functionSelector) external view returns (ExtensionMetadata memory); + /** + * @notice Returns the extension metadata for a given function. + * @param functionSelector The function selector to get the extension metadata for. + * @return metadata The extension metadata for a given function. + */ + function getMetadataForFunction(bytes4 functionSelector) external view returns (ExtensionMetadata memory metadata); - /// @dev Returns the extension metadata and functions for a given extension. + /** + * @notice Returns the extension metadata and functions for a given extension. + * @param extensionName The name of the extension to get the metadata and functions for. + * @return extension The extension metadata and functions for a given extension. + */ function getExtension(string memory extensionName) external view returns (Extension memory); } \ No newline at end of file diff --git a/src/lib/ExtensionManagerStorage.sol b/src/lib/ExtensionManagerStorage.sol index bfd4c88..e9a46fa 100644 --- a/src/lib/ExtensionManagerStorage.sol +++ b/src/lib/ExtensionManagerStorage.sol @@ -1,18 +1,20 @@ // SPDX-License-Identifier: MIT -// @author: thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) - pragma solidity ^0.8.0; import "./StringSet.sol"; import "../interface/IExtension.sol"; +/// @title IExtensionManagerStorage +/// @author thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) +/// @notice Defined storage for managing a router's extensions. + library ExtensionManagerStorage { /// @custom:storage-location erc7201:extension.manager.storage bytes32 public constant EXTENSION_MANAGER_STORAGE_POSITION = keccak256(abi.encode(uint256(keccak256("extension.manager.storage")) - 1)); struct Data { - /// @dev Set of names of all extensions stored. + /// @dev Set of names of all extensions of the router. StringSet.Set extensionNames; /// @dev Mapping from extension name => `Extension` i.e. extension metadata and functions. mapping(string => IExtension.Extension) extensions; @@ -20,6 +22,7 @@ library ExtensionManagerStorage { mapping(bytes4 => IExtension.ExtensionMetadata) extensionMetadata; } + /// @dev Returns access to the extension manager's storage. function data() internal pure returns (Data storage data_) { bytes32 position = EXTENSION_MANAGER_STORAGE_POSITION; assembly { diff --git a/src/lib/StringSet.sol b/src/lib/StringSet.sol index 28811eb..950db3b 100644 --- a/src/lib/StringSet.sol +++ b/src/lib/StringSet.sol @@ -1,6 +1,4 @@ -// SPDX-License-Identifier: Apache 2.0 -// @author: thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) - +// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library StringSet { diff --git a/src/presets/BaseRouter.sol b/src/presets/BaseRouter.sol index bffefdb..f88b86f 100644 --- a/src/presets/BaseRouter.sol +++ b/src/presets/BaseRouter.sol @@ -1,14 +1,20 @@ // SPDX-License-Identifier: MIT -// @author: thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) - pragma solidity ^0.8.0; import "../core/Router.sol"; import "./ExtensionManager.sol"; +/// @title BaseRouter +/// @author thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) +/// @notice A preset Router + ExtensionManager. + abstract contract BaseRouter is Router, ExtensionManager { - /// @dev Returns the implementation contract address for a given function signature. + /** + * @notice Returns the implementation address to delegateCall for the given function selector. + * @param _functionSelector The function selector to get the implementation address for. + * @return implementation The implementation address to delegateCall for the given function selector. + */ function getImplementationForFunction(bytes4 _functionSelector) public view virtual override returns (address) { return getMetadataForFunction(_functionSelector).implementation; } diff --git a/src/presets/BaseRouterWithDefaults.sol b/src/presets/BaseRouterWithDefaults.sol index 3c3818e..7af3b2b 100644 --- a/src/presets/BaseRouterWithDefaults.sol +++ b/src/presets/BaseRouterWithDefaults.sol @@ -1,18 +1,22 @@ // SPDX-License-Identifier: MIT -// @author: thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) - pragma solidity ^0.8.0; import "../core/Router.sol"; import "./ExtensionManager.sol"; import "./DefaultExtensionSet.sol"; +/// @title BaseRouterWithDefaults +/// @author thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) +/// @notice A preset Router + ExtensionManager that can be initialized with a set of default extensions on deployment. + abstract contract BaseRouterWithDefaults is Router, ExtensionManager { using StringSet for StringSet.Set; + /// @notice The address where the router's default extension set is stored. address public immutable defaultExtensions; - + + /// @notice Initialize the Router with a set of default extensions. constructor(Extension[] memory _extensions) { defaultExtensions = address(new DefaultExtensionSet(_extensions)); } @@ -22,7 +26,10 @@ abstract contract BaseRouterWithDefaults is Router, ExtensionManager { //////////////////////////////////////////////////////////////*/ - /// @notice Returns all extensions of the Router. + /** + * @notice Returns all extensions of the Router. + * @return allExtensions An array of all extensions. + */ function getAllExtensions() external view override returns (Extension[] memory allExtensions) { Extension[] memory defaults = IRouterState(defaultExtensions).getAllExtensions(); @@ -55,7 +62,11 @@ abstract contract BaseRouterWithDefaults is Router, ExtensionManager { } } - /// @notice Returns the extension metadata for a given function. + /** + * @notice Returns the extension metadata for a given function. + * @param _functionSelector The function selector to get the extension metadata for. + * @return metadata The extension metadata for a given function. + */ function getMetadataForFunction(bytes4 _functionSelector) public view override returns (ExtensionMetadata memory) { ExtensionMetadata memory defaultMetadata = IRouterStateGetters(defaultExtensions).getMetadataForFunction(_functionSelector); ExtensionMetadata memory nonDefaultMetadata = _extensionManagerStorage().extensionMetadata[_functionSelector]; @@ -63,7 +74,11 @@ abstract contract BaseRouterWithDefaults is Router, ExtensionManager { return nonDefaultMetadata.implementation != address(0) ? nonDefaultMetadata : defaultMetadata; } - /// @notice Returns the extension metadata and functions for a given extension. + /** + * @notice Returns the extension metadata and functions for a given extension. + * @param extensionName The name of the extension to get the metadata and functions for. + * @return extension The extension metadata and functions for a given extension. + */ function getExtension(string memory extensionName) public view override returns (Extension memory) { Extension memory defaultExt = IRouterStateGetters(defaultExtensions).getExtension(extensionName); Extension memory nonDefaultExt = _extensionManagerStorage().extensions[extensionName]; @@ -102,7 +117,7 @@ abstract contract BaseRouterWithDefaults is Router, ExtensionManager { Overriden internal functions //////////////////////////////////////////////////////////////*/ - /// @dev Enables a function in an Extension. + /// @dev Enables a function in an Extension i.e. makes the function callable function _enableFunctionInExtension(string memory _extensionName, ExtensionFunction memory _extFunction) internal virtual override { // Ensure that the function is not already implemented as part of a default extension different from diff --git a/src/presets/DefaultExtensionSet.sol b/src/presets/DefaultExtensionSet.sol index dbe9ddc..9745aad 100644 --- a/src/presets/DefaultExtensionSet.sol +++ b/src/presets/DefaultExtensionSet.sol @@ -1,6 +1,4 @@ // SPDX-License-Identifier: MIT -// @author: thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) - pragma solidity ^0.8.0; import "../interface/IRouterState.sol"; @@ -8,6 +6,10 @@ import "../interface/IRouterStateGetters.sol"; import "../lib/ExtensionManagerStorage.sol"; import "../lib/StringSet.sol"; +/// @title DefaultExtensionSet +/// @author thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) +/// @notice A static router initialized with a set of extensions on deployment. Serves as a default extension set for Routers. + contract DefaultExtensionSet is IRouterState, IRouterStateGetters { using StringSet for StringSet.Set; @@ -16,6 +18,7 @@ contract DefaultExtensionSet is IRouterState, IRouterStateGetters { Constructor //////////////////////////////////////////////////////////////*/ + /// @notice Initializes the DefaultExtensionSet with a set of extensions. Serves as a default extension set for Routers. constructor(Extension[] memory _extensions) { uint256 len = _extensions.length; for (uint256 i = 0; i < len; i += 1) { @@ -27,7 +30,10 @@ contract DefaultExtensionSet is IRouterState, IRouterStateGetters { View functions //////////////////////////////////////////////////////////////*/ - /// @notice Returns all extensions of the Router. + /** + * @notice Returns all extensions of the Router. + * @return allExtensions An array of all extensions. + */ function getAllExtensions() external view override returns (Extension[] memory allExtensions) { string[] memory names = _extensionManagerStorage().extensionNames.values(); @@ -40,12 +46,20 @@ contract DefaultExtensionSet is IRouterState, IRouterStateGetters { } } - /// @dev Returns the extension metadata for a given function. + /** + * @notice Returns the extension metadata for a given function. + * @param functionSelector The function selector to get the extension metadata for. + * @return metadata The extension metadata for a given function. + */ function getMetadataForFunction(bytes4 functionSelector) public view returns (ExtensionMetadata memory) { return _extensionManagerStorage().extensionMetadata[functionSelector]; } - /// @dev Returns the extension metadata and functions for a given extension. + /** + * @notice Returns the extension metadata and functions for a given extension. + * @param extensionName The name of the extension to get the metadata and functions for. + * @return extension The extension metadata and functions for a given extension. + */ function getExtension(string memory extensionName) public view returns (Extension memory) { return _getExtension(extensionName); } diff --git a/src/presets/ExtensionManager.sol b/src/presets/ExtensionManager.sol index f9ba2a7..7cdac99 100644 --- a/src/presets/ExtensionManager.sol +++ b/src/presets/ExtensionManager.sol @@ -1,6 +1,4 @@ // SPDX-License-Identifier: MIT -// @author: thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) - pragma solidity ^0.8.0; import "../interface/IExtensionManager.sol"; @@ -8,6 +6,10 @@ import "../interface/IRouterState.sol"; import "../interface/IRouterStateGetters.sol"; import "../lib/ExtensionManagerStorage.sol"; +/// @title ExtensionManager +/// @author thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) +/// @notice Defined storage and API for managing a router's extensions. + abstract contract ExtensionManager is IExtensionManager, IRouterState, IRouterStateGetters { using StringSet for StringSet.Set; @@ -16,6 +18,7 @@ abstract contract ExtensionManager is IExtensionManager, IRouterState, IRouterSt Modifier //////////////////////////////////////////////////////////////*/ + /// @notice Checks that a call to any external function is authorized. modifier onlyAuthorizedCall() { require(isAuthorizedCallToUpgrade(), "ExtensionManager: unauthorized."); _; @@ -25,7 +28,10 @@ abstract contract ExtensionManager is IExtensionManager, IRouterState, IRouterSt View functions //////////////////////////////////////////////////////////////*/ - /// @notice Returns all extensions of the Router. + /** + * @notice Returns all extensions of the Router. + * @return allExtensions An array of all extensions. + */ function getAllExtensions() external view virtual override returns (Extension[] memory allExtensions) { string[] memory names = _extensionManagerStorage().extensionNames.values(); @@ -38,12 +44,20 @@ abstract contract ExtensionManager is IExtensionManager, IRouterState, IRouterSt } } - /// @dev Returns the extension metadata for a given function. + /** + * @notice Returns the extension metadata for a given function. + * @param functionSelector The function selector to get the extension metadata for. + * @return metadata The extension metadata for a given function. + */ function getMetadataForFunction(bytes4 functionSelector) public view virtual returns (ExtensionMetadata memory) { return _extensionManagerStorage().extensionMetadata[functionSelector]; } - /// @dev Returns the extension metadata and functions for a given extension. + /** + * @notice Returns the extension metadata and functions for a given extension. + * @param extensionName The name of the extension to get the metadata and functions for. + * @return extension The extension metadata and functions for a given extension. + */ function getExtension(string memory extensionName) public view virtual returns (Extension memory) { return _getExtension(extensionName); } @@ -54,6 +68,7 @@ abstract contract ExtensionManager is IExtensionManager, IRouterState, IRouterSt /** * @notice Add a new extension to the router. + * @param _extension The extension to add. */ function addExtension(Extension memory _extension) external onlyAuthorizedCall { // Check: extension namespace must not already exist. @@ -78,6 +93,8 @@ abstract contract ExtensionManager is IExtensionManager, IRouterState, IRouterSt /** * @notice Fully replace an existing extension of the router. + * @dev The extension with name `extension.name` is the extension being replaced. + * @param _extension The extension to replace or overwrite. */ function replaceExtension(Extension memory _extension) external onlyAuthorizedCall { // Check: extension namespace must already exist. @@ -102,6 +119,7 @@ abstract contract ExtensionManager is IExtensionManager, IRouterState, IRouterSt /** * @notice Remove an existing extension from the router. + * @param _extensionName The name of the extension to remove. */ function removeExtension(string memory _extensionName) external onlyAuthorizedCall { // Check: extension namespace must already exist. @@ -120,6 +138,10 @@ abstract contract ExtensionManager is IExtensionManager, IRouterState, IRouterSt /** * @notice Enables a single function in an existing extension. + * @dev Makes the given function callable on the router. + * + * @param _extensionName The name of the extension to which `extFunction` belongs. + * @param _function The function to enable. */ function enableFunctionInExtension(string memory _extensionName, ExtensionFunction memory _function) external onlyAuthorizedCall { // Check: extension namespace must already exist. @@ -132,11 +154,14 @@ abstract contract ExtensionManager is IExtensionManager, IRouterState, IRouterSt // 2. Store: metadata for function. _setMetadataForFunction(_function.functionSelector, metadata); - emit FunctionAdded(_extensionName, _function.functionSelector, _function, metadata); + emit FunctionEnabled(_extensionName, _function.functionSelector, _function, metadata); } /** * @notice Disables a single function in an Extension. + * + * @param _extensionName The name of the extension to which the function of `functionSelector` belongs. + * @param _functionSelector The function to disable. */ function disableFunctionInExtension(string memory _extensionName, bytes4 _functionSelector) external onlyAuthorizedCall { // Check: extension namespace must already exist. @@ -150,7 +175,7 @@ abstract contract ExtensionManager is IExtensionManager, IRouterState, IRouterSt // 2. Delete: metadata for function. _deleteMetadataForFunction(_functionSelector); - emit FunctionRemoved(_extensionName, _functionSelector, extMetadata); + emit FunctionDisabled(_extensionName, _functionSelector, extMetadata); } /*/////////////////////////////////////////////////////////////// diff --git a/test/utils/MockContracts.sol b/test/utils/MockContracts.sol index 9dddd2b..182c12b 100644 --- a/test/utils/MockContracts.sol +++ b/test/utils/MockContracts.sol @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + library NumberStorage { /// @custom:storage-location erc7201:number.storage From cff46b38d9672d57af54ebbcbc69cc7c65ac8ac3 Mon Sep 17 00:00:00 2001 From: Krishang Date: Thu, 31 Aug 2023 18:47:23 -0400 Subject: [PATCH 2/2] update readme --- README.md | 703 +++++++++++++++++++++++++++++------- docs/img/proxy-diagram.png | Bin 71361 -> 0 bytes docs/img/router-diagram.png | Bin 53782 -> 0 bytes docs/img/update-diagram.png | Bin 104763 -> 0 bytes 4 files changed, 568 insertions(+), 135 deletions(-) delete mode 100644 docs/img/proxy-diagram.png delete mode 100644 docs/img/router-diagram.png delete mode 100644 docs/img/update-diagram.png diff --git a/README.md b/README.md index ce74964..15567e9 100644 --- a/README.md +++ b/README.md @@ -1,59 +1,116 @@ -# Dynamic Contracts Standard +# ERC-7504: Dynamic Contracts standard. -### Architectural pattern for writing dynamic smart contracts in Solidity +**Architectural pattern for writing client-friendly one-to-many proxy contracts (aka 'dynamic contracts') in Solidity.** -This repository provides core interfaces and preset implementations that: +This repository implements ERC-7504: Dynamic Contracts [[DRAFT](https://ethereum-magicians.org/t/erc-7504-dynamic-contracts/15551)]. This repository provides core interfaces and preset implementations that: -- Provide guardrails for writing dynamic contracts that can have functionality added, updated or removed over time -- Enables scaling up contracts by eliminating the restriction of contract size limit altogether +- Provide guardrails for writing dynamic contracts that can have functionality added, updated or removed over time. +- Enables scaling up contracts by eliminating the restriction of contract size limit altogether. -> This architecture builds upon the diamond pattern ([EIP-2535](https://eips.ethereum.org/EIPS/eip-2535)). We've taken inspiration from it, and boiled it down to its leanest, simplest form. +> ⚠️ **ERC-7504** [DRAFT] is now published and open for feedback! You can read the EIP and provide your feedback at its [ethereum-magicians discussion link](https://ethereum-magicians.org/t/erc-7504-dynamic-contracts/15551). -## Installation +# Installation -#### Forge +### Forge projects: ```bash forge install https://github.com/thirdweb-dev/dynamic-contracts ``` -#### Hardhat +### Hardhat / JS based projects: ```bash npm install @thirdweb-dev/dynamic-contracts ``` -## Core concepts +```shell +src +| +|-- core +| |- Router: "Minmal abstract contract implementation of EIP-7504 Router." +| |- RouterPayable: "A Router with `receive` as a fixed function." +| +|-- presets +| |-- ExtensionManager: "Defined storage layout and API for managing a router's extensions." +| |-- DefaultExtensionSet: "A static store of a set of extensions, initialized on deployment." +| |-- BaseRouter: "A Router with an ExtensionManager." +| |-- BaseRouterWithDefaults: "A BaseRouter initialized with extensions on deployment." +| +|-- interface: "Interfaces for core and preset contracts." +|-- example: "Example dynamic contracts built with presets." +|-- lib: "Storage layouts and helper libraries." +``` -- A `Router` contract can route function calls to any number of destination contracts -- We call these destination contracts `Extensions`. -- `Extensions` can be added/updated/removed at any time, according to a predefined set of rules. +# Running locally -![router-pattern](/docs/img/router-diagram.png) +This repository is a forge project. ([forge handbook](https://book.getfoundry.sh/)) -## Getting started +**Clone the repository:** -### 1. `Router` - the entrypoint contract +```bash +git clone https://github.com/thirdweb-dev/dynamic-contracts.git +``` -The simplest way to write a `Router` contract is to extend the preset [`BaseRouter`](/src/presets/BaseRouter.sol) available in this repository. +**Install dependencies:** -```solidity -import "lib/dynamic-contracts/src/presets/BaseRouter.sol"; +```bash +forge install +``` + +**Compile contracts:** + +```bash +forge build +``` + +**Run tests:** + +```bash +forge test +``` + +**Generate documentation** + +```bash +forge doc --serve --port 4000 ``` -The `BaseRouter` contract comes with an API to add/update/remove extensions from the contract. It is an abstract contract, and expects its consumer to implement the `_canSetExtension(...)` function, which specifies the conditions under which `Extensions` can be added, updated or removed. The rest of the implementation is generic and usable for all purposes. +# Core concepts + +An “upgradeable smart contract” is actually two kinds of smart contracts considered together as one system: + +1. **Proxy** smart contract: The smart contract whose state/storage we’re concerned with. +2. **Implementation** smart contract: A stateless smart contract that defines the logic for how the proxy smart contract’s state can be mutated. + +![A proxy contract that forwards all calls to a single implementation contract](https://ipfs.io/ipfs/QmdzTiw5YuaMa1rjBtoyDuGHHRLdi9Afmh2Tu9Rjj1XuoA/proxy-with-single-impl.png) + +The job of a proxy contract is to forward any calls it receives to the implementation contract via `delegateCall`. As a shorthand — a proxy contract stores state, and always asks an implementation contract how to mutate its state (upon receiving a call). + +ERC-7504 introduces a `Router` smart contract. + +![A router contract that forwards calls to one of many implementation contracts based on the incoming calldata](https://ipfs.io/ipfs/Qmasd6DHrqMnkhifoapWAeWSs8eEJoFbzKJUpeEBacPAM7/router-many-impls.png) + +Instead of always delegateCall-ing the same implementation contract, a `Router` delegateCalls a particular implementation contract (i.e. “Extension”) for the particular function call it receives. + +A router stores a map from function selectors → to the implementation contract where the given function is implemented. “Upgrading a contract” now simply means updating what implementation contract a given function, or functions are mapped to. + +![Upgrading a contract means updating what implementation a given function, or functions are mapped to](https://ipfs.io/ipfs/QmUWk4VrFsAQ8gSMvTKwPXptJiMjZdihzUNhRXky7VmgGz/router-upgrades.png) + +# Getting started + +The simplest way to write a `Router` contract is to extend the preset [`BaseRouter`](/src/presets/BaseRouter.sol) available in this repository. ```solidity -function _canSetExtension(Extension memory _extension) internal view virtual returns (bool); +import "lib/dynamic-contracts/src/presets/BaseRouter.sol"; ``` -Here's a very simple example that allows only the original contract deployer to add/update/remove `Extensions`. +The `BaseRouter` contract comes with an API to add/replace/remove extensions from the contract. It is an abstract contract, and expects its consumer to implement the `_isAuthorizedCallToUpgrade` function, which specifies the conditions under which `Extensions` can be added, replaced or removed. The rest of the implementation is generic and usable for all purposes. ```solidity // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "lib/dynamic-contracts/src/presets/BaseRouter.sol"; +import "@thirdweb-dev/dynamic-contracts/src/presets/BaseRouter.sol"; /// Example usage of `BaseRouter`, for demonstration only @@ -61,216 +118,592 @@ contract SimpleRouter is BaseRouter { address public deployer; - constructor(Extension[] memory _extensions) BaseRouter(_extensions) { + constructor() { deployer = msg.sender; } - /// @dev Returns whether extensions can be set in the given execution context. - function _canSetExtension(Extension memory _extension) internal view virtual override returns (bool) { + /// @dev Returns whether all relevant permission checks are met before any upgrade. + function isAuthorizedCallToUpgrade() internal view virtual override returns (bool) { return msg.sender == deployer; } } ``` -#### Choosing a permission model: - -The main decision as a `Router` contract author is to decide the permission model to add/update/remove extensions. This repository offers some presets for a few possible permission models: +## Choosing a permission model -- #### [`RouterUpgradeable`](/src/presets/example/RouterUpgradeable.sol) +The main decision as a `Router` contract author is to decide the permission model to add/replace/remove extensions. This repository offers some examples of a few possible permission models: -This a is a preset that **allows the contract owner to add / upgrade / remove extensions**. The contract owner can be changed. This is a very basic permission model, but enough for some use cases. You can expand on this and use a permission based model instead for example. +- [**RouterImmutable**](https://github.com/thirdweb-dev/dynamic-contracts/blob/main/src/example/RouterImmutable.sol) -- #### [`RouterImmutable`](/src/presets/example/RouterImmutable.sol) + This is a preset you can use to create static contracts that cannot be updated or get new functionality. This still allows you to create modular contracts that go beyond the contract size limit, but guarantees that the original functionality cannot be altered. With this model, you would pass all the Extensions for this contract at construction time, and guarantee that the functionality is immutable. -This is a preset you can use to **create static contracts that cannot be updated or get new functionality**. This still allows you to create modular contracts that go beyond the contract size limit, but guarantees that the original functionality cannot be altered. With this model, you would pass all the `Extensions` for this contract at construction time, and guarantee that the functionality is immutable. +- [**RouterUpgradeable**](https://github.com/thirdweb-dev/dynamic-contracts/blob/main/src/example/RouterUpgradeable.sol) -Other permissions models might include an explicit list of extensions that can be added or removed for example. The implementation is up to the Router author. + This a is a preset that allows the contract owner to add / replace / remove extensions. The contract owner can be changed. This is a very basic permission model, but enough for some use cases. You can expand on this and use a permission based model instead for example. -- #### [`RouterRegistryConstrained`](/src/presets/example/RouterRegistryConstrained.sol) +- [**RouterRegistryContrained**](https://github.com/thirdweb-dev/dynamic-contracts/blob/main/src/example/RouterRegistryConstrained.sol) -This is a preset that **allows the owner to change extensions if they are defined on a given registry contract**. This is meant to demonstrate how a protocol ecosystem could constrain extensions to known, audited contracts, for instance. The registry and router upgrade models are of course too basic for production as written. + This is a preset that allows the owner to change extensions if they are defined on a given registry contract. This is meant to demonstrate how a protocol ecosystem could constrain extensions to known, audited contracts, for instance. The registry and router upgrade models are of course too basic for production as written. -### 2. `Extensions` - implementing routeable contracts +## Writing extension smart contracts -An `Extension` contract is written like any other smart contract, except that its state must be defined using a `struct` within a `library` and at a well defined storage location. This storage technique is known as [storage structs](https://mirror.xyz/horsefacts.eth/EPB4o-eyDl0N8gu0gEz1uw7BTITheaZUqIAOEK1m-jE). This is important to ensure that state defined in an `Extension` doesn't conflict with the state of another `Extension` of the same `Router` at the same storage location. +An `Extension` contract is written like any other smart contract, except that its state must be defined using a `struct` within a `library` and at a well defined storage location. This storage technique is known as [storage structs](https://mirror.xyz/horsefacts.eth/EPB4o-eyDl0N8gu0gEz1uw7BTITheaZUqIAOEK1m-jE). -Here's an example of a simple contract written as an `Extension` contract: +**Example:** `ExtensionManagerStorage` defines the storage layout for the `ExtensionManager` contract. ```solidity +// SPDX-License-Identifier: MIT +// @author: thirdweb (https://github.com/thirdweb-dev/dynamic-contracts) + +pragma solidity ^0.8.0; + +import "./StringSet.sol"; +import "../interface/IExtension.sol"; + +library ExtensionManagerStorage { -/// library defining the data structure of our contract -library NumberStorage { - /// specify the storage location, needs to be unique - bytes32 public constant NUMBER_STORAGE_POSITION = keccak256("number.storage"); + /// @custom:storage-location erc7201:extension.manager.storage + bytes32 public constant EXTENSION_MANAGER_STORAGE_POSITION = keccak256(abi.encode(uint256(keccak256("extension.manager.storage")) - 1)); - /// the state data struct struct Data { - uint256 number; + /// @dev Set of names of all extensions stored. + StringSet.Set extensionNames; + /// @dev Mapping from extension name => `Extension` i.e. extension metadata and functions. + mapping(string => IExtension.Extension) extensions; + /// @dev Mapping from function selector => metadata of the extension the function belongs to. + mapping(bytes4 => IExtension.ExtensionMetadata) extensionMetadata; } - /// state accessor, always use this to access the state data - function numberStorage() internal pure returns (Data storage numberData) { - bytes32 position = NUMBER_STORAGE_POSITION; + function data() internal pure returns (Data storage data_) { + bytes32 position = EXTENSION_MANAGER_STORAGE_POSITION; assembly { - numberData.slot := position + data_.slot := position } } } +``` -/// implementation of our contract's logic, notice the lack of local state -/// state is always accessed via the storage library defined above -contract Number { +Each `Extension` of a router must occupy a unique, unused storage location. This is important to ensure that state updates defined in one `Extension` doesn't conflict with the state updates defined in another `Extension`, leading to corrupted state. - function setNumber(uint256 _newNumber) external { - NumberStorage.Data storage data = NumberStorage.numberStorage(); - data.number = _newNumber; - } +## Extensions: logical grouping of functionality - function getNumber() external view returns (uint256) { - NumberStorage.Data storage data = NumberStorage.numberStorage(); - return data.number; - } +By itself, the core `Router` contract does not specify _how to store or fetch_ appropriate implementation addresses for incoming function calls. + +While the Router pattern allows to point to a different contract for each function, in practice functions are usually groupped by functionality related to a shared state (a read and a set function for example). + +To make the pattern more practical, we created a generic `BaseRouter` contract that makes it easy to have logical group of functions plugged in and out of it, each group of functions being implemented in a separate implementation contract. We refer to each such implementation contract as an **_extension_**. + +`BaseRouter` maintains a `function_signature` → `implementation` mapping, and provides an API for updating that mapping. By updating the values stored in this map, functionality can be added to, removed from or updated in the smart contract. + +![Upgrading a contract means updating what implementation a given function, or functions are mapped to](https://ipfs.io/ipfs/QmUWk4VrFsAQ8gSMvTKwPXptJiMjZdihzUNhRXky7VmgGz/router-upgrades.png) + +## Deploying a Router + +Deploying a contract in the router pattern looks a little different from deploying a regular contract. + +1. Deploy all your `Extension` contracts first. You only need to do this once per `Extension`. Deployed `Extensions` can be re-used by many different `Router` contracts. + +2. Deploy your `Router` contract that implements `BaseRouter`. +3. Add extensions to youe router via the API available in `BaseRouter`. (Alternatively, you can use `BaseRouterDefaults` which can be initialized with a set of extensions on deployment.) + +### `Extensions` - Grouping logical functionality together + +By itself, the core `Router` contract does not specify _how to store or fetch_ appropriate implementation addresses for incoming function calls. + +While the Router pattern allows to point to a different contract for each function, in practice functions are usually groupped by functionality related to a shared state (a read and a set function for example). + +To make the pattern more practical, we created a generic `BaseRouter` contract that makes it easy to have logical group of functions plugged in and out of it, each group of functions being implemented in a separate implementation contract. We refer to each such implementation contract as an **_extension_**. + +`BaseRouter` maintains a `function_signature` → `implementation` mapping, and provides an API for updating that mapping. By updating the values stored in this map, functionality can be added to, removed from or updated in the smart contract. + +## Extension to Extension communication + +When splitting logic between multiple extensions in a `Router`, one might want to access data from one `Extension` to another. + +A simple way to do this is by casting the current contract address as the `Extension` (ideally its interface) we're trying to call. This works from both a `Router` or any of its extensions. + +Here's an example of accessing a `IPermission` extension from another one: + +```solidity +modifier onlyAdmin(address _asset) { + /// we access our IPermission extension by casting our own address + IPermissions(address(this)).hasAdminRole(msg.sender); } ``` -To compare, here is the same contract written in a regular way: +Note that if we don't have an `IPermission` extension added to our `Router`, this method will revert. + +## Upgrading Extensions + +Just like any upgradeable contract, there are limitations on how the data structure of the updated contract is modified. While the logic of a function can be updated safely, changing the data structure of a contract requires careful consideration. + +A good rule of thumb to follow is: + +- It is safe to append new fields to an existing data structure +- It is _not_ safe to update the type or order of existing structs; deprecate and add new ones instead. + +Refer to [this article](https://mirror.xyz/horsefacts.eth/EPB4o-eyDl0N8gu0gEz1uw7BTITheaZUqIAOEK1m-jE) for more information. + +# API reference + +You can generate and view the full API reference for all contracts, interfaces and libraries in the repository by running the repository locally and running: + +```bash +forge doc --serve --port 4000 +``` + +## Router ```solidity -contract Number { +import "@thirdweb-dev/dynamic-contracts/src/core/Router.sol"; +``` - uint256 private number; +The `Router` smart contract implements the ERC-7504 [`Router` interface](https://github.com/thirdweb-dev/dynamic-contracts/blob/main/src/interface/IRouter.sol). - function setNumber(uint256 _newNumber) external { - number = _newNumber; - } +For any given function call made to the Router contract that reaches the fallback function, the contract performs a delegateCall on the address returned by `getImplementationForFunction(msg.sig)`. - function getNumber() external view returns (uint256) { - return number; - } +This is an abstract contract that expects you to override and implement the following functions: + +- `getImplementationForFunction` + ```solidity + function getImplementationForFunction(bytes4 _functionSelector) public view virtual returns (address implementation); + ``` + +### fallback + +delegateCalls the appropriate implementation address for the given incoming function call. + +_The implementation address to delegateCall MUST be retrieved from calling `getImplementationForFunction` with the +incoming call's function selector._ + +```solidity +fallback() external payable virtual; +``` + +#### Revert conditions: + +- `getImplementationForFunction(msg.sig) == address(0)` + +### \_delegate + +_delegateCalls an `implementation` smart contract._ + +```solidity +function _delegate(address implementation) internal virtual; +``` + +### getImplementationForFunction + +Returns the implementation address to delegateCall for the given function selector. + +```solidity +function getImplementationForFunction(bytes4 _functionSelector) public view virtual returns (address implementation); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | -------- | ------------------------------------------------------------ | +| `_functionSelector` | `bytes4` | The function selector to get the implementation address for. | + +**Returns** + +| Name | Type | Description | +| ---------------- | --------- | --------------------------------------------------------------------------- | +| `implementation` | `address` | The implementation address to delegateCall for the given function selector. | + +## ExtensionManager + +```solidity +import "@thirdweb-dev/dynamic-contracts/src/presets/ExtensionManager.sol"; +``` + +The `ExtensionManager` contract provides a defined storage layout and API for managing and fetching a router's extensions. This contract implements the ERC-7504 [`RouterState` interface](https://github.com/thirdweb-dev/dynamic-contracts/blob/main/src/interface/IRouterState.sol). + +The contract's storage layout is defined in `src/lib/ExtensionManagerStorage`: + +```solidity +struct Data { + StringSet.Set extensionNames; + mapping(string => IExtension.Extension) extensions; + mapping(bytes4 => IExtension.ExtensionMetadata) extensionMetadata; } ``` -The main difference is how the state is defined. While an `Extension` written this way requires a bit more boilerplate to setup, it is a one time cost that ensures full modularity when using multiple `Extension` contracts with a single `Router`. +The following are some helpful **invariant properties** of `ExtensionManager`: -### 3. Deploying a `Router` +- Each extension has a non-empty, unique name which is stored in `extensionNames`. +- Each extension's metadata specifies a _non_-zero-address implementation. +- A function `fn` has a non-empty metadata i.e. `extensionMetadata[fn]` value _if and only if_ it is a part of some extension `Ext` such that: -Deploying a contract in the router pattern looks a little different from deploying a regular contract. + - `extensionNames` contains `Ext.metadata.name` + - `extensions[Ext.metadata.name].functions` includes `fn`. -1. Deploy all your `Extension` contracts first. You only need to do this once per `Extension`. Deployed `Extensions` can be re-used by many different `Router` contracts. +This contract is meant to be used along with a Router contract, where an upgrade to the Router means updating the storage of `ExtensionManager`. For example, the preset contract `BaseRouter` inherits `Router` and `ExtensionManager` and overrides the `getImplementationForFunction` function as follows: -2. Deploy your `Router` contract that implements `BaseRouter`. +```solidity +function getImplementationForFunction(bytes4 _functionSelector) public view virtual override returns (address) { + return getMetadataForFunction(_functionSelector).implementation; + } +``` + +This contract is an abstract contract that expects you to override and implement the following functions: + +- `isAuthorizedCallToUpgrade` + ```solidity + function isAuthorizedCallToUpgrade() internal view virtual returns (bool); + ``` + +### onlyAuthorizedCall + +Checks that a call to any external function is authorized. + +```solidity +modifier onlyAuthorizedCall(); +``` -3. Optionally, you pass your default `Extensions` in the constructor of your `BaseRouter` at deploy time. This is a convenient way to bootstrap an `Router` with a set of default `Extension` in one transaction. +#### Revert conditions: -### 4. Adding, removing or upgrading `Extensions` post deployment +- `!_isAuthorizedCallToUpgrade()` -The preset `BaseRouter` comes with an API to add/update/remove `Extensions` at any time after deployment: +### getAllExtensions -- `addExtension()`: function to add completely new `Extension` to your `Router`. -- `updateExtension()`: function to update the address, metadata, or functions of an existing `Extension` in your `Router`. -- `removeExtension()`: remove an existing `Extension` from your `Router`. +Returns all extensions of the Router. -The permission to modify `Extensions` is encoded in your `Router` and can have different conditions. +```solidity +function getAllExtensions() external view virtual override returns (Extension[] memory allExtensions); +``` -With this pattern, your contract is now dynamically updeatable, with granular control. +**Returns** -- Add entire new functionality to your contract post deployment -- Remove functionality when it's not longer needed -- Deploy security and bug fixes for a single function of your contract +| Name | Type | Description | +| --------------- | ------------- | --------------------------- | +| `allExtensions` | `Extension[]` | An array of all extensions. | ---- +### getMetadataForFunction -## Going deeper - background and technical details +Returns the extension metadata for a given function. -In the standard proxy pattern for smart contracts, a proxy smart contract calls a _logic contract_ using `delegateCall`. This allows proxies to keep a persistent state (storage and balance) while the code is delegated to the logic contract. ([EIP-1967](https://eips.ethereum.org/EIPS/eip-1967)) +```solidity +function getMetadataForFunction(bytes4 functionSelector) public view virtual returns (ExtensionMetadata memory); +``` -The pattern aims to solve for the following two limitations of this standard proxy pattern: +**Parameters** -1. The proxy contract points to a single smart contract as its _logic contract_, at a time. -2. The _logic contract_ is subject to the smart contract size limit of ~24kb ([EIP-170](https://eips.ethereum.org/EIPS/eip-170)). This prevents a single smart contract from having all of the features one may want it to have. +| Name | Type | Description | +| ------------------ | -------- | -------------------------------------------------------- | +| `functionSelector` | `bytes4` | The function selector to get the extension metadata for. | -> **Note:** The diamond pattern ([EIP-2535](https://eips.ethereum.org/EIPS/eip-2535)) anticipates these same problems and more. We've taken inspiration from it, and boiled it down to its leanest, simplest form. +**Returns** -The router pattern eliminates these limitations performing a lookup for the implementation smart contract address associated with every incoming function call, and make a `delegateCall` to that particular implementation. +| Name | Type | Description | +| -------- | ------------------- | ----------------------------------------------------- | +| `` | `ExtensionMetadata` | metadata The extension metadata for a given function. | -This is different from the standard proxy pattern, where the proxy stores a single implementation smart contract address, and calls via `delegateCall` this same implementation for every incoming function call. +### getExtension -**Standard proxy pattern** +Returns the extension metadata and functions for a given extension. ```solidity -contract StandardProxy { +function getExtension(string memory extensionName) public view virtual returns (Extension memory); +``` - address public constant implementation = 0xabc...; +**Parameters** - fallback() external payable virtual { - _delegateCall(implementation); - } -} +| Name | Type | Description | +| --------------- | -------- | ---------------------------------------------------------------- | +| `extensionName` | `string` | The name of the extension to get the metadata and functions for. | + +**Returns** + +| Name | Type | Description | +| -------- | ----------- | ----------------------------------------------------------- | +| `` | `Extension` | The extension metadata and functions for a given extension. | + +### addExtension + +Add a new extension to the router. + +```solidity +function addExtension(Extension memory _extension) external onlyAuthorizedCall; ``` -**Router pattern** +**Parameters** + +| Name | Type | Description | +| ------------ | ----------- | --------------------- | +| `_extension` | `Extension` | The extension to add. | + +#### Revert conditions: + +- Extension name is empty. +- Extension name is already used. +- Extension implementation is zero address. +- Selector and signature mismatch for some function in the extension. +- Some function in the extension is already a part of another extension. + +### replaceExtension + +Fully replace an existing extension of the router. + +_The extension with name `extension.name` is the extension being replaced._ ```solidity -abstract contract Router { +function replaceExtension(Extension memory _extension) external onlyAuthorizedCall; +``` - fallback() external payable virtual { - address implementation = getImplementationForFunction(msg.sig); - _delegateCall(implementation); - } +**Parameters** - function getImplementationForFunction(bytes4 _functionSelector) public view virtual returns (address); -} +| Name | Type | Description | +| ------------ | ----------- | -------------------------------------- | +| `_extension` | `Extension` | The extension to replace or overwrite. | + +#### Revert conditions: + +- Extension being replaced does not exist. +- Provided extension's implementation is zero address. +- Selector and signature mismatch for some function in the provided extension. +- Some function in the provided extension is already a part of another extension. + +### removeExtension + +Remove an existing extension from the router. + +```solidity +function removeExtension(string memory _extensionName) external onlyAuthorizedCall; ``` -This setup in the `Router` contract allows for different functions of the smart contract to be implemented in different logic contracts. +**Parameters** -### `Extensions` - Grouping logical functionality together +| Name | Type | Description | +| ---------------- | -------- | ------------------------------------ | +| `_extensionName` | `string` | The name of the extension to remove. | -By itself, the core `Router` contract does not specify _how to store or fetch_ appropriate implementation addresses for incoming function calls. +#### Revert conditions: -While the Router pattern allows to point to a different contract for each function, in practice functions are usually groupped by functionality related to a shared state (a read and a set function for example). +- Extension being removed does not exist. -To make the pattern more practical, we created a generic `BaseRouter` contract that makes it easy to have logical group of functions plugged in and out of it, each group of functions being implemented in a separate implementation contract. We refer to each such implementation contract as an **_extension_**. +### enableFunctionInExtension -`BaseRouter` maintains a `function_signature` → `implementation` mapping, and provides an API for updating that mapping. By updating the values stored in this map, functionality can be added to, removed from or updated in the smart contract. +Enables a single function in an existing extension. + +_Makes the given function callable on the router._ -![updating-extensions](/docs/img/update-diagram.png) +```solidity +function enableFunctionInExtension(string memory _extensionName, ExtensionFunction memory _function) + external + onlyAuthorizedCall; +``` + +**Parameters** -### `Extension` to `Extension` communication +| Name | Type | Description | +| ---------------- | ------------------- | --------------------------------------------------------- | +| `_extensionName` | `string` | The name of the extension to which `extFunction` belongs. | +| `_function` | `ExtensionFunction` | The function to enable. | -When splitting logic between multiple `Extensions` in a `Router`, one might want to access data from one `Extension` to another. +#### Revert conditions: -A simple way to do this is by casting the current contract address as the `Extension` (ideally its interface) we're trying to call. This works from both a `Router` or any of its `Extensions`. +- Provided extension does not exist. +- Selector and signature mismatch for some function in the provided extension. +- Provided function is already a part of another extension. -Here's an example of accessing a IPermission `Extension` from another one: +### disableFunctionInExtension + +Disables a single function in an Extension. ```solidity -/// in MyExtension.sol -modifier onlyAdmin(address _asset) { - /// we access our IPermission extension by casting our own address - IPermissions(address(this)).hasAdminRole(msg.sender); -} +function disableFunctionInExtension(string memory _extensionName, bytes4 _functionSelector) + external + onlyAuthorizedCall; ``` -Note that if we don't have a IPermission `Extension` added to our `Router`, this method will revert. +**Parameters** -### Upgrading `Extensions` +| Name | Type | Description | +| ------------------- | -------- | ------------------------------------------------------------------------------ | +| `_extensionName` | `string` | The name of the extension to which the function of `functionSelector` belongs. | +| `_functionSelector` | `bytes4` | The function to disable. | -Just like any upgradeable contract, there are limitations on how the data structure of the updated contract is modified. While the logic of a function can be updated safely, changing the data structure of a contract requires careful consideration. +#### Revert conditions: -A good rule of thumb to follow is: +- Provided extension does not exist. +- Provided function is not part of provided extension. -- It is safe to append new fields to an existing data structure -- It is _not_ safe to update the type or order of existing structs, deprecate and add new ones instead +### \_getExtension -Refer to [this article](https://mirror.xyz/horsefacts.eth/EPB4o-eyDl0N8gu0gEz1uw7BTITheaZUqIAOEK1m-jE) for more information. +_Returns the Extension for a given name._ + +```solidity +function _getExtension(string memory _extensionName) internal view returns (Extension memory); +``` + +### \_setMetadataForExtension + +_Sets the ExtensionMetadata for a given extension._ + +```solidity +function _setMetadataForExtension(string memory _extensionName, ExtensionMetadata memory _metadata) internal; +``` + +### \_deleteMetadataForExtension + +_Deletes the ExtensionMetadata for a given extension._ + +```solidity +function _deleteMetadataForExtension(string memory _extensionName) internal; +``` + +### \_setMetadataForFunction + +_Sets the ExtensionMetadata for a given function._ + +```solidity +function _setMetadataForFunction(bytes4 _functionSelector, ExtensionMetadata memory _metadata) internal; +``` + +### \_deleteMetadataForFunction + +_Deletes the ExtensionMetadata for a given function._ + +```solidity +function _deleteMetadataForFunction(bytes4 _functionSelector) internal; +``` + +### \_enableFunctionInExtension + +_Enables a function in an Extension._ + +```solidity +function _enableFunctionInExtension(string memory _extensionName, ExtensionFunction memory _extFunction) + internal + virtual; +``` + +### \_disableFunctionInExtension + +Note: `bytes4(0)` is the function selector for the `receive` function. +So, we maintain a special fn selector-signature mismatch check for the `receive` function. + +_Disables a given function in an Extension._ + +```solidity +function _disableFunctionInExtension(string memory _extensionName, bytes4 _functionSelector) internal; +``` + +### \_removeAllFunctionsFromExtension + +_Removes all functions from an Extension._ + +```solidity +function _removeAllFunctionsFromExtension(string memory _extensionName) internal; +``` + +### \_canAddExtension + +_Returns whether a new extension can be added in the given execution context._ + +```solidity +function _canAddExtension(Extension memory _extension) internal virtual returns (bool); +``` + +### \_canReplaceExtension + +_Returns whether an extension can be replaced in the given execution context._ + +```solidity +function _canReplaceExtension(Extension memory _extension) internal virtual returns (bool); +``` + +### \_canRemoveExtension + +_Returns whether an extension can be removed in the given execution context._ + +```solidity +function _canRemoveExtension(string memory _extensionName) internal virtual returns (bool); +``` + +### \_canEnableFunctionInExtension + +_Returns whether a function can be enabled in an extension in the given execution context._ + +```solidity +function _canEnableFunctionInExtension(string memory _extensionName, ExtensionFunction memory) + internal + view + virtual + returns (bool); +``` + +### \_canDisableFunctionInExtension + +_Returns whether a function can be disabled in an extension in the given execution context._ + +```solidity +function _canDisableFunctionInExtension(string memory _extensionName, bytes4 _functionSelector) + internal + view + virtual + returns (bool); +``` + +### \_extensionManagerStorage + +_Returns the ExtensionManager storage._ + +```solidity +function _extensionManagerStorage() internal pure returns (ExtensionManagerStorage.Data storage data); +``` + +### isAuthorizedCallToUpgrade + +_To override; returns whether all relevant permission and other checks are met before any upgrade._ + +```solidity +function isAuthorizedCallToUpgrade() internal view virtual returns (bool); +``` + +## BaseRouter + +```solidity +import "@thirdweb-dev/dynamic-contracts/src/presets/BaseRouter" +``` + +`BaseRouter` inherits `Router` and `ExtensionManager`. It overrides the `Router.getImplementationForFunction` function to use the extensions stored in the `ExtensionManager` contract's storage system. + +This contract is an abstract contract that expects you to override and implement the following functions: + +- `isAuthorizedCallToUpgrade` + ```solidity + function isAuthorizedCallToUpgrade() internal view virtual returns (bool); + ``` + +### getImplementationForFunction + +Returns the implementation address to delegateCall for the given function selector. + +```solidity +function getImplementationForFunction(bytes4 _functionSelector) public view virtual override returns (address); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | -------- | ------------------------------------------------------------ | +| `_functionSelector` | `bytes4` | The function selector to get the implementation address for. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------------------------------------------------------ | +| `` | `address` | implementation The implementation address to delegateCall for the given function selector. | -## Feedback +# Feedback -The best, most open way to give feedback/suggestions for the router pattern is to open a github issue. +The best, most open way to give feedback/suggestions for the router pattern is to open a github issue, or comment in the ERC-7504 [ethereum-magicians discussion](https://ethereum-magicians.org/t/erc-7504-dynamic-contracts/15551). Additionally, since [thirdweb](https://thirdweb.com/) will be maintaining this repository, you can reach out to us at support@thirdweb.com or join our [discord](https://discord.gg/thirdweb). -## Authors +# Authors - [thirdweb](https://github.com/thirdweb-dev) diff --git a/docs/img/proxy-diagram.png b/docs/img/proxy-diagram.png deleted file mode 100644 index 71cc6242befb84ce6b16ebb308aa8343071efca1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71361 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�Op)7Ye|aEWX4q0NP{3*^sXk3>vin_e=gfg~nxn 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 T`n(7p{F9eazMg;0^#1<>T76_x diff --git a/docs/img/router-diagram.png b/docs/img/router-diagram.png deleted file mode 100644 index 9053c3b57a10ce903458b61c4146979d3cc832eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53782 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