Skip to content

Commit

Permalink
Introduce common/CommonDataTypes.sol
Browse files Browse the repository at this point in the history
  • Loading branch information
kronosapiens committed Jan 24, 2025
1 parent f753f74 commit 35b5734
Show file tree
Hide file tree
Showing 18 changed files with 83 additions and 54 deletions.
12 changes: 6 additions & 6 deletions contracts/colony/ColonyAuthority.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@
pragma solidity 0.8.27;

import { CommonAuthority } from "./../common/CommonAuthority.sol";
import { ColonyDataTypes } from "./ColonyDataTypes.sol";
import { CommonDataTypes } from "./../common/CommonDataTypes.sol";

// prettier-ignore
contract ColonyAuthority is CommonAuthority {
uint8 constant FUNDING_ROLE = uint8(ColonyDataTypes.ColonyRole.Funding);
uint8 constant ADMINISTRATION_ROLE = uint8(ColonyDataTypes.ColonyRole.Administration);
uint8 constant ARBITRATION_ROLE = uint8(ColonyDataTypes.ColonyRole.Arbitration);
uint8 constant ARCHITECTURE_ROLE = uint8(ColonyDataTypes.ColonyRole.Architecture);
uint8 constant ROOT_ROLE = uint8(ColonyDataTypes.ColonyRole.Root);
uint8 constant FUNDING_ROLE = uint8(CommonDataTypes.ColonyRole.Funding);
uint8 constant ADMINISTRATION_ROLE = uint8(CommonDataTypes.ColonyRole.Administration);
uint8 constant ARBITRATION_ROLE = uint8(CommonDataTypes.ColonyRole.Arbitration);
uint8 constant ARCHITECTURE_ROLE = uint8(CommonDataTypes.ColonyRole.Architecture);
uint8 constant ROOT_ROLE = uint8(CommonDataTypes.ColonyRole.Root);

// colony is used in the constructor by calls to addRoleCapability, despite what slither thinks
// slither-disable-next-line immutable-states
Expand Down
7 changes: 3 additions & 4 deletions contracts/colony/ColonyDataTypes.sol
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@

pragma solidity 0.8.27;

import { CommonDataTypes } from "../common/CommonDataTypes.sol";

// prettier-ignore
interface ColonyDataTypes {
interface ColonyDataTypes is CommonDataTypes {
// Events

/// @notice Event logged when Colony is initialised
Expand Down Expand Up @@ -302,9 +304,6 @@ interface ColonyDataTypes {

enum ExpenditureStatus { Draft, Cancelled, Finalized, Locked }

// Any new roles added should be added before NUMBER_OF_ROLES, which should always be the last entry in this enum
enum ColonyRole { Recovery, Root, Arbitration, Architecture, ArchitectureSubdomain_DEPRECATED, Funding, Administration, NUMBER_OF_ROLES }

// We do have 1 "special" funding pot with id 0 for rewards which will carry the "Unassigned" type.
// as they are unrelated to other entities in the Colony the same way the remaining funding pots are releated to domains, tasks and payouts.
enum FundingPotAssociatedType { Unassigned, Domain, DEPRECATED_Task, DEPRECATED_Payment, Expenditure }
Expand Down
4 changes: 2 additions & 2 deletions contracts/common/CommonAuthority.sol
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@

pragma solidity 0.8.27;

import { ColonyDataTypes } from "./../colony/ColonyDataTypes.sol";
import { CommonDataTypes } from "./CommonDataTypes.sol";
import { DomainRoles } from "./DomainRoles.sol";

contract CommonAuthority is DomainRoles {
uint8 constant RECOVERY_ROLE = uint8(ColonyDataTypes.ColonyRole.Recovery);
uint8 constant RECOVERY_ROLE = uint8(CommonDataTypes.ColonyRole.Recovery);

constructor(address contractAddress) {
setRecoveryRoleCapability(contractAddress, "enterRecoveryMode()");
Expand Down
25 changes: 25 additions & 0 deletions contracts/common/CommonDataTypes.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// SPDX-License-Identifier: GPL-3.0-or-later
/*
This file is part of The Colony Network.
The Colony Network is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
The Colony Network is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with The Colony Network. If not, see <http://www.gnu.org/licenses/>.
*/

pragma solidity 0.8.27;

// prettier-ignore
interface CommonDataTypes {
// Any new roles added should be added before NUMBER_OF_ROLES, which should always be the last entry in this enum
enum ColonyRole { Recovery, Root, Arbitration, Architecture, ArchitectureSubdomain_DEPRECATED, Funding, Administration, NUMBER_OF_ROLES }
}
4 changes: 2 additions & 2 deletions contracts/common/ContractRecovery.sol
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

pragma solidity 0.8.27;

import { ColonyDataTypes } from "./../colony/ColonyDataTypes.sol";
import { CommonDataTypes } from "./CommonDataTypes.sol";
import { ContractRecoveryDataTypes } from "./ContractRecoveryDataTypes.sol";
import { CommonAuthority } from "./CommonAuthority.sol";
import { CommonStorage } from "./CommonStorage.sol";
Expand All @@ -28,7 +28,7 @@ contract ContractRecovery is
ContractRecoveryDataTypes,
CommonStorage // ignore-swc-123
{
uint8 constant RECOVERY_ROLE = uint8(ColonyDataTypes.ColonyRole.Recovery);
uint8 constant RECOVERY_ROLE = uint8(CommonDataTypes.ColonyRole.Recovery);

function setStorageSlotRecovery(uint256 _slot, bytes32 _value) public recovery auth {
require(_slot != AUTHORITY_SLOT, "colony-common-protected-variable");
Expand Down
10 changes: 5 additions & 5 deletions contracts/common/GetActionSummary.sol
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import { IColony } from "./../colony/IColony.sol";
import { ExtractCallData } from "./ExtractCallData.sol";
import { GetActionDomainSkillId } from "./GetActionDomainSkillId.sol";
import { ColonyDataTypes } from "./../colony/ColonyDataTypes.sol";
import { CommonDataTypes } from "./CommonDataTypes.sol";
import { ColonyRoles } from "./../colony/ColonyRoles.sol";
import { Bytes4Includes } from "./Bytes4Includes.sol";

Expand All @@ -44,17 +44,17 @@ contract GetActionSummary is ExtractCallData, GetActionDomainSkillId {
bytes4(keccak256("setExpenditurePayout(uint256,uint256,uint256,uint256,address,uint256)"));

bytes32 constant ROOT_ROLES = ((bytes32(uint256(1)) <<
uint8(ColonyDataTypes.ColonyRole.Recovery)) |
(bytes32(uint256(1)) << uint8(ColonyDataTypes.ColonyRole.Root)));
uint8(CommonDataTypes.ColonyRole.Recovery)) |
(bytes32(uint256(1)) << uint8(CommonDataTypes.ColonyRole.Root)));

bytes32 constant ONLY_ROOT_ROLE_MASK =
bytes32(uint256(1)) << uint8(ColonyDataTypes.ColonyRole.Root);
bytes32(uint256(1)) << uint8(CommonDataTypes.ColonyRole.Root);

bytes4 constant SET_USER_ROLES =
bytes4(keccak256("setUserRoles(uint256,uint256,address,uint256,bytes32)"));

bytes32 constant ONLY_ARCHITECTURE_ROLE_MASK =
bytes32(uint256(1)) << uint8(ColonyDataTypes.ColonyRole.Architecture);
bytes32(uint256(1)) << uint8(CommonDataTypes.ColonyRole.Architecture);

function getExpenditureId(bytes memory action) internal pure returns (uint256 expenditureId) {
bytes4 sig = getSig(action);
Expand Down
4 changes: 2 additions & 2 deletions contracts/extensions/CoinMachine.sol
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import { ERC20 } from "./../../lib/dappsys/erc20.sol";
import { IBasicMetaTransaction, BasicMetaTransaction } from "./../common/BasicMetaTransaction.sol";
import { ColonyExtension } from "./ColonyExtension.sol";
import { Whitelist } from "./Whitelist.sol";
import { ColonyDataTypes } from "./../colony/IColony.sol";
import { CommonDataTypes } from "./../common/CommonDataTypes.sol";

// ignore-file-swc-108

Expand Down Expand Up @@ -85,7 +85,7 @@ contract CoinMachine is ColonyExtension, BasicMetaTransaction {

modifier onlyRoot() {
require(
colony.hasUserRole(msgSender(), 1, ColonyDataTypes.ColonyRole.Root),
colony.hasUserRole(msgSender(), 1, CommonDataTypes.ColonyRole.Root),
"coin-machine-caller-not-root"
);
_;
Expand Down
4 changes: 2 additions & 2 deletions contracts/extensions/FundingQueue.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
pragma solidity 0.8.27;
pragma experimental ABIEncoderV2;

import { ColonyDataTypes } from "./../colony/ColonyDataTypes.sol";
import { CommonDataTypes } from "./../common/CommonDataTypes.sol";
import { IColonyNetwork } from "./../colonyNetwork/IColonyNetwork.sol";
import { IBasicMetaTransaction, BasicMetaTransaction } from "./../common/BasicMetaTransaction.sol";
import { ITokenLocking } from "./../tokenLocking/ITokenLocking.sol";
Expand Down Expand Up @@ -335,7 +335,7 @@ contract FundingQueue is ColonyExtension, BasicMetaTransaction {

// Check if the extension has the permissions to do this
// If not, cancel the proposal so others aren't blocked
if (!colony.hasUserRole(address(this), proposal.domainId, ColonyDataTypes.ColonyRole.Funding)) {
if (!colony.hasUserRole(address(this), proposal.domainId, CommonDataTypes.ColonyRole.Funding)) {
emit ProposalPinged(_id, 0);
cancelProposal(_id, HEAD);
return;
Expand Down
9 changes: 5 additions & 4 deletions contracts/extensions/MultisigPermissions.sol
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@
pragma solidity 0.8.27;
pragma experimental ABIEncoderV2;

import { ColonyDataTypes, IColony } from "./../colony/IColony.sol";
import { IColony, ColonyDataTypes } from "./../colony/IColony.sol";
import { ColonyRoles } from "./../colony/ColonyRoles.sol";
import { IColonyNetwork } from "./../colonyNetwork/IColonyNetwork.sol";
import { ColonyNetworkDataTypes } from "./../colonyNetwork/ColonyNetworkDataTypes.sol";
import { ColonyExtensionMeta } from "./ColonyExtensionMeta.sol";
import { GetActionSummary, ActionSummary } from "./../common/GetActionSummary.sol";
import { CommonDataTypes } from "./../common/CommonDataTypes.sol";
import { Bytes4Includes } from "./../common/Bytes4Includes.sol";

// ignore-file-swc-108
Expand Down Expand Up @@ -139,7 +140,7 @@ contract MultisigPermissions is ColonyExtensionMeta, ColonyDataTypes, GetActionS

modifier onlyCoreRoot() {
require(
colony.hasUserRole(msgSender(), 1, ColonyDataTypes.ColonyRole.Root),
colony.hasUserRole(msgSender(), 1, CommonDataTypes.ColonyRole.Root),
"multisig-permissions-not-core-root"
);
_;
Expand Down Expand Up @@ -369,12 +370,12 @@ contract MultisigPermissions is ColonyExtensionMeta, ColonyDataTypes, GetActionS
// Allow this function to be called if the caller:
require(
// Has core root permissions OR
colony.hasUserRole(msgSender(), 1, ColonyDataTypes.ColonyRole.Root) ||
colony.hasUserRole(msgSender(), 1, CommonDataTypes.ColonyRole.Root) ||
// Has core architecture, if we're using that permission in a child domain
(colony.hasUserRole(
msgSender(),
_permissionDomainId,
ColonyDataTypes.ColonyRole.Architecture
CommonDataTypes.ColonyRole.Architecture
) && (_permissionDomainId != _domainId)),
"multisig-caller-not-correct-permissions"
);
Expand Down
8 changes: 4 additions & 4 deletions contracts/extensions/OneTxPayment.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
pragma solidity 0.8.27;
pragma experimental ABIEncoderV2;

import { ColonyDataTypes } from "../colony/IColony.sol";
import { CommonDataTypes } from "../common/CommonDataTypes.sol";
import { ColonyExtension } from "./ColonyExtension.sol";
import { IBasicMetaTransaction, BasicMetaTransaction } from "./../common/BasicMetaTransaction.sol";

Expand All @@ -28,9 +28,9 @@ import { IBasicMetaTransaction, BasicMetaTransaction } from "./../common/BasicMe
contract OneTxPayment is ColonyExtension, BasicMetaTransaction {
event OneTxPaymentMade(address agent, uint256 fundamentalId, uint256 nPayouts);

ColonyDataTypes.ColonyRole constant ADMINISTRATION = ColonyDataTypes.ColonyRole.Administration;
ColonyDataTypes.ColonyRole constant FUNDING = ColonyDataTypes.ColonyRole.Funding;
ColonyDataTypes.ColonyRole constant ARBITRATION = ColonyDataTypes.ColonyRole.Arbitration;
CommonDataTypes.ColonyRole constant ADMINISTRATION = CommonDataTypes.ColonyRole.Administration;
CommonDataTypes.ColonyRole constant FUNDING = CommonDataTypes.ColonyRole.Funding;
CommonDataTypes.ColonyRole constant ARBITRATION = CommonDataTypes.ColonyRole.Arbitration;

mapping(address => uint256) metatransactionNonces;

Expand Down
4 changes: 2 additions & 2 deletions contracts/extensions/ReputationBootstrapper.sol
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import { ERC20 } from "./../../lib/dappsys/erc20.sol";
import { IReputationMiningCycle } from "./../reputationMiningCycle/IReputationMiningCycle.sol";
import { IColonyNetwork } from "./../colonyNetwork/IColonyNetwork.sol";
import { ColonyExtensionMeta } from "./ColonyExtensionMeta.sol";
import { ColonyDataTypes } from "./../colony/IColony.sol";
import { CommonDataTypes } from "./../common/CommonDataTypes.sol";

// ignore-file-swc-108

Expand Down Expand Up @@ -61,7 +61,7 @@ contract ReputationBootstrapper is ColonyExtensionMeta {

modifier onlyRoot() {
require(
colony.hasUserRole(msgSender(), 1, ColonyDataTypes.ColonyRole.Root),
colony.hasUserRole(msgSender(), 1, CommonDataTypes.ColonyRole.Root),
"reputation-bootstrapper-caller-not-root"
);
_;
Expand Down
3 changes: 2 additions & 1 deletion contracts/extensions/StagedExpenditure.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ pragma solidity 0.8.27;
pragma experimental ABIEncoderV2;

import { IColony, ColonyDataTypes } from "./../colony/IColony.sol";
import { CommonDataTypes } from "./../common/CommonDataTypes.sol";
import { ColonyExtensionMeta } from "./ColonyExtensionMeta.sol";

// ignore-file-swc-108
Expand Down Expand Up @@ -118,7 +119,7 @@ contract StagedExpenditure is ColonyExtensionMeta, ColonyDataTypes {
colony.hasInheritedUserRole(
msgSender(),
_permissionDomainId,
ColonyDataTypes.ColonyRole.Arbitration,
CommonDataTypes.ColonyRole.Arbitration,
_childSkillIndex,
e.domainId
),
Expand Down
7 changes: 4 additions & 3 deletions contracts/extensions/StakedExpenditure.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@
pragma solidity 0.8.27;
pragma experimental ABIEncoderV2;

import { ColonyDataTypes } from "./../colony/IColony.sol";
import { CommonDataTypes } from "./../common/CommonDataTypes.sol";
import { ColonyDataTypes } from "./../colony/ColonyDataTypes.sol";
import { IColonyNetwork } from "./../colonyNetwork/IColonyNetwork.sol";
import { ColonyExtensionMeta } from "./ColonyExtensionMeta.sol";

Expand Down Expand Up @@ -51,7 +52,7 @@ contract StakedExpenditure is ColonyExtensionMeta {

modifier onlyRoot() {
require(
colony.hasUserRole(msgSender(), 1, ColonyDataTypes.ColonyRole.Root),
colony.hasUserRole(msgSender(), 1, CommonDataTypes.ColonyRole.Root),
"staked-expenditure-caller-not-root"
);
_;
Expand Down Expand Up @@ -208,7 +209,7 @@ contract StakedExpenditure is ColonyExtensionMeta {
colony.hasInheritedUserRole(
msgSender(),
_callerPermissionDomainId,
ColonyDataTypes.ColonyRole.Arbitration,
CommonDataTypes.ColonyRole.Arbitration,
_callerChildSkillIndex,
expenditure.domainId
),
Expand Down
6 changes: 3 additions & 3 deletions contracts/extensions/StreamingPayments.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ pragma solidity 0.8.27;
pragma experimental ABIEncoderV2;

import { ColonyExtensionMeta } from "./ColonyExtensionMeta.sol";
import { ColonyDataTypes } from "./../colony/IColony.sol";
import { CommonDataTypes } from "./../common/CommonDataTypes.sol";

// ignore-file-swc-108

Expand All @@ -47,8 +47,8 @@ contract StreamingPayments is ColonyExtensionMeta {
// Constants

uint256 constant SLOT = 0;
ColonyDataTypes.ColonyRole constant ADMINISTRATION = ColonyDataTypes.ColonyRole.Administration;
ColonyDataTypes.ColonyRole constant FUNDING = ColonyDataTypes.ColonyRole.Funding;
CommonDataTypes.ColonyRole constant ADMINISTRATION = CommonDataTypes.ColonyRole.Administration;
CommonDataTypes.ColonyRole constant FUNDING = CommonDataTypes.ColonyRole.Funding;

// Storage

Expand Down
8 changes: 4 additions & 4 deletions contracts/extensions/TokenSupplier.sol
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ pragma experimental ABIEncoderV2;
import { IBasicMetaTransaction, BasicMetaTransaction } from "./../common/BasicMetaTransaction.sol";
import { ERC20Extended } from "./../common/ERC20Extended.sol";
import { ColonyExtension } from "./ColonyExtension.sol";
import { IColony, ColonyDataTypes } from "./../colony/IColony.sol";

import { IColony } from "./../colony/IColony.sol";
import { CommonDataTypes } from "./../common/CommonDataTypes.sol";
contract TokenSupplier is ColonyExtension, BasicMetaTransaction {
uint256 constant ISSUANCE_PERIOD = 1 days;

Expand Down Expand Up @@ -188,10 +188,10 @@ contract TokenSupplier is ColonyExtension, BasicMetaTransaction {
// Internal functions

function isRoot() internal view returns (bool) {
return colony.hasUserRole(msgSender(), 1, ColonyDataTypes.ColonyRole.Root);
return colony.hasUserRole(msgSender(), 1, CommonDataTypes.ColonyRole.Root);
}

function isRootFunding() internal view returns (bool) {
return colony.hasUserRole(msgSender(), 1, ColonyDataTypes.ColonyRole.Funding);
return colony.hasUserRole(msgSender(), 1, CommonDataTypes.ColonyRole.Funding);
}
}
7 changes: 4 additions & 3 deletions contracts/extensions/Whitelist.sol
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ pragma experimental ABIEncoderV2;

import { IBasicMetaTransaction, BasicMetaTransaction } from "./../common/BasicMetaTransaction.sol";
import { ColonyExtension } from "./ColonyExtension.sol";
import { IColony, ColonyDataTypes } from "./../colony/IColony.sol";
import { IColony } from "./../colony/IColony.sol";
import { CommonDataTypes } from "./../common/CommonDataTypes.sol";
import { IColonyNetwork } from "./../colonyNetwork/IColonyNetwork.sol";

// ignore-file-swc-108
Expand Down Expand Up @@ -82,7 +83,7 @@ contract Whitelist is ColonyExtension, BasicMetaTransaction {
/// @param _agreementHash An agreement hash (such as an IPFS URI)
function initialise(bool _useApprovals, string memory _agreementHash) public {
require(
colony.hasUserRole(msgSender(), 1, ColonyDataTypes.ColonyRole.Root),
colony.hasUserRole(msgSender(), 1, CommonDataTypes.ColonyRole.Root),
"whitelist-unauthorised"
);
require(!useApprovals && bytes(agreementHash).length == 0, "whitelist-already-initialised");
Expand All @@ -100,7 +101,7 @@ contract Whitelist is ColonyExtension, BasicMetaTransaction {
function approveUsers(address[] memory _users, bool _status) public initialised notDeprecated {
require(useApprovals, "whitelist-no-approvals");
require(
colony.hasUserRole(msgSender(), 1, ColonyDataTypes.ColonyRole.Administration),
colony.hasUserRole(msgSender(), 1, CommonDataTypes.ColonyRole.Administration),
"whitelist-unauthorised"
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ pragma solidity 0.8.27;
pragma experimental ABIEncoderV2;

import { IColonyNetwork } from "./../../colonyNetwork/IColonyNetwork.sol";
import { IColony, ColonyDataTypes } from "./../../colony/IColony.sol";
import { IColony } from "./../../colony/IColony.sol";
import { CommonDataTypes } from "./../../common/CommonDataTypes.sol";
import { IBasicMetaTransaction, BasicMetaTransaction } from "./../../common/BasicMetaTransaction.sol";
import { ActionSummary, GetActionSummary } from "./../../common/GetActionSummary.sol";
import { ITokenLocking } from "./../../tokenLocking/ITokenLocking.sol";
Expand Down Expand Up @@ -111,7 +112,7 @@ contract VotingReputationStorage is

modifier onlyRoot() {
require(
colony.hasUserRole(msgSender(), 1, ColonyDataTypes.ColonyRole.Root),
colony.hasUserRole(msgSender(), 1, CommonDataTypes.ColonyRole.Root),
"voting-rep-caller-not-root"
);
_;
Expand Down
Loading

0 comments on commit 35b5734

Please sign in to comment.