Skip to content

Commit

Permalink
Safe-global migration
Browse files Browse the repository at this point in the history
Moved Safe.global from node_modules to sub_modules for ease in scenarios when dealing with multiple contracts that depend on specific versions of external contracts or libraries. This method ensures that all team members and the deployment process use the exact version of a dependency, reducing the risk of inconsistencies. However, it also requires careful management to keep the submodules updated and to handle potential conflicts between different versions of the same dependency. For blockchain projects, where contract immutability is a key feature, having precise control over dependencies is crucial.
  • Loading branch information
EdmundBerkmann committed Feb 13, 2024
1 parent 56079af commit 585cc91
Show file tree
Hide file tree
Showing 36 changed files with 89 additions and 110 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "lib/safe-contracts"]
path = lib/safe-contracts
url = https://github.com/safe-global/safe-smart-account.git
1 change: 0 additions & 1 deletion Package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@
"@reduxjs/toolkit": "^1.9.7",
"@safe-global/api-kit": "^2.1.0",
"@safe-global/protocol-kit": "^3.0.0",
"@safe-global/safe-contracts": "^1.4.1-build.0",
"@safe-global/safe-core-sdk": "^3.3.5",
"@safe-global/safe-core-sdk-types": "^4.0.0",
"@walletconnect/react-native-dapp": "^1.8.0",
Expand Down
11 changes: 2 additions & 9 deletions contracts/Diamond.sol
Original file line number Diff line number Diff line change
@@ -1,19 +1,12 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma experimental ABIEncoderV2;

/******************************************************************************\
* Author: Nick Mudge <nick@perfectabstractions.com> (https://twitter.com/mudgen)
* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535
*
* Implementation of a diamond.
/******************************************************************************/

import "./libraries/LibDiamond.sol";
import "./interfaces/IDiamondLoupe.sol";
import "./interfaces/IDiamondCut.sol";
import "./interfaces/IERC173.sol";
import "./interfaces/IERC165.sol";
import "../lib/safe-contracts/contracts/interfaces/ISafe.sol";
import "../lib/safe-contracts/contracts/interfaces/ISafeIERC165.sol";

contract Diamond {
struct DiamondArgs {
Expand Down
27 changes: 27 additions & 0 deletions contracts/Migrations.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

contract Migrations {
address public owner;

// A function with the signature `last_completed_migration()`, returning a uint, is required.
uint256 public last_completed_migration;

modifier restricted() {
if (msg.sender == owner) _;
}

constructor() {
owner = msg.sender;
}

// A function with the signature `setCompleted(uint)` is required.
function setCompleted(uint256 completed) external restricted {
last_completed_migration = completed;
}

function upgrade(address new_address) external restricted {
Migrations upgraded = Migrations(new_address);
upgraded.setCompleted(last_completed_migration);
}
}
2 changes: 1 addition & 1 deletion contracts/facets/DiamondCutFacet.sol
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import { IDiamondCut } from "../interfaces/IDiamondCut.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";
import { IDiamondCut } from "../interfaces/IDiamondCut.sol";

// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.
// The loupe functions are required by the EIP2535 Diamonds standard
Expand Down
2 changes: 1 addition & 1 deletion contracts/facets/DiamondLoupeFacet.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ pragma solidity 0.8.20;

import { LibDiamond } from "../libraries/LibDiamond.sol";
import { IDiamondLoupe } from "../interfaces/IDiamondLoupe.sol";
import { IERC165 } from "../interfaces/IERC165.sol";
import { IERC165 } from "../lib/safe-contracts/contracts/interfaces/ISafeIERC165.sol";

// The functions in DiamondLoupeFacet MUST be added to a diamond.
// The EIP-2535 Diamond standard requires these functions.
Expand Down
2 changes: 1 addition & 1 deletion contracts/facets/DiamondOracleFacet.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "../libraries/LibDiamond.sol";
import { LibDiamond } from "../../libraries/LibDiamond.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
import "@chainlink/contracts/src/v0.8/ChainlinkClient.sol";
Expand Down
4 changes: 2 additions & 2 deletions contracts/facets/app/AccessControlFacet.sol
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "../../libraries/LibDiamond.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/AccessControl.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

contract AccessControlFacet is AccessControl {
bytes32 public constant UPGRADE_ROLE = keccak256("UPGRADE_ROLE");
Expand Down
2 changes: 1 addition & 1 deletion contracts/facets/app/AnalyticsReportingFacet.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "../../libraries/LibDiamond.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";

contract AnalyticsReportingFacet {
function initialize() external {
Expand Down
2 changes: 1 addition & 1 deletion contracts/facets/app/DataManagementFacet.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "../../libraries/LibDiamond.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";

contract DataManagementFacet {
function initialize() external {
Expand Down
2 changes: 1 addition & 1 deletion contracts/facets/app/GasOptimisationFacet.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "../../libraries/LibDiamond.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";

contract GasOptimisationFacet {
// Example: Bulk processing to minimise transaction costs
Expand Down
4 changes: 2 additions & 2 deletions contracts/facets/app/MultiSigFacet.sol
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "../../libraries/LibDiamond.sol";
import "../../interfaces/ISafe.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";
import { ISafe } from "../lib/safe-contracts/contracts/interfaces/ISafe.sol";

contract MultiSigFacet {
function initialize() external {
Expand Down
2 changes: 1 addition & 1 deletion contracts/facets/app/NotificationFacet.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "../../libraries/LibDiamond.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";

contract NotificationFacet {
function initialize() external {
Expand Down
2 changes: 1 addition & 1 deletion contracts/facets/app/OfflineModeFacet.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "../../libraries/LibDiamond.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";

contract OfflineModeFacet {
function setOfflineMode(bool _offlineMode) external {
Expand Down
2 changes: 1 addition & 1 deletion contracts/facets/app/SecurityComplianceFacet.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "../../libraries/LibDiamond.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";

contract SecurityComplianceFacet {
function initialize() external {
Expand Down
4 changes: 2 additions & 2 deletions contracts/facets/app/SocialNetworkFacet.sol
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "../../interfaces/ISafe.sol";
import "../../interfaces/ILens.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";
import { ISafe } from "../lib/safe-contracts/contracts/interfaces/ISafe.sol";

contract SocialNetworkFacet {
ISafe private safeCore;
Expand Down
2 changes: 1 addition & 1 deletion contracts/facets/app/UserExperienceFacet.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "../../libraries/LibDiamond.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";

contract UserExperienceFacet {
function initialize() external {
Expand Down
2 changes: 1 addition & 1 deletion contracts/facets/app/UserInteractionFacet.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "../../libraries/LibDiamond.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";

contract UserInteractionFacet {
function initialize() external {
Expand Down
8 changes: 4 additions & 4 deletions contracts/facets/features/BazaarFacet.sol
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import "../../libraries/LibDiamond.sol";
import "../../interfaces/IUniswapV4.sol";
import "../../interfaces/IUniswapX.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";
import { IUniswapV4 } from "../../interfaces/IUniswapV4.sol";
import { IUniswapX } from "../../interfaces/IUniswapX.sol";
import { IERC1155 } from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";

contract BazaarFacet {
// State variables for Uniswap interfaces, adjust types and names as per actual interface definitions
Expand Down
6 changes: 3 additions & 3 deletions contracts/facets/features/GalleryFacet.sol
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "../../libraries/LibDiamond.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";
import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import { IERC1155 } from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import "@openzeppelin/contracts/utils/Strings.sol";

contract GalleryFacet {
Expand Down
10 changes: 5 additions & 5 deletions contracts/facets/features/MosaicFacet.sol
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "../../libraries/LibDiamond.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";
import { ISteezFacet } from "../../interfaces/ISteezFacet.sol";
import { ILens } from "../../interfaces/ILens.sol";
import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import { IERC1155 } from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "../../interfaces/ISteezFacet.sol";
import "../../interfaces/ILens.sol";

/**
* @title MosaicFacet
Expand Down
14 changes: 7 additions & 7 deletions contracts/facets/features/ProfileFacet.sol
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";
import { MultiSigFacet } from "../app/MultiSigFacet.sol";
import { IFeaturesFacet } from "../../interfaces/IFeaturesFacet.sol";
import { ILens } from "../../interfaces/ILens.sol";
import { ISafe } from "../lib/safe-contracts/contracts/interfaces/ISafe.sol";
import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import { IERC1155 } from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import "../../interfaces/IFeaturesFacet.sol";
import "../../libraries/LibDiamond.sol";
import "../../interfaces/ILens.sol";
import "../../interfaces/ISafe.sol";
import "../app/MultiSigFacet.sol";

contract ProfileFacet is IProfileFacet, ERC1155Upgradeable, OwnableUpgradeable, ReentrancyGuardUpgradeable {
// Event declarations, e.g., for profile updates, content posted, etc.
Expand Down
4 changes: 2 additions & 2 deletions contracts/facets/features/VillageFacet.sol
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "../../libraries/LibDiamond.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol";
import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";


// Simplified interface for handling chat encryption keys securely
Expand Down
2 changes: 1 addition & 1 deletion contracts/facets/steelo/STEELOFacet.sol
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import { LibDiamond } from "../../libraries/LibDiamond.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
import "@chainlink/contracts/src/v0.8/ChainlinkClient.sol";
import "../../libraries/LibDiamond.sol";

contract STEELOFacet is
ERC20,
Expand Down
4 changes: 2 additions & 2 deletions contracts/facets/steelo/SteeloGovernanceFacet.sol
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import { LibDiamond } from "../../libraries/LibDiamond.sol";
import { IAppFacet } from "../../interfaces/IAppFacet.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "../../libraries/LibDiamond.sol";
import "../../interfaces/IAppFacet.sol";

contract SteeloGovernanceFacet is IGovernanceFacet, Initializable, OwnableUpgradeable {
using LibDiamond for LibDiamond.DiamondStorage;
Expand Down
2 changes: 1 addition & 1 deletion contracts/facets/steelo/SteeloImprovementProposalFacet.sol
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import { LibDiamond } from "../../libraries/LibDiamond.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import "hardhat/console.sol";
import "../../libraries/LibDiamond.sol";

contract SteeloImprovementProposalFacet is Ownable, ReentrancyGuard {
struct SIP {
Expand Down
4 changes: 2 additions & 2 deletions contracts/facets/steelo/SteeloStakingFacet.sol
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { LibDiamond } from "../../libraries/LibDiamond.sol";
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "../../libraries/LibDiamond.sol";

contract SteeloStakingFacet is OwnableUpgradeable, ReentrancyGuardUpgradeable {
using SafeERC20 for IERC20;
Expand Down
14 changes: 7 additions & 7 deletions contracts/facets/steez/STEEZFacet.sol
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import { LibDiamond } from "../../libraries/LibDiamond.sol";
import { IDiamondCut } from "../../interfaces/IDiamondCut.sol";
import { ISteezFacet } from "../../interfaces/ISteezFacet.sol";
import { SafeProxyFactory } from "../lib/safe-contracts/contracts/proxies/SafeProxyFactory.sol";
import { SafeProxy } from "../lib/safe-contracts/contracts/proxies/SafeProxy.sol";
import { SafeL2 } from "../lib/safe-contracts/contracts/SafeL2.sol";
import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
import "@safe-global/safe-contracts/contracts/SafeL2.sol";
import {SafeProxyFactory} from "@safe-global/safe-contracts/contracts/proxies/SafeProxyFactory.sol";
import {SafeProxy} from "@safe-global/safe-contracts/contracts/proxies/SafeProxy.sol";
import {LibDiamond} from "../../libraries/LibDiamond.sol";
import {IDiamondCut} from "../../interfaces/IDiamondCut.sol";
import {ISteezFacet} from "../../interfaces/ISteezFacet.sol";

// CreatorToken.sol is a facet contract that implements the creator token logic and data for the SteeloToken contract
contract STEEZFacet is ERC1155Upgradeable, OwnableUpgradeable, PausableUpgradeable, ReentrancyGuardUpgradeable {
contract STEEZFacet is SafeL2, ERC1155Upgradeable, OwnableUpgradeable, PausableUpgradeable, ReentrancyGuardUpgradeable {
using LibDiamond for LibDiamond.DiamondStorage;
using Address for address;
using Strings for uint256;
Expand Down
2 changes: 1 addition & 1 deletion contracts/facets/steez/SteezFeesFacet.sol
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import { LibDiamond } from "../../libraries/LibDiamond.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol";
import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import "@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol";
import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
import {LibDiamond} from "../../libraries/LibDiamond.sol";

struct Snapshot {
uint256 blockNumber;
Expand Down
2 changes: 1 addition & 1 deletion contracts/facets/steez/SteezGovernanceFacet.sol
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import { LibDiamond } from "../../libraries/LibDiamond.sol";
import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/governance/GovernorUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorVotesUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "../../libraries/LibDiamond.sol";

contract SteezGovernanceFacet is Initializable, AccessControlUpgradeable, GovernorUpgradeable, GovernorVotesUpgradeable {
bytes32 public constant MODERATOR_ROLE = keccak256("MODERATOR_ROLE");
Expand Down
Loading

0 comments on commit 585cc91

Please sign in to comment.