Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AccessControlDefaultAdminRules improvement #226

Merged
merged 4 commits into from
Sep 12, 2023
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
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