From fc2301f437fa707bbaf8950daa0ef0496f753dc3 Mon Sep 17 00:00:00 2001 From: Edmund Berkmann Date: Tue, 13 Feb 2024 22:21:37 +0000 Subject: [PATCH] Smart Contract 0.6.3 Re-organising state variables, quite far from the finished product. Then more compile error testing. --- contracts/Diamond.sol | 2 +- contracts/facets/DiamondLoupeFacet.sol | 4 +- contracts/facets/DiamondOracleFacet.sol | 2 +- contracts/facets/app/AccessControlFacet.sol | 15 +- .../facets/app/AnalyticsReportingFacet.sol | 2 +- contracts/facets/app/DataManagementFacet.sol | 2 +- contracts/facets/app/GasOptimisationFacet.sol | 2 +- contracts/facets/app/MultiSigFacet.sol | 4 +- contracts/facets/app/NotificationFacet.sol | 2 +- contracts/facets/app/OfflineModeFacet.sol | 2 +- .../facets/app/SecurityComplianceFacet.sol | 2 +- contracts/facets/app/SocialNetworkFacet.sol | 4 +- contracts/facets/app/UserExperienceFacet.sol | 2 +- contracts/facets/app/UserInteractionFacet.sol | 2 +- contracts/facets/features/BazaarFacet.sol | 7 +- contracts/facets/features/GalleryFacet.sol | 3 +- contracts/facets/features/MosaicFacet.sol | 5 +- contracts/facets/features/ProfileFacet.sol | 13 +- contracts/facets/features/VillageFacet.sol | 3 +- contracts/facets/steelo/STEELOFacet.sol | 17 ++ .../facets/steelo/SteeloStakingFacet.sol | 6 + contracts/facets/steez/STEEZFacet.sol | 32 ++- contracts/facets/steez/SteezFeesFacet.sol | 5 + .../facets/steez/SteezManagementFacet.sol | 6 + contracts/interfaces/IAppFacet.sol | 6 +- contracts/interfaces/IFeaturesFacet.sol | 20 ++ contracts/interfaces/ILido.sol | 23 --- contracts/interfaces/ISteeloFacet.sol | 3 + contracts/interfaces/ISteezFacet.sol | 3 + .../{IUniswapV4.sol => IUniswap.sol} | 15 ++ contracts/interfaces/IUniswapX.sol | 14 -- contracts/libraries/LibDiamond.sol | 182 +++++++----------- contracts/upgradeInitializers/DiamondInit.sol | 2 +- 33 files changed, 226 insertions(+), 186 deletions(-) delete mode 100644 contracts/interfaces/ILido.sol rename contracts/interfaces/{IUniswapV4.sol => IUniswap.sol} (54%) delete mode 100644 contracts/interfaces/IUniswapX.sol diff --git a/contracts/Diamond.sol b/contracts/Diamond.sol index 3eee4a3f..52158c1a 100644 --- a/contracts/Diamond.sol +++ b/contracts/Diamond.sol @@ -6,7 +6,7 @@ import "./interfaces/IDiamondLoupe.sol"; import "./interfaces/IDiamondCut.sol"; import "./interfaces/IERC173.sol"; import "../lib/safe-contracts/contracts/interfaces/ISafe.sol"; -import "../lib/safe-contracts/contracts/interfaces/ISafeIERC165.sol"; +import "../lib/safe-contracts/contracts/interfaces/IERC165.sol"; contract Diamond { struct DiamondArgs { diff --git a/contracts/facets/DiamondLoupeFacet.sol b/contracts/facets/DiamondLoupeFacet.sol index b05c2c1e..9d3c972f 100644 --- a/contracts/facets/DiamondLoupeFacet.sol +++ b/contracts/facets/DiamondLoupeFacet.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; +import { LibDiamond } from "../libraries/LibDiamond.sol"; import { IDiamondLoupe } from "../interfaces/IDiamondLoupe.sol"; -import { IERC165 } from "../lib/safe-contracts/contracts/interfaces/ISafeIERC165.sol"; +import { IERC165 } from "../../lib/safe-contracts/contracts/interfaces/IERC165.sol"; // The functions in DiamondLoupeFacet MUST be added to a diamond. // The EIP-2535 Diamond standard requires these functions. diff --git a/contracts/facets/DiamondOracleFacet.sol b/contracts/facets/DiamondOracleFacet.sol index fe614386..1a555190 100644 --- a/contracts/facets/DiamondOracleFacet.sol +++ b/contracts/facets/DiamondOracleFacet.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../../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"; diff --git a/contracts/facets/app/AccessControlFacet.sol b/contracts/facets/app/AccessControlFacet.sol index 72af28b4..0cffe3f1 100644 --- a/contracts/facets/app/AccessControlFacet.sol +++ b/contracts/facets/app/AccessControlFacet.sol @@ -1,10 +1,23 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; +import { LibDiamond } from "../../libraries/LibDiamond.sol"; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; +modifier canCreateToken(address creator) {require(!_hasCreatedToken[creator], "CreatorToken: Creator has already created a token."); _;} +modifier onlyAdmin() {require(admins[msg.sender], "Only Admin can call this function"); _;} +modifier onlyCreator() {require(creatorToIsAdmin[msg.sender] == false && msg.sender != creator, "CreatorToken: Only Creators can call this function"); _;} +modifier onlyOwner() {require(creatorToIsAdmin[msg.sender] == false && msg.sender != creator && msg.sender != owner(), "CreatorToken: Only Owners can call this function"); _;} +modifier onlyUser() {require(users[msg.sender], "Only User can call this function"); _;} +modifier onlyCreatorOrOwner() {require(owners[msg.sender] || creators[msg.sender], "CreatorToken: Only Creators or Owners can call this function"); _;} +modifier dailySnapshot() {if (block.timestamp >= _lastSnapshotTimestamp.add(1 days)) {_takeSnapshot(); _lastSnapshotTimestamp = block.timestamp;} _;} + +mapping (address => bool) private admins; +mapping (address => bool) private creators; +mapping (address => bool) private owners; // to rename to investors +mapping (address => bool) private users; + contract AccessControlFacet is AccessControl { bytes32 public constant UPGRADE_ROLE = keccak256("UPGRADE_ROLE"); bytes32 public constant STEELO_ROLE = keccak256("STEELO_ROLE"); diff --git a/contracts/facets/app/AnalyticsReportingFacet.sol b/contracts/facets/app/AnalyticsReportingFacet.sol index 40ae8808..91f97c83 100644 --- a/contracts/facets/app/AnalyticsReportingFacet.sol +++ b/contracts/facets/app/AnalyticsReportingFacet.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; +import { LibDiamond } from "../../libraries/LibDiamond.sol"; contract AnalyticsReportingFacet { function initialize() external { diff --git a/contracts/facets/app/DataManagementFacet.sol b/contracts/facets/app/DataManagementFacet.sol index 74c15cb0..050845f2 100644 --- a/contracts/facets/app/DataManagementFacet.sol +++ b/contracts/facets/app/DataManagementFacet.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; +import { LibDiamond } from "../../libraries/LibDiamond.sol"; contract DataManagementFacet { function initialize() external { diff --git a/contracts/facets/app/GasOptimisationFacet.sol b/contracts/facets/app/GasOptimisationFacet.sol index 4be48fee..a1952523 100644 --- a/contracts/facets/app/GasOptimisationFacet.sol +++ b/contracts/facets/app/GasOptimisationFacet.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; +import { LibDiamond } from "../../libraries/LibDiamond.sol"; contract GasOptimisationFacet { // Example: Bulk processing to minimise transaction costs diff --git a/contracts/facets/app/MultiSigFacet.sol b/contracts/facets/app/MultiSigFacet.sol index 999e29df..de783b34 100644 --- a/contracts/facets/app/MultiSigFacet.sol +++ b/contracts/facets/app/MultiSigFacet.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; -import { ISafe } from "../lib/safe-contracts/contracts/interfaces/ISafe.sol"; +import { LibDiamond } from "../../libraries/LibDiamond.sol"; +import { ISafe } from "../../../lib/safe-contracts/contracts/interfaces/ISafe.sol"; contract MultiSigFacet { function initialize() external { diff --git a/contracts/facets/app/NotificationFacet.sol b/contracts/facets/app/NotificationFacet.sol index 7fad5936..e7da9d93 100644 --- a/contracts/facets/app/NotificationFacet.sol +++ b/contracts/facets/app/NotificationFacet.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; +import { LibDiamond } from "../../libraries/LibDiamond.sol"; contract NotificationFacet { function initialize() external { diff --git a/contracts/facets/app/OfflineModeFacet.sol b/contracts/facets/app/OfflineModeFacet.sol index 7bc9220a..6650413a 100644 --- a/contracts/facets/app/OfflineModeFacet.sol +++ b/contracts/facets/app/OfflineModeFacet.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; +import { LibDiamond } from "../../libraries/LibDiamond.sol"; contract OfflineModeFacet { function setOfflineMode(bool _offlineMode) external { diff --git a/contracts/facets/app/SecurityComplianceFacet.sol b/contracts/facets/app/SecurityComplianceFacet.sol index 898448b6..461f7b01 100644 --- a/contracts/facets/app/SecurityComplianceFacet.sol +++ b/contracts/facets/app/SecurityComplianceFacet.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; +import { LibDiamond } from "../../libraries/LibDiamond.sol"; contract SecurityComplianceFacet { function initialize() external { diff --git a/contracts/facets/app/SocialNetworkFacet.sol b/contracts/facets/app/SocialNetworkFacet.sol index b58ca8c0..e8edcf7c 100644 --- a/contracts/facets/app/SocialNetworkFacet.sol +++ b/contracts/facets/app/SocialNetworkFacet.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; -import { ISafe } from "../lib/safe-contracts/contracts/interfaces/ISafe.sol"; +import { LibDiamond } from "../../libraries/LibDiamond.sol"; +import { ISafe } from "../../../lib/safe-contracts/contracts/interfaces/ISafe.sol"; contract SocialNetworkFacet { ISafe private safeCore; diff --git a/contracts/facets/app/UserExperienceFacet.sol b/contracts/facets/app/UserExperienceFacet.sol index 65ff0139..828ba8d5 100644 --- a/contracts/facets/app/UserExperienceFacet.sol +++ b/contracts/facets/app/UserExperienceFacet.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; +import { LibDiamond } from "../../libraries/LibDiamond.sol"; contract UserExperienceFacet { function initialize() external { diff --git a/contracts/facets/app/UserInteractionFacet.sol b/contracts/facets/app/UserInteractionFacet.sol index 64e8259d..74cea904 100644 --- a/contracts/facets/app/UserInteractionFacet.sol +++ b/contracts/facets/app/UserInteractionFacet.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; +import { LibDiamond } from "../../libraries/LibDiamond.sol"; contract UserInteractionFacet { function initialize() external { diff --git a/contracts/facets/features/BazaarFacet.sol b/contracts/facets/features/BazaarFacet.sol index 40a13040..a4543de8 100644 --- a/contracts/facets/features/BazaarFacet.sol +++ b/contracts/facets/features/BazaarFacet.sol @@ -1,9 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; -import { IUniswapV4 } from "../../interfaces/IUniswapV4.sol"; -import { IUniswapX } from "../../interfaces/IUniswapX.sol"; +import { LibDiamond } from "../../libraries/LibDiamond.sol"; +import { IUniswapV4 } from "../../interfaces/IUniswap.sol"; +import { IUniswapX } from "../../interfaces/IUniswap.sol"; +import { IBazaarFacet } from "../../interfaces/IFeaturesFacet.sol"; import { IERC1155 } from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; contract BazaarFacet { diff --git a/contracts/facets/features/GalleryFacet.sol b/contracts/facets/features/GalleryFacet.sol index 4b7ff58e..5c6bc45e 100644 --- a/contracts/facets/features/GalleryFacet.sol +++ b/contracts/facets/features/GalleryFacet.sol @@ -1,9 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.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 { IGalleryFacet } from "../../interfaces/IFeaturesFacet.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; contract GalleryFacet { diff --git a/contracts/facets/features/MosaicFacet.sol b/contracts/facets/features/MosaicFacet.sol index 5476f194..f27df4bc 100644 --- a/contracts/facets/features/MosaicFacet.sol +++ b/contracts/facets/features/MosaicFacet.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; +import { LibDiamond } from "../../libraries/LibDiamond.sol"; import { ISteezFacet } from "../../interfaces/ISteezFacet.sol"; +import { IMosaicFacet } from "../../interfaces/IFeaturesFacet.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"; @@ -68,7 +69,7 @@ contract MosaicFacet { emit Liked(msg.sender, contentId); } - function comment(uint256 contentId, string calldata comment) external { + function commentOnContent(uint256 contentId, string calldata comment) external { // Placeholder: Actual comment logic emit Commented(msg.sender, contentId, comment); } diff --git a/contracts/facets/features/ProfileFacet.sol b/contracts/facets/features/ProfileFacet.sol index 99eb4a71..0643f614 100644 --- a/contracts/facets/features/ProfileFacet.sol +++ b/contracts/facets/features/ProfileFacet.sol @@ -1,15 +1,20 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; -import { MultiSigFacet } from "../app/MultiSigFacet.sol"; -import { IFeaturesFacet } from "../../interfaces/IFeaturesFacet.sol"; +import { LibDiamond } from "../../libraries/LibDiamond.sol"; +import { IProfileFacet } from "../../interfaces/IFeaturesFacet.sol"; import { ILens } from "../../interfaces/ILens.sol"; -import { ISafe } from "../lib/safe-contracts/contracts/interfaces/ISafe.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 "../app/MultiSigFacet.sol"; + +string username; +string bio; +string avatarURI; +address walletAddress; contract ProfileFacet is IProfileFacet, ERC1155Upgradeable, OwnableUpgradeable, ReentrancyGuardUpgradeable { // Event declarations, e.g., for profile updates, content posted, etc. diff --git a/contracts/facets/features/VillageFacet.sol b/contracts/facets/features/VillageFacet.sol index 99608d4d..d4c80ece 100644 --- a/contracts/facets/features/VillageFacet.sol +++ b/contracts/facets/features/VillageFacet.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; -import { LibDiamond } from "../libraries/LibDiamond.sol"; +import { LibDiamond } from "../../libraries/LibDiamond.sol"; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import { IVillageFacet } from "../../interfaces/IFeaturesFacet.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; diff --git a/contracts/facets/steelo/STEELOFacet.sol b/contracts/facets/steelo/STEELOFacet.sol index 466e7c90..b66e1076 100644 --- a/contracts/facets/steelo/STEELOFacet.sol +++ b/contracts/facets/steelo/STEELOFacet.sol @@ -26,6 +26,23 @@ contract STEELOFacet is event BurnRateUpdated(uint256 newBurnRate); event steeloTGEExecuted(uint256 tgeAmount); + // Storage + mapping(uint256 => mapping(uint256 => uint256)) private _snapshotBalances; + mapping(uint256 => uint256) private _lastSnapshot; + int256 steezTransactionCount; + uint256 steeloCurrentPrice; + uint256 steezCurrentPrice; + uint256 totalMinted; + uint256 totalBurned; + uint256 lastMintEvent; + uint256 lastBurnUpdate; + uint256 mintAmount; + uint256 burnAmount; + uint256 burnRate; + uint256 mintRate; + bool isDeflationary; + bool tgeExecuted; + function initialize( address _treasury, address _oracle, diff --git a/contracts/facets/steelo/SteeloStakingFacet.sol b/contracts/facets/steelo/SteeloStakingFacet.sol index 3ce8fb08..5d93ac6d 100644 --- a/contracts/facets/steelo/SteeloStakingFacet.sol +++ b/contracts/facets/steelo/SteeloStakingFacet.sol @@ -12,10 +12,16 @@ contract SteeloStakingFacet is OwnableUpgradeable, ReentrancyGuardUpgradeable { IERC20Upgradeable public steeloToken; + // Events event Staked(address indexed user, uint256 amount); event Unstaked(address indexed user, uint256 amount); event RewardPaid(address indexed user, uint256 rewardAmount); + // Storage + mapping(address => uint256) public stakes; + mapping(address => bool) public isStakeholder; + mapping(address => uint256) public stakeDuration; + function initialize(address _steeloToken) public initializer { __Ownable_init(); __ReentrancyGuard_init(); diff --git a/contracts/facets/steez/STEEZFacet.sol b/contracts/facets/steez/STEEZFacet.sol index c0c5fa24..8f92f5cc 100644 --- a/contracts/facets/steez/STEEZFacet.sol +++ b/contracts/facets/steez/STEEZFacet.sol @@ -4,9 +4,9 @@ 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 { 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"; @@ -30,10 +30,34 @@ contract STEEZFacet is SafeL2, ERC1155Upgradeable, OwnableUpgradeable, PausableU event TokenTransferred(uint256 tokenId, address from, address to, uint256 amount); event TokenBurned(uint256 tokenId, address owner, uint256 amount); - // State variables to track auction state + Royalties private _royalties; + string public _baseURI; + address public _safeAddress; + address public _creatorTokenAddress; + uint256 public _maxCreatorTokens; + uint256 public _transactionFee; + uint256 private _totalShareholdings; + uint256 public _currentTokenID; + uint256 private _snapshotCounter; + uint256 private snapshotCounter; + uint256 private _lastSnapshotTimestamp; uint256 public currentPrice = ds.INITIAL_PRICE; uint256 public tokensSecuredThisBatch = 0; uint256 public auctionStartTime; + mapping(uint256 => mapping(address => uint256)) _undistributedRoyalties; + mapping(uint256 => uint256) _communityRoyaltyRates; + mapping(uint256 => mapping(address => Snapshot[])) _holderSnapshots; + mapping(uint256 => Snapshot[]) _totalUndistributedSnapshots; + mapping(uint256 => mapping(uint256 => uint256)) private _snapshotBalances; + mapping(uint256 => uint256) private _lastSnapshot; + mapping(address => bool) private _hasCreatedToken; + mapping(uint256 => bool) private _tokenExists; + mapping(uint256 => uint256) private _totalSupply; + mapping(address => uint256) private _shareholdings; + mapping(uint256 => uint256) private _transactionCount; + mapping(uint256 => uint256) private _mintedInLastYear; + mapping(uint256 => uint256) private _lastMintTime; + mapping(uint256 => mapping(address => uint256)) public balances; modifier withinAuctionPeriod() { require(auctionStartTime != 0, "Auction has not started yet"); diff --git a/contracts/facets/steez/SteezFeesFacet.sol b/contracts/facets/steez/SteezFeesFacet.sol index 19319729..64ce3f07 100644 --- a/contracts/facets/steez/SteezFeesFacet.sol +++ b/contracts/facets/steez/SteezFeesFacet.sol @@ -13,6 +13,11 @@ struct Snapshot { uint256 value; } +mapping(uint256 => mapping(address => uint256)) public undistributedRoyalties; +mapping(uint256 => uint256[]) public communitySplits; +mapping(uint256 => address[]) public tokenHolders; +mapping(uint256 => mapping(address => uint256)) public balances; + contract SteezFeesFacet is OwnableUpgradeable, ReentrancyGuardUpgradeable { event RoyaltyPaid(uint256 indexed tokenId, address indexed recipient, uint256 amount); diff --git a/contracts/facets/steez/SteezManagementFacet.sol b/contracts/facets/steez/SteezManagementFacet.sol index fe33c87b..3621ae37 100644 --- a/contracts/facets/steez/SteezManagementFacet.sol +++ b/contracts/facets/steez/SteezManagementFacet.sol @@ -6,6 +6,12 @@ import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol" import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; +mapping(uint256 => uint256[]) public creatorSplits; +mapping (address => bool) private admins; +mapping (address => bool) private creators; +mapping (address => bool) private owners; // to rename to investors +mapping (address => bool) private users; + contract SteezManagementFacet is AccessControlUpgradeable, OwnableUpgradeable, ReentrancyGuardUpgradeable { bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); diff --git a/contracts/interfaces/IAppFacet.sol b/contracts/interfaces/IAppFacet.sol index ed40732f..c524c09e 100644 --- a/contracts/interfaces/IAppFacet.sol +++ b/contracts/interfaces/IAppFacet.sol @@ -1,6 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; +interface IAppFacet { + // Declare the functions for the Master interface here +} + interface IGovernanceFacet { - + // Declare the functions for the Governance interface here } \ No newline at end of file diff --git a/contracts/interfaces/IFeaturesFacet.sol b/contracts/interfaces/IFeaturesFacet.sol index 116e50c3..13fefc53 100644 --- a/contracts/interfaces/IFeaturesFacet.sol +++ b/contracts/interfaces/IFeaturesFacet.sol @@ -1,6 +1,26 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; +interface IFeaturesFacet { + // Declare the functions for the Master interface here +} + interface IProfileFacet { + // Declare the functions for the IProfileFacet interface here +} + +interface IVillageFacet { + // Declare the functions for the IVillageFacet interface here +} + +interface IMosaicFacet { + // Declare the functions for the IMosaicFacet interface here +} + +interface IBazaarFacet { + // Declare the functions for the IBazaarFacet interface here +} +interface IGalleryFacet { + // Declare the functions for the IGalleryFacet interface here } \ No newline at end of file diff --git a/contracts/interfaces/ILido.sol b/contracts/interfaces/ILido.sol deleted file mode 100644 index 0b3d59d2..00000000 --- a/contracts/interfaces/ILido.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.20; - -interface ILido { - /** - * @notice Stakes ETH and mints stETH tokens. - * @param _amount Amount of ETH to stake. - * @return Amount of stETH minted. - */ - function submit(address _referral) external payable returns (uint256); - - /** - * @notice Returns the current amount of stETH for 1 ETH, including fees. - * @return Current stETH exchange rate. - */ - function getStETHByETH(uint256 _ethAmount) external view returns (uint256); - - /** - * @notice Returns the total amount of staked ETH managed by the protocol. - * @return Total staked ETH. - */ - function getTotalPooledEther() external view returns (uint256); -} \ No newline at end of file diff --git a/contracts/interfaces/ISteeloFacet.sol b/contracts/interfaces/ISteeloFacet.sol index c83c8e2e..4e1dc811 100644 --- a/contracts/interfaces/ISteeloFacet.sol +++ b/contracts/interfaces/ISteeloFacet.sol @@ -39,4 +39,7 @@ interface ISteeloFacet { // Transfers Steelo tokens from one account to another. function tokenTransfer(address recipient, uint256 amount) external; +} + +interface ISteeloStakingFacet { } \ No newline at end of file diff --git a/contracts/interfaces/ISteezFacet.sol b/contracts/interfaces/ISteezFacet.sol index c9edb9ab..6a8d20a3 100644 --- a/contracts/interfaces/ISteezFacet.sol +++ b/contracts/interfaces/ISteezFacet.sol @@ -46,4 +46,7 @@ interface ISteezFacet { // This function handles the royalty payment logic function payRoyaltiesOnTransfer(uint256 id, uint256 value, address from, address to) external; +} + +interface ISteezFeesFacet { } \ No newline at end of file diff --git a/contracts/interfaces/IUniswapV4.sol b/contracts/interfaces/IUniswap.sol similarity index 54% rename from contracts/interfaces/IUniswapV4.sol rename to contracts/interfaces/IUniswap.sol index d8bbf8b0..06e2dc41 100644 --- a/contracts/interfaces/IUniswapV4.sol +++ b/contracts/interfaces/IUniswap.sol @@ -1,6 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.20; +interface IUniswap { +} + interface IUniswapV4 { // Function to create a new pool with a specified hook for custom functionality function createPool(address tokenA, address tokenB, uint24 fee, address hook) external returns (address pool); @@ -13,4 +16,16 @@ interface IUniswapV4 { // Function to remove liquidity from a pool function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint deadline) external returns (uint256 amountA, uint256 amountB); +} + +interface IUniswapX { + // Speculative functionalities considering advanced order book handling and pre-order auctions + // Function to initiate a pre-order auction + function initiateAuction(address token, uint256 startPrice, uint256 endPrice, uint256 duration) external; + + // Function for trading in the Launch Trading Pools with logic for handling local stablecoins + function launchTrade(address tokenSell, address tokenBuy, uint256 amountSell, uint256 amountBuyMin, address to, uint deadline) external returns (uint256 amountBuy); + + // Function to perform exchanges between pools utilizing Uniswap v4's hooks for custom swapping logic + function poolSwap(address tokenA, address poolA, address tokenB, address poolB, uint256 amountA, uint256 amountAMin, uint256 amountBMin, address to, uint deadline) external returns (uint256 amountB); } \ No newline at end of file diff --git a/contracts/interfaces/IUniswapX.sol b/contracts/interfaces/IUniswapX.sol deleted file mode 100644 index 51ccca04..00000000 --- a/contracts/interfaces/IUniswapX.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.20; - -interface IUniswapX { - // Speculative functionalities considering advanced order book handling and pre-order auctions - // Function to initiate a pre-order auction - function initiateAuction(address token, uint256 startPrice, uint256 endPrice, uint256 duration) external; - - // Function for trading in the Launch Trading Pools with logic for handling local stablecoins - function launchTrade(address tokenSell, address tokenBuy, uint256 amountSell, uint256 amountBuyMin, address to, uint deadline) external returns (uint256 amountBuy); - - // Function to perform exchanges between pools utilizing Uniswap v4's hooks for custom swapping logic - function poolSwap(address tokenA, address poolA, address tokenB, address poolB, uint256 amountA, uint256 amountAMin, uint256 amountBMin, address to, uint deadline) external returns (uint256 amountB); -} \ No newline at end of file diff --git a/contracts/libraries/LibDiamond.sol b/contracts/libraries/LibDiamond.sol index 1af6a0ff..497a7995 100644 --- a/contracts/libraries/LibDiamond.sol +++ b/contracts/libraries/LibDiamond.sol @@ -8,35 +8,11 @@ import { IDiamondCut } from "../interfaces/IDiamondCut.sol"; error InitializationFunctionReverted(address _initializationContractAddress, bytes _calldata); +import { ISteezFacet } from "../interfaces/ISteezFacet.sol"; +import { ISteezFeesFacet } from "../interfaces/ISteezFacet.sol"; + library LibDiamond { bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage"); - uint256 public constant TGE_AMOUNT = 825_000_000 * 10**18; - uint256 public constant pMin = 0.5 ether; - uint256 public constant pMax = 5 ether; - uint256 public constant BURN_THRESHOLD = 1e9; - uint256 private constant INITIAL_CAP = 500; - uint256 private constant TRANSACTION_MULTIPLIER = 2; - uint256 private constant PRE_ORDER_MINIMUM_SOLD = 125; // 50% of 250 - uint256 public constant INITIAL_PRICE = 30 ether; // Assuming pricing in WEI for simplicity - uint256 public constant PRICE_INCREMENT = 10 ether; // Increment value - uint256 public constant TOKEN_BATCH_SIZE = 250; - uint256 public constant AUCTION_DURATION = 24 hours; - address private constant GNOSIS_SAFE_MASTER_COPY = 0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F; - address private constant GNOSIS_SAFE_PROXY_FACTORY = 0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F48; - address public constant STEELO_WALLET = 0x1234567890123456789012345678901234567890; // Placeholder address - uint256 public constant rho = 1 ether; - uint256 public constant alpha = 10; - uint256 public constant beta = 10; - - uint256 constant PRE_ORDER_CREATOR_ROYALTY = 90; // 90% of pre-order sale value to creator - uint256 constant PRE_ORDER_STEELO_ROYALTY = 10; // 10% of pre-order sale value to Steelo - uint256 constant LAUNCH_CREATOR_ROYALTY = 90; // 90% of launch + expansion sale value to creator - uint256 constant LAUNCH_STEELO_ROYALTY = 75; // 7.5% of launch + expansion sale value to Steelo - uint256 constant LAUNCH_COMMUNITY_ROYALTY = 25; // 2.5% of launch + expansion sale value to token holders - uint256 constant SECOND_HAND_SELLER_ROYALTY = 90; // 90% of second-hand sale value to seller - uint256 constant SECOND_HAND_CREATOR_ROYALTY = 50; // 5% of second-hand sale value to creator - uint256 constant SECOND_HAND_STEELO_ROYALTY = 25; // 2.5% of second-hand sale value to Steelo - uint256 constant SECOND_HAND_COMMUNITY_ROYALTY = 25; // 2.5% of second-hand sale value to token holders function diamondStorage() internal pure returns (DiamondStorage storage ds) { assembly { @@ -44,43 +20,43 @@ library LibDiamond { } } - mapping(address => uint256) public stakes; - mapping(address => bool) public isStakeholder; - mapping (address => bool) private admins; - mapping (address => bool) private creators; - mapping (address => bool) private owners; // to rename to investors - mapping (address => bool) private users; - mapping(address => bool) private _hasCreatedToken; - mapping(uint256 => bool) private _tokenExists; - mapping(uint256 => uint256) private _totalSupply; - mapping(address => uint256) private _shareholdings; - mapping(uint256 => uint256) private _transactionCount; - mapping(uint256 => uint256) private _mintedInLastYear; - mapping(uint256 => uint256) private _lastMintTime; - mapping(uint256 => uint256[]) public creatorSplits; - mapping(uint256 => uint256[]) public communitySplits; - mapping(uint256 => address[]) public tokenHolders; - mapping(uint256 => mapping(address => uint256)) public balances; - mapping(uint256 => mapping(address => uint256)) public distributionPolicies; - mapping(uint256 => mapping(uint256 => uint256)) private _snapshotBalances; - mapping(uint256 => uint256) private _lastSnapshot; - - address public treasury; uint256 public trasuryTGE = 35; uint256 public treasuryMint = 35; - address public liquidityProviders = 0x22a909748884b504bb3BDC94FAE155aaa917416D; uint256 public liquidityProvidersMint = 55; - address public ecosystemProviders = 0x5dBfD5E645FF0714dc71c3cbcADAAdf163d5971D; uint256 public ecosystemProvidersMint = 10; - address public foundersAddress = 0x0620F316431EE739a1c1EeD54980aF5EAF5B8E49; uint256 public foundersTGE = 20; - address public earlyInvestorsAddress = 0x6Eaa165659fbd96C10DBad3C3A89396225aEEde8; uint256 public earlyInvestorsTGE = 10; - address public communityAddress = 0xB6912a7F733287BE95Aca28E1C563FA3Ed0BeFde; uint256 public communityTGE = 35; - address public steeloAddresss = 0x45F9B54cB97970c0E798dB0FDF2b8076Cdf57d25; uint256 public FEE_RATE = 25; - - modifier canCreateToken(address creator) {require(!_hasCreatedToken[creator], "CreatorToken: Creator has already created a token."); _;} - modifier onlyAdmin() {require(admins[msg.sender], "Only Admin can call this function"); _;} - modifier onlyCreator() {require(creatorToIsAdmin[msg.sender] == false && msg.sender != creator, "CreatorToken: Only Creators can call this function"); _;} - modifier onlyOwner() {require(creatorToIsAdmin[msg.sender] == false && msg.sender != creator && msg.sender != owner(), "CreatorToken: Only Owners can call this function"); _;} - modifier onlyUser() {require(users[msg.sender], "Only User can call this function"); _;} - modifier onlyCreatorOrOwner() {require(owners[msg.sender] || creators[msg.sender], "CreatorToken: Only Creators or Owners can call this function"); _;} - modifier dailySnapshot() {if (block.timestamp >= _lastSnapshotTimestamp.add(1 days)) {_takeSnapshot(); _lastSnapshotTimestamp = block.timestamp;} _;} - + uint256 public constant TGE_AMOUNT = 825_000_000 * 10**18; + uint256 public constant pMin = 0.5 ether; + uint256 public constant pMax = 5 ether; + uint256 public constant BURN_THRESHOLD = 1e9; + uint256 public constant INITIAL_CAP = 500; + uint256 public constant TRANSACTION_MULTIPLIER = 2; + uint256 public constant PRE_ORDER_MINIMUM_SOLD = 125; // 50% of 250 + uint256 public constant INITIAL_PRICE = 30 ether; // Assuming pricing in WEI for simplicity + uint256 public constant PRICE_INCREMENT = 10 ether; // Increment value + uint256 public constant TOKEN_BATCH_SIZE = 250; + uint256 public constant AUCTION_DURATION = 24 hours; + address private constant GNOSIS_SAFE_MASTER_COPY = 0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F; + address private constant GNOSIS_SAFE_PROXY_FACTORY = 0x76E2cFc1F5Fa8F6a5b3fC4c8F4788F0116861F48; + address private constant STEELO_WALLET = 0x45F9B54cB97970c0E798dB0FDF2b8076Cdf57d25; + + uint256 private constant rho = 1 ether; + uint256 private constant alpha = 10; + uint256 private constant beta = 10; + + uint256 constant PRE_ORDER_CREATOR_ROYALTY = 90; // 90% of pre-order sale value to creator + uint256 constant PRE_ORDER_STEELO_ROYALTY = 10; // 10% of pre-order sale value to Steelo + uint256 constant LAUNCH_CREATOR_ROYALTY = 90; // 90% of launch + expansion sale value to creator + uint256 constant LAUNCH_STEELO_ROYALTY = 75; // 7.5% of launch + expansion sale value to Steelo + uint256 constant LAUNCH_COMMUNITY_ROYALTY = 25; // 2.5% of launch + expansion sale value to token holders + uint256 constant SECOND_HAND_SELLER_ROYALTY = 90; // 90% of second-hand sale value to seller + uint256 constant SECOND_HAND_CREATOR_ROYALTY = 50; // 5% of second-hand sale value to creator + uint256 constant SECOND_HAND_STEELO_ROYALTY = 25; // 2.5% of second-hand sale value to Steelo + uint256 constant SECOND_HAND_COMMUNITY_ROYALTY = 25; // 2.5% of second-hand sale value to token holders + + address public treasury; uint256 public trasuryTGE = 35; uint256 public treasuryMint = 35; + address public liquidityProviders = 0x22a909748884b504bb3BDC94FAE155aaa917416D; uint256 public liquidityProvidersMint = 55; + address public ecosystemProviders = 0x5dBfD5E645FF0714dc71c3cbcADAAdf163d5971D; uint256 public ecosystemProvidersMint = 10; + address public foundersAddress = 0x0620F316431EE739a1c1EeD54980aF5EAF5B8E49; uint256 public foundersTGE = 20; + address public earlyInvestorsAddress = 0x6Eaa165659fbd96C10DBad3C3A89396225aEEde8; uint256 public earlyInvestorsTGE = 10; + address public communityAddress = 0xB6912a7F733287BE95Aca28E1C563FA3Ed0BeFde; uint256 public communityTGE = 35; + address public steeloAddresss = 0x45F9B54cB97970c0E798dB0FDF2b8076Cdf57d25; uint256 public FEE_RATE = 25; + struct FacetAddressAndPosition { address facetAddress; uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array @@ -91,6 +67,30 @@ library LibDiamond { uint256 facetAddressPosition; // position of facetAddress in facetAddresses array } + struct ProfileInfo { + string username; + string bio; + string avatarURI; + address walletAddress; + } + + struct Royalties { + address recipient; + uint256 value; + } + + struct Snapshot { + uint256 timestamp; + uint256 value; + } + + struct RoyaltyInfo { + address creator; + address investor; + uint256 share; + uint256 value; + } + struct DiamondStorage { // Diamond Standard parameters @@ -101,8 +101,8 @@ library LibDiamond { address contractOwner; // Add more fields as needed... - ISteezFeesFacet steezFeesFacet; ISteezFacet steezFacet; + ISteezFeesFacet steezFeesFacet; // Chainlink parameters address oracle; @@ -110,56 +110,8 @@ library LibDiamond { uint256 fee; uint256 volume; - // ProfileFacet.So mapping(address => ProfileInfo) profiles; mapping(string => bool) usernameExists; - string username; - string bio; - string avatarURI; // URI to user's avatar image - address walletAddress; // The user's wallet address - // Additional fields can be added as needed - - // STEELOFacet.sol Constants - int256 steezTransactionCount; - uint256 steeloCurrentPrice; - uint256 steezCurrentPrice; - uint256 totalMinted; - uint256 totalBurned; - uint256 lastMintEvent; - uint256 lastBurnUpdate; - uint256 mintAmount; - uint256 burnAmount; - uint256 burnRate; - uint256 mintRate; - bool isDeflationary; - bool tgeExecuted; - - // STEEZFacet.sol Constants - Royalties _royalties; - - // STEEZFacet.sol Variables - string _baseURI; - uint256 _maxCreatorTokens; - uint256 _transactionFee; - uint256 _totalShareholdings; - - // STEEZFacet.sol Snapshots - CountersUpgradeable.Counter _currentTokenID; - CountersUpgradeable.Counter _snapshotCounter; - uint256 _lastSnapshotTimestamp; - - // STEEZFacet.solCONTRACT ADDRESSES - address _safeAddress; - - // STEEZFeesFacet.sol Addresses - address _creatorTokenAddress; - - // SteezFeesFacet.sol Mapping - mapping(uint256 => mapping(address => uint256)) _undistributedRoyalties; - mapping(uint256 => uint256) _communityRoyaltyRates; - mapping(uint256 => mapping(address => Snapshot[])) _holderSnapshots; - mapping(uint256 => Snapshot[]) _totalUndistributedSnapshots; - } // Example method in LibDiamond for batch updating royalties @@ -195,9 +147,9 @@ library LibDiamond { } // Record the balance for an address at the current snapshot - function _snapshotBalance(address account, uint256 balance) internal { + function snapshotBalances(address account, uint256 balance) internal { uint256 currentId = _incrementSnapshot(); - snapshotBalances[currentId][account] = balance; + _snapshotBalances[currentId][account] = balance; } event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); diff --git a/contracts/upgradeInitializers/DiamondInit.sol b/contracts/upgradeInitializers/DiamondInit.sol index 3da4d39f..c6d426dc 100644 --- a/contracts/upgradeInitializers/DiamondInit.sol +++ b/contracts/upgradeInitializers/DiamondInit.sol @@ -12,7 +12,7 @@ import { LibDiamond } from "../libraries/LibDiamond.sol"; import { IDiamondLoupe } from "../interfaces/IDiamondLoupe.sol"; import { IDiamondCut } from "../interfaces/IDiamondCut.sol"; import { IERC173 } from "../interfaces/IERC173.sol"; -import { IERC165 } from "../lib/safe-contracts/contracts/interfaces/ISafeIERC165.sol"; +import { IERC165 } from "../../lib/safe-contracts/contracts/interfaces/IERC165.sol"; // It is expected that this contract is customized if you want to deploy your diamond // with data from a deployment script. Use the init function to initialize state variables