Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion contracts/diamond/facets/AccessController.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { FermionErrors } from "../../protocol/domain/Errors.sol";
import { ADMIN, PAUSER, UPGRADER, FEE_COLLECTOR } from "../../protocol/domain/Constants.sol";
import { AccessControlUpgradeable as AccessControl } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
import { ContextUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol";
import { Context } from "../../protocol/libs/Context.sol";
import { Context } from "../../protocol/bases/mixins/Context.sol";

/**
* @title AccessController
Expand Down
2 changes: 1 addition & 1 deletion contracts/diamond/facets/DiamondCutFacet.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ pragma solidity 0.8.24;

import { IDiamondCut } from "../interfaces/IDiamondCut.sol";
import { LibDiamond } from "../libraries/LibDiamond.sol";
import { Access } from "../../protocol/libs/Access.sol";
import { Access } from "../../protocol/bases/mixins/Access.sol";
import { UPGRADER } from "../../protocol/domain/Constants.sol";

// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
pragma solidity 0.8.24;

import { IAccessControl } from "@openzeppelin/contracts/access/IAccessControl.sol";
import { FermionTypes } from "../domain/Types.sol";
import { FermionStorage } from "./Storage.sol";
import { PauseErrors } from "../domain/Errors.sol";
import { Context } from "./Context.sol";
import { ReentrancyGuard } from "./ReentrancyGuard.sol";
import { FermionTypes } from "../../domain/Types.sol";
import { FermionStorage } from "../../libs/Storage.sol";
import { PauseErrors } from "../../domain/Errors.sol";
import { Context } from "../../bases/mixins/Context.sol";
import { ReentrancyGuard } from "../../bases/mixins/ReentrancyGuard.sol";

/**
* @title Access control
Expand All @@ -24,7 +24,7 @@
}

// keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.AccessControl")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant AccessControlStorageLocation =

Check warning on line 27 in contracts/protocol/bases/mixins/Access.sol

View workflow job for this annotation

GitHub Actions / setup

Constant name must be in capitalized SNAKE_CASE
0x02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800;

function _getAccessControlStorage() private pure returns (AccessControlStorage storage $) {
Expand Down
24 changes: 24 additions & 0 deletions contracts/protocol/bases/mixins/Context.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import { ContextLib } from "../../libs/ContextLib.sol";

/**
* @title Execution context
*
* @notice Provides the message sender
*/
contract Context {
uint256 private constant ADDRESS_LENGTH = 20;

/**
* @notice Returns the message sender address.
*
* @dev Could be msg.sender or the message sender address from storage (in case of meta transaction).
*
* @return the message sender address
*/
function _msgSender() internal view virtual returns (address) {
return ContextLib._msgSender();
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.24;

import { FermionGeneralErrors, CustodianVaultErrors } from "../domain/Errors.sol";
import { FermionTypes } from "../domain/Types.sol";
import { FermionStorage } from "../libs/Storage.sol";
import { FundsLib } from "../libs/FundsLib.sol";
import { ICustodyEvents } from "../interfaces/events/ICustodyEvents.sol";
import { FermionGeneralErrors, CustodianVaultErrors } from "../../domain/Errors.sol";
import { FermionTypes } from "../../domain/Types.sol";
import { FermionStorage } from "../../libs/Storage.sol";
import { FundsManager } from "./FundsManager.sol";
import { ICustodyEvents } from "../../interfaces/events/ICustodyEvents.sol";

/**
* @title CustodyLib
* @title Custody Base Mixin Contract
*
* @notice Custody methods used by multiple facets.
* @notice Base contract providing custody methods used by multiple facets
*/
abstract contract CustodyLib is FundsLib {
abstract contract Custody is FundsManager {
/**
* @notice Creates a custodian vault for a tokenId
* The amount for first period is encumbered (it is available in the protocol since the verification time).
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import { SLOT_SIZE } from "../domain/Constants.sol";
import { SLOT_SIZE } from "../../domain/Constants.sol";
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import { FundsErrors, FermionGeneralErrors } from "../domain/Errors.sol";
import { FermionStorage } from "../libs/Storage.sol";
import { ContextLib } from "../libs/Context.sol";
import { FermionFNFTLib } from "./FermionFNFTLib.sol";
import { IFermionFNFT } from "../interfaces/IFermionFNFT.sol";
import { IFundsEvents } from "../interfaces/events/IFundsEvents.sol";
import { FundsErrors, FermionGeneralErrors } from "../../domain/Errors.sol";
import { FermionStorage } from "../../libs/Storage.sol";
import { ContextLib } from "../../libs/ContextLib.sol";
import { FermionFNFTLib } from "../../libs/FermionFNFTLib.sol";
import { IFermionFNFT } from "../../interfaces/IFermionFNFT.sol";
import { IFundsEvents } from "../../interfaces/events/IFundsEvents.sol";

/**
* @title FundsLib
* @title Funds Manager Base Contract
*
* @dev
* @notice Base contract providing funds management functionality used by multiple facets
*/
contract FundsLib {
contract FundsManager {
using SafeERC20 for IERC20;
using FermionFNFTLib for address;

Expand Down
6 changes: 3 additions & 3 deletions contracts/protocol/clients/FermionBuyoutAuction.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { FermionFractionsERC20Base } from "./FermionFractionsERC20Base.sol";
import { Common } from "./Common.sol";
import { FermionFNFTBase } from "./FermionFNFTBase.sol";
import { ERC721Upgradeable as ERC721 } from "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol";
import { FundsLib } from "../libs/FundsLib.sol";
import { FundsManager } from "../bases/mixins/FundsManager.sol";
import { IFermionFractionsEvents } from "../interfaces/events/IFermionFractionsEvents.sol";
import { IFermionCustodyVault } from "../interfaces/IFermionCustodyVault.sol";
import { Address } from "@openzeppelin/contracts/utils/Address.sol";
Expand All @@ -20,12 +20,12 @@ contract FermionBuyoutAuction is
FermionFractionsERC20Base,
FermionFNFTBase,
FermionErrors,
FundsLib,
FundsManager,
IFermionFractionsEvents
{
using Address for address;

constructor(address _bosonPriceDiscovery) FermionFNFTBase(_bosonPriceDiscovery) FundsLib(bytes32(0)) {}
constructor(address _bosonPriceDiscovery) FermionFNFTBase(_bosonPriceDiscovery) FundsManager(bytes32(0)) {}

/**
* @notice Starts the auction for a specific fractionalized token. Can be called by anyone.
Expand Down
4 changes: 2 additions & 2 deletions contracts/protocol/clients/FermionFNFT.sol
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.24;

import { SLOT_SIZE } from "../domain/Constants.sol";

Check warning on line 4 in contracts/protocol/clients/FermionFNFT.sol

View workflow job for this annotation

GitHub Actions / setup

imported name SLOT_SIZE is not used
import { FermionTypes } from "../domain/Types.sol";
import { IFermionWrapper } from "../interfaces/IFermionWrapper.sol";
import { IFermionFractions } from "../interfaces/IFermionFractions.sol";
Expand All @@ -10,7 +10,7 @@
import { FermionFractions } from "./FermionFractions.sol";
import { FermionWrapper } from "./FermionWrapper.sol";
import { Common } from "./Common.sol";
import { FundsLib } from "../libs/FundsLib.sol";
import { FundsManager } from "../bases/mixins/FundsManager.sol";
import { ERC721Upgradeable as ERC721 } from "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol";
import { ContextUpgradeable as Context } from "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol";
import { ERC2771ContextUpgradeable as ERC2771Context } from "@openzeppelin/contracts-upgradeable/metatx/ERC2771ContextUpgradeable.sol";
Expand Down Expand Up @@ -41,7 +41,7 @@
)
FermionWrapper(_bosonPriceDiscovery, _seaportWrapper, _wrappedNative)
ERC2771Context(address(0))
FundsLib(bytes32(0))
FundsManager(bytes32(0))
FermionFractions(_fnftFractionMint, _fermionFNFTPriceManager, _fnftBuyoutAuction)
{}

Expand Down
4 changes: 2 additions & 2 deletions contracts/protocol/clients/FermionFractions.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { FermionFractionsERC20Base } from "./FermionFractionsERC20Base.sol";
import { Common } from "./Common.sol";
import { FermionFNFTBase } from "./FermionFNFTBase.sol";
import { ERC721Upgradeable as ERC721 } from "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol";
import { FundsLib } from "../libs/FundsLib.sol";
import { FundsManager } from "../bases/mixins/FundsManager.sol";
import { IFermionFractionsEvents } from "../interfaces/events/IFermionFractionsEvents.sol";
import { IFermionFractions } from "../interfaces/IFermionFractions.sol";
import { IFermionFNFTPriceManager } from "../interfaces/IFermionFNFTPriceManager.sol";
Expand All @@ -22,7 +22,7 @@ abstract contract FermionFractions is
FermionFractionsERC20Base,
FermionFNFTBase,
FermionErrors,
FundsLib,
FundsManager,
IFermionFractionsEvents,
IFermionFractions
{
Expand Down
6 changes: 3 additions & 3 deletions contracts/protocol/clients/FermionFractionsMint.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { FermionFractionsERC20Base } from "./FermionFractionsERC20Base.sol";
import { Common, InvalidStateOrCaller } from "./Common.sol";
import { FermionFNFTBase } from "./FermionFNFTBase.sol";
import { ERC721Upgradeable as ERC721 } from "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol";
import { FundsLib } from "../libs/FundsLib.sol";
import { FundsManager } from "../bases/mixins/FundsManager.sol";
import { IFermionFractionsEvents } from "../interfaces/events/IFermionFractionsEvents.sol";
import { IFermionCustodyVault } from "../interfaces/IFermionCustodyVault.sol";
import { IPriceOracleRegistry } from "../interfaces/IPriceOracleRegistry.sol";
Expand All @@ -21,12 +21,12 @@ contract FermionFractionsMint is
FermionFractionsERC20Base,
FermionFNFTBase,
FermionErrors,
FundsLib,
FundsManager,
IFermionFractionsEvents
{
using Address for address;

constructor(address _bosonPriceDiscovery) FermionFNFTBase(_bosonPriceDiscovery) FundsLib(bytes32(0)) {}
constructor(address _bosonPriceDiscovery) FermionFNFTBase(_bosonPriceDiscovery) FundsManager(bytes32(0)) {}

/**
* @notice Locks the F-NFTs and mints the fractions. Sets the auction parameters and custodian vault parameters.
Expand Down
2 changes: 1 addition & 1 deletion contracts/protocol/facets/Config.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ pragma solidity 0.8.24;

import { ADMIN, HUNDRED_PERCENT } from "../domain/Constants.sol";
import { FermionGeneralErrors, VerificationErrors } from "../domain/Errors.sol";
import { Access } from "../libs/Access.sol";
import { Access } from "../bases/mixins/Access.sol";
import { FermionStorage } from "../libs/Storage.sol";
import { FeeLib } from "../libs/FeeLib.sol";
import { IConfigEvents } from "../interfaces/events/IConfigEvents.sol";
Expand Down
12 changes: 6 additions & 6 deletions contracts/protocol/facets/Custody.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ pragma solidity 0.8.24;

import { CustodyErrors } from "../domain/Errors.sol";
import { FermionTypes } from "../domain/Types.sol";
import { Access } from "../libs/Access.sol";
import { Access } from "../bases/mixins/Access.sol";
import { FermionStorage } from "../libs/Storage.sol";
import { CustodyLib } from "../libs/CustodyLib.sol";
import { FundsLib } from "../libs/FundsLib.sol";
import { Custody } from "../bases/mixins/Custody.sol";
import { FundsManager } from "../bases/mixins/FundsManager.sol";
import { EntityLib } from "../libs/EntityLib.sol";
import { Context } from "../libs/Context.sol";
import { Context } from "../bases/mixins/Context.sol";
import { ICustodyEvents } from "../interfaces/events/ICustodyEvents.sol";
import { IFundsEvents } from "../interfaces/events/IFundsEvents.sol";
import { FermionFNFTLib } from "../libs/FermionFNFTLib.sol";
Expand All @@ -19,10 +19,10 @@ import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
*
* @notice Handles RWA custody.
*/
contract CustodyFacet is Context, CustodyErrors, Access, CustodyLib, ICustodyEvents, IFundsEvents {
contract CustodyFacet is Context, CustodyErrors, Access, Custody, ICustodyEvents, IFundsEvents {
using FermionFNFTLib for address;

constructor(bytes32 _fnftCodeHash) FundsLib(_fnftCodeHash) {}
constructor(bytes32 _fnftCodeHash) FundsManager(_fnftCodeHash) {}

/**
* @notice Notifies the protocol that an RWA has been checked in
Expand Down
12 changes: 6 additions & 6 deletions contracts/protocol/facets/CustodyVault.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ pragma solidity 0.8.24;
import { HUNDRED_PERCENT, AUCTION_END_BUFFER, MINIMAL_BID_INCREMENT, DEFAULT_FRACTION_AMOUNT, PARTIAL_THRESHOLD_MULTIPLIER, LIQUIDATION_THRESHOLD_MULTIPLIER, PARTIAL_AUCTION_DURATION_DIVISOR } from "../domain/Constants.sol";
import { FundsErrors, FermionGeneralErrors, CustodianVaultErrors } from "../domain/Errors.sol";
import { FermionTypes } from "../domain/Types.sol";
import { Access } from "../libs/Access.sol";
import { Access } from "../bases/mixins/Access.sol";
import { FermionStorage } from "../libs/Storage.sol";
import { CustodyLib } from "../libs/CustodyLib.sol";
import { FundsLib } from "../libs/FundsLib.sol";
import { Custody } from "../bases/mixins/Custody.sol";
import { FundsManager } from "../bases/mixins/FundsManager.sol";
import { EntityLib } from "../libs/EntityLib.sol";
import { Context } from "../libs/Context.sol";
import { Context } from "../bases/mixins/Context.sol";
import { ICustodyEvents } from "../interfaces/events/ICustodyEvents.sol";
import { FermionFNFTLib } from "../libs/FermionFNFTLib.sol";

Expand All @@ -18,10 +18,10 @@ import { FermionFNFTLib } from "../libs/FermionFNFTLib.sol";
*
* @notice Handles Custody Vaults and partial auctions.
*/
contract CustodyVaultFacet is Context, CustodianVaultErrors, Access, CustodyLib, ICustodyEvents {
contract CustodyVaultFacet is Context, CustodianVaultErrors, Access, Custody, ICustodyEvents {
using FermionFNFTLib for address;

constructor(bytes32 _fnftCodeHash) FundsLib(_fnftCodeHash) {}
constructor(bytes32 _fnftCodeHash) FundsManager(_fnftCodeHash) {}

/**
* @notice When the first NFT is fractionalised, the custodian offer vault is setup.
Expand Down
4 changes: 2 additions & 2 deletions contracts/protocol/facets/Entity.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ pragma solidity 0.8.24;
import { BYTE_SIZE } from "../domain/Constants.sol";
import { EntityErrors, FermionGeneralErrors, OfferErrors } from "../domain/Errors.sol";
import { FermionTypes } from "../domain/Types.sol";
import { Access } from "../libs/Access.sol";
import { Access } from "../bases/mixins/Access.sol";
import { FermionStorage } from "../libs/Storage.sol";
import { Context } from "../libs/Context.sol";
import { Context } from "../bases/mixins/Context.sol";
import { EntityLib } from "../libs/EntityLib.sol";
import { IEntityEvents } from "../interfaces/events/IEntityEvents.sol";

Expand Down
10 changes: 5 additions & 5 deletions contracts/protocol/facets/Funds.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,19 @@ import { FEE_COLLECTOR } from "../../protocol/domain/Constants.sol";
import { FermionTypes } from "../domain/Types.sol";
import { FundsErrors, EntityErrors, FermionGeneralErrors, OfferErrors, VerificationErrors } from "../domain/Errors.sol";
import { FermionStorage } from "../libs/Storage.sol";
import { Access } from "../libs/Access.sol";
import { Access } from "../bases/mixins/Access.sol";
import { EntityLib } from "../libs/EntityLib.sol";
import { FundsLib } from "../libs/FundsLib.sol";
import { Context } from "../libs/Context.sol";
import { Context } from "../bases/mixins/Context.sol";
import { IFundsEvents } from "../interfaces/events/IFundsEvents.sol";
import { FundsManager } from "../bases/mixins/FundsManager.sol";

/**
* @title FundsFacet
*
* @notice Handles entity funds.
*/
contract FundsFacet is Context, FundsErrors, Access, FundsLib, IFundsEvents {
constructor(bytes32 _fnftCodeHash) FundsLib(_fnftCodeHash) {}
contract FundsFacet is Context, FundsErrors, Access, FundsManager, IFundsEvents {
constructor(bytes32 _fnftCodeHash) FundsManager(_fnftCodeHash) {}

/**
* @notice Receives funds from the caller, maps funds to the entity id and stores them so they can be used during unwrapping.
Expand Down
2 changes: 1 addition & 1 deletion contracts/protocol/facets/MetaTransaction.sol
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.24;

import { ADMIN, SLOT_SIZE } from "../domain/Constants.sol";

Check warning on line 4 in contracts/protocol/facets/MetaTransaction.sol

View workflow job for this annotation

GitHub Actions / setup

imported name SLOT_SIZE is not used
import { MetaTransactionErrors } from "../domain/Errors.sol";
import { FermionTypes } from "../domain/Types.sol";
import { FermionStorage } from "../libs/Storage.sol";
import { Access } from "../libs/Access.sol";
import { Access } from "../bases/mixins/Access.sol";
import { IMetaTransactionEvents } from "../interfaces/events/IMetaTransactionEvents.sol";
import { EIP712 } from "../libs/EIP712.sol";

Expand Down
10 changes: 5 additions & 5 deletions contracts/protocol/facets/Offer.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ pragma solidity 0.8.24;
import { BOSON_DR_ID_OFFSET, HUNDRED_PERCENT } from "../domain/Constants.sol";
import { OfferErrors, EntityErrors, FundsErrors, FermionGeneralErrors, VerificationErrors } from "../domain/Errors.sol";
import { FermionTypes } from "../domain/Types.sol";
import { Access } from "../libs/Access.sol";
import { Access } from "../bases/mixins/Access.sol";
import { FermionStorage } from "../libs/Storage.sol";
import { EntityLib } from "../libs/EntityLib.sol";
import { FundsLib } from "../libs/FundsLib.sol";
import { Context } from "../libs/Context.sol";
import { FundsManager } from "../bases/mixins/FundsManager.sol";
import { Context } from "../bases/mixins/Context.sol";
import { FeeLib } from "../libs/FeeLib.sol";
import { IBosonProtocol, IBosonVoucher } from "../interfaces/IBosonProtocol.sol";
import { IOfferEvents } from "../interfaces/events/IOfferEvents.sol";
Expand All @@ -27,14 +27,14 @@ import { FermionFNFTLib } from "../libs/FermionFNFTLib.sol";
*
* @notice Handles offer listing.
*/
contract OfferFacet is Context, OfferErrors, Access, FundsLib, IOfferEvents {
contract OfferFacet is Context, OfferErrors, Access, FundsManager, IOfferEvents {
using SafeERC20 for IERC20;
using FermionFNFTLib for address;

IBosonProtocol private immutable BOSON_PROTOCOL;
address private immutable BOSON_TOKEN;

constructor(address _bosonProtocol, bytes32 _fnftCodeHash) FundsLib(_fnftCodeHash) {
constructor(address _bosonProtocol, bytes32 _fnftCodeHash) FundsManager(_fnftCodeHash) {
if (_bosonProtocol == address(0)) revert FermionGeneralErrors.InvalidAddress();

BOSON_PROTOCOL = IBosonProtocol(_bosonProtocol);
Expand Down
2 changes: 1 addition & 1 deletion contracts/protocol/facets/Pause.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { PAUSER } from "../domain/Constants.sol";
import { FermionTypes } from "../domain/Types.sol";
import { PauseErrors } from "../domain/Errors.sol";
import { FermionStorage } from "../libs/Storage.sol";
import { Access } from "../libs/Access.sol";
import { Access } from "../bases/mixins/Access.sol";
import { IPauseEvents } from "../interfaces/events/IPauseEvents.sol";

/**
Expand Down
2 changes: 1 addition & 1 deletion contracts/protocol/facets/PriceOracleRegistry.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
pragma solidity 0.8.24;

import { FermionStorage } from "../libs/Storage.sol";
import { Access } from "../libs/Access.sol";
import { Access } from "../bases/mixins/Access.sol";
import { FermionErrors } from "../domain/Errors.sol";
import { IPriceOracle } from "../interfaces/IPriceOracle.sol";
import { IPriceOracleRegistryEvents } from "../interfaces/events/IPriceOracleRegistryEvents.sol";
Expand Down
Loading
Loading