Skip to content

Commit

Permalink
Merge pull request #226 from CMTA/access-rule-test
Browse files Browse the repository at this point in the history
AccessControlDefaultAdminRules improvement
  • Loading branch information
rya-sge committed Sep 12, 2023
2 parents ed66e3d + 198e869 commit 21a2584
Show file tree
Hide file tree
Showing 10 changed files with 144 additions and 65 deletions.
18 changes: 9 additions & 9 deletions contracts/modules/CMTAT_BASE.sol
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ abstract contract CMTAT_BASE is
ContextUpgradeable,
BaseModule,
PauseModule,
MintModule,
BurnModule,
ERC20MintModule,
ERC20BurnModule,
EnforcementModule,
ValidationModule,
MetaTxModule,
ERC20BaseModule,
// SnapshotModule,
// ERC20SnapshotModule,
DebtBaseModule,
CreditEventsModule
{
Expand Down Expand Up @@ -113,15 +113,15 @@ abstract contract CMTAT_BASE is
/*
SnapshotModule:
Add this call in case you add the SnapshotModule
__Snapshot_init_unchained();
__ERC20Snapshot_init_unchained();
*/
__Validation_init_unchained(ruleEngine_);

/* Wrapper */
// AuthorizationModule_init_unchained is called firstly due to inheritance
__AuthorizationModule_init_unchained();
__BurnModule_init_unchained();
__MintModule_init_unchained();
__ERC20BurnModule_init_unchained();
__ERC20MintModule_init_unchained();
// EnforcementModule_init_unchained is called before ValidationModule_init_unchained due to inheritance
__EnforcementModule_init_unchained();
__ERC20Module_init_unchained(decimalsIrrevocable);
Expand All @@ -132,7 +132,7 @@ abstract contract CMTAT_BASE is
/*
SnapshotModule:
Add this call in case you add the SnapshotModule
__SnasphotModule_init_unchained();
__ERC20SnasphotModule_init_unchained();
*/

/* Other modules */
Expand Down Expand Up @@ -178,7 +178,7 @@ abstract contract CMTAT_BASE is
* @dev
* SnapshotModule:
* - override SnapshotModuleInternal if you add the SnapshotModule
* e.g. override(SnapshotModuleInternal, ERC20Upgradeable)
* e.g. override(ERC20SnapshotModuleInternal, ERC20Upgradeable)
* - remove the keyword view
*/
function _update(
Expand All @@ -194,7 +194,7 @@ abstract contract CMTAT_BASE is
/*
SnapshotModule:
Add this call in case you add the SnapshotModule
SnapshotModuleInternal._update(from, to, amount);
ERC20SnapshotModuleInternal._update(from, to, amount);
*/
}

Expand Down
8 changes: 4 additions & 4 deletions contracts/modules/internal/ERC20SnapshotModuleInternal.sol
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import "../../libraries/Errors.sol";
because overriding this function can break the contract.
*/

abstract contract SnapshotModuleInternal is ERC20Upgradeable {
abstract contract ERC20SnapshotModuleInternal is ERC20Upgradeable {
using ArraysUpgradeable for uint256[];

/**
Expand Down Expand Up @@ -64,16 +64,16 @@ abstract contract SnapshotModuleInternal is ERC20Upgradeable {
/**
* @dev Initializes the contract
*/
function __Snapshot_init(
function __ERC20Snapshot_init(
string calldata name_,
string calldata symbol_
) internal onlyInitializing {
__Context_init_unchained();
__ERC20_init(name_, symbol_);
__Snapshot_init_unchained();
__ERC20Snapshot_init_unchained();
}

function __Snapshot_init_unchained() internal onlyInitializing {
function __ERC20Snapshot_init_unchained() internal onlyInitializing {
_currentSnapshotTime = 0;
_currentSnapshotIndex = 0;
}
Expand Down
23 changes: 18 additions & 5 deletions contracts/modules/security/AuthorizationModule.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ import "../../libraries/Errors.sol";
abstract contract AuthorizationModule is AccessControlDefaultAdminRulesUpgradeable {
// BurnModule
bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE");
// CreditEvents
bytes32 public constant DEBT_CREDIT_EVENT_ROLE =
keccak256("DEBT_CREDIT_EVENT_ROLE");
// DebtModule
bytes32 public constant DEBT_ROLE = keccak256("DEBT_ROLE");
// EnforcementModule
bytes32 public constant ENFORCER_ROLE = keccak256("ENFORCER_ROLE");
// MintModule
Expand All @@ -18,11 +23,8 @@ abstract contract AuthorizationModule is AccessControlDefaultAdminRulesUpgradeab
bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
// SnapshotModule
bytes32 public constant SNAPSHOOTER_ROLE = keccak256("SNAPSHOOTER_ROLE");
// DebtModule
bytes32 public constant DEBT_ROLE = keccak256("DEBT_ROLE");
// CreditEvents
bytes32 public constant DEBT_CREDIT_EVENT_ROLE =
keccak256("DEBT_CREDIT_EVENT_ROLE");



function __AuthorizationModule_init(
address admin,
Expand Down Expand Up @@ -64,5 +66,16 @@ abstract contract AuthorizationModule is AccessControlDefaultAdminRulesUpgradeab
return AccessControlUpgradeable.hasRole(role, account);
}

/**
@notice
Warning: this function should be called only in case of necessity (e.g private key leak)
Its goal is to transfer the adminship of the contract to a new admin, whithout delay.
The prefer way is to use the workflow of AccessControlDefaultAdminRulesUpgradeable
*/
function transferAdminshipDirectly(address newAdmin) public virtual onlyRole(DEFAULT_ADMIN_ROLE) {
// we revoke first the admin since we can only have one admin
_revokeRole(DEFAULT_ADMIN_ROLE, _msgSender());
_grantRole(DEFAULT_ADMIN_ROLE, newAdmin);
}
uint256[50] private __gap;
}
8 changes: 4 additions & 4 deletions contracts/modules/wrapper/core/ERC20BurnModule.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ import "../../../../openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC
import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol";
import "../../security/AuthorizationModule.sol";

abstract contract BurnModule is ERC20Upgradeable, AuthorizationModule {
abstract contract ERC20BurnModule is ERC20Upgradeable, AuthorizationModule {
/**
* @notice Emitted when the specified `value` amount of tokens owned by `owner`are destroyed with the given `reason`
*/
event Burn(address indexed owner, uint256 value, string reason);

function __BurnModule_init(
function __ERC20BurnModule_init(
string memory name_,
string memory symbol_,
address admin,
Expand All @@ -31,10 +31,10 @@ abstract contract BurnModule is ERC20Upgradeable, AuthorizationModule {
__AuthorizationModule_init_unchained();

// own function
__BurnModule_init_unchained();
__ERC20BurnModule_init_unchained();
}

function __BurnModule_init_unchained() internal onlyInitializing {
function __ERC20BurnModule_init_unchained() internal onlyInitializing {
// no variable to initialize
}

Expand Down
8 changes: 4 additions & 4 deletions contracts/modules/wrapper/core/ERC20MintModule.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ import "../../../../openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC
import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol";
import "../../security/AuthorizationModule.sol";

abstract contract MintModule is ERC20Upgradeable, AuthorizationModule {
abstract contract ERC20MintModule is ERC20Upgradeable, AuthorizationModule {
/**
* @notice Emitted when the specified `value` amount of new tokens are created and
* allocated to the specified `account`.
*/
event Mint(address indexed account, uint256 value);

function __MintModule_init(
function __ERC20MintModule_init(
string memory name_,
string memory symbol_,
address admin,
Expand All @@ -32,10 +32,10 @@ abstract contract MintModule is ERC20Upgradeable, AuthorizationModule {
__AuthorizationModule_init_unchained();

// own function
__MintModule_init_unchained();
__ERC20MintModule_init_unchained();
}

function __MintModule_init_unchained() internal onlyInitializing {
function __ERC20MintModule_init_unchained() internal onlyInitializing {
// no variable to initialize
}

Expand Down
12 changes: 6 additions & 6 deletions contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ import "../../internal/ERC20SnapshotModuleInternal.sol";
* Useful to take a snapshot of token holder balance and total supply at a specific time
*/

abstract contract SnapshotModule is
SnapshotModuleInternal,
abstract contract ERC20SnapshotModule is
ERC20SnapshotModuleInternal,
AuthorizationModule
{
function __SnasphotModule_init(
function __ERC20SnasphotModule_init(
string memory name_,
string memory symbol_,
address admin,
Expand All @@ -33,16 +33,16 @@ abstract contract SnapshotModule is
__AccessControlDefaultAdminRules_init_unchained(initialDelayToAcceptAdminRole, admin);
/* CMTAT modules */
// Internal
__Snapshot_init_unchained();
__ERC20Snapshot_init_unchained();

// Security
__AuthorizationModule_init_unchained();

// own function
__SnasphotModule_init_unchained();
__ERC20SnasphotModule_init_unchained();
}

function __SnasphotModule_init_unchained() internal onlyInitializing {
function __ERC20SnasphotModule_init_unchained() internal onlyInitializing {
// no variable to initialize
}

Expand Down
18 changes: 9 additions & 9 deletions contracts/test/CMTATSnapshot/CMTAT_BASE_SnapshotTest.sol
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ abstract contract CMTAT_BASE_SnapshotTest is
ContextUpgradeable,
BaseModule,
PauseModule,
MintModule,
BurnModule,
ERC20MintModule,
ERC20BurnModule,
EnforcementModule,
ValidationModule,
MetaTxModule,
ERC20BaseModule,
SnapshotModule,
ERC20SnapshotModule,
DebtBaseModule,
CreditEventsModule
{
Expand Down Expand Up @@ -104,16 +104,16 @@ abstract contract CMTAT_BASE_SnapshotTest is
SnapshotModule:
Add this call in case you add the SnapshotModule
*/
__Snapshot_init_unchained();
__ERC20Snapshot_init_unchained();

__Validation_init_unchained(ruleEngine_);

/* Wrapper */
// AuthorizationModule_init_unchained is called firstly due to inheritance
__AuthorizationModule_init_unchained();
__AccessControlDefaultAdminRules_init_unchained(initialDelayToAcceptAdminRole, admin);
__BurnModule_init_unchained();
__MintModule_init_unchained();
__ERC20BurnModule_init_unchained();
__ERC20MintModule_init_unchained();
// EnforcementModule_init_unchained is called before ValidationModule_init_unchained due to inheritance
__EnforcementModule_init_unchained();
__ERC20Module_init_unchained(decimalsIrrevocable);
Expand All @@ -125,7 +125,7 @@ abstract contract CMTAT_BASE_SnapshotTest is
SnapshotModule:
Add this call in case you add the SnapshotModule
*/
__SnasphotModule_init_unchained();
__ERC20SnasphotModule_init_unchained();

/* Other modules */
__DebtBaseModule_init_unchained();
Expand Down Expand Up @@ -177,7 +177,7 @@ abstract contract CMTAT_BASE_SnapshotTest is
address from,
address to,
uint256 amount
) internal override(SnapshotModuleInternal, ERC20Upgradeable) {
) internal override(ERC20SnapshotModuleInternal, ERC20Upgradeable) {
// We call the SnapshotModule only if the transfer is valid
if (!ValidationModule.validateTransfer(from, to, amount))
revert Errors.CMTAT_InvalidTransfer(from, to, amount);
Expand All @@ -188,7 +188,7 @@ abstract contract CMTAT_BASE_SnapshotTest is
SnapshotModule:
Add this call in case you add the SnapshotModule
*/
SnapshotModuleInternal._update(from, to, amount);
ERC20SnapshotModuleInternal._update(from, to, amount);
}

/**
Expand Down
Loading

0 comments on commit 21a2584

Please sign in to comment.