-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
170 additions
and
395 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,14 @@ | ||
// SPDX-License-Identifier: MIT | ||
pragma solidity ^0.8.0; | ||
|
||
/******************************************************************************\ | ||
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) | ||
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 | ||
* | ||
* Implementation of a diamond. | ||
/******************************************************************************/ | ||
|
||
/** | ||
* \ | ||
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) | ||
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 | ||
* | ||
* Implementation of a diamond. | ||
* /***************************************************************************** | ||
*/ | ||
import {LibDiamond} from "./libraries/LibDiamond.sol"; | ||
import {IDiamondCut} from "./interfaces/IDiamondCut.sol"; | ||
|
||
|
@@ -67,12 +68,8 @@ contract Diamond { | |
returndatacopy(0, 0, returndatasize()) | ||
// return any return value or error back to the caller | ||
switch result | ||
case 0 { | ||
revert(0, returndatasize()) | ||
} | ||
default { | ||
return(0, returndatasize()) | ||
} | ||
case 0 { revert(0, returndatasize()) } | ||
default { return(0, returndatasize()) } | ||
} | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,14 @@ | ||
// SPDX-License-Identifier: MIT | ||
pragma solidity ^0.8.0; | ||
|
||
/******************************************************************************\ | ||
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) | ||
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 | ||
/******************************************************************************/ | ||
|
||
import { IDiamondCut } from "../interfaces/IDiamondCut.sol"; | ||
import { LibDiamond } from "../libraries/LibDiamond.sol"; | ||
/** | ||
* \ | ||
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) | ||
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 | ||
* /***************************************************************************** | ||
*/ | ||
import {IDiamondCut} from "../interfaces/IDiamondCut.sol"; | ||
import {LibDiamond} from "../libraries/LibDiamond.sol"; | ||
|
||
contract DiamondCutFacet is IDiamondCut { | ||
/// @notice Add/replace/remove any number of functions and optionally execute | ||
|
@@ -16,11 +17,7 @@ contract DiamondCutFacet is IDiamondCut { | |
/// @param _init The address of the contract or facet to execute _calldata | ||
/// @param _calldata A function call, including function selector and arguments | ||
/// _calldata is executed with delegatecall on _init | ||
function diamondCut( | ||
FacetCut[] calldata _diamondCut, | ||
address _init, | ||
bytes calldata _calldata | ||
) external override { | ||
function diamondCut(FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata) external override { | ||
LibDiamond.enforceIsContractOwner(); | ||
LibDiamond.diamondCut(_diamondCut, _init, _calldata); | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,15 @@ | ||
// SPDX-License-Identifier: MIT | ||
pragma solidity ^0.8.0; | ||
/******************************************************************************\ | ||
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) | ||
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 | ||
/******************************************************************************/ | ||
/** | ||
* \ | ||
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) | ||
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 | ||
* /***************************************************************************** | ||
*/ | ||
|
||
import { LibDiamond } from "../libraries/LibDiamond.sol"; | ||
import { IDiamondLoupe } from "../interfaces/IDiamondLoupe.sol"; | ||
import { IERC165 } from "../interfaces/IERC165.sol"; | ||
import {LibDiamond} from "../libraries/LibDiamond.sol"; | ||
import {IDiamondLoupe} from "../interfaces/IDiamondLoupe.sol"; | ||
import {IERC165} from "../interfaces/IERC165.sol"; | ||
|
||
contract DiamondLoupeFacet is IDiamondLoupe, IERC165 { | ||
// Diamond Loupe Functions | ||
|
@@ -21,7 +23,7 @@ contract DiamondLoupeFacet is IDiamondLoupe, IERC165 { | |
|
||
/// @notice Gets all facets and their selectors. | ||
/// @return facets_ Facet | ||
function facets() external override view returns (Facet[] memory facets_) { | ||
function facets() external view override returns (Facet[] memory facets_) { | ||
LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); | ||
uint256 numFacets = ds.facetAddresses.length; | ||
facets_ = new Facet[](numFacets); | ||
|
@@ -35,14 +37,19 @@ contract DiamondLoupeFacet is IDiamondLoupe, IERC165 { | |
/// @notice Gets all the function selectors provided by a facet. | ||
/// @param _facet The facet address. | ||
/// @return facetFunctionSelectors_ | ||
function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) { | ||
function facetFunctionSelectors(address _facet) | ||
external | ||
view | ||
override | ||
returns (bytes4[] memory facetFunctionSelectors_) | ||
{ | ||
LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); | ||
facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors; | ||
} | ||
|
||
/// @notice Get all the facet addresses used by a diamond. | ||
/// @return facetAddresses_ | ||
function facetAddresses() external override view returns (address[] memory facetAddresses_) { | ||
function facetAddresses() external view override returns (address[] memory facetAddresses_) { | ||
LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); | ||
facetAddresses_ = ds.facetAddresses; | ||
} | ||
|
@@ -51,13 +58,13 @@ contract DiamondLoupeFacet is IDiamondLoupe, IERC165 { | |
/// @dev If facet is not found return address(0). | ||
/// @param _functionSelector The function selector. | ||
/// @return facetAddress_ The facet address. | ||
function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) { | ||
function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) { | ||
LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); | ||
facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress; | ||
} | ||
|
||
// This implements ERC-165. | ||
function supportsInterface(bytes4 _interfaceId) external override view returns (bool) { | ||
function supportsInterface(bytes4 _interfaceId) external view override returns (bool) { | ||
LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); | ||
return ds.supportedInterfaces[_interfaceId]; | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.