diff --git a/README.md b/README.md index 62162be8..48b5bb2e 100644 --- a/README.md +++ b/README.md @@ -180,18 +180,16 @@ The report is available in [ABDK_CMTA_CMTATRuleEngine_v_1_0.pdf](doc/audits/ABDK You will find the report produced by [Slither](https://github.com/crytic/slither) in -| Version | File | -| ------- | ------------------------------------------------------------ | -| v2.3.0 | [v2.3.0-slither-report.md](doc/audits/tools/v2.3.0-slither-report.md) | -| v2.3.1 | [v2.3.1-slither-report.md](doc/audits/tools/v2.3.1-slither-report.md) | +| Version | File | +| ------------ | ------------------------------------------------------------ | +| Last version | [slither-report.md](doc/audits/tools/slither-report.md) | +| v2.3.0 | [v2.3.0-slither-report.md](doc/audits/tools/v2.3.0-slither-report.md) | +| v2.3.1 | [v2.3.1-slither-report.md](doc/audits/tools/v2.3.1-slither-report.md) | ### Test -- A summary of automatic tests is available in [test.pdf](doc/general/test/test.pdf). -- A code coverage is available in [index.html](doc/general/test/coverage/index.html). - -> Note that we do not perform tests on the internal functions `init` of the different modules. +A code coverage is available in [index.html](doc/general/test/coverage/index.html). ### Remarks diff --git a/contracts/deployment/CMTAT_BEACON_FACTORY.sol b/contracts/deployment/CMTAT_BEACON_FACTORY.sol index 7065535c..c8c60d13 100644 --- a/contracts/deployment/CMTAT_BEACON_FACTORY.sol +++ b/contracts/deployment/CMTAT_BEACON_FACTORY.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: UNLICENSED +//SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; import "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol"; @@ -6,6 +6,7 @@ import "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol"; import '@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol'; import "../CMTAT_PROXY.sol"; import "../modules/CMTAT_BASE.sol"; +import "../libraries/FactoryErrors.sol"; import '@openzeppelin/contracts/access/AccessControl.sol'; /** @@ -29,6 +30,15 @@ contract CMTAT_BEACON_FACTORY is AccessControl { * @param beaconOwner owner */ constructor(address implementation_, address factoryAdmin, address beaconOwner) { + if(factoryAdmin == address(0)){ + revert FactoryErrors.CMTAT_Factory_AddressZeroNotAllowedForFactoryAdmin(); + } + if(beaconOwner == address(0)){ + revert FactoryErrors.CMTAT_Factory_AddressZeroNotAllowedForBeaconOwner(); + } + if(implementation_ == address(0)){ + revert FactoryErrors.CMTAT_Factory_AddressZeroNotAllowedForLogicContract(); + } beacon = new UpgradeableBeacon(implementation_, beaconOwner); _grantRole(DEFAULT_ADMIN_ROLE, factoryAdmin); _grantRole(CMTAT_DEPLOYER_ROLE, factoryAdmin); diff --git a/contracts/deployment/CMTAT_TP_FACTORY.sol b/contracts/deployment/CMTAT_TP_FACTORY.sol index 1cf37ab3..785747c2 100644 --- a/contracts/deployment/CMTAT_TP_FACTORY.sol +++ b/contracts/deployment/CMTAT_TP_FACTORY.sol @@ -1,9 +1,9 @@ -// SPDX-License-Identifier: UNLICENSED +//SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import "../CMTAT_PROXY.sol"; +import "../libraries/FactoryErrors.sol"; import '@openzeppelin/contracts/access/AccessControl.sol'; /** * @notice Factory to deploy transparent proxy @@ -20,11 +20,19 @@ contract CMTAT_TP_FACTORY is AccessControl { address public immutable logic; address[] public cmtatsList; + + /** * @param logic_ contract implementation * @param factoryAdmin admin */ constructor(address logic_, address factoryAdmin) { + if(logic_ == address(0)){ + revert FactoryErrors.CMTAT_Factory_AddressZeroNotAllowedForLogicContract(); + } + if(factoryAdmin == address(0)){ + revert FactoryErrors.CMTAT_Factory_AddressZeroNotAllowedForFactoryAdmin(); + } logic = logic_; _grantRole(DEFAULT_ADMIN_ROLE, factoryAdmin); _grantRole(CMTAT_DEPLOYER_ROLE, factoryAdmin); diff --git a/contracts/interfaces/ICCIPToken.sol b/contracts/interfaces/ICCIPToken.sol index 3d02563a..256b1c96 100644 --- a/contracts/interfaces/ICCIPToken.sol +++ b/contracts/interfaces/ICCIPToken.sol @@ -1,6 +1,6 @@ //SPDX-License-Identifier: MPL-2.0 -pragma solidity ^0.8.0; +pragma solidity ^0.8.20; /** * @notice CCIP Pool with mint diff --git a/contracts/interfaces/ICMTATSnapshot.sol b/contracts/interfaces/ICMTATSnapshot.sol index 32792e5b..4cbd4d38 100644 --- a/contracts/interfaces/ICMTATSnapshot.sol +++ b/contracts/interfaces/ICMTATSnapshot.sol @@ -1,6 +1,6 @@ //SPDX-License-Identifier: MPL-2.0 -pragma solidity ^0.8.0; +pragma solidity ^0.8.20; /** * @notice interface to represent a CMTAT with snapshot diff --git a/contracts/interfaces/IDebtGlobal.sol b/contracts/interfaces/IDebtGlobal.sol index a77a077d..cb743d6d 100644 --- a/contracts/interfaces/IDebtGlobal.sol +++ b/contracts/interfaces/IDebtGlobal.sol @@ -1,6 +1,6 @@ //SPDX-License-Identifier: MPL-2.0 -pragma solidity ^0.8.0; +pragma solidity ^0.8.20; /** * @notice interface to represent debt tokens diff --git a/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol b/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol index 4b3a2175..960856dc 100644 --- a/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol +++ b/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol @@ -1,6 +1,6 @@ //SPDX-License-Identifier: MPL-2.0 -pragma solidity ^0.8.0; +pragma solidity ^0.8.20; /* * @dev Contrary to the ERC-1404, this interface does not inherit from the ERC20 interface diff --git a/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol b/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol index 3d4b4914..6f1e3a6f 100644 --- a/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol +++ b/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol @@ -1,6 +1,6 @@ //SPDX-License-Identifier: MPL-2.0 -pragma solidity ^0.8.0; +pragma solidity ^0.8.20; interface IERC1404EnumCode { /* diff --git a/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol b/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol index b5b8af1e..571b6639 100644 --- a/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol +++ b/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol @@ -1,6 +1,6 @@ //SPDX-License-Identifier: MPL-2.0 -pragma solidity ^0.8.0; +pragma solidity ^0.8.20; import "./draft-IERC1404.sol"; import "./draft-IERC1404EnumCode.sol"; diff --git a/contracts/interfaces/engine/IAuthorizationEngine.sol b/contracts/interfaces/engine/IAuthorizationEngine.sol index fed67bc9..000f4e0c 100644 --- a/contracts/interfaces/engine/IAuthorizationEngine.sol +++ b/contracts/interfaces/engine/IAuthorizationEngine.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity ^0.8.0; +pragma solidity ^0.8.20; interface IAuthorizationEngine { /** diff --git a/contracts/interfaces/engine/IRuleEngine.sol b/contracts/interfaces/engine/IRuleEngine.sol index 7c523212..bd2586a1 100644 --- a/contracts/interfaces/engine/IRuleEngine.sol +++ b/contracts/interfaces/engine/IRuleEngine.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MPL-2.0 -pragma solidity ^0.8.0; +pragma solidity ^0.8.20; import "../draft-IERC1404/draft-IERC1404Wrapper.sol"; diff --git a/contracts/libraries/FactoryErrors.sol b/contracts/libraries/FactoryErrors.sol new file mode 100644 index 00000000..a64e226b --- /dev/null +++ b/contracts/libraries/FactoryErrors.sol @@ -0,0 +1,9 @@ +//SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.20; + +library FactoryErrors { + error CMTAT_Factory_AddressZeroNotAllowedForFactoryAdmin(); + error CMTAT_Factory_AddressZeroNotAllowedForBeaconOwner(); + error CMTAT_Factory_AddressZeroNotAllowedForLogicContract(); +} diff --git a/contracts/mocks/RuleEngine/RuleEngineMock.sol b/contracts/mocks/RuleEngine/RuleEngineMock.sol index 578be00e..4dc0a065 100644 --- a/contracts/mocks/RuleEngine/RuleEngineMock.sol +++ b/contracts/mocks/RuleEngine/RuleEngineMock.sol @@ -5,7 +5,6 @@ pragma solidity ^0.8.20; import "./interfaces/IRule.sol"; import "./interfaces/IRuleEngineMock.sol"; import "./RuleMock.sol"; -import "./CodeList.sol"; /* * @title a mock for testing, not suitable for production diff --git a/contracts/mocks/RuleEngine/interfaces/IRule.sol b/contracts/mocks/RuleEngine/interfaces/IRule.sol index fdb52276..752ea2d3 100644 --- a/contracts/mocks/RuleEngine/interfaces/IRule.sol +++ b/contracts/mocks/RuleEngine/interfaces/IRule.sol @@ -1,6 +1,6 @@ //SPDX-License-Identifier: MPL-2.0 -pragma solidity ^0.8.0; +pragma solidity ^0.8.20; import "../../../interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol"; diff --git a/contracts/mocks/RuleEngine/interfaces/IRuleEngineMock.sol b/contracts/mocks/RuleEngine/interfaces/IRuleEngineMock.sol index 0257418b..694125c8 100644 --- a/contracts/mocks/RuleEngine/interfaces/IRuleEngineMock.sol +++ b/contracts/mocks/RuleEngine/interfaces/IRuleEngineMock.sol @@ -1,6 +1,6 @@ //SPDX-License-Identifier: MPL-2.0 -pragma solidity ^0.8.0; +pragma solidity ^0.8.20; import "./IRule.sol"; import "../../../interfaces/engine/IRuleEngine.sol"; diff --git a/contracts/modules/internal/ERC20SnapshotModuleInternal.sol b/contracts/modules/internal/ERC20SnapshotModuleInternal.sol index 6dd70ded..24e9e713 100644 --- a/contracts/modules/internal/ERC20SnapshotModuleInternal.sol +++ b/contracts/modules/internal/ERC20SnapshotModuleInternal.sol @@ -2,14 +2,10 @@ pragma solidity ^0.8.20; -import "../../../openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol"; -import "../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../../openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; import {Arrays} from '@openzeppelin/contracts/utils/Arrays.sol'; - -import "../../libraries/Errors.sol"; -import "../../interfaces/ICMTATSnapshot.sol"; import "./base/SnapshotModuleBase.sol"; +import "../../interfaces/ICMTATSnapshot.sol"; /** * @dev Snapshot module internal. * @@ -19,7 +15,7 @@ import "./base/SnapshotModuleBase.sol"; because overriding this function can break the contract. */ -abstract contract ERC20SnapshotModuleInternal is SnapshotModuleBase, ERC20Upgradeable { +abstract contract ERC20SnapshotModuleInternal is ICMTATSnapshot, SnapshotModuleBase, ERC20Upgradeable { using Arrays for uint256[]; /** diff --git a/contracts/modules/internal/ValidationModuleInternal.sol b/contracts/modules/internal/ValidationModuleInternal.sol index d66fa008..6219f105 100644 --- a/contracts/modules/internal/ValidationModuleInternal.sol +++ b/contracts/modules/internal/ValidationModuleInternal.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.20; import "../../../openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol"; import "../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; -import "../../interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol"; import "../../interfaces/engine/IRuleEngine.sol"; /** * @dev Validation module. diff --git a/contracts/modules/security/AuthorizationModule.sol b/contracts/modules/security/AuthorizationModule.sol index a270a6ac..7870b318 100644 --- a/contracts/modules/security/AuthorizationModule.sol +++ b/contracts/modules/security/AuthorizationModule.sol @@ -3,33 +3,15 @@ pragma solidity ^0.8.20; import "../../../openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol"; -import "../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; - import "../../libraries/Errors.sol"; import "../../interfaces/engine/IAuthorizationEngine.sol"; + abstract contract AuthorizationModule is AccessControlUpgradeable { IAuthorizationEngine private authorizationEngine; /** * @dev Emitted when a rule engine is set. */ event AuthorizationEngine(IAuthorizationEngine indexed newAuthorizationEngine); - // BurnModule - bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE"); - bytes32 public constant BURNER_FROM_ROLE = keccak256("BURNER_FROM_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 - bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); - // PauseModule - bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); - // SnapshotModule - bytes32 public constant SNAPSHOOTER_ROLE = keccak256("SNAPSHOOTER_ROLE"); - /** * @dev * diff --git a/contracts/modules/wrapper/controllers/ValidationModule.sol b/contracts/modules/wrapper/controllers/ValidationModule.sol index 663ff01b..63fe5183 100644 --- a/contracts/modules/wrapper/controllers/ValidationModule.sol +++ b/contracts/modules/wrapper/controllers/ValidationModule.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.20; -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; import "../../internal/ValidationModuleInternal.sol"; import "../core/PauseModule.sol"; diff --git a/contracts/modules/wrapper/core/BaseModule.sol b/contracts/modules/wrapper/core/BaseModule.sol index ff3f4921..1b2a3e86 100644 --- a/contracts/modules/wrapper/core/BaseModule.sol +++ b/contracts/modules/wrapper/core/BaseModule.sol @@ -3,7 +3,6 @@ pragma solidity ^0.8.20; // required OZ imports here -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; import "../../../libraries/Errors.sol"; diff --git a/contracts/modules/wrapper/core/ERC20BaseModule.sol b/contracts/modules/wrapper/core/ERC20BaseModule.sol index b59ac21d..ad0ee813 100644 --- a/contracts/modules/wrapper/core/ERC20BaseModule.sol +++ b/contracts/modules/wrapper/core/ERC20BaseModule.sol @@ -3,7 +3,6 @@ pragma solidity ^0.8.20; // required OZ imports here -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../../../openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; import "../../../libraries/Errors.sol"; diff --git a/contracts/modules/wrapper/core/ERC20BurnModule.sol b/contracts/modules/wrapper/core/ERC20BurnModule.sol index bdaa254c..b1482e9c 100644 --- a/contracts/modules/wrapper/core/ERC20BurnModule.sol +++ b/contracts/modules/wrapper/core/ERC20BurnModule.sol @@ -3,10 +3,11 @@ pragma solidity ^0.8.20; import "../../../../openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; import "../../../interfaces/ICCIPToken.sol"; abstract contract ERC20BurnModule is ERC20Upgradeable, ICCIPBurnFromERC20, AuthorizationModule { + bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE"); + bytes32 public constant BURNER_FROM_ROLE = keccak256("BURNER_FROM_ROLE"); /** * @notice Emitted when the specified `value` amount of tokens owned by `owner`are destroyed with the given `reason` */ diff --git a/contracts/modules/wrapper/core/ERC20MintModule.sol b/contracts/modules/wrapper/core/ERC20MintModule.sol index b37ee986..3fdafc82 100644 --- a/contracts/modules/wrapper/core/ERC20MintModule.sol +++ b/contracts/modules/wrapper/core/ERC20MintModule.sol @@ -3,10 +3,11 @@ pragma solidity ^0.8.20; import "../../../../openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; import "../../../interfaces/ICCIPToken.sol"; abstract contract ERC20MintModule is ERC20Upgradeable, ICCIPMintERC20, AuthorizationModule { + // MintModule + bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); /** * @notice Emitted when the specified `value` amount of new tokens are created and * allocated to the specified `account`. diff --git a/contracts/modules/wrapper/core/EnforcementModule.sol b/contracts/modules/wrapper/core/EnforcementModule.sol index df1b3d68..80562be5 100644 --- a/contracts/modules/wrapper/core/EnforcementModule.sol +++ b/contracts/modules/wrapper/core/EnforcementModule.sol @@ -14,6 +14,8 @@ abstract contract EnforcementModule is EnforcementModuleInternal, AuthorizationModule { + // EnforcementModule + bytes32 public constant ENFORCER_ROLE = keccak256("ENFORCER_ROLE"); string internal constant TEXT_TRANSFER_REJECTED_FROM_FROZEN = "Address FROM is frozen"; diff --git a/contracts/modules/wrapper/core/PauseModule.sol b/contracts/modules/wrapper/core/PauseModule.sol index 4d999163..b94b9973 100644 --- a/contracts/modules/wrapper/core/PauseModule.sol +++ b/contracts/modules/wrapper/core/PauseModule.sol @@ -3,7 +3,6 @@ pragma solidity ^0.8.20; import "../../../../openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol"; -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; /** @@ -17,6 +16,8 @@ import "../../security/AuthorizationModule.sol"; * event of a large bug. */ abstract contract PauseModule is PausableUpgradeable, AuthorizationModule { + // PauseModule + bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); string internal constant TEXT_TRANSFER_REJECTED_PAUSED = "All transfers paused"; bool private isDeactivated; diff --git a/contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol b/contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol index 6b332a8e..1c878936 100644 --- a/contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol +++ b/contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol @@ -15,6 +15,9 @@ abstract contract CreditEventsModule is ContextUpgradeable, AuthorizationModule { + // CreditEvents + bytes32 public constant DEBT_CREDIT_EVENT_ROLE = + keccak256("DEBT_CREDIT_EVENT_ROLE"); CreditEvents public creditEvents; /* Events */ diff --git a/contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol b/contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol index 9193531a..62117776 100644 --- a/contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol +++ b/contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol @@ -15,6 +15,8 @@ abstract contract DebtBaseModule is ContextUpgradeable, AuthorizationModule { + // DebtModule + bytes32 public constant DEBT_ROLE = keccak256("DEBT_ROLE"); DebtBase public debt; /* Events */ diff --git a/contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol b/contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol index 9c167f35..b7142fb5 100644 --- a/contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol +++ b/contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.20; -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; import "../../internal/ERC20SnapshotModuleInternal.sol"; @@ -16,6 +15,8 @@ abstract contract ERC20SnapshotModule is ERC20SnapshotModuleInternal, AuthorizationModule { + // SnapshotModule + bytes32 public constant SNAPSHOOTER_ROLE = keccak256("SNAPSHOOTER_ROLE"); function __ERC20SnasphotModule_init_unchained() internal onlyInitializing { // no variable to initialize } diff --git a/contracts/modules/wrapper/extensions/MetaTxModule.sol b/contracts/modules/wrapper/extensions/MetaTxModule.sol index 59088453..3df45f74 100644 --- a/contracts/modules/wrapper/extensions/MetaTxModule.sol +++ b/contracts/modules/wrapper/extensions/MetaTxModule.sol @@ -3,7 +3,6 @@ pragma solidity ^0.8.20; import "../../../../openzeppelin-contracts-upgradeable/contracts/metatx/ERC2771ContextUpgradeable.sol"; -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; /** * @dev Meta transaction (gasless) module. diff --git a/doc/TOOLCHAIN.md b/doc/TOOLCHAIN.md index 4504b17d..8d829fab 100644 --- a/doc/TOOLCHAIN.md +++ b/doc/TOOLCHAIN.md @@ -219,6 +219,6 @@ npm run-script coverage Slither is a Solidity static analysis framework written in Python3 ```bash -slither . --checklist --filter-paths "openzeppelin-contracts-upgradeable|test" > slither-report.md +slither . --checklist --filter-paths "openzeppelin-contracts-upgradeable|openzeppelin-contracts|@openzeppelin|test" > slither-report.md ``` diff --git a/doc/audits/tools/slither-report.md b/doc/audits/tools/slither-report.md new file mode 100644 index 00000000..ffa903c3 --- /dev/null +++ b/doc/audits/tools/slither-report.md @@ -0,0 +1,709 @@ +**THIS CHECKLIST IS NOT COMPLETE**. Use `--show-ignored-findings` to show all the results. +Summary + - [shadowing-state](#shadowing-state) (1 results) (High) + - [reentrancy-no-eth](#reentrancy-no-eth) (1 results) (Medium) + - [uninitialized-local](#uninitialized-local) (1 results) (Medium) + - [missing-zero-check](#missing-zero-check) (2 results) (Low) + - [calls-loop](#calls-loop) (4 results) (Low) + - [reentrancy-benign](#reentrancy-benign) (3 results) (Low) + - [reentrancy-events](#reentrancy-events) (2 results) (Low) + - [timestamp](#timestamp) (6 results) (Low) + - [costly-loop](#costly-loop) (2 results) (Informational) + - [dead-code](#dead-code) (1 results) (Informational) + - [solc-version](#solc-version) (1 results) (Informational) + - [naming-convention](#naming-convention) (57 results) (Informational) +## shadowing-state +Impact: High +Confidence: High + - [ ] ID-0 + [ERC20SnapshotModuleInternal._scheduledSnapshots](contracts/modules/internal/ERC20SnapshotModuleInternal.sol#L25) shadows: + - [SnapshotModuleBase._scheduledSnapshots](contracts/modules/internal/base/SnapshotModuleBase.sol#L62) + +contracts/modules/internal/ERC20SnapshotModuleInternal.sol#L25 + + +## reentrancy-no-eth +Impact: Medium +Confidence: Medium + - [ ] ID-1 + Reentrancy in [CMTAT_BASE.burnAndMint(address,address,uint256,uint256,string)](contracts/modules/CMTAT_BASE.sol#L189-L192): + External calls: + - [burn(from,amountToBurn,reason)](contracts/modules/CMTAT_BASE.sol#L190) + - [ruleEngine.operateOnTransfer(from,to,amount)](contracts/modules/internal/ValidationModuleInternal.sol#L65) + - [mint(to,amountToMint)](contracts/modules/CMTAT_BASE.sol#L191) + - [ruleEngine.operateOnTransfer(from,to,amount)](contracts/modules/internal/ValidationModuleInternal.sol#L65) + State variables written after the call(s): + - [mint(to,amountToMint)](contracts/modules/CMTAT_BASE.sol#L191) + - [_currentSnapshotIndex = scheduleSnapshotIndex](contracts/modules/internal/base/SnapshotModuleBase.sol#L328) + [SnapshotModuleBase._currentSnapshotIndex](contracts/modules/internal/base/SnapshotModuleBase.sol#L55) can be used in cross function reentrancies: + - [SnapshotModuleBase._findScheduledMostRecentPastSnapshot()](contracts/modules/internal/base/SnapshotModuleBase.sol#L375-L402) + - [SnapshotModuleBase._setCurrentSnapshot()](contracts/modules/internal/base/SnapshotModuleBase.sol#L321-L330) + - [mint(to,amountToMint)](contracts/modules/CMTAT_BASE.sol#L191) + - [_currentSnapshotTime = scheduleSnapshotTime](contracts/modules/internal/base/SnapshotModuleBase.sol#L327) + [SnapshotModuleBase._currentSnapshotTime](contracts/modules/internal/base/SnapshotModuleBase.sol#L53) can be used in cross function reentrancies: + - [SnapshotModuleBase._setCurrentSnapshot()](contracts/modules/internal/base/SnapshotModuleBase.sol#L321-L330) + - [SnapshotModuleBase._updateSnapshot(SnapshotModuleBase.Snapshots,uint256)](contracts/modules/internal/base/SnapshotModuleBase.sol#L305-L314) + - [SnapshotModuleBase.getNextSnapshots()](contracts/modules/internal/base/SnapshotModuleBase.sol#L82-L111) + +contracts/modules/CMTAT_BASE.sol#L189-L192 + +## uninitialized-local + +> The concerned variable local `mostRecent` is initialized in the loop + +Impact: Medium +Confidence: Medium + + - [ ] ID-2 +[SnapshotModuleBase._findScheduledMostRecentPastSnapshot().mostRecent](contracts/modules/internal/base/SnapshotModuleBase.sol#L389) is a local variable never initialized + +contracts/modules/internal/base/SnapshotModuleBase.sol#L389 + +## missing-zero-check + +> Mock: not intended to be used in production + +Impact: Low +Confidence: Medium + + + - [ ] ID-4 + [AuthorizationEngineMock.authorizeAdminChange(address).newAdmin](contracts/mocks/AuthorizationEngineMock.sol#L21) lacks a zero-check on : + - [nextAdmin = newAdmin](contracts/mocks/AuthorizationEngineMock.sol#L22) + +contracts/mocks/AuthorizationEngineMock.sol#L21 + +## calls-loop + +>Mock: not intended to be used in production +>ValidationModuleInternal: the loop happens only for batch function. A relevant alternative could be the creation of a batch function for the RuleEngine, but for the moment we don't have an implemented solution. + +Impact: Low +Confidence: Medium + + - [ ] ID-5 +[RuleEngineMock.messageForTransferRestriction(uint8)](contracts/mocks/RuleEngine/RuleEngineMock.sol#L83-L97) has external calls inside a loop: [_rules[i].canReturnTransferRestrictionCode(_restrictionCode)](contracts/mocks/RuleEngine/RuleEngineMock.sol#L88) + +contracts/mocks/RuleEngine/RuleEngineMock.sol#L83-L97 + + + - [ ] ID-6 +[RuleEngineMock.messageForTransferRestriction(uint8)](contracts/mocks/RuleEngine/RuleEngineMock.sol#L83-L97) has external calls inside a loop: [_rules[i].messageForTransferRestriction(_restrictionCode)](contracts/mocks/RuleEngine/RuleEngineMock.sol#L89-L90) + +contracts/mocks/RuleEngine/RuleEngineMock.sol#L83-L97 + + + - [ ] ID-7 +[ValidationModuleInternal._operateOnTransfer(address,address,uint256)](contracts/modules/internal/ValidationModuleInternal.sol#L64-L66) has external calls inside a loop: [ruleEngine.operateOnTransfer(from,to,amount)](contracts/modules/internal/ValidationModuleInternal.sol#L65) + +contracts/modules/internal/ValidationModuleInternal.sol#L64-L66 + + + - [ ] ID-8 +[RuleEngineMock.detectTransferRestriction(address,address,uint256)](contracts/mocks/RuleEngine/RuleEngineMock.sol#L39-L59) has external calls inside a loop: [restriction = _rules[i].detectTransferRestriction(_from,_to,_amount)](contracts/mocks/RuleEngine/RuleEngineMock.sol#L46-L50) + +contracts/mocks/RuleEngine/RuleEngineMock.sol#L39-L59 + +## reentrancy-benign + +> Factory contract : It is not a security issue since only authorized user can call the function +> CMTAT_BASE._update: the contract called is a trusted contract (RuleEngine) + + + +Impact: Low +Confidence: Medium + - [ ] ID-9 + Reentrancy in [CMTAT_BEACON_FACTORY.deployCMTAT(address,IAuthorizationEngine,string,string,uint8,string,string,IRuleEngine,string,uint256)](contracts/deployment/CMTAT_BEACON_FACTORY.sol#L41-L75): + External calls: + - [cmtat = new BeaconProxy(address(beacon),abi.encodeWithSelector(CMTAT_PROXY(address(0)).initialize.selector,admin,authorizationEngineIrrevocable,nameIrrevocable,symbolIrrevocable,decimalsIrrevocable,tokenId_,terms_,ruleEngine_,information_,flag_))](contracts/deployment/CMTAT_BEACON_FACTORY.sol#L54-L69) + State variables written after the call(s): + - [cmtatCounterId ++](contracts/deployment/CMTAT_BEACON_FACTORY.sol#L72) + - [cmtats[cmtatCounterId] = address(cmtat)](contracts/deployment/CMTAT_BEACON_FACTORY.sol#L70) + - [cmtatsList.push(address(cmtat))](contracts/deployment/CMTAT_BEACON_FACTORY.sol#L73) + +contracts/deployment/CMTAT_BEACON_FACTORY.sol#L41-L75 + + + - [ ] ID-10 + Reentrancy in [CMTAT_TP_FACTORY.deployCMTAT(address,address,IAuthorizationEngine,string,string,uint8,string,string,IRuleEngine,string,uint256)](contracts/deployment/CMTAT_TP_FACTORY.sol#L32-L68): + External calls: + - [cmtat = new TransparentUpgradeableProxy(logic,proxyAdminOwner,abi.encodeWithSelector(CMTAT_PROXY(address(0)).initialize.selector,admin,authorizationEngineIrrevocable,nameIrrevocable,symbolIrrevocable,decimalsIrrevocable,tokenId_,terms_,ruleEngine_,information_,flag_))](contracts/deployment/CMTAT_TP_FACTORY.sol#L46-L62) + State variables written after the call(s): + - [cmtatID ++](contracts/deployment/CMTAT_TP_FACTORY.sol#L65) + - [cmtats[cmtatID] = address(cmtat)](contracts/deployment/CMTAT_TP_FACTORY.sol#L63) + - [cmtatsList.push(address(cmtat))](contracts/deployment/CMTAT_TP_FACTORY.sol#L66) + +contracts/deployment/CMTAT_TP_FACTORY.sol#L32-L68 + + + - [ ] ID-11 + Reentrancy in [CMTAT_BASE._update(address,address,uint256)](contracts/modules/CMTAT_BASE.sol#L198-L213): + External calls: + - [! ValidationModule._operateOnTransfer(from,to,amount)](contracts/modules/CMTAT_BASE.sol#L203) + - [ruleEngine.operateOnTransfer(from,to,amount)](contracts/modules/internal/ValidationModuleInternal.sol#L65) + State variables written after the call(s): + - [ERC20SnapshotModuleInternal._snapshotUpdate(from,to)](contracts/modules/CMTAT_BASE.sol#L211) + - [_currentSnapshotIndex = scheduleSnapshotIndex](contracts/modules/internal/base/SnapshotModuleBase.sol#L328) + - [ERC20SnapshotModuleInternal._snapshotUpdate(from,to)](contracts/modules/CMTAT_BASE.sol#L211) + - [_currentSnapshotTime = scheduleSnapshotTime](contracts/modules/internal/base/SnapshotModuleBase.sol#L327) + +contracts/modules/CMTAT_BASE.sol#L198-L213 + +## reentrancy-events + +> It is not a security issue since only authorized user can call the function + +Impact: Low +Confidence: Medium + - [ ] ID-12 + Reentrancy in [CMTAT_TP_FACTORY.deployCMTAT(address,address,IAuthorizationEngine,string,string,uint8,string,string,IRuleEngine,string,uint256)](contracts/deployment/CMTAT_TP_FACTORY.sol#L32-L68): + External calls: + - [cmtat = new TransparentUpgradeableProxy(logic,proxyAdminOwner,abi.encodeWithSelector(CMTAT_PROXY(address(0)).initialize.selector,admin,authorizationEngineIrrevocable,nameIrrevocable,symbolIrrevocable,decimalsIrrevocable,tokenId_,terms_,ruleEngine_,information_,flag_))](contracts/deployment/CMTAT_TP_FACTORY.sol#L46-L62) + Event emitted after the call(s): + - [CMTAT(address(cmtat),cmtatID)](contracts/deployment/CMTAT_TP_FACTORY.sol#L64) + +contracts/deployment/CMTAT_TP_FACTORY.sol#L32-L68 + + + - [ ] ID-13 + Reentrancy in [CMTAT_BEACON_FACTORY.deployCMTAT(address,IAuthorizationEngine,string,string,uint8,string,string,IRuleEngine,string,uint256)](contracts/deployment/CMTAT_BEACON_FACTORY.sol#L41-L75): + External calls: + - [cmtat = new BeaconProxy(address(beacon),abi.encodeWithSelector(CMTAT_PROXY(address(0)).initialize.selector,admin,authorizationEngineIrrevocable,nameIrrevocable,symbolIrrevocable,decimalsIrrevocable,tokenId_,terms_,ruleEngine_,information_,flag_))](contracts/deployment/CMTAT_BEACON_FACTORY.sol#L54-L69) + Event emitted after the call(s): + - [CMTAT(address(cmtat),cmtatCounterId)](contracts/deployment/CMTAT_BEACON_FACTORY.sol#L71) + +contracts/deployment/CMTAT_BEACON_FACTORY.sol#L41-L75 + +## timestamp + +> With the Proof of Work, it was possible for a miner to modify the timestamp in a range of about 15 seconds +> +> With the Proof Of Stake, a new block is created every 12 seconds +> +> In all cases, we are not looking for such precision + +Impact: Low +Confidence: Medium + - [ ] ID-14 + [SnapshotModuleBase._scheduleSnapshotNotOptimized(uint256)](contracts/modules/internal/base/SnapshotModuleBase.sol#L149-L177) uses timestamp for comparisons + Dangerous comparisons: + - [time <= block.timestamp](contracts/modules/internal/base/SnapshotModuleBase.sol#L150) + +contracts/modules/internal/base/SnapshotModuleBase.sol#L149-L177 + + + - [ ] ID-15 + [SnapshotModuleBase._rescheduleSnapshot(uint256,uint256)](contracts/modules/internal/base/SnapshotModuleBase.sol#L182-L223) uses timestamp for comparisons + Dangerous comparisons: + - [oldTime <= block.timestamp](contracts/modules/internal/base/SnapshotModuleBase.sol#L184) + - [newTime <= block.timestamp](contracts/modules/internal/base/SnapshotModuleBase.sol#L187) + +contracts/modules/internal/base/SnapshotModuleBase.sol#L182-L223 + + + - [ ] ID-16 + [SnapshotModuleBase._unscheduleSnapshotNotOptimized(uint256)](contracts/modules/internal/base/SnapshotModuleBase.sol#L250-L263) uses timestamp for comparisons + Dangerous comparisons: + - [time <= block.timestamp](contracts/modules/internal/base/SnapshotModuleBase.sol#L251) + +contracts/modules/internal/base/SnapshotModuleBase.sol#L250-L263 + + + - [ ] ID-17 + [SnapshotModuleBase._scheduleSnapshot(uint256)](contracts/modules/internal/base/SnapshotModuleBase.sol#L118-L144) uses timestamp for comparisons + Dangerous comparisons: + - [time <= block.timestamp](contracts/modules/internal/base/SnapshotModuleBase.sol#L120) + +contracts/modules/internal/base/SnapshotModuleBase.sol#L118-L144 + + + - [ ] ID-18 + [SnapshotModuleBase._unscheduleLastSnapshot(uint256)](contracts/modules/internal/base/SnapshotModuleBase.sol#L228-L242) uses timestamp for comparisons + Dangerous comparisons: + - [time <= block.timestamp](contracts/modules/internal/base/SnapshotModuleBase.sol#L230) + +contracts/modules/internal/base/SnapshotModuleBase.sol#L228-L242 + + + - [ ] ID-19 + [SnapshotModuleBase._findScheduledMostRecentPastSnapshot()](contracts/modules/internal/base/SnapshotModuleBase.sol#L375-L402) uses timestamp for comparisons + Dangerous comparisons: + - [_scheduledSnapshots[i] <= block.timestamp](contracts/modules/internal/base/SnapshotModuleBase.sol#L393) + +contracts/modules/internal/base/SnapshotModuleBase.sol#L375-L402 + +## costly-loop + +> Inside the function, these two operations are not performed inside a loop. +> +> It seems that the only loops which calls`setCurrentSnapshot`are inside the batch functions(mintBatch, burnBatch, ...) through a call to the function update. +> At the moment, there is no trivial solution to resolve this. + +Impact: Informational +Confidence: Medium + - [ ] ID-20 + [SnapshotModuleBase._setCurrentSnapshot()](contracts/modules/internal/base/SnapshotModuleBase.sol#L321-L330) has costly operations inside a loop: + - [_currentSnapshotTime = scheduleSnapshotTime](contracts/modules/internal/base/SnapshotModuleBase.sol#L327) + +contracts/modules/internal/base/SnapshotModuleBase.sol#L321-L330 + + + - [ ] ID-21 + [SnapshotModuleBase._setCurrentSnapshot()](contracts/modules/internal/base/SnapshotModuleBase.sol#L321-L330) has costly operations inside a loop: + - [_currentSnapshotIndex = scheduleSnapshotIndex](contracts/modules/internal/base/SnapshotModuleBase.sol#L328) + +contracts/modules/internal/base/SnapshotModuleBase.sol#L321-L330 + +## dead-code + +> - Implemented to be gasless compatible (see MetaTxModule) +> +> - If we remove this function, we will have the following error: +> +> "Derived contract must override function "_msgData". Two or more base classes define function with same name and parameter types." + +Impact: Informational +Confidence: Medium + + - [ ] ID-22 +[CMTAT_BASE._msgData()](contracts/modules/CMTAT_BASE.sol#L240-L247) is never used and should be removed + +contracts/modules/CMTAT_BASE.sol#L240-L247 + +## solc-version + +> The version set in the config file is 0.8.22 + +Impact: Informational +Confidence: High + - [ ] ID-23 + Version constraint ^0.8.20 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) + - VerbatimInvalidDeduplication + - FullInlinerNonExpressionSplitArgumentEvaluationOrder + - MissingSideEffectsOnSelectorAccess. + It is used by: + - node_modules/@openzeppelin/contracts/access/AccessControl.sol#4 + - node_modules/@openzeppelin/contracts/access/IAccessControl.sol#4 + - node_modules/@openzeppelin/contracts/access/Ownable.sol#4 + - node_modules/@openzeppelin/contracts/interfaces/IERC1967.sol#4 + - node_modules/@openzeppelin/contracts/interfaces/IERC5267.sol#4 + - node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol#3 + - node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol#4 + - node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol#4 + - node_modules/@openzeppelin/contracts/proxy/Proxy.sol#4 + - node_modules/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol#4 + - node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol#4 + - node_modules/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol#4 + - node_modules/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol#4 + - node_modules/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol#4 + - node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol#4 + - node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol#4 + - node_modules/@openzeppelin/contracts/utils/Address.sol#4 + - node_modules/@openzeppelin/contracts/utils/Arrays.sol#4 + - node_modules/@openzeppelin/contracts/utils/Context.sol#4 + - node_modules/@openzeppelin/contracts/utils/StorageSlot.sol#5 + - node_modules/@openzeppelin/contracts/utils/Strings.sol#4 + - node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol#4 + - node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol#4 + - node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol#4 + - node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol#4 + - node_modules/@openzeppelin/contracts/utils/math/Math.sol#4 + - node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol#4 + - contracts/CMTAT_PROXY.sol#3 + - contracts/CMTAT_STANDALONE.sol#3 + - contracts/deployment/CMTAT_BEACON_FACTORY.sol#2 + - contracts/deployment/CMTAT_TP_FACTORY.sol#2 + - contracts/interfaces/ICCIPToken.sol#3 + - contracts/interfaces/ICMTATSnapshot.sol#3 + - contracts/interfaces/IDebtGlobal.sol#3 + - contracts/interfaces/draft-IERC1404/draft-IERC1404.sol#3 + - contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol#3 + - contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol#3 + - contracts/interfaces/engine/IAuthorizationEngine.sol#3 + - contracts/interfaces/engine/IRuleEngine.sol#3 + - contracts/libraries/Errors.sol#3 + - contracts/mocks/AuthorizationEngineMock.sol#3 + - contracts/mocks/MinimalForwarderMock.sol#3 + - contracts/mocks/RuleEngine/CodeList.sol#3 + - contracts/mocks/RuleEngine/RuleEngineMock.sol#3 + - contracts/mocks/RuleEngine/RuleMock.sol#3 + - contracts/mocks/RuleEngine/interfaces/IRule.sol#3 + - contracts/mocks/RuleEngine/interfaces/IRuleEngineMock.sol#3 + - contracts/modules/CMTAT_BASE.sol#3 + - contracts/modules/internal/ERC20SnapshotModuleInternal.sol#3 + - contracts/modules/internal/EnforcementModuleInternal.sol#3 + - contracts/modules/internal/ValidationModuleInternal.sol#3 + - contracts/modules/internal/base/SnapshotModuleBase.sol#3 + - contracts/modules/security/AuthorizationModule.sol#3 + - contracts/modules/wrapper/controllers/ValidationModule.sol#3 + - contracts/modules/wrapper/core/BaseModule.sol#3 + - contracts/modules/wrapper/core/ERC20BaseModule.sol#3 + - contracts/modules/wrapper/core/ERC20BurnModule.sol#3 + - contracts/modules/wrapper/core/ERC20MintModule.sol#3 + - contracts/modules/wrapper/core/EnforcementModule.sol#3 + - contracts/modules/wrapper/core/PauseModule.sol#3 + - contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol#3 + - contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol#3 + - contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol#3 + - contracts/modules/wrapper/extensions/MetaTxModule.sol#3 + - contracts/test/proxy/CMTAT_PROXY.sol#3 + - openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol#4 + - openzeppelin-contracts-upgradeable/contracts/metatx/ERC2771ContextUpgradeable.sol#4 + - openzeppelin-contracts-upgradeable/contracts/metatx/ERC2771ForwarderUpgradeable.sol#4 + - openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol#4 + - openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol#4 + - openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol#4 + - openzeppelin-contracts-upgradeable/contracts/utils/NoncesUpgradeable.sol#3 + - openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol#4 + - openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol#4 + - openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol#4 + +## naming-convention + +> It is not really necessary to rename all the variables. It will generate a lot of work for a minor improvement. + +Impact: Informational +Confidence: High + + - [ ] ID-24 +Enum [IERC1404EnumCode.REJECTED_CODE_BASE](contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol#L9-L14) is not in CapWords + +contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol#L9-L14 + + + - [ ] ID-25 +Variable [CreditEventsModule.__gap](contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol#L83) is not in mixedCase + +contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol#L83 + + + - [ ] ID-26 +Parameter [RuleEngineMock.detectTransferRestriction(address,address,uint256)._amount](contracts/mocks/RuleEngine/RuleEngineMock.sol#L42) is not in mixedCase + +contracts/mocks/RuleEngine/RuleEngineMock.sol#L42 + + + - [ ] ID-27 +Contract [CMTAT_PROXY](contracts/CMTAT_PROXY.sol#L7-L21) is not in CapWords + +contracts/CMTAT_PROXY.sol#L7-L21 + + + - [ ] ID-28 +Function [PauseModule.__PauseModule_init_unchained()](contracts/modules/wrapper/core/PauseModule.sol#L26-L28) is not in mixedCase + +contracts/modules/wrapper/core/PauseModule.sol#L26-L28 + + + - [ ] ID-29 +Function [CreditEventsModule.__CreditEvents_init_unchained()](contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol#L28-L30) is not in mixedCase + +contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol#L28-L30 + + + - [ ] ID-30 +Variable [CMTAT_BASE.__gap](contracts/modules/CMTAT_BASE.sol#L249) is not in mixedCase + +contracts/modules/CMTAT_BASE.sol#L249 + + + - [ ] ID-31 +Function [EnforcementModuleInternal.__Enforcement_init_unchained()](contracts/modules/internal/EnforcementModuleInternal.sol#L40-L42) is not in mixedCase + +contracts/modules/internal/EnforcementModuleInternal.sol#L40-L42 + + + - [ ] ID-32 +Variable [ValidationModuleInternal.__gap](contracts/modules/internal/ValidationModuleInternal.sol#L68) is not in mixedCase + +contracts/modules/internal/ValidationModuleInternal.sol#L68 + + + - [ ] ID-33 +Function [ERC20BurnModule.__ERC20BurnModule_init_unchained()](contracts/modules/wrapper/core/ERC20BurnModule.sol#L19-L21) is not in mixedCase + +contracts/modules/wrapper/core/ERC20BurnModule.sol#L19-L21 + + + - [ ] ID-34 +Function [ValidationModuleInternal.__Validation_init_unchained(IRuleEngine)](contracts/modules/internal/ValidationModuleInternal.sol#L24-L31) is not in mixedCase + +contracts/modules/internal/ValidationModuleInternal.sol#L24-L31 + + + - [ ] ID-35 +Variable [BaseModule.__gap](contracts/modules/wrapper/core/BaseModule.sol#L94) is not in mixedCase + +contracts/modules/wrapper/core/BaseModule.sol#L94 + + + - [ ] ID-36 +Variable [ValidationModule.__gap](contracts/modules/wrapper/controllers/ValidationModule.sol#L136) is not in mixedCase + +contracts/modules/wrapper/controllers/ValidationModule.sol#L136 + + + - [ ] ID-37 +Variable [EnforcementModule.__gap](contracts/modules/wrapper/core/EnforcementModule.sol#L55) is not in mixedCase + +contracts/modules/wrapper/core/EnforcementModule.sol#L55 + + + - [ ] ID-38 +Contract [CMTAT_STANDALONE](contracts/CMTAT_STANDALONE.sol#L7-L53) is not in CapWords + +contracts/CMTAT_STANDALONE.sol#L7-L53 + + + - [ ] ID-39 +Variable [DebtBaseModule.__gap](contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol#L232) is not in mixedCase + +contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol#L232 + + + - [ ] ID-40 +Variable [AuthorizationModule.__gap](contracts/modules/security/AuthorizationModule.sol#L85) is not in mixedCase + +contracts/modules/security/AuthorizationModule.sol#L85 + + + - [ ] ID-41 +Parameter [RuleEngineMock.operateOnTransfer(address,address,uint256)._to](contracts/mocks/RuleEngine/RuleEngineMock.sol#L74) is not in mixedCase + +contracts/mocks/RuleEngine/RuleEngineMock.sol#L74 + + + - [ ] ID-42 +Parameter [RuleEngineMock.validateTransfer(address,address,uint256)._amount](contracts/mocks/RuleEngine/RuleEngineMock.sol#L64) is not in mixedCase + +contracts/mocks/RuleEngine/RuleEngineMock.sol#L64 + + + - [ ] ID-43 +Parameter [RuleEngineMock.operateOnTransfer(address,address,uint256)._from](contracts/mocks/RuleEngine/RuleEngineMock.sol#L73) is not in mixedCase + +contracts/mocks/RuleEngine/RuleEngineMock.sol#L73 + + + - [ ] ID-44 +Parameter [RuleMock.validateTransfer(address,address,uint256)._to](contracts/mocks/RuleEngine/RuleMock.sol#L14) is not in mixedCase + +contracts/mocks/RuleEngine/RuleMock.sol#L14 + + + - [ ] ID-45 +Parameter [RuleEngineMock.operateOnTransfer(address,address,uint256)._amount](contracts/mocks/RuleEngine/RuleEngineMock.sol#L75) is not in mixedCase + +contracts/mocks/RuleEngine/RuleEngineMock.sol#L75 + + + - [ ] ID-46 +Variable [EnforcementModuleInternal.__gap](contracts/modules/internal/EnforcementModuleInternal.sol#L87) is not in mixedCase + +contracts/modules/internal/EnforcementModuleInternal.sol#L87 + + + - [ ] ID-47 +Parameter [RuleMock.canReturnTransferRestrictionCode(uint8)._restrictionCode](contracts/mocks/RuleEngine/RuleMock.sol#L35) is not in mixedCase + +contracts/mocks/RuleEngine/RuleMock.sol#L35 + + + - [ ] ID-48 +Variable [SnapshotModuleBase.__gap](contracts/modules/internal/base/SnapshotModuleBase.sol#L404) is not in mixedCase + +contracts/modules/internal/base/SnapshotModuleBase.sol#L404 + + + - [ ] ID-49 +Parameter [RuleEngineMock.validateTransfer(address,address,uint256)._to](contracts/mocks/RuleEngine/RuleEngineMock.sol#L63) is not in mixedCase + +contracts/mocks/RuleEngine/RuleEngineMock.sol#L63 + + + - [ ] ID-50 +Function [BaseModule.__Base_init_unchained(string,string,string,uint256)](contracts/modules/wrapper/core/BaseModule.sol#L40-L50) is not in mixedCase + +contracts/modules/wrapper/core/BaseModule.sol#L40-L50 + + + - [ ] ID-51 +Function [AuthorizationModule.__AuthorizationModule_init_unchained(address,IAuthorizationEngine)](contracts/modules/security/AuthorizationModule.sol#L22-L33) is not in mixedCase + +contracts/modules/security/AuthorizationModule.sol#L22-L33 + + + - [ ] ID-52 +Parameter [RuleEngineMock.validateTransfer(address,address,uint256)._from](contracts/mocks/RuleEngine/RuleEngineMock.sol#L62) is not in mixedCase + +contracts/mocks/RuleEngine/RuleEngineMock.sol#L62 + + + - [ ] ID-53 +Parameter [RuleMock.validateTransfer(address,address,uint256)._amount](contracts/mocks/RuleEngine/RuleMock.sol#L15) is not in mixedCase + +contracts/mocks/RuleEngine/RuleMock.sol#L15 + + + - [ ] ID-54 +Variable [PauseModule.__gap](contracts/modules/wrapper/core/PauseModule.sol#L83) is not in mixedCase + +contracts/modules/wrapper/core/PauseModule.sol#L83 + + + - [ ] ID-55 +Function [CMTAT_BASE.__CMTAT_init_unchained()](contracts/modules/CMTAT_BASE.sol#L148-L150) is not in mixedCase + +contracts/modules/CMTAT_BASE.sol#L148-L150 + + + - [ ] ID-56 +Variable [ERC20SnapshotModule.__gap](contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol#L77) is not in mixedCase + +contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol#L77 + + + - [ ] ID-57 +Parameter [RuleMock.detectTransferRestriction(address,address,uint256)._amount](contracts/mocks/RuleEngine/RuleMock.sol#L26) is not in mixedCase + +contracts/mocks/RuleEngine/RuleMock.sol#L26 + + + - [ ] ID-58 +Function [ERC20BaseModule.__ERC20BaseModule_init_unchained(uint8)](contracts/modules/wrapper/core/ERC20BaseModule.sol#L28-L32) is not in mixedCase + +contracts/modules/wrapper/core/ERC20BaseModule.sol#L28-L32 + + + - [ ] ID-59 +Parameter [RuleMock.messageForTransferRestriction(uint8)._restrictionCode](contracts/mocks/RuleEngine/RuleMock.sol#L41) is not in mixedCase + +contracts/mocks/RuleEngine/RuleMock.sol#L41 + + + - [ ] ID-60 +Function [CMTAT_BASE.__CMTAT_init(address,IAuthorizationEngine,string,string,uint8,string,string,IRuleEngine,string,uint256)](contracts/modules/CMTAT_BASE.sol#L87-L146) is not in mixedCase + +contracts/modules/CMTAT_BASE.sol#L87-L146 + + + - [ ] ID-61 +Function [ERC20MintModule.__ERC20MintModule_init_unchained()](contracts/modules/wrapper/core/ERC20MintModule.sol#L17-L19) is not in mixedCase + +contracts/modules/wrapper/core/ERC20MintModule.sol#L17-L19 + + + - [ ] ID-62 +Parameter [RuleEngineMock.detectTransferRestriction(address,address,uint256)._to](contracts/mocks/RuleEngine/RuleEngineMock.sol#L41) is not in mixedCase + +contracts/mocks/RuleEngine/RuleEngineMock.sol#L41 + + + - [ ] ID-63 +Variable [MetaTxModule.__gap](contracts/modules/wrapper/extensions/MetaTxModule.sol#L22) is not in mixedCase + +contracts/modules/wrapper/extensions/MetaTxModule.sol#L22 + + + - [ ] ID-64 +Function [SnapshotModuleBase.__SnapshotModuleBase_init_unchained()](contracts/modules/internal/base/SnapshotModuleBase.sol#L64-L67) is not in mixedCase + +contracts/modules/internal/base/SnapshotModuleBase.sol#L64-L67 + + + - [ ] ID-65 +Variable [ERC20BurnModule.__gap](contracts/modules/wrapper/core/ERC20BurnModule.sol#L113) is not in mixedCase + +contracts/modules/wrapper/core/ERC20BurnModule.sol#L113 + + + - [ ] ID-66 +Variable [ERC20BaseModule.__gap](contracts/modules/wrapper/core/ERC20BaseModule.sol#L113) is not in mixedCase + +contracts/modules/wrapper/core/ERC20BaseModule.sol#L113 + + + - [ ] ID-67 +Contract [CMTAT_BEACON_FACTORY](contracts/deployment/CMTAT_BEACON_FACTORY.sol#L15-L93) is not in CapWords + +contracts/deployment/CMTAT_BEACON_FACTORY.sol#L15-L93 + + + - [ ] ID-68 +Contract [CMTAT_BASE](contracts/modules/CMTAT_BASE.sol#L29-L250) is not in CapWords + +contracts/modules/CMTAT_BASE.sol#L29-L250 + + + - [ ] ID-69 +Parameter [RuleEngineMock.messageForTransferRestriction(uint8)._restrictionCode](contracts/mocks/RuleEngine/RuleEngineMock.sol#L84) is not in mixedCase + +contracts/mocks/RuleEngine/RuleEngineMock.sol#L84 + + + - [ ] ID-70 +Variable [ERC20MintModule.__gap](contracts/modules/wrapper/core/ERC20MintModule.sol#L73) is not in mixedCase + +contracts/modules/wrapper/core/ERC20MintModule.sol#L73 + + + - [ ] ID-71 +Function [ValidationModule.__ValidationModule_init_unchained()](contracts/modules/wrapper/controllers/ValidationModule.sol#L26-L28) is not in mixedCase + +contracts/modules/wrapper/controllers/ValidationModule.sol#L26-L28 + + + - [ ] ID-72 +Function [DebtBaseModule.__DebtBaseModule_init_unchained()](contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol#L60-L62) is not in mixedCase + +contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol#L60-L62 + + + - [ ] ID-73 +Parameter [RuleEngineMock.detectTransferRestriction(address,address,uint256)._from](contracts/mocks/RuleEngine/RuleEngineMock.sol#L40) is not in mixedCase + +contracts/mocks/RuleEngine/RuleEngineMock.sol#L40 + + + - [ ] ID-74 +Function [ERC20SnapshotModule.__ERC20SnasphotModule_init_unchained()](contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol#L20-L22) is not in mixedCase + +contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol#L20-L22 + + + - [ ] ID-75 +Variable [ERC20SnapshotModuleInternal.__gap](contracts/modules/internal/ERC20SnapshotModuleInternal.sol#L140) is not in mixedCase + +contracts/modules/internal/ERC20SnapshotModuleInternal.sol#L140 + + + - [ ] ID-76 +Function [EnforcementModule.__EnforcementModule_init_unchained()](contracts/modules/wrapper/core/EnforcementModule.sol#L25-L27) is not in mixedCase + +contracts/modules/wrapper/core/EnforcementModule.sol#L25-L27 + + + - [ ] ID-77 +Function [ERC20SnapshotModuleInternal.__ERC20Snapshot_init_unchained()](contracts/modules/internal/ERC20SnapshotModuleInternal.sol#L27-L30) is not in mixedCase + +contracts/modules/internal/ERC20SnapshotModuleInternal.sol#L27-L30 + + + - [ ] ID-78 +Contract [CMTAT_TP_FACTORY](contracts/deployment/CMTAT_TP_FACTORY.sol#L11-L78) is not in CapWords + +contracts/deployment/CMTAT_TP_FACTORY.sol#L11-L78 + + + - [ ] ID-79 +Parameter [RuleMock.validateTransfer(address,address,uint256)._from](contracts/mocks/RuleEngine/RuleMock.sol#L13) is not in mixedCase + +contracts/mocks/RuleEngine/RuleMock.sol#L13 + + + - [ ] ID-80 +Variable [CMTAT_PROXY.__gap](contracts/CMTAT_PROXY.sol#L20) is not in mixedCase + +contracts/CMTAT_PROXY.sol#L20 + diff --git a/doc/general/ARCHITECTURE.md b/doc/general/ARCHITECTURE.md index 6e67a9a3..9dbb66de 100644 --- a/doc/general/ARCHITECTURE.md +++ b/doc/general/ARCHITECTURE.md @@ -14,7 +14,9 @@ These contracts inherit from the same base contract [CMTAT_BASE.sol](../contracts/modules/CMTAT_BASE.sol), which inherits of the different modules. -The main schema describing the architecture can be found here: [architecture.pdf](schema/drawio/architecture.pdf) +The main schema describing the architecture can be found here: [architecture.pdf](../schema/drawio/architecture.pdf) + +Small change with the PDF: the snapshotModule is now included by default. ## Schema diff --git a/doc/general/contract-size.png b/doc/general/contract-size.png index 99d7ef8d..7f1d997a 100644 Binary files a/doc/general/contract-size.png and b/doc/general/contract-size.png differ diff --git a/doc/general/test/test.odt b/doc/general/test/archive/test.odt similarity index 100% rename from doc/general/test/test.odt rename to doc/general/test/archive/test.odt diff --git a/doc/general/test/test.pdf b/doc/general/test/archive/test.pdf similarity index 100% rename from doc/general/test/test.pdf rename to doc/general/test/archive/test.pdf diff --git a/doc/general/test/coverage/contracts/CMTAT_PROXY.sol.html b/doc/general/test/coverage/contracts/CMTAT_PROXY.sol.html index ff47c5ca..1f6a919f 100644 --- a/doc/general/test/coverage/contracts/CMTAT_PROXY.sol.html +++ b/doc/general/test/coverage/contracts/CMTAT_PROXY.sol.html @@ -80,7 +80,7 @@

      -10× +15×       @@ -112,7 +112,7 @@

diff --git a/doc/general/test/coverage/contracts/CMTAT_STANDALONE.sol.html b/doc/general/test/coverage/contracts/CMTAT_STANDALONE.sol.html index 29e13247..9c1ded84 100644 --- a/doc/general/test/coverage/contracts/CMTAT_STANDALONE.sol.html +++ b/doc/general/test/coverage/contracts/CMTAT_STANDALONE.sol.html @@ -208,7 +208,7 @@

diff --git a/doc/general/test/coverage/contracts/deployment/CMTAT_BEACON_FACTORY.sol.html b/doc/general/test/coverage/contracts/deployment/CMTAT_BEACON_FACTORY.sol.html index b37a7f2a..92433794 100644 --- a/doc/general/test/coverage/contracts/deployment/CMTAT_BEACON_FACTORY.sol.html +++ b/doc/general/test/coverage/contracts/deployment/CMTAT_BEACON_FACTORY.sol.html @@ -22,12 +22,12 @@

100% Statements - 7/7 + 10/10
100% Branches - 2/2 + 8/8
100% @@ -37,7 +37,7 @@

100% Lines - 11/11 + 17/17

@@ -134,7 +134,17 @@

89 90 91 -92  +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102        @@ -165,6 +175,16 @@

      +  + + +  + + +  + + +  @@ -225,7 +245,7 @@

    - 
// SPDX-License-Identifier: UNLICENSED
+ 
//SPDX-License-Identifier: MPL-2.0
 pragma solidity ^0.8.20;
  
 import "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol";
@@ -233,6 +253,7 @@ 

import '@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol'; import "../CMTAT_PROXY.sol"; import "../modules/CMTAT_BASE.sol"; +import "../libraries/FactoryErrors.sol"; import '@openzeppelin/contracts/access/AccessControl.sol';   /** @@ -256,6 +277,15 @@

* @param beaconOwner owner */ constructor(address implementation_, address factoryAdmin, address beaconOwner) { + if(factoryAdmin == address(0)){ + revert FactoryErrors.CMTAT_Factory_AddressZeroNotAllowedForFactoryAdmin(); + } + if(beaconOwner == address(0)){ + revert FactoryErrors.CMTAT_Factory_AddressZeroNotAllowedForBeaconOwner(); + } + if(implementation_ == address(0)){ + revert FactoryErrors.CMTAT_Factory_AddressZeroNotAllowedForLogicContract(); + } beacon = new UpgradeableBeacon(implementation_, beaconOwner); _grantRole(DEFAULT_ADMIN_ROLE, factoryAdmin); _grantRole(CMTAT_DEPLOYER_ROLE, factoryAdmin); @@ -322,7 +352,7 @@

diff --git a/doc/general/test/coverage/contracts/deployment/CMTAT_TP_FACTORY.sol.html b/doc/general/test/coverage/contracts/deployment/CMTAT_TP_FACTORY.sol.html index 72f2fa0c..d87ce0c4 100644 --- a/doc/general/test/coverage/contracts/deployment/CMTAT_TP_FACTORY.sol.html +++ b/doc/general/test/coverage/contracts/deployment/CMTAT_TP_FACTORY.sol.html @@ -22,12 +22,12 @@

100% Statements - 6/6 + 8/8
100% Branches - 2/2 + 6/6
100% @@ -37,7 +37,7 @@

100% Lines - 10/10 + 14/14

@@ -120,7 +120,16 @@

75 76 77 -78  +78 +79 +80 +81 +82 +83 +84 +85 +86  +        @@ -147,6 +156,13 @@

      +  + + +  + + +  @@ -197,12 +213,12 @@

    - 
// SPDX-License-Identifier: UNLICENSED
+ 
//SPDX-License-Identifier: MPL-2.0
 pragma solidity ^0.8.20;
  
-import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
 import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
 import "../CMTAT_PROXY.sol";
+import "../libraries/FactoryErrors.sol";
 import '@openzeppelin/contracts/access/AccessControl.sol';
 /**
 * @notice Factory to deploy transparent proxy
@@ -218,12 +234,20 @@ 

bytes32 public constant CMTAT_DEPLOYER_ROLE = keccak256("CMTAT_DEPLOYER_ROLE"); address public immutable logic; address[] public cmtatsList; +  +   /** * @param logic_ contract implementation * @param factoryAdmin admin */ constructor(address logic_, address factoryAdmin) { + if(logic_ == address(0)){ + revert FactoryErrors.CMTAT_Factory_AddressZeroNotAllowedForLogicContract(); + } + if(factoryAdmin == address(0)){ + revert FactoryErrors.CMTAT_Factory_AddressZeroNotAllowedForFactoryAdmin(); + } logic = logic_; _grantRole(DEFAULT_ADMIN_ROLE, factoryAdmin); _grantRole(CMTAT_DEPLOYER_ROLE, factoryAdmin); @@ -280,7 +304,7 @@

diff --git a/doc/general/test/coverage/contracts/deployment/index.html b/doc/general/test/coverage/contracts/deployment/index.html index ebfe16f5..946d15e3 100644 --- a/doc/general/test/coverage/contracts/deployment/index.html +++ b/doc/general/test/coverage/contracts/deployment/index.html @@ -22,12 +22,12 @@

100% Statements - 13/13 + 18/18
100% Branches - 4/4 + 14/14
100% @@ -37,7 +37,7 @@

100% Lines - 21/21 + 31/31

@@ -62,26 +62,26 @@

CMTAT_BEACON_FACTORY.sol
100% - 7/7 + 10/10 100% - 2/2 + 8/8 100% 4/4 100% - 11/11 + 17/17 CMTAT_TP_FACTORY.sol
100% - 6/6 + 8/8 100% - 2/2 + 6/6 100% 3/3 100% - 10/10 + 14/14 @@ -90,7 +90,7 @@

diff --git a/doc/general/test/coverage/contracts/index.html b/doc/general/test/coverage/contracts/index.html index 1fbde2bb..65f726b6 100644 --- a/doc/general/test/coverage/contracts/index.html +++ b/doc/general/test/coverage/contracts/index.html @@ -90,7 +90,7 @@

diff --git a/doc/general/test/coverage/contracts/interfaces/ICCIPToken.sol.html b/doc/general/test/coverage/contracts/interfaces/ICCIPToken.sol.html index 0b62b74f..e63184e5 100644 --- a/doc/general/test/coverage/contracts/interfaces/ICCIPToken.sol.html +++ b/doc/general/test/coverage/contracts/interfaces/ICCIPToken.sol.html @@ -93,7 +93,7 @@

   
//SPDX-License-Identifier: MPL-2.0
  
-pragma solidity ^0.8.0;
+pragma solidity ^0.8.20;
  
 /**
 * @notice CCIP Pool with mint
@@ -121,7 +121,7 @@ 

diff --git a/doc/general/test/coverage/contracts/interfaces/ICMTATSnapshot.sol.html b/doc/general/test/coverage/contracts/interfaces/ICMTATSnapshot.sol.html index 34c90baf..7c285dc9 100644 --- a/doc/general/test/coverage/contracts/interfaces/ICMTATSnapshot.sol.html +++ b/doc/general/test/coverage/contracts/interfaces/ICMTATSnapshot.sol.html @@ -70,7 +70,29 @@

25 26 27 -28  +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39  +  +  +  +  +  +  +  +  +  +  +        @@ -99,17 +121,12 @@

   
//SPDX-License-Identifier: MPL-2.0
  
-pragma solidity ^0.8.0;
+pragma solidity ^0.8.20;
  
 /**
 * @notice interface to represent a CMTAT with snapshot
 */
 interface ICMTATSnapshot {
-    /**
-    * @notice Return snapshotBalanceOf and snapshotTotalSupply to avoid multiple calls
-    * @return ownerBalance ,  totalSupply - see snapshotBalanceOf and snapshotTotalSupply
-    */
-    function snapshotInfo(uint256 time, address owner) external view returns (uint256 ownerBalance, uint256 totalSupply);
     /** 
     * @notice Return the number of tokens owned by the given owner at the time when the snapshot with the given time was created.
     * @return value stored in the snapshot, or the actual balance if no snapshot
@@ -121,8 +138,24 @@ 

* @return value stored in the snapshot, or the actual totalSupply if no snapshot */ function snapshotTotalSupply(uint256 time) external view returns (uint256); -  + /** + * @notice Return snapshotBalanceOf and snapshotTotalSupply to avoid multiple calls + * @return ownerBalance , totalSupply - see snapshotBalanceOf and snapshotTotalSupply + */ + function snapshotInfo(uint256 time, address owner) external view returns (uint256 ownerBalance, uint256 totalSupply); + /** + * @notice Return snapshotBalanceOf for each address in the array and the total supply + * @return ownerBalances array with the balance of each address, the total supply + */ function snapshotInfoBatch(uint256 time, address[] calldata addresses) external view returns (uint256[] memory ownerBalances, uint256 totalSupply); +  + /** + * @notice Return snapshotBalanceOf for each address in the array and the total supply + * @return ownerBalances array with the balance of each address, the total supply + */ + function snapshotInfoBatch(uint256[] calldata times, address[] calldata addresses) external view returns (uint256[][] memory ownerBalances, uint256[] memory totalSupply); +  +  }  

@@ -130,7 +163,7 @@

diff --git a/doc/general/test/coverage/contracts/interfaces/IDebtGlobal.sol.html b/doc/general/test/coverage/contracts/interfaces/IDebtGlobal.sol.html index 663df801..47fcaefb 100644 --- a/doc/general/test/coverage/contracts/interfaces/IDebtGlobal.sol.html +++ b/doc/general/test/coverage/contracts/interfaces/IDebtGlobal.sol.html @@ -103,7 +103,7 @@

   
//SPDX-License-Identifier: MPL-2.0
  
-pragma solidity ^0.8.0;
+pragma solidity ^0.8.20;
  
 /**
 * @notice interface to represent debt tokens
@@ -136,7 +136,7 @@ 

diff --git a/doc/general/test/coverage/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol.html b/doc/general/test/coverage/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol.html index ca2921b6..349aeece 100644 --- a/doc/general/test/coverage/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol.html +++ b/doc/general/test/coverage/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol.html @@ -97,10 +97,10 @@

   
//SPDX-License-Identifier: MPL-2.0
  
-pragma solidity ^0.8.0;
+pragma solidity ^0.8.20;
  
 /*
-@dev Contrary to the ERC-1404, this interface does not inherit from the ERC20 interface
+* @dev Contrary to the ERC-1404, this interface does not inherit from the ERC20 interface
 */
 interface IERC1404 {
     /**
@@ -127,7 +127,7 @@ 

diff --git a/doc/general/test/coverage/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol.html b/doc/general/test/coverage/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol.html new file mode 100644 index 00000000..e44fda76 --- /dev/null +++ b/doc/general/test/coverage/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol.html @@ -0,0 +1,110 @@ + + + + Code coverage report for contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol + + + + + + + +
+
+

+ all files / contracts/interfaces/draft-IERC1404/ draft-IERC1404EnumCode.sol +

+
+
+ 100% + Statements + 0/0 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 0/0 +
+
+ 100% + Lines + 0/0 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
//SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+interface IERC1404EnumCode {
+    /* 
+    * @dev leave the code 4-9 free/unused for further additions in your ruleEngine implementation
+    */
+    enum REJECTED_CODE_BASE {
+        TRANSFER_OK,
+        TRANSFER_REJECTED_PAUSED,
+        TRANSFER_REJECTED_FROM_FROZEN,
+        TRANSFER_REJECTED_TO_FROZEN
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/general/test/coverage/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol.html b/doc/general/test/coverage/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol.html index 9ebdff15..86c0dea2 100644 --- a/doc/general/test/coverage/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol.html +++ b/doc/general/test/coverage/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol.html @@ -61,23 +61,7 @@

16 17 18 -19 -20 -21 -22 -23 -24 -25 -26 -27  -  -  -  -  -  -  -  -  +19        @@ -97,20 +81,12 @@

   
//SPDX-License-Identifier: MPL-2.0
  
-pragma solidity ^0.8.0;
+pragma solidity ^0.8.20;
  
 import "./draft-IERC1404.sol";
+import "./draft-IERC1404EnumCode.sol";
  
-interface IERC1404Wrapper is IERC1404 {
-    /* 
-    @dev leave the code 4-9 free/unused for further additions in your ruleEngine implementation
-    */
-    enum REJECTED_CODE_BASE {
-        TRANSFER_OK,
-        TRANSFER_REJECTED_PAUSED,
-        TRANSFER_REJECTED_FROM_FROZEN,
-        TRANSFER_REJECTED_TO_FROZEN
-    }
+interface IERC1404Wrapper is IERC1404, IERC1404EnumCode  {
  
     /**
      * @dev Returns true if the transfer is valid, and false otherwise.
@@ -127,7 +103,7 @@ 

diff --git a/doc/general/test/coverage/contracts/interfaces/draft-IERC1404/index.html b/doc/general/test/coverage/contracts/interfaces/draft-IERC1404/index.html index 63ea4ba7..d1570445 100644 --- a/doc/general/test/coverage/contracts/interfaces/draft-IERC1404/index.html +++ b/doc/general/test/coverage/contracts/interfaces/draft-IERC1404/index.html @@ -71,6 +71,19 @@

0/0 + + draft-IERC1404EnumCode.sol +
+ 100% + 0/0 + 100% + 0/0 + 100% + 0/0 + 100% + 0/0 + + draft-IERC1404Wrapper.sol
@@ -90,7 +103,7 @@

diff --git a/doc/general/test/coverage/contracts/interfaces/engine/IAuthorizationEngine.sol.html b/doc/general/test/coverage/contracts/interfaces/engine/IAuthorizationEngine.sol.html index b045ca87..efafbc17 100644 --- a/doc/general/test/coverage/contracts/interfaces/engine/IAuthorizationEngine.sol.html +++ b/doc/general/test/coverage/contracts/interfaces/engine/IAuthorizationEngine.sol.html @@ -85,7 +85,7 @@

   
// SPDX-License-Identifier: MPL-2.0
  
-pragma solidity ^0.8.0;
+pragma solidity ^0.8.20;
  
 interface IAuthorizationEngine {
     /**
@@ -109,7 +109,7 @@ 

diff --git a/doc/general/test/coverage/contracts/interfaces/engine/IRuleEngine.sol.html b/doc/general/test/coverage/contracts/interfaces/engine/IRuleEngine.sol.html index fc3ec454..1bc8a4d2 100644 --- a/doc/general/test/coverage/contracts/interfaces/engine/IRuleEngine.sol.html +++ b/doc/general/test/coverage/contracts/interfaces/engine/IRuleEngine.sol.html @@ -79,7 +79,7 @@

   
// SPDX-License-Identifier: MPL-2.0
  
-pragma solidity ^0.8.0;
+pragma solidity ^0.8.20;
  
 import "../draft-IERC1404/draft-IERC1404Wrapper.sol";
  
@@ -100,7 +100,7 @@ 

diff --git a/doc/general/test/coverage/contracts/interfaces/engine/index.html b/doc/general/test/coverage/contracts/interfaces/engine/index.html index daba08c1..38389bf0 100644 --- a/doc/general/test/coverage/contracts/interfaces/engine/index.html +++ b/doc/general/test/coverage/contracts/interfaces/engine/index.html @@ -90,7 +90,7 @@

diff --git a/doc/general/test/coverage/contracts/interfaces/index.html b/doc/general/test/coverage/contracts/interfaces/index.html index 815c8395..0eabfb3c 100644 --- a/doc/general/test/coverage/contracts/interfaces/index.html +++ b/doc/general/test/coverage/contracts/interfaces/index.html @@ -103,7 +103,7 @@

diff --git a/doc/general/test/coverage/contracts/libraries/Errors.sol.html b/doc/general/test/coverage/contracts/libraries/Errors.sol.html index 574b275e..e6ba0ed7 100644 --- a/doc/general/test/coverage/contracts/libraries/Errors.sol.html +++ b/doc/general/test/coverage/contracts/libraries/Errors.sol.html @@ -247,7 +247,7 @@

diff --git a/doc/general/test/coverage/contracts/libraries/FactoryErrors.sol.html b/doc/general/test/coverage/contracts/libraries/FactoryErrors.sol.html new file mode 100644 index 00000000..053c177f --- /dev/null +++ b/doc/general/test/coverage/contracts/libraries/FactoryErrors.sol.html @@ -0,0 +1,92 @@ + + + + Code coverage report for contracts/libraries/FactoryErrors.sol + + + + + + + +
+
+

+ all files / contracts/libraries/ FactoryErrors.sol +

+
+
+ 100% + Statements + 0/0 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 0/0 +
+
+ 100% + Lines + 0/0 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10  +  +  +  +  +  +  +  +  + 
//SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+library FactoryErrors {
+    error CMTAT_Factory_AddressZeroNotAllowedForFactoryAdmin();
+    error CMTAT_Factory_AddressZeroNotAllowedForBeaconOwner();
+    error CMTAT_Factory_AddressZeroNotAllowedForLogicContract();
+}
+ 
+
+
+ + + + + + + diff --git a/doc/general/test/coverage/contracts/libraries/index.html b/doc/general/test/coverage/contracts/libraries/index.html index fc0eb653..6f5a0847 100644 --- a/doc/general/test/coverage/contracts/libraries/index.html +++ b/doc/general/test/coverage/contracts/libraries/index.html @@ -71,13 +71,26 @@

0/0 + + FactoryErrors.sol +
+ 100% + 0/0 + 100% + 0/0 + 100% + 0/0 + 100% + 0/0 + +
diff --git a/doc/general/test/coverage/contracts/modules/CMTAT_BASE.sol.html b/doc/general/test/coverage/contracts/modules/CMTAT_BASE.sol.html index 60561b71..e6372f2e 100644 --- a/doc/general/test/coverage/contracts/modules/CMTAT_BASE.sol.html +++ b/doc/general/test/coverage/contracts/modules/CMTAT_BASE.sol.html @@ -799,7 +799,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/index.html b/doc/general/test/coverage/contracts/modules/index.html index 7e219b42..a21c1a14 100644 --- a/doc/general/test/coverage/contracts/modules/index.html +++ b/doc/general/test/coverage/contracts/modules/index.html @@ -77,7 +77,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/internal/ERC20SnapshotModuleInternal.sol.html b/doc/general/test/coverage/contracts/modules/internal/ERC20SnapshotModuleInternal.sol.html index e350cd02..62c41c3d 100644 --- a/doc/general/test/coverage/contracts/modules/internal/ERC20SnapshotModuleInternal.sol.html +++ b/doc/general/test/coverage/contracts/modules/internal/ERC20SnapshotModuleInternal.sol.html @@ -22,7 +22,7 @@

100% Statements - 15/15 + 16/16
90% @@ -32,12 +32,12 @@

100% Functions - 8/8 + 9/9
100% Lines - 20/20 + 24/24

@@ -172,7 +172,19 @@

127 128 129 -130  +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142        @@ -208,23 +220,34 @@

      +480× +480×           -480× +  +  +160× +160× 480×   +160×             +  +80× 80× 80× -240× +  +  +  +    80×   @@ -237,12 +260,13 @@

      -960× +  +1200×         -960× +1200×       @@ -251,11 +275,11 @@

      -640× +720×       -640× +720×       @@ -305,13 +329,8 @@

  pragma solidity ^0.8.20;   -import "../../../openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol"; -import "../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../../openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; import {Arrays} from '@openzeppelin/contracts/utils/Arrays.sol'; -  -import "../../libraries/Errors.sol"; -import "../../interfaces/ICMTATSnapshot.sol"; import "./base/SnapshotModuleBase.sol"; /** * @dev Snapshot module internal. @@ -347,7 +366,7 @@

}   /** - * @notice Return snapshotBalanceOf for each address in an array and the total supply + * @notice Return snapshotBalanceOf for each address in the array and the total supply * @return ownerBalances array with the balance of each address, the total supply */ function snapshotInfoBatch(uint256 time, address[] calldata addresses) public view returns (uint256[] memory ownerBalances, uint256 totalSupply) { @@ -357,6 +376,23 @@

} totalSupply = snapshotTotalSupply(time); } +  + /** + * @notice Return snapshotBalanceOf for each address in the array and the total supply + * @return ownerBalances array with the balance of each address, the total supply + */ + function snapshotInfoBatch(uint256[] calldata times, address[] calldata addresses) public view returns (uint256[][] memory ownerBalances, uint256[] memory totalSupply) { + ownerBalances = new uint256[][](times.length); + totalSupply = new uint256[](times.length); + for(uint256 iT = 0; iT < times.length; ++iT){ + /*ownerBalances[iT] = new uint256[](addresses.length); + for(uint256 jA = 0; jA < addresses.length; ++jA){ + ownerBalances[iT][jA] = snapshotBalanceOf(times[iT], addresses[jA]); + } + totalSupply[iT] = snapshotTotalSupply(times[iT]);*/ + (ownerBalances[iT], totalSupply[iT]) = snapshotInfoBatch(times[iT],addresses); + } + }   /** * @notice Return the number of tokens owned by the given owner at the time when the snapshot with the given time was created. @@ -436,7 +472,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/internal/EnforcementModuleInternal.sol.html b/doc/general/test/coverage/contracts/modules/internal/EnforcementModuleInternal.sol.html index 704ff82a..76be6850 100644 --- a/doc/general/test/coverage/contracts/modules/internal/EnforcementModuleInternal.sol.html +++ b/doc/general/test/coverage/contracts/modules/internal/EnforcementModuleInternal.sol.html @@ -313,7 +313,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/internal/ValidationModuleInternal.sol.html b/doc/general/test/coverage/contracts/modules/internal/ValidationModuleInternal.sol.html index d018890c..10dac068 100644 --- a/doc/general/test/coverage/contracts/modules/internal/ValidationModuleInternal.sol.html +++ b/doc/general/test/coverage/contracts/modules/internal/ValidationModuleInternal.sol.html @@ -112,9 +112,7 @@

67 68 69 -70 -71  -  +70        @@ -189,7 +187,6 @@

  import "../../../openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol"; import "../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; -import "../../interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol"; import "../../interfaces/engine/IRuleEngine.sol"; /** * @dev Validation module. @@ -259,7 +256,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/internal/base/SnapshotModuleBase.sol.html b/doc/general/test/coverage/contracts/modules/internal/base/SnapshotModuleBase.sol.html index 1fab691f..dff594d5 100644 --- a/doc/general/test/coverage/contracts/modules/internal/base/SnapshotModuleBase.sol.html +++ b/doc/general/test/coverage/contracts/modules/internal/base/SnapshotModuleBase.sol.html @@ -37,7 +37,7 @@

100% Lines - 108/108 + 102/102
@@ -448,13 +448,7 @@

403 404 405 -406 -407 -408 -409 -410 -411 -412  +406        @@ -554,13 +548,11 @@

    +  12×     -12× -12× -        @@ -713,11 +705,9 @@

12×   +  16× -16× -16× -      @@ -747,12 +737,12 @@

      -1600× +1920×   -1600× -1248× +1920× +1484×   -352× +436×       @@ -848,6 +838,7 @@

  86× 86× +  86× 116× 52× @@ -856,9 +847,6 @@

  64×   -52× -52× -    86×   @@ -965,13 +953,11 @@

indexLowerBound - 1; nextScheduledSnapshot = new uint256[](arraySize); - for (uint256 i; i < arraySize; ) { + // No need of unchecked block since Soliditiy 0.8.22 + for (uint256 i; i < arraySize; ++i) { nextScheduledSnapshot[i] = _scheduledSnapshots[ indexLowerBound + 1 + i ]; - unchecked { - ++i; - } } } } @@ -1124,11 +1110,9 @@

if (!isFound) { revert Errors.CMTAT_SnapshotModule_SnapshotNotFound(); } - for (uint256 i = index; i + 1 < _scheduledSnapshots.length; ) { + // No need of unchecked block since Soliditiy 0.8.22 + for (uint256 i = index; i + 1 < _scheduledSnapshots.length; ++i ) { _scheduledSnapshots[i] = _scheduledSnapshots[i + 1]; - unchecked { - ++i; - } } _scheduledSnapshots.pop(); } @@ -1259,7 +1243,8 @@

// mostRecent is initialized in the loop uint256 mostRecent; index = currentArraySize; - for (uint256 i = _currentSnapshotIndex; i < currentArraySize; ) { + // No need of unchecked block since Soliditiy 0.8.22 + for (uint256 i = _currentSnapshotIndex; i < currentArraySize; ++i ) { if (_scheduledSnapshots[i] <= block.timestamp) { mostRecent = _scheduledSnapshots[i]; index = i; @@ -1267,9 +1252,6 @@

// All snapshot are planned in the futur break; } - unchecked { - ++i; - } } return (mostRecent, index); } @@ -1282,7 +1264,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/internal/base/index.html b/doc/general/test/coverage/contracts/modules/internal/base/index.html index b765f516..2d1fa4db 100644 --- a/doc/general/test/coverage/contracts/modules/internal/base/index.html +++ b/doc/general/test/coverage/contracts/modules/internal/base/index.html @@ -37,7 +37,7 @@

100% Lines - 108/108 + 102/102
@@ -68,7 +68,7 @@

100% 14/14 100% - 108/108 + 102/102 @@ -77,7 +77,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/internal/index.html b/doc/general/test/coverage/contracts/modules/internal/index.html index 420d138d..94760538 100644 --- a/doc/general/test/coverage/contracts/modules/internal/index.html +++ b/doc/general/test/coverage/contracts/modules/internal/index.html @@ -22,7 +22,7 @@

100% Statements - 30/30 + 31/31
85% @@ -32,12 +32,12 @@

100% Functions - 17/17 + 18/18
100% Lines - 38/38 + 42/42

@@ -62,13 +62,13 @@

ERC20SnapshotModuleInternal.sol
100% - 15/15 + 16/16 90% 9/10 100% - 8/8 + 9/9 100% - 20/20 + 24/24 @@ -103,7 +103,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/security/AuthorizationModule.sol.html b/doc/general/test/coverage/contracts/modules/security/AuthorizationModule.sol.html index 130b2aae..81024f87 100644 --- a/doc/general/test/coverage/contracts/modules/security/AuthorizationModule.sol.html +++ b/doc/general/test/coverage/contracts/modules/security/AuthorizationModule.sol.html @@ -129,43 +129,7 @@

84 85 86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  +87        @@ -256,33 +220,15 @@

pragma solidity ^0.8.20;   import "../../../openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol"; -import "../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; -  import "../../libraries/Errors.sol"; import "../../interfaces/engine/IAuthorizationEngine.sol"; +  abstract contract AuthorizationModule is AccessControlUpgradeable { IAuthorizationEngine private authorizationEngine; /** * @dev Emitted when a rule engine is set. */ event AuthorizationEngine(IAuthorizationEngine indexed newAuthorizationEngine); - // BurnModule - bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE"); - bytes32 public constant BURNER_FROM_ROLE = keccak256("BURNER_FROM_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 - bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); - // PauseModule - bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); - // SnapshotModule - bytes32 public constant SNAPSHOOTER_ROLE = keccak256("SNAPSHOOTER_ROLE"); -  /** * @dev * @@ -361,7 +307,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/security/index.html b/doc/general/test/coverage/contracts/modules/security/index.html index fb7160c2..f33d7151 100644 --- a/doc/general/test/coverage/contracts/modules/security/index.html +++ b/doc/general/test/coverage/contracts/modules/security/index.html @@ -77,7 +77,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/wrapper/controllers/ValidationModule.sol.html b/doc/general/test/coverage/contracts/modules/wrapper/controllers/ValidationModule.sol.html index ab31fed8..3d62462e 100644 --- a/doc/general/test/coverage/contracts/modules/wrapper/controllers/ValidationModule.sol.html +++ b/doc/general/test/coverage/contracts/modules/wrapper/controllers/ValidationModule.sol.html @@ -180,9 +180,7 @@

135 136 137 -138 -139  -  +138        @@ -323,7 +321,6 @@

  pragma solidity ^0.8.20;   -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; import "../../internal/ValidationModuleInternal.sol"; import "../core/PauseModule.sol"; @@ -463,7 +460,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/wrapper/controllers/index.html b/doc/general/test/coverage/contracts/modules/wrapper/controllers/index.html index 6d378fd7..a6acad6f 100644 --- a/doc/general/test/coverage/contracts/modules/wrapper/controllers/index.html +++ b/doc/general/test/coverage/contracts/modules/wrapper/controllers/index.html @@ -77,7 +77,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/wrapper/core/BaseModule.sol.html b/doc/general/test/coverage/contracts/modules/wrapper/core/BaseModule.sol.html index 9a406bd6..3bc3b0e3 100644 --- a/doc/general/test/coverage/contracts/modules/wrapper/core/BaseModule.sol.html +++ b/doc/general/test/coverage/contracts/modules/wrapper/core/BaseModule.sol.html @@ -138,9 +138,7 @@

93 94 95 -96 -97  -  +96        @@ -240,7 +238,6 @@

pragma solidity ^0.8.20;   // required OZ imports here -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; import "../../../libraries/Errors.sol";   @@ -337,7 +334,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/wrapper/core/ERC20BaseModule.sol.html b/doc/general/test/coverage/contracts/modules/wrapper/core/ERC20BaseModule.sol.html index b1e2b157..34b30b36 100644 --- a/doc/general/test/coverage/contracts/modules/wrapper/core/ERC20BaseModule.sol.html +++ b/doc/general/test/coverage/contracts/modules/wrapper/core/ERC20BaseModule.sol.html @@ -37,7 +37,7 @@

100% Lines - 19/19 + 17/17
@@ -157,12 +157,7 @@

112 113 114 -115 -116 -117 -118 -119  -  +115        @@ -234,9 +229,6 @@

    14× -10× -10× -        @@ -284,7 +276,6 @@

pragma solidity ^0.8.20;   // required OZ imports here -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../../../openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; import "../../../libraries/Errors.sol";   @@ -347,14 +338,11 @@

if (bool(tos.length != values.length)) { revert Errors.CMTAT_ERC20BaseModule_TosValueslengthMismatch(); } -  - for (uint256 i = 0; i < tos.length; ) { + // No need of unchecked block since Soliditiy 0.8.22 + for (uint256 i = 0; i < tos.length; ++i) { // We call directly the internal function transfer // The reason is that the public function adds only the owner address recovery ERC20Upgradeable._transfer(_msgSender(), tos[i], values[i]); - unchecked { - ++i; - } } // not really useful // Here only to keep the same behaviour as transfer @@ -403,7 +391,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/wrapper/core/ERC20BurnModule.sol.html b/doc/general/test/coverage/contracts/modules/wrapper/core/ERC20BurnModule.sol.html index c34fba8e..b01c2741 100644 --- a/doc/general/test/coverage/contracts/modules/wrapper/core/ERC20BurnModule.sol.html +++ b/doc/general/test/coverage/contracts/modules/wrapper/core/ERC20BurnModule.sol.html @@ -37,7 +37,7 @@

100% Lines - 20/20 + 18/18
@@ -157,9 +157,8 @@

112 113 114 -115 -116 -117  +115  +        @@ -230,9 +229,6 @@

24× 20× -20× -20× -        @@ -280,10 +276,11 @@

pragma solidity ^0.8.20;   import "../../../../openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; import "../../../interfaces/ICCIPToken.sol"; abstract contract ERC20BurnModule is ERC20Upgradeable, ICCIPBurnFromERC20, AuthorizationModule { + bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE"); + bytes32 public constant BURNER_FROM_ROLE = keccak256("BURNER_FROM_ROLE"); /** * @notice Emitted when the specified `value` amount of tokens owned by `owner`are destroyed with the given `reason` */ @@ -342,13 +339,10 @@

if (bool(accounts.length != values.length)) { revert Errors.CMTAT_BurnModule_AccountsValueslengthMismatch(); } -  - for (uint256 i = 0; i < accounts.length; ) { + // No need of unchecked block since Soliditiy 0.8.22 + for (uint256 i = 0; i < accounts.length; ++i ) { _burn(accounts[i], values[i]); emit Burn(accounts[i], values[i], reason); - unchecked { - ++i; - } } }   @@ -397,7 +391,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/wrapper/core/ERC20MintModule.sol.html b/doc/general/test/coverage/contracts/modules/wrapper/core/ERC20MintModule.sol.html index 1398d9f1..f077c4e3 100644 --- a/doc/general/test/coverage/contracts/modules/wrapper/core/ERC20MintModule.sol.html +++ b/doc/general/test/coverage/contracts/modules/wrapper/core/ERC20MintModule.sol.html @@ -37,7 +37,7 @@

100% Lines - 11/11 + 9/9
@@ -117,9 +117,8 @@

72 73 74 -75 -76 -77  +75  +        @@ -187,9 +186,6 @@

18× 54× 54× -54× -54× -        @@ -200,10 +196,11 @@

pragma solidity ^0.8.20;   import "../../../../openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; import "../../../interfaces/ICCIPToken.sol"; abstract contract ERC20MintModule is ERC20Upgradeable, ICCIPMintERC20, AuthorizationModule { + // MintModule + bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); /** * @notice Emitted when the specified `value` amount of new tokens are created and * allocated to the specified `account`. @@ -259,13 +256,10 @@

if (bool(accounts.length != values.length)) { revert Errors.CMTAT_MintModule_AccountsValueslengthMismatch(); } -  - for (uint256 i = 0; i < accounts.length; ) { + // No need of unchecked block since Soliditiy 0.8.22 + for (uint256 i = 0; i < accounts.length; ++i ) { _mint(accounts[i], values[i]); emit Mint(accounts[i], values[i]); - unchecked { - ++i; - } } }   @@ -277,7 +271,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/wrapper/core/EnforcementModule.sol.html b/doc/general/test/coverage/contracts/modules/wrapper/core/EnforcementModule.sol.html index 04c7c7fa..d0f53140 100644 --- a/doc/general/test/coverage/contracts/modules/wrapper/core/EnforcementModule.sol.html +++ b/doc/general/test/coverage/contracts/modules/wrapper/core/EnforcementModule.sol.html @@ -97,7 +97,11 @@

52 53 54 -55  +55 +56 +57  +  +        @@ -167,6 +171,8 @@

EnforcementModuleInternal, AuthorizationModule { + // EnforcementModule + bytes32 public constant ENFORCER_ROLE = keccak256("ENFORCER_ROLE"); string internal constant TEXT_TRANSFER_REJECTED_FROM_FROZEN = "Address FROM is frozen";   @@ -211,7 +217,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/wrapper/core/PauseModule.sol.html b/doc/general/test/coverage/contracts/modules/wrapper/core/PauseModule.sol.html index a9f614b3..5d2f5fd8 100644 --- a/doc/general/test/coverage/contracts/modules/wrapper/core/PauseModule.sol.html +++ b/doc/general/test/coverage/contracts/modules/wrapper/core/PauseModule.sol.html @@ -126,7 +126,9 @@

81 82 83 -84  +84 +85  +        @@ -214,7 +216,6 @@

pragma solidity ^0.8.20;   import "../../../../openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol"; -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol";   /** @@ -228,6 +229,8 @@

* event of a large bug. */ abstract contract PauseModule is PausableUpgradeable, AuthorizationModule { + // PauseModule + bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); string internal constant TEXT_TRANSFER_REJECTED_PAUSED = "All transfers paused"; bool private isDeactivated; @@ -298,7 +301,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/wrapper/core/index.html b/doc/general/test/coverage/contracts/modules/wrapper/core/index.html index 370d1aa0..a7da88fb 100644 --- a/doc/general/test/coverage/contracts/modules/wrapper/core/index.html +++ b/doc/general/test/coverage/contracts/modules/wrapper/core/index.html @@ -37,7 +37,7 @@

100% Lines - 74/74 + 68/68
@@ -81,7 +81,7 @@

100% 5/5 100% - 19/19 + 17/17 @@ -94,7 +94,7 @@

100% 4/4 100% - 20/20 + 18/18 @@ -107,7 +107,7 @@

100% 3/3 100% - 11/11 + 9/9 @@ -142,7 +142,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol.html b/doc/general/test/coverage/contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol.html index 8a5d4012..75060568 100644 --- a/doc/general/test/coverage/contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol.html +++ b/doc/general/test/coverage/contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol.html @@ -124,7 +124,13 @@

79 80 81 -82  +82 +83 +84 +85  +  +  +        @@ -222,6 +228,9 @@

ContextUpgradeable, AuthorizationModule { + // CreditEvents + bytes32 public constant DEBT_CREDIT_EVENT_ROLE = + keccak256("DEBT_CREDIT_EVENT_ROLE"); CreditEvents public creditEvents;   /* Events */ @@ -292,7 +301,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol.html b/doc/general/test/coverage/contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol.html index 79629ed0..322d1741 100644 --- a/doc/general/test/coverage/contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol.html +++ b/doc/general/test/coverage/contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol.html @@ -274,7 +274,11 @@

229 230 231 -232  +232 +233 +234  +  +        @@ -522,6 +526,8 @@

ContextUpgradeable, AuthorizationModule { + // DebtModule + bytes32 public constant DEBT_ROLE = keccak256("DEBT_ROLE"); DebtBase public debt;   /* Events */ @@ -742,7 +748,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/wrapper/extensions/DebtModule/index.html b/doc/general/test/coverage/contracts/modules/wrapper/extensions/DebtModule/index.html index b57b4919..b75db962 100644 --- a/doc/general/test/coverage/contracts/modules/wrapper/extensions/DebtModule/index.html +++ b/doc/general/test/coverage/contracts/modules/wrapper/extensions/DebtModule/index.html @@ -90,7 +90,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol.html b/doc/general/test/coverage/contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol.html index ef56e98d..fe06161a 100644 --- a/doc/general/test/coverage/contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol.html +++ b/doc/general/test/coverage/contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol.html @@ -120,7 +120,9 @@

75 76 77 -78  +78 +79  +        @@ -201,7 +203,6 @@

  pragma solidity ^0.8.20;   -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; import "../../internal/ERC20SnapshotModuleInternal.sol";   @@ -215,6 +216,8 @@

ERC20SnapshotModuleInternal, AuthorizationModule { + // SnapshotModule + bytes32 public constant SNAPSHOOTER_ROLE = keccak256("SNAPSHOOTER_ROLE"); function __ERC20SnasphotModule_init_unchained() internal EonlyInitializing { // no variable to initialize } @@ -280,7 +283,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/wrapper/extensions/MetaTxModule.sol.html b/doc/general/test/coverage/contracts/modules/wrapper/extensions/MetaTxModule.sol.html index 516d8345..0d146d71 100644 --- a/doc/general/test/coverage/contracts/modules/wrapper/extensions/MetaTxModule.sol.html +++ b/doc/general/test/coverage/contracts/modules/wrapper/extensions/MetaTxModule.sol.html @@ -66,9 +66,7 @@

21 22 23 -24 -25  -  +24        @@ -96,7 +94,6 @@

pragma solidity ^0.8.20;   import "../../../../openzeppelin-contracts-upgradeable/contracts/metatx/ERC2771ContextUpgradeable.sol"; -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol";   /** * @dev Meta transaction (gasless) module. @@ -121,7 +118,7 @@

diff --git a/doc/general/test/coverage/contracts/modules/wrapper/extensions/index.html b/doc/general/test/coverage/contracts/modules/wrapper/extensions/index.html index b386ec88..9b3e8d2d 100644 --- a/doc/general/test/coverage/contracts/modules/wrapper/extensions/index.html +++ b/doc/general/test/coverage/contracts/modules/wrapper/extensions/index.html @@ -90,7 +90,7 @@

diff --git a/doc/general/test/coverage/contracts/test/proxy/CMTAT_PROXY.sol.html b/doc/general/test/coverage/contracts/test/proxy/CMTAT_PROXY.sol.html index a462c258..77a7b2e2 100644 --- a/doc/general/test/coverage/contracts/test/proxy/CMTAT_PROXY.sol.html +++ b/doc/general/test/coverage/contracts/test/proxy/CMTAT_PROXY.sol.html @@ -118,7 +118,7 @@

diff --git a/doc/general/test/coverage/contracts/test/proxy/index.html b/doc/general/test/coverage/contracts/test/proxy/index.html index 8e5a5676..c64aa1d2 100644 --- a/doc/general/test/coverage/contracts/test/proxy/index.html +++ b/doc/general/test/coverage/contracts/test/proxy/index.html @@ -77,7 +77,7 @@

diff --git a/doc/general/test/coverage/coverage-final.json b/doc/general/test/coverage/coverage-final.json index bd73ace1..bff140ad 100644 --- a/doc/general/test/coverage/coverage-final.json +++ b/doc/general/test/coverage/coverage-final.json @@ -1,9 +1,10 @@ { -"contracts/CMTAT_PROXY.sol":{"l":{"17":10},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/CMTAT_PROXY.sol","s":{"1":10},"b":{},"f":{"1":10},"fnMap":{"1":{"name":"constructor","line":15,"loc":{"start":{"line":13,"column":4},"end":{"line":18,"column":4}}}},"statementMap":{"1":{"start":{"line":17,"column":8},"end":{"line":17,"column":29}}},"branchMap":{}}, +"contracts/CMTAT_PROXY.sol":{"l":{"17":15},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/CMTAT_PROXY.sol","s":{"1":15},"b":{},"f":{"1":15},"fnMap":{"1":{"name":"constructor","line":15,"loc":{"start":{"line":13,"column":4},"end":{"line":18,"column":4}}}},"statementMap":{"1":{"start":{"line":17,"column":8},"end":{"line":17,"column":29}}},"branchMap":{}}, "contracts/CMTAT_STANDALONE.sol":{"l":{"38":189},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/CMTAT_STANDALONE.sol","s":{"1":189},"b":{},"f":{"1":189},"fnMap":{"1":{"name":"constructor","line":35,"loc":{"start":{"line":23,"column":4},"end":{"line":50,"column":4}}}},"statementMap":{"1":{"start":{"line":38,"column":8},"end":{"line":38,"column":1611}}},"branchMap":{}}, -"contracts/deployment/CMTAT_BEACON_FACTORY.sol":{"l":{"32":3,"33":3,"34":3,"54":2,"70":2,"71":2,"72":2,"73":2,"74":2,"82":1,"90":1},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/deployment/CMTAT_BEACON_FACTORY.sol","s":{"1":3,"2":3,"3":2,"4":2,"5":2,"6":1,"7":1},"b":{"1":[2,2]},"f":{"1":3,"2":2,"3":1,"4":1},"fnMap":{"1":{"name":"constructor","line":31,"loc":{"start":{"line":31,"column":4},"end":{"line":35,"column":4}}},"2":{"name":"deployCMTAT","line":53,"loc":{"start":{"line":41,"column":4},"end":{"line":75,"column":4}}},"3":{"name":"getAddress","line":81,"loc":{"start":{"line":81,"column":4},"end":{"line":83,"column":4}}},"4":{"name":"implementation","line":89,"loc":{"start":{"line":89,"column":4},"end":{"line":91,"column":4}}}},"statementMap":{"1":{"start":{"line":33,"column":8},"end":{"line":33,"column":51}},"2":{"start":{"line":34,"column":8},"end":{"line":34,"column":52}},"3":{"start":{"line":71,"column":8},"end":{"line":71,"column":50}},"4":{"start":{"line":73,"column":8},"end":{"line":73,"column":38}},"5":{"start":{"line":74,"column":8},"end":{"line":74,"column":20}},"6":{"start":{"line":82,"column":8},"end":{"line":82,"column":31}},"7":{"start":{"line":90,"column":8},"end":{"line":90,"column":38}}},"branchMap":{"1":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":13},"end":{"line":53,"column":13}},{"start":{"line":53,"column":13},"end":{"line":53,"column":13}}]}}}, -"contracts/deployment/CMTAT_TP_FACTORY.sol":{"l":{"28":3,"29":3,"30":3,"47":2,"64":2,"65":2,"66":2,"67":2,"68":2,"76":1},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/deployment/CMTAT_TP_FACTORY.sol","s":{"1":3,"2":3,"3":2,"4":2,"5":2,"6":1},"b":{"1":[2,2]},"f":{"1":3,"2":2,"3":1},"fnMap":{"1":{"name":"constructor","line":27,"loc":{"start":{"line":27,"column":4},"end":{"line":31,"column":4}}},"2":{"name":"deployCMTAT","line":46,"loc":{"start":{"line":33,"column":4},"end":{"line":69,"column":4}}},"3":{"name":"getAddress","line":75,"loc":{"start":{"line":75,"column":4},"end":{"line":77,"column":4}}}},"statementMap":{"1":{"start":{"line":29,"column":8},"end":{"line":29,"column":51}},"2":{"start":{"line":30,"column":8},"end":{"line":30,"column":52}},"3":{"start":{"line":65,"column":8},"end":{"line":65,"column":43}},"4":{"start":{"line":67,"column":8},"end":{"line":67,"column":38}},"5":{"start":{"line":68,"column":8},"end":{"line":68,"column":20}},"6":{"start":{"line":76,"column":8},"end":{"line":76,"column":31}}},"branchMap":{"1":{"line":46,"type":"if","locations":[{"start":{"line":46,"column":13},"end":{"line":46,"column":13}},{"start":{"line":46,"column":13},"end":{"line":46,"column":13}}]}}}, +"contracts/deployment/CMTAT_BEACON_FACTORY.sol":{"l":{"33":9,"34":2,"36":7,"37":2,"39":5,"40":2,"42":3,"43":3,"44":3,"64":2,"80":2,"81":2,"82":2,"83":2,"84":2,"92":1,"100":1},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/deployment/CMTAT_BEACON_FACTORY.sol","s":{"1":9,"2":7,"3":5,"4":3,"5":3,"6":2,"7":2,"8":2,"9":1,"10":1},"b":{"1":[2,7],"2":[2,5],"3":[2,3],"4":[2,2]},"f":{"1":9,"2":2,"3":1,"4":1},"fnMap":{"1":{"name":"constructor","line":32,"loc":{"start":{"line":32,"column":4},"end":{"line":45,"column":4}}},"2":{"name":"deployCMTAT","line":63,"loc":{"start":{"line":51,"column":4},"end":{"line":85,"column":4}}},"3":{"name":"getAddress","line":91,"loc":{"start":{"line":91,"column":4},"end":{"line":93,"column":4}}},"4":{"name":"implementation","line":99,"loc":{"start":{"line":99,"column":4},"end":{"line":101,"column":4}}}},"statementMap":{"1":{"start":{"line":33,"column":8},"end":{"line":33,"column":1058}},"2":{"start":{"line":36,"column":8},"end":{"line":36,"column":1196}},"3":{"start":{"line":39,"column":8},"end":{"line":39,"column":1332}},"4":{"start":{"line":43,"column":8},"end":{"line":43,"column":51}},"5":{"start":{"line":44,"column":8},"end":{"line":44,"column":52}},"6":{"start":{"line":81,"column":8},"end":{"line":81,"column":50}},"7":{"start":{"line":83,"column":8},"end":{"line":83,"column":38}},"8":{"start":{"line":84,"column":8},"end":{"line":84,"column":20}},"9":{"start":{"line":92,"column":8},"end":{"line":92,"column":31}},"10":{"start":{"line":100,"column":8},"end":{"line":100,"column":38}}},"branchMap":{"1":{"line":33,"type":"if","locations":[{"start":{"line":33,"column":8},"end":{"line":33,"column":8}},{"start":{"line":33,"column":8},"end":{"line":33,"column":8}}]},"2":{"line":36,"type":"if","locations":[{"start":{"line":36,"column":8},"end":{"line":36,"column":8}},{"start":{"line":36,"column":8},"end":{"line":36,"column":8}}]},"3":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":8},"end":{"line":39,"column":8}},{"start":{"line":39,"column":8},"end":{"line":39,"column":8}}]},"4":{"line":63,"type":"if","locations":[{"start":{"line":63,"column":13},"end":{"line":63,"column":13}},{"start":{"line":63,"column":13},"end":{"line":63,"column":13}}]}}}, +"contracts/deployment/CMTAT_TP_FACTORY.sol":{"l":{"30":7,"31":2,"33":5,"34":2,"36":3,"37":3,"38":3,"55":2,"72":2,"73":2,"74":2,"75":2,"76":2,"84":1},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/deployment/CMTAT_TP_FACTORY.sol","s":{"1":7,"2":5,"3":3,"4":3,"5":2,"6":2,"7":2,"8":1},"b":{"1":[2,5],"2":[2,3],"3":[2,2]},"f":{"1":7,"2":2,"3":1},"fnMap":{"1":{"name":"constructor","line":29,"loc":{"start":{"line":29,"column":4},"end":{"line":39,"column":4}}},"2":{"name":"deployCMTAT","line":54,"loc":{"start":{"line":41,"column":4},"end":{"line":77,"column":4}}},"3":{"name":"getAddress","line":83,"loc":{"start":{"line":83,"column":4},"end":{"line":85,"column":4}}}},"statementMap":{"1":{"start":{"line":30,"column":8},"end":{"line":30,"column":889}},"2":{"start":{"line":33,"column":8},"end":{"line":33,"column":1022}},"3":{"start":{"line":37,"column":8},"end":{"line":37,"column":51}},"4":{"start":{"line":38,"column":8},"end":{"line":38,"column":52}},"5":{"start":{"line":73,"column":8},"end":{"line":73,"column":43}},"6":{"start":{"line":75,"column":8},"end":{"line":75,"column":38}},"7":{"start":{"line":76,"column":8},"end":{"line":76,"column":20}},"8":{"start":{"line":84,"column":8},"end":{"line":84,"column":31}}},"branchMap":{"1":{"line":30,"type":"if","locations":[{"start":{"line":30,"column":8},"end":{"line":30,"column":8}},{"start":{"line":30,"column":8},"end":{"line":30,"column":8}}]},"2":{"line":33,"type":"if","locations":[{"start":{"line":33,"column":8},"end":{"line":33,"column":8}},{"start":{"line":33,"column":8},"end":{"line":33,"column":8}}]},"3":{"line":54,"type":"if","locations":[{"start":{"line":54,"column":13},"end":{"line":54,"column":13}},{"start":{"line":54,"column":13},"end":{"line":54,"column":13}}]}}}, "contracts/interfaces/draft-IERC1404/draft-IERC1404.sol":{"l":{},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}}, +"contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol":{"l":{},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}}, "contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol":{"l":{},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}}, "contracts/interfaces/engine/IAuthorizationEngine.sol":{"l":{},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/interfaces/engine/IAuthorizationEngine.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}}, "contracts/interfaces/engine/IRuleEngine.sol":{"l":{},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/interfaces/engine/IRuleEngine.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}}, @@ -11,21 +12,22 @@ "contracts/interfaces/ICMTATSnapshot.sol":{"l":{},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/interfaces/ICMTATSnapshot.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}}, "contracts/interfaces/IDebtGlobal.sol":{"l":{},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/interfaces/IDebtGlobal.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}}, "contracts/libraries/Errors.sol":{"l":{},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/libraries/Errors.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}}, +"contracts/libraries/FactoryErrors.sol":{"l":{},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/libraries/FactoryErrors.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}}, "contracts/modules/CMTAT_BASE.sol":{"l":{"70":387,"101":387,"102":387,"104":387,"106":387,"107":387,"110":387,"115":387,"116":387,"118":387,"122":387,"123":384,"124":384,"126":384,"127":384,"129":384,"130":384,"136":384,"140":384,"141":384,"142":384,"145":384,"162":2,"175":18,"190":10,"191":6,"203":464,"204":34,"211":430,"212":430,"225":1591,"234":1591,"246":0},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/CMTAT_BASE.sol","s":{"1":387,"2":387,"3":387,"4":387,"5":387,"6":387,"7":387,"8":387,"9":387,"10":387,"11":387,"12":384,"13":384,"14":384,"15":384,"16":384,"17":384,"18":384,"19":384,"20":384,"21":384,"22":384,"23":2,"24":18,"25":10,"26":6,"27":464,"28":430,"29":430,"30":1591,"31":1591,"32":0},"b":{"1":[387,2],"2":[387,0],"3":[384,0],"4":[34,430]},"f":{"1":387,"2":387,"3":384,"4":2,"5":18,"6":10,"7":464,"8":1591,"9":1591,"10":0},"fnMap":{"1":{"name":"initialize","line":69,"loc":{"start":{"line":58,"column":4},"end":{"line":82,"column":4}}},"2":{"name":"__CMTAT_init","line":98,"loc":{"start":{"line":87,"column":4},"end":{"line":146,"column":4}}},"3":{"name":"__CMTAT_init_unchained","line":148,"loc":{"start":{"line":148,"column":4},"end":{"line":150,"column":4}}},"4":{"name":"decimals","line":155,"loc":{"start":{"line":155,"column":4},"end":{"line":163,"column":4}}},"5":{"name":"transferFrom","line":165,"loc":{"start":{"line":165,"column":4},"end":{"line":176,"column":4}}},"6":{"name":"burnAndMint","line":189,"loc":{"start":{"line":189,"column":4},"end":{"line":192,"column":4}}},"7":{"name":"_update","line":198,"loc":{"start":{"line":198,"column":4},"end":{"line":213,"column":4}}},"8":{"name":"_msgSender","line":219,"loc":{"start":{"line":219,"column":4},"end":{"line":226,"column":4}}},"9":{"name":"_contextSuffixLength","line":231,"loc":{"start":{"line":231,"column":4},"end":{"line":235,"column":4}}},"10":{"name":"_msgData","line":240,"loc":{"start":{"line":240,"column":4},"end":{"line":247,"column":4}}}},"statementMap":{"1":{"start":{"line":70,"column":8},"end":{"line":70,"column":2538}},"2":{"start":{"line":101,"column":8},"end":{"line":101,"column":33}},"3":{"start":{"line":102,"column":8},"end":{"line":102,"column":65}},"4":{"start":{"line":104,"column":8},"end":{"line":104,"column":32}},"5":{"start":{"line":106,"column":8},"end":{"line":106,"column":39}},"6":{"start":{"line":107,"column":8},"end":{"line":107,"column":34}},"7":{"start":{"line":110,"column":8},"end":{"line":110,"column":37}},"8":{"start":{"line":115,"column":8},"end":{"line":115,"column":44}},"9":{"start":{"line":116,"column":8},"end":{"line":116,"column":39}},"10":{"start":{"line":118,"column":8},"end":{"line":118,"column":47}},"11":{"start":{"line":122,"column":8},"end":{"line":122,"column":82}},"12":{"start":{"line":123,"column":8},"end":{"line":123,"column":41}},"13":{"start":{"line":124,"column":8},"end":{"line":124,"column":41}},"14":{"start":{"line":126,"column":8},"end":{"line":126,"column":43}},"15":{"start":{"line":127,"column":8},"end":{"line":127,"column":60}},"16":{"start":{"line":129,"column":8},"end":{"line":129,"column":37}},"17":{"start":{"line":130,"column":8},"end":{"line":130,"column":42}},"18":{"start":{"line":136,"column":8},"end":{"line":136,"column":45}},"19":{"start":{"line":140,"column":8},"end":{"line":140,"column":40}},"20":{"start":{"line":141,"column":8},"end":{"line":141,"column":38}},"21":{"start":{"line":142,"column":8},"end":{"line":142,"column":67}},"22":{"start":{"line":145,"column":8},"end":{"line":145,"column":31}},"23":{"start":{"line":162,"column":8},"end":{"line":162,"column":41}},"24":{"start":{"line":175,"column":8},"end":{"line":175,"column":70}},"25":{"start":{"line":190,"column":8},"end":{"line":190,"column":39}},"26":{"start":{"line":191,"column":8},"end":{"line":191,"column":29}},"27":{"start":{"line":203,"column":8},"end":{"line":203,"column":6833}},"28":{"start":{"line":211,"column":8},"end":{"line":211,"column":60}},"29":{"start":{"line":212,"column":8},"end":{"line":212,"column":49}},"30":{"start":{"line":225,"column":8},"end":{"line":225,"column":53}},"31":{"start":{"line":234,"column":9},"end":{"line":234,"column":64}},"32":{"start":{"line":246,"column":8},"end":{"line":246,"column":51}}},"branchMap":{"1":{"line":69,"type":"if","locations":[{"start":{"line":69,"column":13},"end":{"line":69,"column":13}},{"start":{"line":69,"column":13},"end":{"line":69,"column":13}}]},"2":{"line":98,"type":"if","locations":[{"start":{"line":98,"column":15},"end":{"line":98,"column":15}},{"start":{"line":98,"column":15},"end":{"line":98,"column":15}}]},"3":{"line":148,"type":"if","locations":[{"start":{"line":148,"column":47},"end":{"line":148,"column":47}},{"start":{"line":148,"column":47},"end":{"line":148,"column":47}}]},"4":{"line":203,"type":"if","locations":[{"start":{"line":203,"column":8},"end":{"line":203,"column":8}},{"start":{"line":203,"column":8},"end":{"line":203,"column":8}}]}}}, -"contracts/modules/internal/base/SnapshotModuleBase.sol":{"l":{"75":2,"83":76,"85":76,"86":68,"91":68,"92":48,"95":20,"97":8,"100":8,"101":8,"102":12,"105":12,"106":12,"112":28,"122":176,"123":4,"129":172,"131":98,"134":98,"135":4,"141":4,"144":164,"145":164,"152":16,"153":4,"158":12,"160":12,"161":4,"164":8,"165":2,"167":6,"170":6,"171":10,"172":10,"173":10,"176":6,"178":8,"186":38,"187":4,"189":34,"190":4,"195":30,"196":4,"198":26,"199":26,"200":8,"202":18,"203":14,"204":14,"205":4,"211":4,"214":10,"215":6,"216":4,"222":6,"224":6,"232":18,"233":4,"235":14,"236":4,"239":10,"240":4,"242":6,"243":6,"253":16,"254":4,"256":12,"257":12,"258":4,"260":8,"261":16,"262":16,"263":16,"266":8,"294":1600,"296":1600,"297":1248,"299":352,"313":860,"314":860,"315":36,"316":36,"326":430,"330":430,"331":18,"332":18,"342":860,"343":852,"345":8,"356":50,"357":50,"359":50,"363":30,"367":10,"371":10,"384":498,"386":498,"390":412,"393":86,"394":86,"395":86,"396":116,"397":52,"398":52,"401":64,"403":52,"404":52,"407":86},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/internal/base/SnapshotModuleBase.sol","s":{"1":2,"2":76,"3":76,"4":68,"5":68,"6":48,"7":20,"8":8,"9":8,"10":28,"11":176,"12":172,"13":98,"14":98,"15":94,"16":164,"17":164,"18":16,"19":12,"20":12,"21":8,"22":2,"23":6,"24":6,"25":8,"26":38,"27":34,"28":30,"29":26,"30":26,"31":18,"32":14,"33":14,"34":10,"35":10,"36":6,"37":6,"38":18,"39":14,"40":10,"41":6,"42":6,"43":16,"44":12,"45":12,"46":8,"47":8,"48":1600,"49":1600,"50":1248,"51":352,"52":860,"53":860,"54":36,"55":36,"56":430,"57":430,"58":860,"59":852,"60":8,"61":50,"62":50,"63":50,"64":30,"65":20,"66":10,"67":10,"68":498,"69":498,"70":412,"71":86,"72":86,"73":116,"74":86},"b":{"1":[387,0],"2":[68,8],"3":[48,20],"4":[8,12],"5":[4,172],"6":[98,74],"7":[4,94],"8":[4,90],"9":[4,12],"10":[4,8],"11":[2,6],"12":[4,34],"13":[4,30],"14":[4,26],"15":[8,18],"16":[14,4],"17":[4,10],"18":[4,6],"19":[6,4],"20":[4,2],"21":[4,14],"22":[4,10],"23":[4,6],"24":[4,12],"25":[4,8],"26":[1248,352],"27":[36,824],"28":[18,412],"29":[852,8],"30":[30,20],"31":[10,10],"32":[412,86],"33":[412,0],"34":[52,64]},"f":{"1":387,"2":2,"3":76,"4":176,"5":16,"6":38,"7":18,"8":16,"9":1600,"10":860,"11":430,"12":860,"13":50,"14":498},"fnMap":{"1":{"name":"__SnapshotModuleBase_init_unchained","line":64,"loc":{"start":{"line":64,"column":4},"end":{"line":67,"column":4}}},"2":{"name":"getAllSnapshots","line":74,"loc":{"start":{"line":74,"column":4},"end":{"line":76,"column":4}}},"3":{"name":"getNextSnapshots","line":82,"loc":{"start":{"line":82,"column":4},"end":{"line":113,"column":4}}},"4":{"name":"_scheduleSnapshot","line":120,"loc":{"start":{"line":120,"column":4},"end":{"line":146,"column":4}}},"5":{"name":"_scheduleSnapshotNotOptimized","line":151,"loc":{"start":{"line":151,"column":4},"end":{"line":179,"column":4}}},"6":{"name":"_rescheduleSnapshot","line":184,"loc":{"start":{"line":184,"column":4},"end":{"line":225,"column":4}}},"7":{"name":"_unscheduleLastSnapshot","line":230,"loc":{"start":{"line":230,"column":4},"end":{"line":244,"column":4}}},"8":{"name":"_unscheduleSnapshotNotOptimized","line":252,"loc":{"start":{"line":252,"column":4},"end":{"line":267,"column":4}}},"9":{"name":"_valueAt","line":276,"loc":{"start":{"line":276,"column":4},"end":{"line":301,"column":4}}},"10":{"name":"_updateSnapshot","line":309,"loc":{"start":{"line":309,"column":4},"end":{"line":318,"column":4}}},"11":{"name":"_setCurrentSnapshot","line":325,"loc":{"start":{"line":325,"column":4},"end":{"line":334,"column":4}}},"12":{"name":"_lastSnapshot","line":339,"loc":{"start":{"line":339,"column":4},"end":{"line":347,"column":4}}},"13":{"name":"_findScheduledSnapshotIndex","line":353,"loc":{"start":{"line":353,"column":4},"end":{"line":373,"column":4}}},"14":{"name":"_findScheduledMostRecentPastSnapshot","line":379,"loc":{"start":{"line":379,"column":4},"end":{"line":408,"column":4}}}},"statementMap":{"1":{"start":{"line":75,"column":8},"end":{"line":75,"column":34}},"2":{"start":{"line":83,"column":8},"end":{"line":83,"column":65}},"3":{"start":{"line":85,"column":8},"end":{"line":85,"column":2651}},"4":{"start":{"line":86,"column":12},"end":{"line":86,"column":2747}},"5":{"start":{"line":91,"column":12},"end":{"line":91,"column":2910}},"6":{"start":{"line":92,"column":16},"end":{"line":92,"column":42}},"7":{"start":{"line":95,"column":16},"end":{"line":95,"column":3116}},"8":{"start":{"line":97,"column":20},"end":{"line":97,"column":3304}},"9":{"start":{"line":101,"column":20},"end":{"line":101,"column":3507}},"10":{"start":{"line":112,"column":8},"end":{"line":112,"column":36}},"11":{"start":{"line":122,"column":8},"end":{"line":122,"column":4147}},"12":{"start":{"line":129,"column":8},"end":{"line":129,"column":4341}},"13":{"start":{"line":131,"column":12},"end":{"line":131,"column":4450}},"14":{"start":{"line":134,"column":12},"end":{"line":134,"column":4571}},"15":{"start":{"line":140,"column":19},"end":{"line":140,"column":4824}},"16":{"start":{"line":144,"column":8},"end":{"line":144,"column":37}},"17":{"start":{"line":145,"column":8},"end":{"line":145,"column":38}},"18":{"start":{"line":152,"column":8},"end":{"line":152,"column":5184}},"19":{"start":{"line":158,"column":8},"end":{"line":158,"column":73}},"20":{"start":{"line":160,"column":8},"end":{"line":160,"column":5477}},"21":{"start":{"line":164,"column":8},"end":{"line":164,"column":5668}},"22":{"start":{"line":165,"column":12},"end":{"line":165,"column":41}},"23":{"start":{"line":167,"column":12},"end":{"line":167,"column":5788}},"24":{"start":{"line":170,"column":12},"end":{"line":170,"column":5909}},"25":{"start":{"line":178,"column":8},"end":{"line":178,"column":38}},"26":{"start":{"line":186,"column":8},"end":{"line":186,"column":6467}},"27":{"start":{"line":189,"column":8},"end":{"line":189,"column":6589}},"28":{"start":{"line":195,"column":8},"end":{"line":195,"column":6788}},"29":{"start":{"line":198,"column":8},"end":{"line":198,"column":77}},"30":{"start":{"line":199,"column":8},"end":{"line":199,"column":6994}},"31":{"start":{"line":202,"column":8},"end":{"line":202,"column":7096}},"32":{"start":{"line":203,"column":12},"end":{"line":203,"column":69}},"33":{"start":{"line":204,"column":12},"end":{"line":204,"column":7229}},"34":{"start":{"line":210,"column":19},"end":{"line":210,"column":7487}},"35":{"start":{"line":214,"column":8},"end":{"line":214,"column":7626}},"36":{"start":{"line":215,"column":12},"end":{"line":215,"column":7668}},"37":{"start":{"line":224,"column":8},"end":{"line":224,"column":47}},"38":{"start":{"line":232,"column":8},"end":{"line":232,"column":8244}},"39":{"start":{"line":235,"column":8},"end":{"line":235,"column":8363}},"40":{"start":{"line":239,"column":8},"end":{"line":239,"column":8561}},"41":{"start":{"line":242,"column":8},"end":{"line":242,"column":32}},"42":{"start":{"line":243,"column":8},"end":{"line":243,"column":37}},"43":{"start":{"line":253,"column":8},"end":{"line":253,"column":9115}},"44":{"start":{"line":256,"column":8},"end":{"line":256,"column":73}},"45":{"start":{"line":257,"column":8},"end":{"line":257,"column":9309}},"46":{"start":{"line":260,"column":8},"end":{"line":260,"column":9410}},"47":{"start":{"line":266,"column":8},"end":{"line":266,"column":32}},"48":{"start":{"line":294,"column":8},"end":{"line":294,"column":58}},"49":{"start":{"line":296,"column":8},"end":{"line":296,"column":11286}},"50":{"start":{"line":297,"column":12},"end":{"line":297,"column":29}},"51":{"start":{"line":299,"column":12},"end":{"line":299,"column":50}},"52":{"start":{"line":313,"column":8},"end":{"line":313,"column":46}},"53":{"start":{"line":314,"column":8},"end":{"line":314,"column":11843}},"54":{"start":{"line":315,"column":12},"end":{"line":315,"column":38}},"55":{"start":{"line":316,"column":12},"end":{"line":316,"column":46}},"56":{"start":{"line":326,"column":8},"end":{"line":326,"column":12254}},"57":{"start":{"line":330,"column":8},"end":{"line":330,"column":12358}},"58":{"start":{"line":342,"column":8},"end":{"line":342,"column":12708}},"59":{"start":{"line":343,"column":12},"end":{"line":343,"column":20}},"60":{"start":{"line":345,"column":12},"end":{"line":345,"column":38}},"61":{"start":{"line":356,"column":8},"end":{"line":356,"column":69}},"62":{"start":{"line":357,"column":8},"end":{"line":357,"column":70}},"63":{"start":{"line":359,"column":8},"end":{"line":359,"column":13255}},"64":{"start":{"line":363,"column":12},"end":{"line":363,"column":37}},"65":{"start":{"line":366,"column":13},"end":{"line":366,"column":13470}},"66":{"start":{"line":367,"column":12},"end":{"line":367,"column":38}},"67":{"start":{"line":371,"column":12},"end":{"line":371,"column":53}},"68":{"start":{"line":384,"column":8},"end":{"line":384,"column":61}},"69":{"start":{"line":386,"column":8},"end":{"line":386,"column":14106}},"70":{"start":{"line":390,"column":12},"end":{"line":390,"column":40}},"71":{"start":{"line":393,"column":8},"end":{"line":393,"column":26}},"72":{"start":{"line":395,"column":8},"end":{"line":395,"column":14408}},"73":{"start":{"line":396,"column":12},"end":{"line":396,"column":14490}},"74":{"start":{"line":407,"column":8},"end":{"line":407,"column":34}}},"branchMap":{"1":{"line":64,"type":"if","locations":[{"start":{"line":64,"column":60},"end":{"line":64,"column":60}},{"start":{"line":64,"column":60},"end":{"line":64,"column":60}}]},"2":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":8},"end":{"line":85,"column":8}},{"start":{"line":85,"column":8},"end":{"line":85,"column":8}}]},"3":{"line":91,"type":"if","locations":[{"start":{"line":91,"column":12},"end":{"line":91,"column":12}},{"start":{"line":91,"column":12},"end":{"line":91,"column":12}}]},"4":{"line":95,"type":"if","locations":[{"start":{"line":95,"column":16},"end":{"line":95,"column":16}},{"start":{"line":95,"column":16},"end":{"line":95,"column":16}}]},"5":{"line":122,"type":"if","locations":[{"start":{"line":122,"column":8},"end":{"line":122,"column":8}},{"start":{"line":122,"column":8},"end":{"line":122,"column":8}}]},"6":{"line":129,"type":"if","locations":[{"start":{"line":129,"column":8},"end":{"line":129,"column":8}},{"start":{"line":129,"column":8},"end":{"line":129,"column":8}}]},"7":{"line":134,"type":"if","locations":[{"start":{"line":134,"column":12},"end":{"line":134,"column":12}},{"start":{"line":134,"column":12},"end":{"line":134,"column":12}}]},"8":{"line":140,"type":"if","locations":[{"start":{"line":140,"column":19},"end":{"line":140,"column":19}},{"start":{"line":140,"column":19},"end":{"line":140,"column":19}}]},"9":{"line":152,"type":"if","locations":[{"start":{"line":152,"column":8},"end":{"line":152,"column":8}},{"start":{"line":152,"column":8},"end":{"line":152,"column":8}}]},"10":{"line":160,"type":"if","locations":[{"start":{"line":160,"column":8},"end":{"line":160,"column":8}},{"start":{"line":160,"column":8},"end":{"line":160,"column":8}}]},"11":{"line":164,"type":"if","locations":[{"start":{"line":164,"column":8},"end":{"line":164,"column":8}},{"start":{"line":164,"column":8},"end":{"line":164,"column":8}}]},"12":{"line":186,"type":"if","locations":[{"start":{"line":186,"column":8},"end":{"line":186,"column":8}},{"start":{"line":186,"column":8},"end":{"line":186,"column":8}}]},"13":{"line":189,"type":"if","locations":[{"start":{"line":189,"column":8},"end":{"line":189,"column":8}},{"start":{"line":189,"column":8},"end":{"line":189,"column":8}}]},"14":{"line":195,"type":"if","locations":[{"start":{"line":195,"column":8},"end":{"line":195,"column":8}},{"start":{"line":195,"column":8},"end":{"line":195,"column":8}}]},"15":{"line":199,"type":"if","locations":[{"start":{"line":199,"column":8},"end":{"line":199,"column":8}},{"start":{"line":199,"column":8},"end":{"line":199,"column":8}}]},"16":{"line":202,"type":"if","locations":[{"start":{"line":202,"column":8},"end":{"line":202,"column":8}},{"start":{"line":202,"column":8},"end":{"line":202,"column":8}}]},"17":{"line":204,"type":"if","locations":[{"start":{"line":204,"column":12},"end":{"line":204,"column":12}},{"start":{"line":204,"column":12},"end":{"line":204,"column":12}}]},"18":{"line":210,"type":"if","locations":[{"start":{"line":210,"column":19},"end":{"line":210,"column":19}},{"start":{"line":210,"column":19},"end":{"line":210,"column":19}}]},"19":{"line":214,"type":"if","locations":[{"start":{"line":214,"column":8},"end":{"line":214,"column":8}},{"start":{"line":214,"column":8},"end":{"line":214,"column":8}}]},"20":{"line":215,"type":"if","locations":[{"start":{"line":215,"column":12},"end":{"line":215,"column":12}},{"start":{"line":215,"column":12},"end":{"line":215,"column":12}}]},"21":{"line":232,"type":"if","locations":[{"start":{"line":232,"column":8},"end":{"line":232,"column":8}},{"start":{"line":232,"column":8},"end":{"line":232,"column":8}}]},"22":{"line":235,"type":"if","locations":[{"start":{"line":235,"column":8},"end":{"line":235,"column":8}},{"start":{"line":235,"column":8},"end":{"line":235,"column":8}}]},"23":{"line":239,"type":"if","locations":[{"start":{"line":239,"column":8},"end":{"line":239,"column":8}},{"start":{"line":239,"column":8},"end":{"line":239,"column":8}}]},"24":{"line":253,"type":"if","locations":[{"start":{"line":253,"column":8},"end":{"line":253,"column":8}},{"start":{"line":253,"column":8},"end":{"line":253,"column":8}}]},"25":{"line":257,"type":"if","locations":[{"start":{"line":257,"column":8},"end":{"line":257,"column":8}},{"start":{"line":257,"column":8},"end":{"line":257,"column":8}}]},"26":{"line":296,"type":"if","locations":[{"start":{"line":296,"column":8},"end":{"line":296,"column":8}},{"start":{"line":296,"column":8},"end":{"line":296,"column":8}}]},"27":{"line":314,"type":"if","locations":[{"start":{"line":314,"column":8},"end":{"line":314,"column":8}},{"start":{"line":314,"column":8},"end":{"line":314,"column":8}}]},"28":{"line":330,"type":"if","locations":[{"start":{"line":330,"column":8},"end":{"line":330,"column":8}},{"start":{"line":330,"column":8},"end":{"line":330,"column":8}}]},"29":{"line":342,"type":"if","locations":[{"start":{"line":342,"column":8},"end":{"line":342,"column":8}},{"start":{"line":342,"column":8},"end":{"line":342,"column":8}}]},"30":{"line":359,"type":"if","locations":[{"start":{"line":359,"column":8},"end":{"line":359,"column":8}},{"start":{"line":359,"column":8},"end":{"line":359,"column":8}}]},"31":{"line":366,"type":"if","locations":[{"start":{"line":366,"column":13},"end":{"line":366,"column":13}},{"start":{"line":366,"column":13},"end":{"line":366,"column":13}}]},"32":{"line":386,"type":"if","locations":[{"start":{"line":386,"column":8},"end":{"line":386,"column":8}},{"start":{"line":386,"column":8},"end":{"line":386,"column":8}}]},"33":{"line":387,"type":"cond-expr","locations":[{"start":{"line":387,"column":12},"end":{"line":387,"column":32}},{"start":{"line":388,"column":12},"end":{"line":388,"column":75}}]},"34":{"line":396,"type":"if","locations":[{"start":{"line":396,"column":12},"end":{"line":396,"column":12}},{"start":{"line":396,"column":12},"end":{"line":396,"column":12}}]}}}, +"contracts/modules/internal/base/SnapshotModuleBase.sol":{"l":{"75":2,"83":76,"85":76,"86":68,"91":68,"92":48,"95":20,"97":8,"100":8,"102":8,"103":12,"110":28,"120":176,"121":4,"127":172,"129":98,"132":98,"133":4,"139":4,"142":164,"143":164,"150":16,"151":4,"156":12,"158":12,"159":4,"162":8,"163":2,"165":6,"168":6,"169":10,"170":10,"171":10,"174":6,"176":8,"184":38,"185":4,"187":34,"188":4,"193":30,"194":4,"196":26,"197":26,"198":8,"200":18,"201":14,"202":14,"203":4,"209":4,"212":10,"213":6,"214":4,"220":6,"222":6,"230":18,"231":4,"233":14,"234":4,"237":10,"238":4,"240":6,"241":6,"251":16,"252":4,"254":12,"255":12,"256":4,"259":8,"260":16,"262":8,"290":1920,"292":1920,"293":1484,"295":436,"309":860,"310":860,"311":36,"312":36,"322":430,"326":430,"327":18,"328":18,"338":860,"339":852,"341":8,"352":50,"353":50,"355":50,"359":30,"363":10,"367":10,"380":498,"382":498,"386":412,"389":86,"390":86,"392":86,"393":116,"394":52,"395":52,"398":64,"401":86},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/internal/base/SnapshotModuleBase.sol","s":{"1":2,"2":76,"3":76,"4":68,"5":68,"6":48,"7":20,"8":8,"9":8,"10":28,"11":176,"12":172,"13":98,"14":98,"15":94,"16":164,"17":164,"18":16,"19":12,"20":12,"21":8,"22":2,"23":6,"24":6,"25":8,"26":38,"27":34,"28":30,"29":26,"30":26,"31":18,"32":14,"33":14,"34":10,"35":10,"36":6,"37":6,"38":18,"39":14,"40":10,"41":6,"42":6,"43":16,"44":12,"45":12,"46":8,"47":8,"48":1920,"49":1920,"50":1484,"51":436,"52":860,"53":860,"54":36,"55":36,"56":430,"57":430,"58":860,"59":852,"60":8,"61":50,"62":50,"63":50,"64":30,"65":20,"66":10,"67":10,"68":498,"69":498,"70":412,"71":86,"72":86,"73":116,"74":86},"b":{"1":[387,0],"2":[68,8],"3":[48,20],"4":[8,12],"5":[4,172],"6":[98,74],"7":[4,94],"8":[4,90],"9":[4,12],"10":[4,8],"11":[2,6],"12":[4,34],"13":[4,30],"14":[4,26],"15":[8,18],"16":[14,4],"17":[4,10],"18":[4,6],"19":[6,4],"20":[4,2],"21":[4,14],"22":[4,10],"23":[4,6],"24":[4,12],"25":[4,8],"26":[1484,436],"27":[36,824],"28":[18,412],"29":[852,8],"30":[30,20],"31":[10,10],"32":[412,86],"33":[412,0],"34":[52,64]},"f":{"1":387,"2":2,"3":76,"4":176,"5":16,"6":38,"7":18,"8":16,"9":1920,"10":860,"11":430,"12":860,"13":50,"14":498},"fnMap":{"1":{"name":"__SnapshotModuleBase_init_unchained","line":64,"loc":{"start":{"line":64,"column":4},"end":{"line":67,"column":4}}},"2":{"name":"getAllSnapshots","line":74,"loc":{"start":{"line":74,"column":4},"end":{"line":76,"column":4}}},"3":{"name":"getNextSnapshots","line":82,"loc":{"start":{"line":82,"column":4},"end":{"line":111,"column":4}}},"4":{"name":"_scheduleSnapshot","line":118,"loc":{"start":{"line":118,"column":4},"end":{"line":144,"column":4}}},"5":{"name":"_scheduleSnapshotNotOptimized","line":149,"loc":{"start":{"line":149,"column":4},"end":{"line":177,"column":4}}},"6":{"name":"_rescheduleSnapshot","line":182,"loc":{"start":{"line":182,"column":4},"end":{"line":223,"column":4}}},"7":{"name":"_unscheduleLastSnapshot","line":228,"loc":{"start":{"line":228,"column":4},"end":{"line":242,"column":4}}},"8":{"name":"_unscheduleSnapshotNotOptimized","line":250,"loc":{"start":{"line":250,"column":4},"end":{"line":263,"column":4}}},"9":{"name":"_valueAt","line":272,"loc":{"start":{"line":272,"column":4},"end":{"line":297,"column":4}}},"10":{"name":"_updateSnapshot","line":305,"loc":{"start":{"line":305,"column":4},"end":{"line":314,"column":4}}},"11":{"name":"_setCurrentSnapshot","line":321,"loc":{"start":{"line":321,"column":4},"end":{"line":330,"column":4}}},"12":{"name":"_lastSnapshot","line":335,"loc":{"start":{"line":335,"column":4},"end":{"line":343,"column":4}}},"13":{"name":"_findScheduledSnapshotIndex","line":349,"loc":{"start":{"line":349,"column":4},"end":{"line":369,"column":4}}},"14":{"name":"_findScheduledMostRecentPastSnapshot","line":375,"loc":{"start":{"line":375,"column":4},"end":{"line":402,"column":4}}}},"statementMap":{"1":{"start":{"line":75,"column":8},"end":{"line":75,"column":34}},"2":{"start":{"line":83,"column":8},"end":{"line":83,"column":65}},"3":{"start":{"line":85,"column":8},"end":{"line":85,"column":2651}},"4":{"start":{"line":86,"column":12},"end":{"line":86,"column":2747}},"5":{"start":{"line":91,"column":12},"end":{"line":91,"column":2910}},"6":{"start":{"line":92,"column":16},"end":{"line":92,"column":42}},"7":{"start":{"line":95,"column":16},"end":{"line":95,"column":3116}},"8":{"start":{"line":97,"column":20},"end":{"line":97,"column":3304}},"9":{"start":{"line":102,"column":20},"end":{"line":102,"column":3580}},"10":{"start":{"line":110,"column":8},"end":{"line":110,"column":36}},"11":{"start":{"line":120,"column":8},"end":{"line":120,"column":4128}},"12":{"start":{"line":127,"column":8},"end":{"line":127,"column":4322}},"13":{"start":{"line":129,"column":12},"end":{"line":129,"column":4431}},"14":{"start":{"line":132,"column":12},"end":{"line":132,"column":4552}},"15":{"start":{"line":138,"column":19},"end":{"line":138,"column":4805}},"16":{"start":{"line":142,"column":8},"end":{"line":142,"column":37}},"17":{"start":{"line":143,"column":8},"end":{"line":143,"column":38}},"18":{"start":{"line":150,"column":8},"end":{"line":150,"column":5165}},"19":{"start":{"line":156,"column":8},"end":{"line":156,"column":73}},"20":{"start":{"line":158,"column":8},"end":{"line":158,"column":5458}},"21":{"start":{"line":162,"column":8},"end":{"line":162,"column":5649}},"22":{"start":{"line":163,"column":12},"end":{"line":163,"column":41}},"23":{"start":{"line":165,"column":12},"end":{"line":165,"column":5769}},"24":{"start":{"line":168,"column":12},"end":{"line":168,"column":5890}},"25":{"start":{"line":176,"column":8},"end":{"line":176,"column":38}},"26":{"start":{"line":184,"column":8},"end":{"line":184,"column":6448}},"27":{"start":{"line":187,"column":8},"end":{"line":187,"column":6570}},"28":{"start":{"line":193,"column":8},"end":{"line":193,"column":6769}},"29":{"start":{"line":196,"column":8},"end":{"line":196,"column":77}},"30":{"start":{"line":197,"column":8},"end":{"line":197,"column":6975}},"31":{"start":{"line":200,"column":8},"end":{"line":200,"column":7077}},"32":{"start":{"line":201,"column":12},"end":{"line":201,"column":69}},"33":{"start":{"line":202,"column":12},"end":{"line":202,"column":7210}},"34":{"start":{"line":208,"column":19},"end":{"line":208,"column":7468}},"35":{"start":{"line":212,"column":8},"end":{"line":212,"column":7607}},"36":{"start":{"line":213,"column":12},"end":{"line":213,"column":7649}},"37":{"start":{"line":222,"column":8},"end":{"line":222,"column":47}},"38":{"start":{"line":230,"column":8},"end":{"line":230,"column":8225}},"39":{"start":{"line":233,"column":8},"end":{"line":233,"column":8344}},"40":{"start":{"line":237,"column":8},"end":{"line":237,"column":8542}},"41":{"start":{"line":240,"column":8},"end":{"line":240,"column":32}},"42":{"start":{"line":241,"column":8},"end":{"line":241,"column":37}},"43":{"start":{"line":251,"column":8},"end":{"line":251,"column":9096}},"44":{"start":{"line":254,"column":8},"end":{"line":254,"column":73}},"45":{"start":{"line":255,"column":8},"end":{"line":255,"column":9290}},"46":{"start":{"line":259,"column":8},"end":{"line":259,"column":9452}},"47":{"start":{"line":262,"column":8},"end":{"line":262,"column":32}},"48":{"start":{"line":290,"column":8},"end":{"line":290,"column":58}},"49":{"start":{"line":292,"column":8},"end":{"line":292,"column":11273}},"50":{"start":{"line":293,"column":12},"end":{"line":293,"column":29}},"51":{"start":{"line":295,"column":12},"end":{"line":295,"column":50}},"52":{"start":{"line":309,"column":8},"end":{"line":309,"column":46}},"53":{"start":{"line":310,"column":8},"end":{"line":310,"column":11830}},"54":{"start":{"line":311,"column":12},"end":{"line":311,"column":38}},"55":{"start":{"line":312,"column":12},"end":{"line":312,"column":46}},"56":{"start":{"line":322,"column":8},"end":{"line":322,"column":12241}},"57":{"start":{"line":326,"column":8},"end":{"line":326,"column":12345}},"58":{"start":{"line":338,"column":8},"end":{"line":338,"column":12695}},"59":{"start":{"line":339,"column":12},"end":{"line":339,"column":20}},"60":{"start":{"line":341,"column":12},"end":{"line":341,"column":38}},"61":{"start":{"line":352,"column":8},"end":{"line":352,"column":69}},"62":{"start":{"line":353,"column":8},"end":{"line":353,"column":70}},"63":{"start":{"line":355,"column":8},"end":{"line":355,"column":13242}},"64":{"start":{"line":359,"column":12},"end":{"line":359,"column":37}},"65":{"start":{"line":362,"column":13},"end":{"line":362,"column":13457}},"66":{"start":{"line":363,"column":12},"end":{"line":363,"column":38}},"67":{"start":{"line":367,"column":12},"end":{"line":367,"column":53}},"68":{"start":{"line":380,"column":8},"end":{"line":380,"column":61}},"69":{"start":{"line":382,"column":8},"end":{"line":382,"column":14093}},"70":{"start":{"line":386,"column":12},"end":{"line":386,"column":40}},"71":{"start":{"line":389,"column":8},"end":{"line":389,"column":26}},"72":{"start":{"line":392,"column":8},"end":{"line":392,"column":14456}},"73":{"start":{"line":393,"column":12},"end":{"line":393,"column":14542}},"74":{"start":{"line":401,"column":8},"end":{"line":401,"column":34}}},"branchMap":{"1":{"line":64,"type":"if","locations":[{"start":{"line":64,"column":60},"end":{"line":64,"column":60}},{"start":{"line":64,"column":60},"end":{"line":64,"column":60}}]},"2":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":8},"end":{"line":85,"column":8}},{"start":{"line":85,"column":8},"end":{"line":85,"column":8}}]},"3":{"line":91,"type":"if","locations":[{"start":{"line":91,"column":12},"end":{"line":91,"column":12}},{"start":{"line":91,"column":12},"end":{"line":91,"column":12}}]},"4":{"line":95,"type":"if","locations":[{"start":{"line":95,"column":16},"end":{"line":95,"column":16}},{"start":{"line":95,"column":16},"end":{"line":95,"column":16}}]},"5":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":8},"end":{"line":120,"column":8}},{"start":{"line":120,"column":8},"end":{"line":120,"column":8}}]},"6":{"line":127,"type":"if","locations":[{"start":{"line":127,"column":8},"end":{"line":127,"column":8}},{"start":{"line":127,"column":8},"end":{"line":127,"column":8}}]},"7":{"line":132,"type":"if","locations":[{"start":{"line":132,"column":12},"end":{"line":132,"column":12}},{"start":{"line":132,"column":12},"end":{"line":132,"column":12}}]},"8":{"line":138,"type":"if","locations":[{"start":{"line":138,"column":19},"end":{"line":138,"column":19}},{"start":{"line":138,"column":19},"end":{"line":138,"column":19}}]},"9":{"line":150,"type":"if","locations":[{"start":{"line":150,"column":8},"end":{"line":150,"column":8}},{"start":{"line":150,"column":8},"end":{"line":150,"column":8}}]},"10":{"line":158,"type":"if","locations":[{"start":{"line":158,"column":8},"end":{"line":158,"column":8}},{"start":{"line":158,"column":8},"end":{"line":158,"column":8}}]},"11":{"line":162,"type":"if","locations":[{"start":{"line":162,"column":8},"end":{"line":162,"column":8}},{"start":{"line":162,"column":8},"end":{"line":162,"column":8}}]},"12":{"line":184,"type":"if","locations":[{"start":{"line":184,"column":8},"end":{"line":184,"column":8}},{"start":{"line":184,"column":8},"end":{"line":184,"column":8}}]},"13":{"line":187,"type":"if","locations":[{"start":{"line":187,"column":8},"end":{"line":187,"column":8}},{"start":{"line":187,"column":8},"end":{"line":187,"column":8}}]},"14":{"line":193,"type":"if","locations":[{"start":{"line":193,"column":8},"end":{"line":193,"column":8}},{"start":{"line":193,"column":8},"end":{"line":193,"column":8}}]},"15":{"line":197,"type":"if","locations":[{"start":{"line":197,"column":8},"end":{"line":197,"column":8}},{"start":{"line":197,"column":8},"end":{"line":197,"column":8}}]},"16":{"line":200,"type":"if","locations":[{"start":{"line":200,"column":8},"end":{"line":200,"column":8}},{"start":{"line":200,"column":8},"end":{"line":200,"column":8}}]},"17":{"line":202,"type":"if","locations":[{"start":{"line":202,"column":12},"end":{"line":202,"column":12}},{"start":{"line":202,"column":12},"end":{"line":202,"column":12}}]},"18":{"line":208,"type":"if","locations":[{"start":{"line":208,"column":19},"end":{"line":208,"column":19}},{"start":{"line":208,"column":19},"end":{"line":208,"column":19}}]},"19":{"line":212,"type":"if","locations":[{"start":{"line":212,"column":8},"end":{"line":212,"column":8}},{"start":{"line":212,"column":8},"end":{"line":212,"column":8}}]},"20":{"line":213,"type":"if","locations":[{"start":{"line":213,"column":12},"end":{"line":213,"column":12}},{"start":{"line":213,"column":12},"end":{"line":213,"column":12}}]},"21":{"line":230,"type":"if","locations":[{"start":{"line":230,"column":8},"end":{"line":230,"column":8}},{"start":{"line":230,"column":8},"end":{"line":230,"column":8}}]},"22":{"line":233,"type":"if","locations":[{"start":{"line":233,"column":8},"end":{"line":233,"column":8}},{"start":{"line":233,"column":8},"end":{"line":233,"column":8}}]},"23":{"line":237,"type":"if","locations":[{"start":{"line":237,"column":8},"end":{"line":237,"column":8}},{"start":{"line":237,"column":8},"end":{"line":237,"column":8}}]},"24":{"line":251,"type":"if","locations":[{"start":{"line":251,"column":8},"end":{"line":251,"column":8}},{"start":{"line":251,"column":8},"end":{"line":251,"column":8}}]},"25":{"line":255,"type":"if","locations":[{"start":{"line":255,"column":8},"end":{"line":255,"column":8}},{"start":{"line":255,"column":8},"end":{"line":255,"column":8}}]},"26":{"line":292,"type":"if","locations":[{"start":{"line":292,"column":8},"end":{"line":292,"column":8}},{"start":{"line":292,"column":8},"end":{"line":292,"column":8}}]},"27":{"line":310,"type":"if","locations":[{"start":{"line":310,"column":8},"end":{"line":310,"column":8}},{"start":{"line":310,"column":8},"end":{"line":310,"column":8}}]},"28":{"line":326,"type":"if","locations":[{"start":{"line":326,"column":8},"end":{"line":326,"column":8}},{"start":{"line":326,"column":8},"end":{"line":326,"column":8}}]},"29":{"line":338,"type":"if","locations":[{"start":{"line":338,"column":8},"end":{"line":338,"column":8}},{"start":{"line":338,"column":8},"end":{"line":338,"column":8}}]},"30":{"line":355,"type":"if","locations":[{"start":{"line":355,"column":8},"end":{"line":355,"column":8}},{"start":{"line":355,"column":8},"end":{"line":355,"column":8}}]},"31":{"line":362,"type":"if","locations":[{"start":{"line":362,"column":13},"end":{"line":362,"column":13}},{"start":{"line":362,"column":13},"end":{"line":362,"column":13}}]},"32":{"line":382,"type":"if","locations":[{"start":{"line":382,"column":8},"end":{"line":382,"column":8}},{"start":{"line":382,"column":8},"end":{"line":382,"column":8}}]},"33":{"line":383,"type":"cond-expr","locations":[{"start":{"line":383,"column":12},"end":{"line":383,"column":32}},{"start":{"line":384,"column":12},"end":{"line":384,"column":75}}]},"34":{"line":393,"type":"if","locations":[{"start":{"line":393,"column":12},"end":{"line":393,"column":12}},{"start":{"line":393,"column":12},"end":{"line":393,"column":12}}]}}}, "contracts/modules/internal/EnforcementModuleInternal.sol":{"l":{"48":974,"61":22,"62":2,"64":20,"65":20,"66":20,"78":8,"79":2,"81":6,"82":6,"84":6},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/internal/EnforcementModuleInternal.sol","s":{"1":974,"2":22,"3":2,"4":20,"5":20,"6":8,"7":2,"8":6,"9":6},"b":{"1":[387,0],"2":[2,20],"3":[2,6]},"f":{"1":387,"2":974,"3":22,"4":8},"fnMap":{"1":{"name":"__Enforcement_init_unchained","line":40,"loc":{"start":{"line":40,"column":4},"end":{"line":42,"column":4}}},"2":{"name":"frozen","line":47,"loc":{"start":{"line":47,"column":4},"end":{"line":49,"column":4}}},"3":{"name":"_freeze","line":57,"loc":{"start":{"line":57,"column":4},"end":{"line":67,"column":4}}},"4":{"name":"_unfreeze","line":74,"loc":{"start":{"line":74,"column":4},"end":{"line":85,"column":4}}}},"statementMap":{"1":{"start":{"line":48,"column":8},"end":{"line":48,"column":31}},"2":{"start":{"line":61,"column":8},"end":{"line":61,"column":1634}},"3":{"start":{"line":62,"column":12},"end":{"line":62,"column":24}},"4":{"start":{"line":65,"column":8},"end":{"line":65,"column":58}},"5":{"start":{"line":66,"column":8},"end":{"line":66,"column":19}},"6":{"start":{"line":78,"column":8},"end":{"line":78,"column":2099}},"7":{"start":{"line":79,"column":12},"end":{"line":79,"column":24}},"8":{"start":{"line":82,"column":8},"end":{"line":82,"column":60}},"9":{"start":{"line":84,"column":8},"end":{"line":84,"column":19}}},"branchMap":{"1":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":53},"end":{"line":40,"column":53}},{"start":{"line":40,"column":53},"end":{"line":40,"column":53}}]},"2":{"line":61,"type":"if","locations":[{"start":{"line":61,"column":8},"end":{"line":61,"column":8}},{"start":{"line":61,"column":8},"end":{"line":61,"column":8}}]},"3":{"line":78,"type":"if","locations":[{"start":{"line":78,"column":8},"end":{"line":78,"column":8}},{"start":{"line":78,"column":8},"end":{"line":78,"column":8}}]}}}, -"contracts/modules/internal/ERC20SnapshotModuleInternal.sol":{"l":{"42":480,"43":480,"51":80,"52":80,"53":240,"55":80,"66":960,"71":960,"80":640,"84":640,"96":430,"97":430,"99":99,"100":99,"102":55,"105":44,"109":331,"110":331,"118":485,"125":375},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/internal/ERC20SnapshotModuleInternal.sol","s":{"1":80,"2":960,"3":960,"4":640,"5":640,"6":430,"7":430,"8":99,"9":99,"10":55,"11":44,"12":331,"13":331,"14":485,"15":375},"b":{"1":[387,0],"2":[320,640],"3":[32,608],"4":[99,331],"5":[55,44]},"f":{"1":387,"2":480,"3":80,"4":960,"5":640,"6":430,"7":485,"8":375},"fnMap":{"1":{"name":"__ERC20Snapshot_init_unchained","line":32,"loc":{"start":{"line":32,"column":4},"end":{"line":35,"column":4}}},"2":{"name":"snapshotInfo","line":41,"loc":{"start":{"line":41,"column":4},"end":{"line":44,"column":4}}},"3":{"name":"snapshotInfoBatch","line":50,"loc":{"start":{"line":50,"column":4},"end":{"line":56,"column":4}}},"4":{"name":"snapshotBalanceOf","line":62,"loc":{"start":{"line":62,"column":4},"end":{"line":72,"column":4}}},"5":{"name":"snapshotTotalSupply","line":79,"loc":{"start":{"line":79,"column":4},"end":{"line":85,"column":4}}},"6":{"name":"_snapshotUpdate","line":92,"loc":{"start":{"line":92,"column":4},"end":{"line":112,"column":4}}},"7":{"name":"_updateAccountSnapshot","line":117,"loc":{"start":{"line":117,"column":4},"end":{"line":119,"column":4}}},"8":{"name":"_updateTotalSupplySnapshot","line":124,"loc":{"start":{"line":124,"column":4},"end":{"line":126,"column":4}}}},"statementMap":{"1":{"start":{"line":52,"column":8},"end":{"line":52,"column":2203}},"2":{"start":{"line":66,"column":8},"end":{"line":66,"column":2738}},"3":{"start":{"line":71,"column":8},"end":{"line":71,"column":53}},"4":{"start":{"line":80,"column":8},"end":{"line":80,"column":3209}},"5":{"start":{"line":84,"column":8},"end":{"line":84,"column":50}},"6":{"start":{"line":96,"column":8},"end":{"line":96,"column":28}},"7":{"start":{"line":97,"column":8},"end":{"line":97,"column":3739}},"8":{"start":{"line":99,"column":12},"end":{"line":99,"column":39}},"9":{"start":{"line":100,"column":12},"end":{"line":100,"column":3865}},"10":{"start":{"line":102,"column":16},"end":{"line":102,"column":41}},"11":{"start":{"line":105,"column":16},"end":{"line":105,"column":43}},"12":{"start":{"line":109,"column":12},"end":{"line":109,"column":37}},"13":{"start":{"line":110,"column":12},"end":{"line":110,"column":39}},"14":{"start":{"line":118,"column":8},"end":{"line":118,"column":77}},"15":{"start":{"line":125,"column":8},"end":{"line":125,"column":60}}},"branchMap":{"1":{"line":32,"type":"if","locations":[{"start":{"line":32,"column":55},"end":{"line":32,"column":55}},{"start":{"line":32,"column":55},"end":{"line":32,"column":55}}]},"2":{"line":71,"type":"if","locations":[{"start":{"line":71,"column":29},"end":{"line":71,"column":33}},{"start":{"line":71,"column":37},"end":{"line":71,"column":52}}]},"3":{"line":84,"type":"if","locations":[{"start":{"line":84,"column":29},"end":{"line":84,"column":33}},{"start":{"line":84,"column":37},"end":{"line":84,"column":49}}]},"4":{"line":97,"type":"if","locations":[{"start":{"line":97,"column":8},"end":{"line":97,"column":8}},{"start":{"line":97,"column":8},"end":{"line":97,"column":8}}]},"5":{"line":100,"type":"if","locations":[{"start":{"line":100,"column":12},"end":{"line":100,"column":12}},{"start":{"line":100,"column":12},"end":{"line":100,"column":12}}]}}}, -"contracts/modules/internal/ValidationModuleInternal.sol":{"l":{"28":387,"29":16,"30":16,"42":12,"51":6,"62":6,"66":57},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/internal/ValidationModuleInternal.sol","s":{"1":387,"2":16,"3":12,"4":6,"5":6,"6":57},"b":{"1":[387,0],"2":[16,371]},"f":{"1":387,"2":12,"3":6,"4":6,"5":57},"fnMap":{"1":{"name":"__Validation_init_unchained","line":27,"loc":{"start":{"line":25,"column":4},"end":{"line":32,"column":4}}},"2":{"name":"_validateTransfer","line":37,"loc":{"start":{"line":37,"column":4},"end":{"line":43,"column":4}}},"3":{"name":"_messageForTransferRestriction","line":48,"loc":{"start":{"line":48,"column":4},"end":{"line":52,"column":4}}},"4":{"name":"_detectTransferRestriction","line":57,"loc":{"start":{"line":57,"column":4},"end":{"line":63,"column":4}}},"5":{"name":"_operateOnTransfer","line":65,"loc":{"start":{"line":65,"column":4},"end":{"line":67,"column":4}}}},"statementMap":{"1":{"start":{"line":28,"column":8},"end":{"line":28,"column":826}},"2":{"start":{"line":30,"column":12},"end":{"line":30,"column":39}},"3":{"start":{"line":42,"column":8},"end":{"line":42,"column":60}},"4":{"start":{"line":51,"column":8},"end":{"line":51,"column":72}},"5":{"start":{"line":62,"column":8},"end":{"line":62,"column":69}},"6":{"start":{"line":66,"column":8},"end":{"line":66,"column":61}}},"branchMap":{"1":{"line":27,"type":"if","locations":[{"start":{"line":27,"column":15},"end":{"line":27,"column":15}},{"start":{"line":27,"column":15},"end":{"line":27,"column":15}}]},"2":{"line":28,"type":"if","locations":[{"start":{"line":28,"column":8},"end":{"line":28,"column":8}},{"start":{"line":28,"column":8},"end":{"line":28,"column":8}}]}}}, -"contracts/modules/security/AuthorizationModule.sol":{"l":{"42":387,"43":3,"45":384,"46":384,"47":0,"60":8,"61":2,"63":6,"64":6,"68":35,"69":3,"70":3,"72":2,"75":33,"79":5,"80":3,"81":3,"83":2,"86":3,"97":1443,"98":810,"100":633},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/security/AuthorizationModule.sol","s":{"1":387,"2":384,"3":384,"4":8,"5":6,"6":35,"7":3,"8":3,"9":33,"10":5,"11":3,"12":3,"13":3,"14":1443,"15":810,"16":633},"b":{"1":[387,0],"2":[3,384],"3":[0,384],"4":[8,2],"5":[2,6],"6":[35,4],"7":[3,32],"8":[2,1],"9":[5,4],"10":[3,2],"11":[2,1],"12":[810,633]},"f":{"1":387,"2":8,"3":35,"4":5,"5":1443},"fnMap":{"1":{"name":"__AuthorizationModule_init_unchained","line":41,"loc":{"start":{"line":40,"column":4},"end":{"line":51,"column":4}}},"2":{"name":"setAuthorizationEngine","line":59,"loc":{"start":{"line":57,"column":4},"end":{"line":65,"column":4}}},"3":{"name":"grantRole","line":67,"loc":{"start":{"line":67,"column":4},"end":{"line":76,"column":4}}},"4":{"name":"revokeRole","line":78,"loc":{"start":{"line":78,"column":4},"end":{"line":87,"column":4}}},"5":{"name":"hasRole","line":92,"loc":{"start":{"line":92,"column":4},"end":{"line":101,"column":4}}}},"statementMap":{"1":{"start":{"line":42,"column":8},"end":{"line":42,"column":1714}},"2":{"start":{"line":45,"column":8},"end":{"line":45,"column":44}},"3":{"start":{"line":46,"column":8},"end":{"line":46,"column":1881}},"4":{"start":{"line":60,"column":8},"end":{"line":60,"column":2308}},"5":{"start":{"line":64,"column":8},"end":{"line":64,"column":54}},"6":{"start":{"line":68,"column":8},"end":{"line":68,"column":2677}},"7":{"start":{"line":69,"column":12},"end":{"line":69,"column":79}},"8":{"start":{"line":70,"column":12},"end":{"line":70,"column":2825}},"9":{"start":{"line":75,"column":8},"end":{"line":75,"column":64}},"10":{"start":{"line":79,"column":8},"end":{"line":79,"column":3186}},"11":{"start":{"line":80,"column":12},"end":{"line":80,"column":80}},"12":{"start":{"line":81,"column":12},"end":{"line":81,"column":3335}},"13":{"start":{"line":86,"column":8},"end":{"line":86,"column":65}},"14":{"start":{"line":97,"column":8},"end":{"line":97,"column":3866}},"15":{"start":{"line":98,"column":12},"end":{"line":98,"column":23}},"16":{"start":{"line":100,"column":8},"end":{"line":100,"column":62}}},"branchMap":{"1":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":13},"end":{"line":41,"column":13}},{"start":{"line":41,"column":13},"end":{"line":41,"column":13}}]},"2":{"line":42,"type":"if","locations":[{"start":{"line":42,"column":8},"end":{"line":42,"column":8}},{"start":{"line":42,"column":8},"end":{"line":42,"column":8}}]},"3":{"line":46,"type":"if","locations":[{"start":{"line":46,"column":8},"end":{"line":46,"column":8}},{"start":{"line":46,"column":8},"end":{"line":46,"column":8}}]},"4":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":15},"end":{"line":59,"column":15}},{"start":{"line":59,"column":15},"end":{"line":59,"column":15}}]},"5":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":8},"end":{"line":60,"column":8}},{"start":{"line":60,"column":8},"end":{"line":60,"column":8}}]},"6":{"line":67,"type":"if","locations":[{"start":{"line":67,"column":70},"end":{"line":67,"column":70}},{"start":{"line":67,"column":70},"end":{"line":67,"column":70}}]},"7":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":8}},{"start":{"line":68,"column":8},"end":{"line":68,"column":8}}]},"8":{"line":70,"type":"if","locations":[{"start":{"line":70,"column":12},"end":{"line":70,"column":12}},{"start":{"line":70,"column":12},"end":{"line":70,"column":12}}]},"9":{"line":78,"type":"if","locations":[{"start":{"line":78,"column":71},"end":{"line":78,"column":71}},{"start":{"line":78,"column":71},"end":{"line":78,"column":71}}]},"10":{"line":79,"type":"if","locations":[{"start":{"line":79,"column":8},"end":{"line":79,"column":8}},{"start":{"line":79,"column":8},"end":{"line":79,"column":8}}]},"11":{"line":81,"type":"if","locations":[{"start":{"line":81,"column":12},"end":{"line":81,"column":12}},{"start":{"line":81,"column":12},"end":{"line":81,"column":12}}]},"12":{"line":97,"type":"if","locations":[{"start":{"line":97,"column":8},"end":{"line":97,"column":8}},{"start":{"line":97,"column":8},"end":{"line":97,"column":8}}]}}}, -"contracts/modules/wrapper/controllers/ValidationModule.sol":{"l":{"38":20,"39":6,"41":14,"42":14,"53":20,"54":3,"59":4,"64":2,"69":2,"71":6,"73":3,"89":17,"90":4,"92":2,"94":2,"96":6,"98":3,"107":19,"108":4,"110":15,"111":12,"113":3,"121":483,"122":32,"124":451,"128":464,"129":28,"131":436,"132":57,"134":379},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol","s":{"1":20,"2":14,"3":20,"4":3,"5":17,"6":4,"7":13,"8":2,"9":11,"10":2,"11":9,"12":6,"13":3,"14":17,"15":4,"16":13,"17":2,"18":11,"19":2,"20":9,"21":6,"22":3,"23":19,"24":4,"25":15,"26":12,"27":3,"28":483,"29":32,"30":451,"31":464,"32":28,"33":436,"34":57,"35":379},"b":{"1":[384,0],"2":[20,6],"3":[6,14],"4":[3,17],"5":[4,13],"6":[2,11],"7":[2,9],"8":[6,3],"9":[4,13],"10":[2,11],"11":[2,9],"12":[6,3],"13":[4,15],"14":[12,3],"15":[32,451],"16":[22,6],"17":[6,4],"18":[28,436],"19":[57,379]},"f":{"1":384,"2":20,"3":20,"4":17,"5":19,"6":483,"7":464},"fnMap":{"1":{"name":"__ValidationModule_init_unchained","line":27,"loc":{"start":{"line":27,"column":4},"end":{"line":29,"column":4}}},"2":{"name":"setRuleEngine","line":37,"loc":{"start":{"line":35,"column":4},"end":{"line":43,"column":4}}},"3":{"name":"messageForTransferRestriction","line":50,"loc":{"start":{"line":50,"column":4},"end":{"line":75,"column":4}}},"4":{"name":"detectTransferRestriction","line":84,"loc":{"start":{"line":84,"column":4},"end":{"line":100,"column":4}}},"5":{"name":"validateTransfer","line":102,"loc":{"start":{"line":102,"column":4},"end":{"line":114,"column":4}}},"6":{"name":"_validateTransferByModule","line":116,"loc":{"start":{"line":116,"column":4},"end":{"line":125,"column":4}}},"7":{"name":"_operateOnTransfer","line":127,"loc":{"start":{"line":127,"column":4},"end":{"line":135,"column":4}}}},"statementMap":{"1":{"start":{"line":38,"column":8},"end":{"line":38,"column":1111}},"2":{"start":{"line":42,"column":8},"end":{"line":42,"column":36}},"3":{"start":{"line":53,"column":8},"end":{"line":53,"column":1798}},"4":{"start":{"line":54,"column":12},"end":{"line":54,"column":35}},"5":{"start":{"line":55,"column":15},"end":{"line":55,"column":1914}},"6":{"start":{"line":59,"column":12},"end":{"line":59,"column":48}},"7":{"start":{"line":60,"column":15},"end":{"line":60,"column":2090}},"8":{"start":{"line":64,"column":12},"end":{"line":64,"column":53}},"9":{"start":{"line":65,"column":15},"end":{"line":65,"column":2276}},"10":{"start":{"line":69,"column":12},"end":{"line":69,"column":51}},"11":{"start":{"line":70,"column":15},"end":{"line":70,"column":2458}},"12":{"start":{"line":71,"column":12},"end":{"line":71,"column":66}},"13":{"start":{"line":73,"column":12},"end":{"line":73,"column":36}},"14":{"start":{"line":89,"column":8},"end":{"line":89,"column":3154}},"15":{"start":{"line":90,"column":12},"end":{"line":90,"column":69}},"16":{"start":{"line":91,"column":15},"end":{"line":91,"column":3256}},"17":{"start":{"line":92,"column":12},"end":{"line":92,"column":74}},"18":{"start":{"line":93,"column":15},"end":{"line":93,"column":3367}},"19":{"start":{"line":94,"column":12},"end":{"line":94,"column":72}},"20":{"start":{"line":95,"column":15},"end":{"line":95,"column":3474}},"21":{"start":{"line":96,"column":12},"end":{"line":96,"column":63}},"22":{"start":{"line":98,"column":12},"end":{"line":98,"column":56}},"23":{"start":{"line":107,"column":8},"end":{"line":107,"column":3820}},"24":{"start":{"line":108,"column":12},"end":{"line":108,"column":24}},"25":{"start":{"line":110,"column":8},"end":{"line":110,"column":3916}},"26":{"start":{"line":111,"column":12},"end":{"line":111,"column":54}},"27":{"start":{"line":113,"column":8},"end":{"line":113,"column":19}},"28":{"start":{"line":121,"column":8},"end":{"line":121,"column":4205}},"29":{"start":{"line":122,"column":12},"end":{"line":122,"column":24}},"30":{"start":{"line":124,"column":8},"end":{"line":124,"column":19}},"31":{"start":{"line":128,"column":8},"end":{"line":128,"column":4431}},"32":{"start":{"line":129,"column":12},"end":{"line":129,"column":24}},"33":{"start":{"line":131,"column":8},"end":{"line":131,"column":4526}},"34":{"start":{"line":132,"column":12},"end":{"line":132,"column":80}},"35":{"start":{"line":134,"column":8},"end":{"line":134,"column":19}}},"branchMap":{"1":{"line":27,"type":"if","locations":[{"start":{"line":27,"column":58},"end":{"line":27,"column":58}},{"start":{"line":27,"column":58},"end":{"line":27,"column":58}}]},"2":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":15},"end":{"line":37,"column":15}},{"start":{"line":37,"column":15},"end":{"line":37,"column":15}}]},"3":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":8},"end":{"line":38,"column":8}},{"start":{"line":38,"column":8},"end":{"line":38,"column":8}}]},"4":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":8},"end":{"line":53,"column":8}},{"start":{"line":53,"column":8},"end":{"line":53,"column":8}}]},"5":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":15},"end":{"line":55,"column":15}},{"start":{"line":55,"column":15},"end":{"line":55,"column":15}}]},"6":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":15},"end":{"line":60,"column":15}},{"start":{"line":60,"column":15},"end":{"line":60,"column":15}}]},"7":{"line":65,"type":"if","locations":[{"start":{"line":65,"column":15},"end":{"line":65,"column":15}},{"start":{"line":65,"column":15},"end":{"line":65,"column":15}}]},"8":{"line":70,"type":"if","locations":[{"start":{"line":70,"column":15},"end":{"line":70,"column":15}},{"start":{"line":70,"column":15},"end":{"line":70,"column":15}}]},"9":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":8},"end":{"line":89,"column":8}},{"start":{"line":89,"column":8},"end":{"line":89,"column":8}}]},"10":{"line":91,"type":"if","locations":[{"start":{"line":91,"column":15},"end":{"line":91,"column":15}},{"start":{"line":91,"column":15},"end":{"line":91,"column":15}}]},"11":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":15},"end":{"line":93,"column":15}},{"start":{"line":93,"column":15},"end":{"line":93,"column":15}}]},"12":{"line":95,"type":"if","locations":[{"start":{"line":95,"column":15},"end":{"line":95,"column":15}},{"start":{"line":95,"column":15},"end":{"line":95,"column":15}}]},"13":{"line":107,"type":"if","locations":[{"start":{"line":107,"column":8},"end":{"line":107,"column":8}},{"start":{"line":107,"column":8},"end":{"line":107,"column":8}}]},"14":{"line":110,"type":"if","locations":[{"start":{"line":110,"column":8},"end":{"line":110,"column":8}},{"start":{"line":110,"column":8},"end":{"line":110,"column":8}}]},"15":{"line":121,"type":"if","locations":[{"start":{"line":121,"column":8},"end":{"line":121,"column":8}},{"start":{"line":121,"column":8},"end":{"line":121,"column":8}}]},"16":{"line":121,"type":"cond-expr","locations":[{"start":{"line":121,"column":12},"end":{"line":121,"column":19}},{"start":{"line":121,"column":24},"end":{"line":121,"column":35}}]},"17":{"line":121,"type":"cond-expr","locations":[{"start":{"line":121,"column":12},"end":{"line":121,"column":35}},{"start":{"line":121,"column":40},"end":{"line":121,"column":49}}]},"18":{"line":128,"type":"if","locations":[{"start":{"line":128,"column":8},"end":{"line":128,"column":8}},{"start":{"line":128,"column":8},"end":{"line":128,"column":8}}]},"19":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":8},"end":{"line":131,"column":8}},{"start":{"line":131,"column":8},"end":{"line":131,"column":8}}]}}}, -"contracts/modules/wrapper/core/BaseModule.sol":{"l":{"47":384,"48":384,"49":384,"50":384,"60":2,"61":2,"70":2,"71":2,"80":2,"81":2,"88":6,"89":4,"91":2,"92":2},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/BaseModule.sol","s":{"1":2,"2":2,"3":2,"4":6,"5":2},"b":{"1":[384,0],"2":[2,4],"3":[2,4],"4":[2,4],"5":[6,4],"6":[4,2]},"f":{"1":384,"2":2,"3":2,"4":2,"5":6},"fnMap":{"1":{"name":"__Base_init_unchained","line":46,"loc":{"start":{"line":41,"column":4},"end":{"line":51,"column":4}}},"2":{"name":"setTokenId","line":59,"loc":{"start":{"line":57,"column":4},"end":{"line":62,"column":4}}},"3":{"name":"setTerms","line":69,"loc":{"start":{"line":67,"column":4},"end":{"line":72,"column":4}}},"4":{"name":"setInformation","line":79,"loc":{"start":{"line":77,"column":4},"end":{"line":82,"column":4}}},"5":{"name":"setFlag","line":87,"loc":{"start":{"line":87,"column":4},"end":{"line":93,"column":4}}}},"statementMap":{"1":{"start":{"line":61,"column":8},"end":{"line":61,"column":40}},"2":{"start":{"line":71,"column":8},"end":{"line":71,"column":33}},"3":{"start":{"line":81,"column":8},"end":{"line":81,"column":52}},"4":{"start":{"line":88,"column":8},"end":{"line":88,"column":2566}},"5":{"start":{"line":92,"column":8},"end":{"line":92,"column":24}}},"branchMap":{"1":{"line":46,"type":"if","locations":[{"start":{"line":46,"column":15},"end":{"line":46,"column":15}},{"start":{"line":46,"column":15},"end":{"line":46,"column":15}}]},"2":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":13},"end":{"line":59,"column":13}},{"start":{"line":59,"column":13},"end":{"line":59,"column":13}}]},"3":{"line":69,"type":"if","locations":[{"start":{"line":69,"column":13},"end":{"line":69,"column":13}},{"start":{"line":69,"column":13},"end":{"line":69,"column":13}}]},"4":{"line":79,"type":"if","locations":[{"start":{"line":79,"column":13},"end":{"line":79,"column":13}},{"start":{"line":79,"column":13},"end":{"line":79,"column":13}}]},"5":{"line":87,"type":"if","locations":[{"start":{"line":87,"column":43},"end":{"line":87,"column":43}},{"start":{"line":87,"column":43},"end":{"line":87,"column":43}}]},"6":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":88,"column":8}},{"start":{"line":88,"column":8},"end":{"line":88,"column":8}}]}}}, -"contracts/modules/wrapper/core/EnforcementModule.sol":{"l":{"36":22,"50":8},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol","s":{"1":22,"2":8},"b":{"1":[384,0],"2":[22,4],"3":[8,4]},"f":{"1":384,"2":22,"3":8},"fnMap":{"1":{"name":"__EnforcementModule_init_unchained","line":23,"loc":{"start":{"line":23,"column":4},"end":{"line":25,"column":4}}},"2":{"name":"freeze","line":35,"loc":{"start":{"line":32,"column":4},"end":{"line":37,"column":4}}},"3":{"name":"unfreeze","line":49,"loc":{"start":{"line":46,"column":4},"end":{"line":51,"column":4}}}},"statementMap":{"1":{"start":{"line":36,"column":8},"end":{"line":36,"column":39}},"2":{"start":{"line":50,"column":8},"end":{"line":50,"column":41}}},"branchMap":{"1":{"line":23,"type":"if","locations":[{"start":{"line":23,"column":59},"end":{"line":23,"column":59}},{"start":{"line":23,"column":59},"end":{"line":23,"column":59}}]},"2":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":13},"end":{"line":35,"column":13}},{"start":{"line":35,"column":13},"end":{"line":35,"column":13}}]},"3":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":13},"end":{"line":49,"column":13}},{"start":{"line":49,"column":13},"end":{"line":49,"column":13}}]}}}, -"contracts/modules/wrapper/core/ERC20BaseModule.sol":{"l":{"32":384,"42":2,"61":18,"62":4,"66":14,"67":8,"70":6,"73":14,"74":10,"75":10,"80":2,"95":18,"97":2,"98":2,"101":2,"110":4,"111":4,"112":6,"114":4},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol","s":{"1":2,"2":18,"3":14,"4":6,"5":14,"6":2,"7":18,"8":2,"9":2,"10":2,"11":4},"b":{"1":[384,0],"2":[4,14],"3":[8,6],"4":[2,0]},"f":{"1":384,"2":2,"3":18,"4":18,"5":4},"fnMap":{"1":{"name":"__ERC20BaseModule_init_unchained","line":31,"loc":{"start":{"line":29,"column":4},"end":{"line":33,"column":4}}},"2":{"name":"decimals","line":41,"loc":{"start":{"line":41,"column":4},"end":{"line":43,"column":4}}},"3":{"name":"transferBatch","line":57,"loc":{"start":{"line":57,"column":4},"end":{"line":81,"column":4}}},"4":{"name":"transferFrom","line":90,"loc":{"start":{"line":90,"column":4},"end":{"line":102,"column":4}}},"5":{"name":"balanceInfo","line":109,"loc":{"start":{"line":109,"column":4},"end":{"line":115,"column":4}}}},"statementMap":{"1":{"start":{"line":42,"column":8},"end":{"line":42,"column":24}},"2":{"start":{"line":61,"column":8},"end":{"line":61,"column":2039}},"3":{"start":{"line":66,"column":8},"end":{"line":66,"column":2256}},"4":{"start":{"line":70,"column":8},"end":{"line":70,"column":2391}},"5":{"start":{"line":73,"column":12},"end":{"line":73,"column":70}},"6":{"start":{"line":80,"column":8},"end":{"line":80,"column":19}},"7":{"start":{"line":95,"column":8},"end":{"line":95,"column":68}},"8":{"start":{"line":97,"column":8},"end":{"line":97,"column":3397}},"9":{"start":{"line":98,"column":12},"end":{"line":98,"column":49}},"10":{"start":{"line":101,"column":8},"end":{"line":101,"column":21}},"11":{"start":{"line":111,"column":8},"end":{"line":111,"column":3890}}},"branchMap":{"1":{"line":31,"type":"if","locations":[{"start":{"line":31,"column":15},"end":{"line":31,"column":15}},{"start":{"line":31,"column":15},"end":{"line":31,"column":15}}]},"2":{"line":61,"type":"if","locations":[{"start":{"line":61,"column":8},"end":{"line":61,"column":8}},{"start":{"line":61,"column":8},"end":{"line":61,"column":8}}]},"3":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":8},"end":{"line":66,"column":8}},{"start":{"line":66,"column":8},"end":{"line":66,"column":8}}]},"4":{"line":97,"type":"if","locations":[{"start":{"line":97,"column":8},"end":{"line":97,"column":8}},{"start":{"line":97,"column":8},"end":{"line":97,"column":8}}]}}}, -"contracts/modules/wrapper/core/ERC20BurnModule.sol":{"l":{"36":18,"37":14,"60":20,"61":4,"65":16,"66":8,"69":8,"70":24,"71":20,"72":20,"73":20,"97":6,"98":6,"99":6,"101":4,"104":2,"105":2,"108":2,"110":2,"112":2},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol","s":{"1":18,"2":14,"3":20,"4":16,"5":8,"6":24,"7":20,"8":6,"9":6,"10":6,"11":2,"12":2,"13":2,"14":2},"b":{"1":[384,0],"2":[18,8],"3":[20,4],"4":[4,16],"5":[8,8],"6":[6,4],"7":[4,2]},"f":{"1":384,"2":18,"3":20,"4":6},"fnMap":{"1":{"name":"__ERC20BurnModule_init_unchained","line":18,"loc":{"start":{"line":18,"column":4},"end":{"line":20,"column":4}}},"2":{"name":"burn","line":35,"loc":{"start":{"line":31,"column":4},"end":{"line":38,"column":4}}},"3":{"name":"burnBatch","line":59,"loc":{"start":{"line":55,"column":4},"end":{"line":76,"column":4}}},"4":{"name":"burnFrom","line":94,"loc":{"start":{"line":92,"column":4},"end":{"line":113,"column":4}}}},"statementMap":{"1":{"start":{"line":36,"column":8},"end":{"line":36,"column":28}},"2":{"start":{"line":37,"column":8},"end":{"line":37,"column":41}},"3":{"start":{"line":60,"column":8},"end":{"line":60,"column":2267}},"4":{"start":{"line":65,"column":8},"end":{"line":65,"column":2489}},"5":{"start":{"line":69,"column":8},"end":{"line":69,"column":2629}},"6":{"start":{"line":70,"column":12},"end":{"line":70,"column":40}},"7":{"start":{"line":71,"column":12},"end":{"line":71,"column":53}},"8":{"start":{"line":97,"column":8},"end":{"line":97,"column":38}},"9":{"start":{"line":98,"column":8},"end":{"line":98,"column":61}},"10":{"start":{"line":99,"column":8},"end":{"line":99,"column":3573}},"11":{"start":{"line":105,"column":12},"end":{"line":105,"column":62}},"12":{"start":{"line":108,"column":8},"end":{"line":108,"column":28}},"13":{"start":{"line":110,"column":8},"end":{"line":110,"column":45}},"14":{"start":{"line":112,"column":8},"end":{"line":112,"column":45}}},"branchMap":{"1":{"line":18,"type":"if","locations":[{"start":{"line":18,"column":57},"end":{"line":18,"column":57}},{"start":{"line":18,"column":57},"end":{"line":18,"column":57}}]},"2":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":13},"end":{"line":35,"column":13}},{"start":{"line":35,"column":13},"end":{"line":35,"column":13}}]},"3":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":13},"end":{"line":59,"column":13}},{"start":{"line":59,"column":13},"end":{"line":59,"column":13}}]},"4":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":8},"end":{"line":60,"column":8}},{"start":{"line":60,"column":8},"end":{"line":60,"column":8}}]},"5":{"line":65,"type":"if","locations":[{"start":{"line":65,"column":8},"end":{"line":65,"column":8}},{"start":{"line":65,"column":8},"end":{"line":65,"column":8}}]},"6":{"line":94,"type":"if","locations":[{"start":{"line":94,"column":8},"end":{"line":94,"column":8}},{"start":{"line":94,"column":8},"end":{"line":94,"column":8}}]},"7":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":8},"end":{"line":99,"column":8}},{"start":{"line":99,"column":8},"end":{"line":99,"column":8}}]}}}, -"contracts/modules/wrapper/core/ERC20MintModule.sol":{"l":{"34":277,"35":277,"57":30,"58":4,"62":26,"63":8,"66":18,"67":54,"68":54,"69":54,"70":54},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol","s":{"1":277,"2":277,"3":30,"4":26,"5":18,"6":54,"7":54},"b":{"1":[384,0],"2":[277,8],"3":[30,4],"4":[4,26],"5":[8,18]},"f":{"1":384,"2":277,"3":30},"fnMap":{"1":{"name":"__ERC20MintModule_init_unchained","line":16,"loc":{"start":{"line":16,"column":4},"end":{"line":18,"column":4}}},"2":{"name":"mint","line":33,"loc":{"start":{"line":33,"column":4},"end":{"line":36,"column":4}}},"3":{"name":"mintBatch","line":56,"loc":{"start":{"line":53,"column":4},"end":{"line":73,"column":4}}}},"statementMap":{"1":{"start":{"line":34,"column":8},"end":{"line":34,"column":28}},"2":{"start":{"line":35,"column":8},"end":{"line":35,"column":33}},"3":{"start":{"line":57,"column":8},"end":{"line":57,"column":2116}},"4":{"start":{"line":62,"column":8},"end":{"line":62,"column":2338}},"5":{"start":{"line":66,"column":8},"end":{"line":66,"column":2478}},"6":{"start":{"line":67,"column":12},"end":{"line":67,"column":40}},"7":{"start":{"line":68,"column":12},"end":{"line":68,"column":45}}},"branchMap":{"1":{"line":16,"type":"if","locations":[{"start":{"line":16,"column":57},"end":{"line":16,"column":57}},{"start":{"line":16,"column":57},"end":{"line":16,"column":57}}]},"2":{"line":33,"type":"if","locations":[{"start":{"line":33,"column":57},"end":{"line":33,"column":57}},{"start":{"line":33,"column":57},"end":{"line":33,"column":57}}]},"3":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":13},"end":{"line":56,"column":13}},{"start":{"line":56,"column":13},"end":{"line":56,"column":13}}]},"4":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":8},"end":{"line":57,"column":8}},{"start":{"line":57,"column":8},"end":{"line":57,"column":8}}]},"5":{"line":62,"type":"if","locations":[{"start":{"line":62,"column":8},"end":{"line":62,"column":8}},{"start":{"line":62,"column":8},"end":{"line":62,"column":8}}]}}}, -"contracts/modules/wrapper/core/PauseModule.sol":{"l":{"39":14,"51":8,"52":4,"54":4,"70":2,"71":2,"72":2,"79":4},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/PauseModule.sol","s":{"1":14,"2":8,"3":4,"4":2,"5":2,"6":4},"b":{"1":[384,0],"2":[14,6],"3":[8,4],"4":[4,4],"5":[2,4]},"f":{"1":384,"2":14,"3":8,"4":2,"5":4},"fnMap":{"1":{"name":"__PauseModule_init_unchained","line":25,"loc":{"start":{"line":25,"column":4},"end":{"line":27,"column":4}}},"2":{"name":"pause","line":38,"loc":{"start":{"line":38,"column":4},"end":{"line":40,"column":4}}},"3":{"name":"unpause","line":50,"loc":{"start":{"line":50,"column":4},"end":{"line":55,"column":4}}},"4":{"name":"deactivateContract","line":68,"loc":{"start":{"line":66,"column":4},"end":{"line":73,"column":4}}},"5":{"name":"deactivated","line":78,"loc":{"start":{"line":78,"column":4},"end":{"line":80,"column":4}}}},"statementMap":{"1":{"start":{"line":39,"column":8},"end":{"line":39,"column":15}},"2":{"start":{"line":51,"column":8},"end":{"line":51,"column":1637}},"3":{"start":{"line":54,"column":8},"end":{"line":54,"column":17}},"4":{"start":{"line":71,"column":7},"end":{"line":71,"column":14}},"5":{"start":{"line":72,"column":7},"end":{"line":72,"column":37}},"6":{"start":{"line":79,"column":8},"end":{"line":79,"column":28}}},"branchMap":{"1":{"line":25,"type":"if","locations":[{"start":{"line":25,"column":53},"end":{"line":25,"column":53}},{"start":{"line":25,"column":53},"end":{"line":25,"column":53}}]},"2":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":28},"end":{"line":38,"column":28}},{"start":{"line":38,"column":28},"end":{"line":38,"column":28}}]},"3":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":30},"end":{"line":50,"column":30}},{"start":{"line":50,"column":30},"end":{"line":50,"column":30}}]},"4":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":51,"column":8}},{"start":{"line":51,"column":8},"end":{"line":51,"column":8}}]},"5":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":8},"end":{"line":68,"column":8}},{"start":{"line":68,"column":8},"end":{"line":68,"column":8}}]}}}, -"contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol":{"l":{"38":2,"39":2,"40":2,"41":2,"50":6,"51":4,"53":2,"54":2,"63":6,"64":4,"66":2,"67":2,"76":2,"77":2},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol","s":{"1":2,"2":2,"3":2,"4":6,"5":2,"6":6,"7":2,"8":2},"b":{"1":[384,0],"2":[2,4],"3":[6,4],"4":[4,2],"5":[6,4],"6":[4,2],"7":[2,4]},"f":{"1":384,"2":2,"3":6,"4":6,"5":2},"fnMap":{"1":{"name":"__CreditEvents_init_unchained","line":25,"loc":{"start":{"line":25,"column":4},"end":{"line":27,"column":4}}},"2":{"name":"setCreditEvents","line":37,"loc":{"start":{"line":33,"column":4},"end":{"line":42,"column":4}}},"3":{"name":"setFlagDefault","line":49,"loc":{"start":{"line":47,"column":4},"end":{"line":55,"column":4}}},"4":{"name":"setFlagRedeemed","line":62,"loc":{"start":{"line":60,"column":4},"end":{"line":68,"column":4}}},"5":{"name":"setRating","line":75,"loc":{"start":{"line":73,"column":4},"end":{"line":78,"column":4}}}},"statementMap":{"1":{"start":{"line":39,"column":8},"end":{"line":39,"column":38}},"2":{"start":{"line":40,"column":8},"end":{"line":40,"column":40}},"3":{"start":{"line":41,"column":8},"end":{"line":41,"column":37}},"4":{"start":{"line":50,"column":8},"end":{"line":50,"column":1670}},"5":{"start":{"line":54,"column":8},"end":{"line":54,"column":38}},"6":{"start":{"line":63,"column":8},"end":{"line":63,"column":2113}},"7":{"start":{"line":67,"column":8},"end":{"line":67,"column":40}},"8":{"start":{"line":77,"column":8},"end":{"line":77,"column":37}}},"branchMap":{"1":{"line":25,"type":"if","locations":[{"start":{"line":25,"column":54},"end":{"line":25,"column":54}},{"start":{"line":25,"column":54},"end":{"line":25,"column":54}}]},"2":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":13},"end":{"line":37,"column":13}},{"start":{"line":37,"column":13},"end":{"line":37,"column":13}}]},"3":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":13},"end":{"line":49,"column":13}},{"start":{"line":49,"column":13},"end":{"line":49,"column":13}}]},"4":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":8},"end":{"line":50,"column":8}},{"start":{"line":50,"column":8},"end":{"line":50,"column":8}}]},"5":{"line":62,"type":"if","locations":[{"start":{"line":62,"column":13},"end":{"line":62,"column":13}},{"start":{"line":62,"column":13},"end":{"line":62,"column":13}}]},"6":{"line":63,"type":"if","locations":[{"start":{"line":63,"column":8},"end":{"line":63,"column":8}},{"start":{"line":63,"column":8},"end":{"line":63,"column":8}}]},"7":{"line":75,"type":"if","locations":[{"start":{"line":75,"column":13},"end":{"line":75,"column":13}},{"start":{"line":75,"column":13},"end":{"line":75,"column":13}}]}}}, -"contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol":{"l":{"67":2,"68":2,"69":2,"70":2,"71":2,"72":2,"73":2,"77":2,"81":2,"85":2,"89":2,"94":2,"96":2,"103":6,"104":4,"106":2,"107":2,"114":6,"115":4,"117":2,"118":2,"127":2,"128":2,"137":2,"138":2,"147":2,"148":2,"157":2,"158":2,"170":2,"171":2,"180":2,"181":2,"190":2,"191":2,"203":2,"204":2,"216":2,"217":2,"226":2,"227":2},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol","s":{"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2,"13":6,"14":2,"15":6,"16":2,"17":2,"18":2,"19":2,"20":2,"21":2,"22":2,"23":2,"24":2,"25":2,"26":2},"b":{"1":[384,0],"2":[2,4],"3":[6,4],"4":[4,2],"5":[6,4],"6":[4,2],"7":[2,4],"8":[2,4],"9":[2,4],"10":[2,4],"11":[2,4],"12":[2,4],"13":[2,4],"14":[2,4],"15":[2,4],"16":[2,4]},"f":{"1":384,"2":2,"3":6,"4":6,"5":2,"6":2,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2,"13":2,"14":2},"fnMap":{"1":{"name":"__DebtBaseModule_init_unchained","line":58,"loc":{"start":{"line":58,"column":4},"end":{"line":60,"column":4}}},"2":{"name":"setDebt","line":66,"loc":{"start":{"line":66,"column":4},"end":{"line":97,"column":4}}},"3":{"name":"setInterestRate","line":102,"loc":{"start":{"line":102,"column":4},"end":{"line":108,"column":4}}},"4":{"name":"setParValue","line":113,"loc":{"start":{"line":113,"column":4},"end":{"line":119,"column":4}}},"5":{"name":"setGuarantor","line":126,"loc":{"start":{"line":124,"column":4},"end":{"line":129,"column":4}}},"6":{"name":"setBondHolder","line":136,"loc":{"start":{"line":134,"column":4},"end":{"line":139,"column":4}}},"7":{"name":"setMaturityDate","line":146,"loc":{"start":{"line":144,"column":4},"end":{"line":149,"column":4}}},"8":{"name":"setInterestScheduleFormat","line":156,"loc":{"start":{"line":154,"column":4},"end":{"line":162,"column":4}}},"9":{"name":"setInterestPaymentDate","line":169,"loc":{"start":{"line":167,"column":4},"end":{"line":172,"column":4}}},"10":{"name":"setDayCountConvention","line":179,"loc":{"start":{"line":177,"column":4},"end":{"line":182,"column":4}}},"11":{"name":"setBusinessDayConvention","line":189,"loc":{"start":{"line":187,"column":4},"end":{"line":195,"column":4}}},"12":{"name":"setPublicHolidaysCalendar","line":202,"loc":{"start":{"line":200,"column":4},"end":{"line":208,"column":4}}},"13":{"name":"setIssuanceDate","line":215,"loc":{"start":{"line":213,"column":4},"end":{"line":218,"column":4}}},"14":{"name":"setCouponFrequency","line":225,"loc":{"start":{"line":223,"column":4},"end":{"line":228,"column":4}}}},"statementMap":{"1":{"start":{"line":68,"column":8},"end":{"line":68,"column":45}},"2":{"start":{"line":69,"column":8},"end":{"line":69,"column":37}},"3":{"start":{"line":70,"column":8},"end":{"line":70,"column":56}},"4":{"start":{"line":71,"column":8},"end":{"line":71,"column":59}},"5":{"start":{"line":72,"column":8},"end":{"line":72,"column":65}},"6":{"start":{"line":73,"column":8},"end":{"line":73,"column":2507}},"7":{"start":{"line":77,"column":8},"end":{"line":77,"column":2638}},"8":{"start":{"line":81,"column":8},"end":{"line":81,"column":2760}},"9":{"start":{"line":85,"column":8},"end":{"line":85,"column":2879}},"10":{"start":{"line":89,"column":8},"end":{"line":89,"column":3007}},"11":{"start":{"line":94,"column":8},"end":{"line":94,"column":65}},"12":{"start":{"line":96,"column":8},"end":{"line":96,"column":74}},"13":{"start":{"line":103,"column":8},"end":{"line":103,"column":3490}},"14":{"start":{"line":107,"column":8},"end":{"line":107,"column":40}},"15":{"start":{"line":114,"column":8},"end":{"line":114,"column":3886}},"16":{"start":{"line":118,"column":8},"end":{"line":118,"column":32}},"17":{"start":{"line":128,"column":8},"end":{"line":128,"column":46}},"18":{"start":{"line":138,"column":8},"end":{"line":138,"column":49}},"19":{"start":{"line":148,"column":8},"end":{"line":148,"column":55}},"20":{"start":{"line":158,"column":8},"end":{"line":158,"column":5320}},"21":{"start":{"line":171,"column":8},"end":{"line":171,"column":76}},"22":{"start":{"line":181,"column":8},"end":{"line":181,"column":73}},"23":{"start":{"line":191,"column":8},"end":{"line":191,"column":6510}},"24":{"start":{"line":204,"column":8},"end":{"line":204,"column":6946}},"25":{"start":{"line":217,"column":8},"end":{"line":217,"column":55}},"26":{"start":{"line":227,"column":8},"end":{"line":227,"column":64}}},"branchMap":{"1":{"line":58,"type":"if","locations":[{"start":{"line":58,"column":56},"end":{"line":58,"column":56}},{"start":{"line":58,"column":56},"end":{"line":58,"column":56}}]},"2":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":53},"end":{"line":66,"column":53}},{"start":{"line":66,"column":53},"end":{"line":66,"column":53}}]},"3":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":59},"end":{"line":102,"column":59}},{"start":{"line":102,"column":59},"end":{"line":102,"column":59}}]},"4":{"line":103,"type":"if","locations":[{"start":{"line":103,"column":8},"end":{"line":103,"column":8}},{"start":{"line":103,"column":8},"end":{"line":103,"column":8}}]},"5":{"line":113,"type":"if","locations":[{"start":{"line":113,"column":51},"end":{"line":113,"column":51}},{"start":{"line":113,"column":51},"end":{"line":113,"column":51}}]},"6":{"line":114,"type":"if","locations":[{"start":{"line":114,"column":8},"end":{"line":114,"column":8}},{"start":{"line":114,"column":8},"end":{"line":114,"column":8}}]},"7":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":13},"end":{"line":126,"column":13}},{"start":{"line":126,"column":13},"end":{"line":126,"column":13}}]},"8":{"line":136,"type":"if","locations":[{"start":{"line":136,"column":13},"end":{"line":136,"column":13}},{"start":{"line":136,"column":13},"end":{"line":136,"column":13}}]},"9":{"line":146,"type":"if","locations":[{"start":{"line":146,"column":13},"end":{"line":146,"column":13}},{"start":{"line":146,"column":13},"end":{"line":146,"column":13}}]},"10":{"line":156,"type":"if","locations":[{"start":{"line":156,"column":13},"end":{"line":156,"column":13}},{"start":{"line":156,"column":13},"end":{"line":156,"column":13}}]},"11":{"line":169,"type":"if","locations":[{"start":{"line":169,"column":13},"end":{"line":169,"column":13}},{"start":{"line":169,"column":13},"end":{"line":169,"column":13}}]},"12":{"line":179,"type":"if","locations":[{"start":{"line":179,"column":13},"end":{"line":179,"column":13}},{"start":{"line":179,"column":13},"end":{"line":179,"column":13}}]},"13":{"line":189,"type":"if","locations":[{"start":{"line":189,"column":13},"end":{"line":189,"column":13}},{"start":{"line":189,"column":13},"end":{"line":189,"column":13}}]},"14":{"line":202,"type":"if","locations":[{"start":{"line":202,"column":13},"end":{"line":202,"column":13}},{"start":{"line":202,"column":13},"end":{"line":202,"column":13}}]},"15":{"line":215,"type":"if","locations":[{"start":{"line":215,"column":13},"end":{"line":215,"column":13}},{"start":{"line":215,"column":13},"end":{"line":215,"column":13}}]},"16":{"line":225,"type":"if","locations":[{"start":{"line":225,"column":13},"end":{"line":225,"column":13}},{"start":{"line":225,"column":13},"end":{"line":225,"column":13}}]}}}, -"contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol":{"l":{"29":176,"40":16,"52":38,"63":18,"73":16},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol","s":{"1":176,"2":16,"3":38,"4":18,"5":16},"b":{"1":[384,0],"2":[176,4],"3":[16,4],"4":[38,4],"5":[18,4],"6":[16,4]},"f":{"1":384,"2":176,"3":16,"4":38,"5":18,"6":16},"fnMap":{"1":{"name":"__ERC20SnasphotModule_init_unchained","line":19,"loc":{"start":{"line":19,"column":4},"end":{"line":21,"column":4}}},"2":{"name":"scheduleSnapshot","line":28,"loc":{"start":{"line":28,"column":4},"end":{"line":30,"column":4}}},"3":{"name":"scheduleSnapshotNotOptimized","line":39,"loc":{"start":{"line":37,"column":4},"end":{"line":41,"column":4}}},"4":{"name":"rescheduleSnapshot","line":51,"loc":{"start":{"line":48,"column":4},"end":{"line":53,"column":4}}},"5":{"name":"unscheduleLastSnapshot","line":62,"loc":{"start":{"line":60,"column":4},"end":{"line":64,"column":4}}},"6":{"name":"unscheduleSnapshotNotOptimized","line":72,"loc":{"start":{"line":70,"column":4},"end":{"line":74,"column":4}}}},"statementMap":{"1":{"start":{"line":29,"column":8},"end":{"line":29,"column":30}},"2":{"start":{"line":40,"column":8},"end":{"line":40,"column":42}},"3":{"start":{"line":52,"column":8},"end":{"line":52,"column":44}},"4":{"start":{"line":63,"column":8},"end":{"line":63,"column":36}},"5":{"start":{"line":73,"column":8},"end":{"line":73,"column":44}}},"branchMap":{"1":{"line":19,"type":"if","locations":[{"start":{"line":19,"column":61},"end":{"line":19,"column":61}},{"start":{"line":19,"column":61},"end":{"line":19,"column":61}}]},"2":{"line":28,"type":"if","locations":[{"start":{"line":28,"column":51},"end":{"line":28,"column":51}},{"start":{"line":28,"column":51},"end":{"line":28,"column":51}}]},"3":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":13},"end":{"line":39,"column":13}},{"start":{"line":39,"column":13},"end":{"line":39,"column":13}}]},"4":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":13},"end":{"line":51,"column":13}},{"start":{"line":51,"column":13},"end":{"line":51,"column":13}}]},"5":{"line":62,"type":"if","locations":[{"start":{"line":62,"column":13},"end":{"line":62,"column":13}},{"start":{"line":62,"column":13},"end":{"line":62,"column":13}}]},"6":{"line":72,"type":"if","locations":[{"start":{"line":72,"column":13},"end":{"line":72,"column":13}},{"start":{"line":72,"column":13},"end":{"line":72,"column":13}}]}}}, -"contracts/modules/wrapper/extensions/MetaTxModule.sol":{"l":{},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/extensions/MetaTxModule.sol","s":{},"b":{},"f":{"1":199},"fnMap":{"1":{"name":"constructor","line":19,"loc":{"start":{"line":17,"column":4},"end":{"line":21,"column":4}}}},"statementMap":{},"branchMap":{}}, +"contracts/modules/internal/ERC20SnapshotModuleInternal.sol":{"l":{"37":480,"38":480,"46":160,"47":160,"48":480,"50":160,"58":80,"59":80,"60":80,"66":80,"78":1200,"83":1200,"92":720,"96":720,"108":430,"109":430,"111":99,"112":99,"114":55,"117":44,"121":331,"122":331,"130":485,"137":375},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/internal/ERC20SnapshotModuleInternal.sol","s":{"1":160,"2":80,"3":1200,"4":1200,"5":720,"6":720,"7":430,"8":430,"9":99,"10":99,"11":55,"12":44,"13":331,"14":331,"15":485,"16":375},"b":{"1":[387,0],"2":[400,800],"3":[36,684],"4":[99,331],"5":[55,44]},"f":{"1":387,"2":480,"3":160,"4":80,"5":1200,"6":720,"7":430,"8":485,"9":375},"fnMap":{"1":{"name":"__ERC20Snapshot_init_unchained","line":27,"loc":{"start":{"line":27,"column":4},"end":{"line":30,"column":4}}},"2":{"name":"snapshotInfo","line":36,"loc":{"start":{"line":36,"column":4},"end":{"line":39,"column":4}}},"3":{"name":"snapshotInfoBatch","line":45,"loc":{"start":{"line":45,"column":4},"end":{"line":51,"column":4}}},"4":{"name":"snapshotInfoBatch","line":57,"loc":{"start":{"line":57,"column":4},"end":{"line":68,"column":4}}},"5":{"name":"snapshotBalanceOf","line":74,"loc":{"start":{"line":74,"column":4},"end":{"line":84,"column":4}}},"6":{"name":"snapshotTotalSupply","line":91,"loc":{"start":{"line":91,"column":4},"end":{"line":97,"column":4}}},"7":{"name":"_snapshotUpdate","line":104,"loc":{"start":{"line":104,"column":4},"end":{"line":124,"column":4}}},"8":{"name":"_updateAccountSnapshot","line":129,"loc":{"start":{"line":129,"column":4},"end":{"line":131,"column":4}}},"9":{"name":"_updateTotalSupplySnapshot","line":136,"loc":{"start":{"line":136,"column":4},"end":{"line":138,"column":4}}}},"statementMap":{"1":{"start":{"line":47,"column":8},"end":{"line":47,"column":1933}},"2":{"start":{"line":60,"column":8},"end":{"line":60,"column":2596}},"3":{"start":{"line":78,"column":8},"end":{"line":78,"column":3393}},"4":{"start":{"line":83,"column":8},"end":{"line":83,"column":53}},"5":{"start":{"line":92,"column":8},"end":{"line":92,"column":3864}},"6":{"start":{"line":96,"column":8},"end":{"line":96,"column":50}},"7":{"start":{"line":108,"column":8},"end":{"line":108,"column":28}},"8":{"start":{"line":109,"column":8},"end":{"line":109,"column":4394}},"9":{"start":{"line":111,"column":12},"end":{"line":111,"column":39}},"10":{"start":{"line":112,"column":12},"end":{"line":112,"column":4520}},"11":{"start":{"line":114,"column":16},"end":{"line":114,"column":41}},"12":{"start":{"line":117,"column":16},"end":{"line":117,"column":43}},"13":{"start":{"line":121,"column":12},"end":{"line":121,"column":37}},"14":{"start":{"line":122,"column":12},"end":{"line":122,"column":39}},"15":{"start":{"line":130,"column":8},"end":{"line":130,"column":77}},"16":{"start":{"line":137,"column":8},"end":{"line":137,"column":60}}},"branchMap":{"1":{"line":27,"type":"if","locations":[{"start":{"line":27,"column":55},"end":{"line":27,"column":55}},{"start":{"line":27,"column":55},"end":{"line":27,"column":55}}]},"2":{"line":83,"type":"if","locations":[{"start":{"line":83,"column":29},"end":{"line":83,"column":33}},{"start":{"line":83,"column":37},"end":{"line":83,"column":52}}]},"3":{"line":96,"type":"if","locations":[{"start":{"line":96,"column":29},"end":{"line":96,"column":33}},{"start":{"line":96,"column":37},"end":{"line":96,"column":49}}]},"4":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":8}},{"start":{"line":109,"column":8},"end":{"line":109,"column":8}}]},"5":{"line":112,"type":"if","locations":[{"start":{"line":112,"column":12},"end":{"line":112,"column":12}},{"start":{"line":112,"column":12},"end":{"line":112,"column":12}}]}}}, +"contracts/modules/internal/ValidationModuleInternal.sol":{"l":{"27":387,"28":16,"29":16,"41":12,"50":6,"61":6,"65":57},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/internal/ValidationModuleInternal.sol","s":{"1":387,"2":16,"3":12,"4":6,"5":6,"6":57},"b":{"1":[387,0],"2":[16,371]},"f":{"1":387,"2":12,"3":6,"4":6,"5":57},"fnMap":{"1":{"name":"__Validation_init_unchained","line":26,"loc":{"start":{"line":24,"column":4},"end":{"line":31,"column":4}}},"2":{"name":"_validateTransfer","line":36,"loc":{"start":{"line":36,"column":4},"end":{"line":42,"column":4}}},"3":{"name":"_messageForTransferRestriction","line":47,"loc":{"start":{"line":47,"column":4},"end":{"line":51,"column":4}}},"4":{"name":"_detectTransferRestriction","line":56,"loc":{"start":{"line":56,"column":4},"end":{"line":62,"column":4}}},"5":{"name":"_operateOnTransfer","line":64,"loc":{"start":{"line":64,"column":4},"end":{"line":66,"column":4}}}},"statementMap":{"1":{"start":{"line":27,"column":8},"end":{"line":27,"column":758}},"2":{"start":{"line":29,"column":12},"end":{"line":29,"column":39}},"3":{"start":{"line":41,"column":8},"end":{"line":41,"column":60}},"4":{"start":{"line":50,"column":8},"end":{"line":50,"column":72}},"5":{"start":{"line":61,"column":8},"end":{"line":61,"column":69}},"6":{"start":{"line":65,"column":8},"end":{"line":65,"column":61}}},"branchMap":{"1":{"line":26,"type":"if","locations":[{"start":{"line":26,"column":15},"end":{"line":26,"column":15}},{"start":{"line":26,"column":15},"end":{"line":26,"column":15}}]},"2":{"line":27,"type":"if","locations":[{"start":{"line":27,"column":8},"end":{"line":27,"column":8}},{"start":{"line":27,"column":8},"end":{"line":27,"column":8}}]}}}, +"contracts/modules/security/AuthorizationModule.sol":{"l":{"24":387,"25":3,"27":384,"28":384,"29":0,"42":8,"43":2,"45":6,"46":6,"50":35,"51":3,"52":3,"54":2,"57":33,"61":5,"62":3,"63":3,"65":2,"68":3,"79":1443,"80":810,"82":633},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/security/AuthorizationModule.sol","s":{"1":387,"2":384,"3":384,"4":8,"5":6,"6":35,"7":3,"8":3,"9":33,"10":5,"11":3,"12":3,"13":3,"14":1443,"15":810,"16":633},"b":{"1":[387,0],"2":[3,384],"3":[0,384],"4":[8,2],"5":[2,6],"6":[35,4],"7":[3,32],"8":[2,1],"9":[5,4],"10":[3,2],"11":[2,1],"12":[810,633]},"f":{"1":387,"2":8,"3":35,"4":5,"5":1443},"fnMap":{"1":{"name":"__AuthorizationModule_init_unchained","line":23,"loc":{"start":{"line":22,"column":4},"end":{"line":33,"column":4}}},"2":{"name":"setAuthorizationEngine","line":41,"loc":{"start":{"line":39,"column":4},"end":{"line":47,"column":4}}},"3":{"name":"grantRole","line":49,"loc":{"start":{"line":49,"column":4},"end":{"line":58,"column":4}}},"4":{"name":"revokeRole","line":60,"loc":{"start":{"line":60,"column":4},"end":{"line":69,"column":4}}},"5":{"name":"hasRole","line":74,"loc":{"start":{"line":74,"column":4},"end":{"line":83,"column":4}}}},"statementMap":{"1":{"start":{"line":24,"column":8},"end":{"line":24,"column":889}},"2":{"start":{"line":27,"column":8},"end":{"line":27,"column":44}},"3":{"start":{"line":28,"column":8},"end":{"line":28,"column":1056}},"4":{"start":{"line":42,"column":8},"end":{"line":42,"column":1483}},"5":{"start":{"line":46,"column":8},"end":{"line":46,"column":54}},"6":{"start":{"line":50,"column":8},"end":{"line":50,"column":1852}},"7":{"start":{"line":51,"column":12},"end":{"line":51,"column":79}},"8":{"start":{"line":52,"column":12},"end":{"line":52,"column":2000}},"9":{"start":{"line":57,"column":8},"end":{"line":57,"column":64}},"10":{"start":{"line":61,"column":8},"end":{"line":61,"column":2361}},"11":{"start":{"line":62,"column":12},"end":{"line":62,"column":80}},"12":{"start":{"line":63,"column":12},"end":{"line":63,"column":2510}},"13":{"start":{"line":68,"column":8},"end":{"line":68,"column":65}},"14":{"start":{"line":79,"column":8},"end":{"line":79,"column":3041}},"15":{"start":{"line":80,"column":12},"end":{"line":80,"column":23}},"16":{"start":{"line":82,"column":8},"end":{"line":82,"column":62}}},"branchMap":{"1":{"line":23,"type":"if","locations":[{"start":{"line":23,"column":13},"end":{"line":23,"column":13}},{"start":{"line":23,"column":13},"end":{"line":23,"column":13}}]},"2":{"line":24,"type":"if","locations":[{"start":{"line":24,"column":8},"end":{"line":24,"column":8}},{"start":{"line":24,"column":8},"end":{"line":24,"column":8}}]},"3":{"line":28,"type":"if","locations":[{"start":{"line":28,"column":8},"end":{"line":28,"column":8}},{"start":{"line":28,"column":8},"end":{"line":28,"column":8}}]},"4":{"line":41,"type":"if","locations":[{"start":{"line":41,"column":15},"end":{"line":41,"column":15}},{"start":{"line":41,"column":15},"end":{"line":41,"column":15}}]},"5":{"line":42,"type":"if","locations":[{"start":{"line":42,"column":8},"end":{"line":42,"column":8}},{"start":{"line":42,"column":8},"end":{"line":42,"column":8}}]},"6":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":70},"end":{"line":49,"column":70}},{"start":{"line":49,"column":70},"end":{"line":49,"column":70}}]},"7":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":8},"end":{"line":50,"column":8}},{"start":{"line":50,"column":8},"end":{"line":50,"column":8}}]},"8":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":12},"end":{"line":52,"column":12}},{"start":{"line":52,"column":12},"end":{"line":52,"column":12}}]},"9":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":71},"end":{"line":60,"column":71}},{"start":{"line":60,"column":71},"end":{"line":60,"column":71}}]},"10":{"line":61,"type":"if","locations":[{"start":{"line":61,"column":8},"end":{"line":61,"column":8}},{"start":{"line":61,"column":8},"end":{"line":61,"column":8}}]},"11":{"line":63,"type":"if","locations":[{"start":{"line":63,"column":12},"end":{"line":63,"column":12}},{"start":{"line":63,"column":12},"end":{"line":63,"column":12}}]},"12":{"line":79,"type":"if","locations":[{"start":{"line":79,"column":8},"end":{"line":79,"column":8}},{"start":{"line":79,"column":8},"end":{"line":79,"column":8}}]}}}, +"contracts/modules/wrapper/controllers/ValidationModule.sol":{"l":{"37":20,"38":6,"40":14,"41":14,"52":20,"53":3,"58":4,"63":2,"68":2,"70":6,"72":3,"88":17,"89":4,"91":2,"93":2,"95":6,"97":3,"106":19,"107":4,"109":15,"110":12,"112":3,"120":483,"121":32,"123":451,"127":464,"128":28,"130":436,"131":57,"133":379},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol","s":{"1":20,"2":14,"3":20,"4":3,"5":17,"6":4,"7":13,"8":2,"9":11,"10":2,"11":9,"12":6,"13":3,"14":17,"15":4,"16":13,"17":2,"18":11,"19":2,"20":9,"21":6,"22":3,"23":19,"24":4,"25":15,"26":12,"27":3,"28":483,"29":32,"30":451,"31":464,"32":28,"33":436,"34":57,"35":379},"b":{"1":[384,0],"2":[20,6],"3":[6,14],"4":[3,17],"5":[4,13],"6":[2,11],"7":[2,9],"8":[6,3],"9":[4,13],"10":[2,11],"11":[2,9],"12":[6,3],"13":[4,15],"14":[12,3],"15":[32,451],"16":[22,6],"17":[6,4],"18":[28,436],"19":[57,379]},"f":{"1":384,"2":20,"3":20,"4":17,"5":19,"6":483,"7":464},"fnMap":{"1":{"name":"__ValidationModule_init_unchained","line":26,"loc":{"start":{"line":26,"column":4},"end":{"line":28,"column":4}}},"2":{"name":"setRuleEngine","line":36,"loc":{"start":{"line":34,"column":4},"end":{"line":42,"column":4}}},"3":{"name":"messageForTransferRestriction","line":49,"loc":{"start":{"line":49,"column":4},"end":{"line":74,"column":4}}},"4":{"name":"detectTransferRestriction","line":83,"loc":{"start":{"line":83,"column":4},"end":{"line":99,"column":4}}},"5":{"name":"validateTransfer","line":101,"loc":{"start":{"line":101,"column":4},"end":{"line":113,"column":4}}},"6":{"name":"_validateTransferByModule","line":115,"loc":{"start":{"line":115,"column":4},"end":{"line":124,"column":4}}},"7":{"name":"_operateOnTransfer","line":126,"loc":{"start":{"line":126,"column":4},"end":{"line":134,"column":4}}}},"statementMap":{"1":{"start":{"line":37,"column":8},"end":{"line":37,"column":1014}},"2":{"start":{"line":41,"column":8},"end":{"line":41,"column":36}},"3":{"start":{"line":52,"column":8},"end":{"line":52,"column":1701}},"4":{"start":{"line":53,"column":12},"end":{"line":53,"column":35}},"5":{"start":{"line":54,"column":15},"end":{"line":54,"column":1817}},"6":{"start":{"line":58,"column":12},"end":{"line":58,"column":48}},"7":{"start":{"line":59,"column":15},"end":{"line":59,"column":1993}},"8":{"start":{"line":63,"column":12},"end":{"line":63,"column":53}},"9":{"start":{"line":64,"column":15},"end":{"line":64,"column":2179}},"10":{"start":{"line":68,"column":12},"end":{"line":68,"column":51}},"11":{"start":{"line":69,"column":15},"end":{"line":69,"column":2361}},"12":{"start":{"line":70,"column":12},"end":{"line":70,"column":66}},"13":{"start":{"line":72,"column":12},"end":{"line":72,"column":36}},"14":{"start":{"line":88,"column":8},"end":{"line":88,"column":3057}},"15":{"start":{"line":89,"column":12},"end":{"line":89,"column":69}},"16":{"start":{"line":90,"column":15},"end":{"line":90,"column":3159}},"17":{"start":{"line":91,"column":12},"end":{"line":91,"column":74}},"18":{"start":{"line":92,"column":15},"end":{"line":92,"column":3270}},"19":{"start":{"line":93,"column":12},"end":{"line":93,"column":72}},"20":{"start":{"line":94,"column":15},"end":{"line":94,"column":3377}},"21":{"start":{"line":95,"column":12},"end":{"line":95,"column":63}},"22":{"start":{"line":97,"column":12},"end":{"line":97,"column":56}},"23":{"start":{"line":106,"column":8},"end":{"line":106,"column":3723}},"24":{"start":{"line":107,"column":12},"end":{"line":107,"column":24}},"25":{"start":{"line":109,"column":8},"end":{"line":109,"column":3819}},"26":{"start":{"line":110,"column":12},"end":{"line":110,"column":54}},"27":{"start":{"line":112,"column":8},"end":{"line":112,"column":19}},"28":{"start":{"line":120,"column":8},"end":{"line":120,"column":4108}},"29":{"start":{"line":121,"column":12},"end":{"line":121,"column":24}},"30":{"start":{"line":123,"column":8},"end":{"line":123,"column":19}},"31":{"start":{"line":127,"column":8},"end":{"line":127,"column":4334}},"32":{"start":{"line":128,"column":12},"end":{"line":128,"column":24}},"33":{"start":{"line":130,"column":8},"end":{"line":130,"column":4429}},"34":{"start":{"line":131,"column":12},"end":{"line":131,"column":80}},"35":{"start":{"line":133,"column":8},"end":{"line":133,"column":19}}},"branchMap":{"1":{"line":26,"type":"if","locations":[{"start":{"line":26,"column":58},"end":{"line":26,"column":58}},{"start":{"line":26,"column":58},"end":{"line":26,"column":58}}]},"2":{"line":36,"type":"if","locations":[{"start":{"line":36,"column":15},"end":{"line":36,"column":15}},{"start":{"line":36,"column":15},"end":{"line":36,"column":15}}]},"3":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":8},"end":{"line":37,"column":8}},{"start":{"line":37,"column":8},"end":{"line":37,"column":8}}]},"4":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":8},"end":{"line":52,"column":8}},{"start":{"line":52,"column":8},"end":{"line":52,"column":8}}]},"5":{"line":54,"type":"if","locations":[{"start":{"line":54,"column":15},"end":{"line":54,"column":15}},{"start":{"line":54,"column":15},"end":{"line":54,"column":15}}]},"6":{"line":59,"type":"if","locations":[{"start":{"line":59,"column":15},"end":{"line":59,"column":15}},{"start":{"line":59,"column":15},"end":{"line":59,"column":15}}]},"7":{"line":64,"type":"if","locations":[{"start":{"line":64,"column":15},"end":{"line":64,"column":15}},{"start":{"line":64,"column":15},"end":{"line":64,"column":15}}]},"8":{"line":69,"type":"if","locations":[{"start":{"line":69,"column":15},"end":{"line":69,"column":15}},{"start":{"line":69,"column":15},"end":{"line":69,"column":15}}]},"9":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":88,"column":8}},{"start":{"line":88,"column":8},"end":{"line":88,"column":8}}]},"10":{"line":90,"type":"if","locations":[{"start":{"line":90,"column":15},"end":{"line":90,"column":15}},{"start":{"line":90,"column":15},"end":{"line":90,"column":15}}]},"11":{"line":92,"type":"if","locations":[{"start":{"line":92,"column":15},"end":{"line":92,"column":15}},{"start":{"line":92,"column":15},"end":{"line":92,"column":15}}]},"12":{"line":94,"type":"if","locations":[{"start":{"line":94,"column":15},"end":{"line":94,"column":15}},{"start":{"line":94,"column":15},"end":{"line":94,"column":15}}]},"13":{"line":106,"type":"if","locations":[{"start":{"line":106,"column":8},"end":{"line":106,"column":8}},{"start":{"line":106,"column":8},"end":{"line":106,"column":8}}]},"14":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":8}},{"start":{"line":109,"column":8},"end":{"line":109,"column":8}}]},"15":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":8},"end":{"line":120,"column":8}},{"start":{"line":120,"column":8},"end":{"line":120,"column":8}}]},"16":{"line":120,"type":"cond-expr","locations":[{"start":{"line":120,"column":12},"end":{"line":120,"column":19}},{"start":{"line":120,"column":24},"end":{"line":120,"column":35}}]},"17":{"line":120,"type":"cond-expr","locations":[{"start":{"line":120,"column":12},"end":{"line":120,"column":35}},{"start":{"line":120,"column":40},"end":{"line":120,"column":49}}]},"18":{"line":127,"type":"if","locations":[{"start":{"line":127,"column":8},"end":{"line":127,"column":8}},{"start":{"line":127,"column":8},"end":{"line":127,"column":8}}]},"19":{"line":130,"type":"if","locations":[{"start":{"line":130,"column":8},"end":{"line":130,"column":8}},{"start":{"line":130,"column":8},"end":{"line":130,"column":8}}]}}}, +"contracts/modules/wrapper/core/BaseModule.sol":{"l":{"46":384,"47":384,"48":384,"49":384,"59":2,"60":2,"69":2,"70":2,"79":2,"80":2,"87":6,"88":4,"90":2,"91":2},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/BaseModule.sol","s":{"1":2,"2":2,"3":2,"4":6,"5":2},"b":{"1":[384,0],"2":[2,4],"3":[2,4],"4":[2,4],"5":[6,4],"6":[4,2]},"f":{"1":384,"2":2,"3":2,"4":2,"5":6},"fnMap":{"1":{"name":"__Base_init_unchained","line":45,"loc":{"start":{"line":40,"column":4},"end":{"line":50,"column":4}}},"2":{"name":"setTokenId","line":58,"loc":{"start":{"line":56,"column":4},"end":{"line":61,"column":4}}},"3":{"name":"setTerms","line":68,"loc":{"start":{"line":66,"column":4},"end":{"line":71,"column":4}}},"4":{"name":"setInformation","line":78,"loc":{"start":{"line":76,"column":4},"end":{"line":81,"column":4}}},"5":{"name":"setFlag","line":86,"loc":{"start":{"line":86,"column":4},"end":{"line":92,"column":4}}}},"statementMap":{"1":{"start":{"line":60,"column":8},"end":{"line":60,"column":40}},"2":{"start":{"line":70,"column":8},"end":{"line":70,"column":33}},"3":{"start":{"line":80,"column":8},"end":{"line":80,"column":52}},"4":{"start":{"line":87,"column":8},"end":{"line":87,"column":2469}},"5":{"start":{"line":91,"column":8},"end":{"line":91,"column":24}}},"branchMap":{"1":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":15},"end":{"line":45,"column":15}},{"start":{"line":45,"column":15},"end":{"line":45,"column":15}}]},"2":{"line":58,"type":"if","locations":[{"start":{"line":58,"column":13},"end":{"line":58,"column":13}},{"start":{"line":58,"column":13},"end":{"line":58,"column":13}}]},"3":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":13},"end":{"line":68,"column":13}},{"start":{"line":68,"column":13},"end":{"line":68,"column":13}}]},"4":{"line":78,"type":"if","locations":[{"start":{"line":78,"column":13},"end":{"line":78,"column":13}},{"start":{"line":78,"column":13},"end":{"line":78,"column":13}}]},"5":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":43},"end":{"line":86,"column":43}},{"start":{"line":86,"column":43},"end":{"line":86,"column":43}}]},"6":{"line":87,"type":"if","locations":[{"start":{"line":87,"column":8},"end":{"line":87,"column":8}},{"start":{"line":87,"column":8},"end":{"line":87,"column":8}}]}}}, +"contracts/modules/wrapper/core/EnforcementModule.sol":{"l":{"38":22,"52":8},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol","s":{"1":22,"2":8},"b":{"1":[384,0],"2":[22,4],"3":[8,4]},"f":{"1":384,"2":22,"3":8},"fnMap":{"1":{"name":"__EnforcementModule_init_unchained","line":25,"loc":{"start":{"line":25,"column":4},"end":{"line":27,"column":4}}},"2":{"name":"freeze","line":37,"loc":{"start":{"line":34,"column":4},"end":{"line":39,"column":4}}},"3":{"name":"unfreeze","line":51,"loc":{"start":{"line":48,"column":4},"end":{"line":53,"column":4}}}},"statementMap":{"1":{"start":{"line":38,"column":8},"end":{"line":38,"column":39}},"2":{"start":{"line":52,"column":8},"end":{"line":52,"column":41}}},"branchMap":{"1":{"line":25,"type":"if","locations":[{"start":{"line":25,"column":59},"end":{"line":25,"column":59}},{"start":{"line":25,"column":59},"end":{"line":25,"column":59}}]},"2":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":13},"end":{"line":37,"column":13}},{"start":{"line":37,"column":13},"end":{"line":37,"column":13}}]},"3":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":13},"end":{"line":51,"column":13}},{"start":{"line":51,"column":13},"end":{"line":51,"column":13}}]}}}, +"contracts/modules/wrapper/core/ERC20BaseModule.sol":{"l":{"31":384,"41":2,"60":18,"61":4,"65":14,"66":8,"69":6,"72":14,"76":2,"91":18,"93":2,"94":2,"97":2,"106":4,"107":4,"108":6,"110":4},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol","s":{"1":2,"2":18,"3":14,"4":6,"5":14,"6":2,"7":18,"8":2,"9":2,"10":2,"11":4},"b":{"1":[384,0],"2":[4,14],"3":[8,6],"4":[2,0]},"f":{"1":384,"2":2,"3":18,"4":18,"5":4},"fnMap":{"1":{"name":"__ERC20BaseModule_init_unchained","line":30,"loc":{"start":{"line":28,"column":4},"end":{"line":32,"column":4}}},"2":{"name":"decimals","line":40,"loc":{"start":{"line":40,"column":4},"end":{"line":42,"column":4}}},"3":{"name":"transferBatch","line":56,"loc":{"start":{"line":56,"column":4},"end":{"line":77,"column":4}}},"4":{"name":"transferFrom","line":86,"loc":{"start":{"line":86,"column":4},"end":{"line":98,"column":4}}},"5":{"name":"balanceInfo","line":105,"loc":{"start":{"line":105,"column":4},"end":{"line":111,"column":4}}}},"statementMap":{"1":{"start":{"line":41,"column":8},"end":{"line":41,"column":24}},"2":{"start":{"line":60,"column":8},"end":{"line":60,"column":1942}},"3":{"start":{"line":65,"column":8},"end":{"line":65,"column":2159}},"4":{"start":{"line":69,"column":8},"end":{"line":69,"column":2354}},"5":{"start":{"line":72,"column":12},"end":{"line":72,"column":70}},"6":{"start":{"line":76,"column":8},"end":{"line":76,"column":19}},"7":{"start":{"line":91,"column":8},"end":{"line":91,"column":68}},"8":{"start":{"line":93,"column":8},"end":{"line":93,"column":3304}},"9":{"start":{"line":94,"column":12},"end":{"line":94,"column":49}},"10":{"start":{"line":97,"column":8},"end":{"line":97,"column":21}},"11":{"start":{"line":107,"column":8},"end":{"line":107,"column":3797}}},"branchMap":{"1":{"line":30,"type":"if","locations":[{"start":{"line":30,"column":15},"end":{"line":30,"column":15}},{"start":{"line":30,"column":15},"end":{"line":30,"column":15}}]},"2":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":8},"end":{"line":60,"column":8}},{"start":{"line":60,"column":8},"end":{"line":60,"column":8}}]},"3":{"line":65,"type":"if","locations":[{"start":{"line":65,"column":8},"end":{"line":65,"column":8}},{"start":{"line":65,"column":8},"end":{"line":65,"column":8}}]},"4":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":8},"end":{"line":93,"column":8}},{"start":{"line":93,"column":8},"end":{"line":93,"column":8}}]}}}, +"contracts/modules/wrapper/core/ERC20BurnModule.sol":{"l":{"37":18,"38":14,"61":20,"62":4,"66":16,"67":8,"70":8,"71":24,"72":20,"95":6,"96":6,"97":6,"99":4,"102":2,"103":2,"106":2,"108":2,"110":2},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol","s":{"1":18,"2":14,"3":20,"4":16,"5":8,"6":24,"7":20,"8":6,"9":6,"10":6,"11":2,"12":2,"13":2,"14":2},"b":{"1":[384,0],"2":[18,8],"3":[20,4],"4":[4,16],"5":[8,8],"6":[6,4],"7":[4,2]},"f":{"1":384,"2":18,"3":20,"4":6},"fnMap":{"1":{"name":"__ERC20BurnModule_init_unchained","line":19,"loc":{"start":{"line":19,"column":4},"end":{"line":21,"column":4}}},"2":{"name":"burn","line":36,"loc":{"start":{"line":32,"column":4},"end":{"line":39,"column":4}}},"3":{"name":"burnBatch","line":60,"loc":{"start":{"line":56,"column":4},"end":{"line":74,"column":4}}},"4":{"name":"burnFrom","line":92,"loc":{"start":{"line":90,"column":4},"end":{"line":111,"column":4}}}},"statementMap":{"1":{"start":{"line":37,"column":8},"end":{"line":37,"column":28}},"2":{"start":{"line":38,"column":8},"end":{"line":38,"column":41}},"3":{"start":{"line":61,"column":8},"end":{"line":61,"column":2316}},"4":{"start":{"line":66,"column":8},"end":{"line":66,"column":2538}},"5":{"start":{"line":70,"column":8},"end":{"line":70,"column":2738}},"6":{"start":{"line":71,"column":12},"end":{"line":71,"column":40}},"7":{"start":{"line":72,"column":12},"end":{"line":72,"column":53}},"8":{"start":{"line":95,"column":8},"end":{"line":95,"column":38}},"9":{"start":{"line":96,"column":8},"end":{"line":96,"column":61}},"10":{"start":{"line":97,"column":8},"end":{"line":97,"column":3627}},"11":{"start":{"line":103,"column":12},"end":{"line":103,"column":62}},"12":{"start":{"line":106,"column":8},"end":{"line":106,"column":28}},"13":{"start":{"line":108,"column":8},"end":{"line":108,"column":45}},"14":{"start":{"line":110,"column":8},"end":{"line":110,"column":45}}},"branchMap":{"1":{"line":19,"type":"if","locations":[{"start":{"line":19,"column":57},"end":{"line":19,"column":57}},{"start":{"line":19,"column":57},"end":{"line":19,"column":57}}]},"2":{"line":36,"type":"if","locations":[{"start":{"line":36,"column":13},"end":{"line":36,"column":13}},{"start":{"line":36,"column":13},"end":{"line":36,"column":13}}]},"3":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":13},"end":{"line":60,"column":13}},{"start":{"line":60,"column":13},"end":{"line":60,"column":13}}]},"4":{"line":61,"type":"if","locations":[{"start":{"line":61,"column":8},"end":{"line":61,"column":8}},{"start":{"line":61,"column":8},"end":{"line":61,"column":8}}]},"5":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":8},"end":{"line":66,"column":8}},{"start":{"line":66,"column":8},"end":{"line":66,"column":8}}]},"6":{"line":92,"type":"if","locations":[{"start":{"line":92,"column":8},"end":{"line":92,"column":8}},{"start":{"line":92,"column":8},"end":{"line":92,"column":8}}]},"7":{"line":97,"type":"if","locations":[{"start":{"line":97,"column":8},"end":{"line":97,"column":8}},{"start":{"line":97,"column":8},"end":{"line":97,"column":8}}]}}}, +"contracts/modules/wrapper/core/ERC20MintModule.sol":{"l":{"35":277,"36":277,"58":30,"59":4,"63":26,"64":8,"67":18,"68":54,"69":54},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol","s":{"1":277,"2":277,"3":30,"4":26,"5":18,"6":54,"7":54},"b":{"1":[384,0],"2":[277,8],"3":[30,4],"4":[4,26],"5":[8,18]},"f":{"1":384,"2":277,"3":30},"fnMap":{"1":{"name":"__ERC20MintModule_init_unchained","line":17,"loc":{"start":{"line":17,"column":4},"end":{"line":19,"column":4}}},"2":{"name":"mint","line":34,"loc":{"start":{"line":34,"column":4},"end":{"line":37,"column":4}}},"3":{"name":"mintBatch","line":57,"loc":{"start":{"line":54,"column":4},"end":{"line":71,"column":4}}}},"statementMap":{"1":{"start":{"line":35,"column":8},"end":{"line":35,"column":28}},"2":{"start":{"line":36,"column":8},"end":{"line":36,"column":33}},"3":{"start":{"line":58,"column":8},"end":{"line":58,"column":2105}},"4":{"start":{"line":63,"column":8},"end":{"line":63,"column":2327}},"5":{"start":{"line":67,"column":8},"end":{"line":67,"column":2527}},"6":{"start":{"line":68,"column":12},"end":{"line":68,"column":40}},"7":{"start":{"line":69,"column":12},"end":{"line":69,"column":45}}},"branchMap":{"1":{"line":17,"type":"if","locations":[{"start":{"line":17,"column":57},"end":{"line":17,"column":57}},{"start":{"line":17,"column":57},"end":{"line":17,"column":57}}]},"2":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":57},"end":{"line":34,"column":57}},{"start":{"line":34,"column":57},"end":{"line":34,"column":57}}]},"3":{"line":57,"type":"if","locations":[{"start":{"line":57,"column":13},"end":{"line":57,"column":13}},{"start":{"line":57,"column":13},"end":{"line":57,"column":13}}]},"4":{"line":58,"type":"if","locations":[{"start":{"line":58,"column":8},"end":{"line":58,"column":8}},{"start":{"line":58,"column":8},"end":{"line":58,"column":8}}]},"5":{"line":63,"type":"if","locations":[{"start":{"line":63,"column":8},"end":{"line":63,"column":8}},{"start":{"line":63,"column":8},"end":{"line":63,"column":8}}]}}}, +"contracts/modules/wrapper/core/PauseModule.sol":{"l":{"40":14,"52":8,"53":4,"55":4,"71":2,"72":2,"73":2,"80":4},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/PauseModule.sol","s":{"1":14,"2":8,"3":4,"4":2,"5":2,"6":4},"b":{"1":[384,0],"2":[14,6],"3":[8,4],"4":[4,4],"5":[2,4]},"f":{"1":384,"2":14,"3":8,"4":2,"5":4},"fnMap":{"1":{"name":"__PauseModule_init_unchained","line":26,"loc":{"start":{"line":26,"column":4},"end":{"line":28,"column":4}}},"2":{"name":"pause","line":39,"loc":{"start":{"line":39,"column":4},"end":{"line":41,"column":4}}},"3":{"name":"unpause","line":51,"loc":{"start":{"line":51,"column":4},"end":{"line":56,"column":4}}},"4":{"name":"deactivateContract","line":69,"loc":{"start":{"line":67,"column":4},"end":{"line":74,"column":4}}},"5":{"name":"deactivated","line":79,"loc":{"start":{"line":79,"column":4},"end":{"line":81,"column":4}}}},"statementMap":{"1":{"start":{"line":40,"column":8},"end":{"line":40,"column":15}},"2":{"start":{"line":52,"column":8},"end":{"line":52,"column":1627}},"3":{"start":{"line":55,"column":8},"end":{"line":55,"column":17}},"4":{"start":{"line":72,"column":7},"end":{"line":72,"column":14}},"5":{"start":{"line":73,"column":7},"end":{"line":73,"column":37}},"6":{"start":{"line":80,"column":8},"end":{"line":80,"column":28}}},"branchMap":{"1":{"line":26,"type":"if","locations":[{"start":{"line":26,"column":53},"end":{"line":26,"column":53}},{"start":{"line":26,"column":53},"end":{"line":26,"column":53}}]},"2":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":28},"end":{"line":39,"column":28}},{"start":{"line":39,"column":28},"end":{"line":39,"column":28}}]},"3":{"line":51,"type":"if","locations":[{"start":{"line":51,"column":30},"end":{"line":51,"column":30}},{"start":{"line":51,"column":30},"end":{"line":51,"column":30}}]},"4":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":8},"end":{"line":52,"column":8}},{"start":{"line":52,"column":8},"end":{"line":52,"column":8}}]},"5":{"line":69,"type":"if","locations":[{"start":{"line":69,"column":8},"end":{"line":69,"column":8}},{"start":{"line":69,"column":8},"end":{"line":69,"column":8}}]}}}, +"contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol":{"l":{"41":2,"42":2,"43":2,"44":2,"53":6,"54":4,"56":2,"57":2,"66":6,"67":4,"69":2,"70":2,"79":2,"80":2},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol","s":{"1":2,"2":2,"3":2,"4":6,"5":2,"6":6,"7":2,"8":2},"b":{"1":[384,0],"2":[2,4],"3":[6,4],"4":[4,2],"5":[6,4],"6":[4,2],"7":[2,4]},"f":{"1":384,"2":2,"3":6,"4":6,"5":2},"fnMap":{"1":{"name":"__CreditEvents_init_unchained","line":28,"loc":{"start":{"line":28,"column":4},"end":{"line":30,"column":4}}},"2":{"name":"setCreditEvents","line":40,"loc":{"start":{"line":36,"column":4},"end":{"line":45,"column":4}}},"3":{"name":"setFlagDefault","line":52,"loc":{"start":{"line":50,"column":4},"end":{"line":58,"column":4}}},"4":{"name":"setFlagRedeemed","line":65,"loc":{"start":{"line":63,"column":4},"end":{"line":71,"column":4}}},"5":{"name":"setRating","line":78,"loc":{"start":{"line":76,"column":4},"end":{"line":81,"column":4}}}},"statementMap":{"1":{"start":{"line":42,"column":8},"end":{"line":42,"column":38}},"2":{"start":{"line":43,"column":8},"end":{"line":43,"column":40}},"3":{"start":{"line":44,"column":8},"end":{"line":44,"column":37}},"4":{"start":{"line":53,"column":8},"end":{"line":53,"column":1784}},"5":{"start":{"line":57,"column":8},"end":{"line":57,"column":38}},"6":{"start":{"line":66,"column":8},"end":{"line":66,"column":2227}},"7":{"start":{"line":70,"column":8},"end":{"line":70,"column":40}},"8":{"start":{"line":80,"column":8},"end":{"line":80,"column":37}}},"branchMap":{"1":{"line":28,"type":"if","locations":[{"start":{"line":28,"column":54},"end":{"line":28,"column":54}},{"start":{"line":28,"column":54},"end":{"line":28,"column":54}}]},"2":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":13},"end":{"line":40,"column":13}},{"start":{"line":40,"column":13},"end":{"line":40,"column":13}}]},"3":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":13},"end":{"line":52,"column":13}},{"start":{"line":52,"column":13},"end":{"line":52,"column":13}}]},"4":{"line":53,"type":"if","locations":[{"start":{"line":53,"column":8},"end":{"line":53,"column":8}},{"start":{"line":53,"column":8},"end":{"line":53,"column":8}}]},"5":{"line":65,"type":"if","locations":[{"start":{"line":65,"column":13},"end":{"line":65,"column":13}},{"start":{"line":65,"column":13},"end":{"line":65,"column":13}}]},"6":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":8},"end":{"line":66,"column":8}},{"start":{"line":66,"column":8},"end":{"line":66,"column":8}}]},"7":{"line":78,"type":"if","locations":[{"start":{"line":78,"column":13},"end":{"line":78,"column":13}},{"start":{"line":78,"column":13},"end":{"line":78,"column":13}}]}}}, +"contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol":{"l":{"69":2,"70":2,"71":2,"72":2,"73":2,"74":2,"75":2,"79":2,"83":2,"87":2,"91":2,"96":2,"98":2,"105":6,"106":4,"108":2,"109":2,"116":6,"117":4,"119":2,"120":2,"129":2,"130":2,"139":2,"140":2,"149":2,"150":2,"159":2,"160":2,"172":2,"173":2,"182":2,"183":2,"192":2,"193":2,"205":2,"206":2,"218":2,"219":2,"228":2,"229":2},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol","s":{"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2,"13":6,"14":2,"15":6,"16":2,"17":2,"18":2,"19":2,"20":2,"21":2,"22":2,"23":2,"24":2,"25":2,"26":2},"b":{"1":[384,0],"2":[2,4],"3":[6,4],"4":[4,2],"5":[6,4],"6":[4,2],"7":[2,4],"8":[2,4],"9":[2,4],"10":[2,4],"11":[2,4],"12":[2,4],"13":[2,4],"14":[2,4],"15":[2,4],"16":[2,4]},"f":{"1":384,"2":2,"3":6,"4":6,"5":2,"6":2,"7":2,"8":2,"9":2,"10":2,"11":2,"12":2,"13":2,"14":2},"fnMap":{"1":{"name":"__DebtBaseModule_init_unchained","line":60,"loc":{"start":{"line":60,"column":4},"end":{"line":62,"column":4}}},"2":{"name":"setDebt","line":68,"loc":{"start":{"line":68,"column":4},"end":{"line":99,"column":4}}},"3":{"name":"setInterestRate","line":104,"loc":{"start":{"line":104,"column":4},"end":{"line":110,"column":4}}},"4":{"name":"setParValue","line":115,"loc":{"start":{"line":115,"column":4},"end":{"line":121,"column":4}}},"5":{"name":"setGuarantor","line":128,"loc":{"start":{"line":126,"column":4},"end":{"line":131,"column":4}}},"6":{"name":"setBondHolder","line":138,"loc":{"start":{"line":136,"column":4},"end":{"line":141,"column":4}}},"7":{"name":"setMaturityDate","line":148,"loc":{"start":{"line":146,"column":4},"end":{"line":151,"column":4}}},"8":{"name":"setInterestScheduleFormat","line":158,"loc":{"start":{"line":156,"column":4},"end":{"line":164,"column":4}}},"9":{"name":"setInterestPaymentDate","line":171,"loc":{"start":{"line":169,"column":4},"end":{"line":174,"column":4}}},"10":{"name":"setDayCountConvention","line":181,"loc":{"start":{"line":179,"column":4},"end":{"line":184,"column":4}}},"11":{"name":"setBusinessDayConvention","line":191,"loc":{"start":{"line":189,"column":4},"end":{"line":197,"column":4}}},"12":{"name":"setPublicHolidaysCalendar","line":204,"loc":{"start":{"line":202,"column":4},"end":{"line":210,"column":4}}},"13":{"name":"setIssuanceDate","line":217,"loc":{"start":{"line":215,"column":4},"end":{"line":220,"column":4}}},"14":{"name":"setCouponFrequency","line":227,"loc":{"start":{"line":225,"column":4},"end":{"line":230,"column":4}}}},"statementMap":{"1":{"start":{"line":70,"column":8},"end":{"line":70,"column":45}},"2":{"start":{"line":71,"column":8},"end":{"line":71,"column":37}},"3":{"start":{"line":72,"column":8},"end":{"line":72,"column":56}},"4":{"start":{"line":73,"column":8},"end":{"line":73,"column":59}},"5":{"start":{"line":74,"column":8},"end":{"line":74,"column":65}},"6":{"start":{"line":75,"column":8},"end":{"line":75,"column":2589}},"7":{"start":{"line":79,"column":8},"end":{"line":79,"column":2720}},"8":{"start":{"line":83,"column":8},"end":{"line":83,"column":2842}},"9":{"start":{"line":87,"column":8},"end":{"line":87,"column":2961}},"10":{"start":{"line":91,"column":8},"end":{"line":91,"column":3089}},"11":{"start":{"line":96,"column":8},"end":{"line":96,"column":65}},"12":{"start":{"line":98,"column":8},"end":{"line":98,"column":74}},"13":{"start":{"line":105,"column":8},"end":{"line":105,"column":3572}},"14":{"start":{"line":109,"column":8},"end":{"line":109,"column":40}},"15":{"start":{"line":116,"column":8},"end":{"line":116,"column":3968}},"16":{"start":{"line":120,"column":8},"end":{"line":120,"column":32}},"17":{"start":{"line":130,"column":8},"end":{"line":130,"column":46}},"18":{"start":{"line":140,"column":8},"end":{"line":140,"column":49}},"19":{"start":{"line":150,"column":8},"end":{"line":150,"column":55}},"20":{"start":{"line":160,"column":8},"end":{"line":160,"column":5402}},"21":{"start":{"line":173,"column":8},"end":{"line":173,"column":76}},"22":{"start":{"line":183,"column":8},"end":{"line":183,"column":73}},"23":{"start":{"line":193,"column":8},"end":{"line":193,"column":6592}},"24":{"start":{"line":206,"column":8},"end":{"line":206,"column":7028}},"25":{"start":{"line":219,"column":8},"end":{"line":219,"column":55}},"26":{"start":{"line":229,"column":8},"end":{"line":229,"column":64}}},"branchMap":{"1":{"line":60,"type":"if","locations":[{"start":{"line":60,"column":56},"end":{"line":60,"column":56}},{"start":{"line":60,"column":56},"end":{"line":60,"column":56}}]},"2":{"line":68,"type":"if","locations":[{"start":{"line":68,"column":53},"end":{"line":68,"column":53}},{"start":{"line":68,"column":53},"end":{"line":68,"column":53}}]},"3":{"line":104,"type":"if","locations":[{"start":{"line":104,"column":59},"end":{"line":104,"column":59}},{"start":{"line":104,"column":59},"end":{"line":104,"column":59}}]},"4":{"line":105,"type":"if","locations":[{"start":{"line":105,"column":8},"end":{"line":105,"column":8}},{"start":{"line":105,"column":8},"end":{"line":105,"column":8}}]},"5":{"line":115,"type":"if","locations":[{"start":{"line":115,"column":51},"end":{"line":115,"column":51}},{"start":{"line":115,"column":51},"end":{"line":115,"column":51}}]},"6":{"line":116,"type":"if","locations":[{"start":{"line":116,"column":8},"end":{"line":116,"column":8}},{"start":{"line":116,"column":8},"end":{"line":116,"column":8}}]},"7":{"line":128,"type":"if","locations":[{"start":{"line":128,"column":13},"end":{"line":128,"column":13}},{"start":{"line":128,"column":13},"end":{"line":128,"column":13}}]},"8":{"line":138,"type":"if","locations":[{"start":{"line":138,"column":13},"end":{"line":138,"column":13}},{"start":{"line":138,"column":13},"end":{"line":138,"column":13}}]},"9":{"line":148,"type":"if","locations":[{"start":{"line":148,"column":13},"end":{"line":148,"column":13}},{"start":{"line":148,"column":13},"end":{"line":148,"column":13}}]},"10":{"line":158,"type":"if","locations":[{"start":{"line":158,"column":13},"end":{"line":158,"column":13}},{"start":{"line":158,"column":13},"end":{"line":158,"column":13}}]},"11":{"line":171,"type":"if","locations":[{"start":{"line":171,"column":13},"end":{"line":171,"column":13}},{"start":{"line":171,"column":13},"end":{"line":171,"column":13}}]},"12":{"line":181,"type":"if","locations":[{"start":{"line":181,"column":13},"end":{"line":181,"column":13}},{"start":{"line":181,"column":13},"end":{"line":181,"column":13}}]},"13":{"line":191,"type":"if","locations":[{"start":{"line":191,"column":13},"end":{"line":191,"column":13}},{"start":{"line":191,"column":13},"end":{"line":191,"column":13}}]},"14":{"line":204,"type":"if","locations":[{"start":{"line":204,"column":13},"end":{"line":204,"column":13}},{"start":{"line":204,"column":13},"end":{"line":204,"column":13}}]},"15":{"line":217,"type":"if","locations":[{"start":{"line":217,"column":13},"end":{"line":217,"column":13}},{"start":{"line":217,"column":13},"end":{"line":217,"column":13}}]},"16":{"line":227,"type":"if","locations":[{"start":{"line":227,"column":13},"end":{"line":227,"column":13}},{"start":{"line":227,"column":13},"end":{"line":227,"column":13}}]}}}, +"contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol":{"l":{"30":176,"41":16,"53":38,"64":18,"74":16},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol","s":{"1":176,"2":16,"3":38,"4":18,"5":16},"b":{"1":[384,0],"2":[176,4],"3":[16,4],"4":[38,4],"5":[18,4],"6":[16,4]},"f":{"1":384,"2":176,"3":16,"4":38,"5":18,"6":16},"fnMap":{"1":{"name":"__ERC20SnasphotModule_init_unchained","line":20,"loc":{"start":{"line":20,"column":4},"end":{"line":22,"column":4}}},"2":{"name":"scheduleSnapshot","line":29,"loc":{"start":{"line":29,"column":4},"end":{"line":31,"column":4}}},"3":{"name":"scheduleSnapshotNotOptimized","line":40,"loc":{"start":{"line":38,"column":4},"end":{"line":42,"column":4}}},"4":{"name":"rescheduleSnapshot","line":52,"loc":{"start":{"line":49,"column":4},"end":{"line":54,"column":4}}},"5":{"name":"unscheduleLastSnapshot","line":63,"loc":{"start":{"line":61,"column":4},"end":{"line":65,"column":4}}},"6":{"name":"unscheduleSnapshotNotOptimized","line":73,"loc":{"start":{"line":71,"column":4},"end":{"line":75,"column":4}}}},"statementMap":{"1":{"start":{"line":30,"column":8},"end":{"line":30,"column":30}},"2":{"start":{"line":41,"column":8},"end":{"line":41,"column":42}},"3":{"start":{"line":53,"column":8},"end":{"line":53,"column":44}},"4":{"start":{"line":64,"column":8},"end":{"line":64,"column":36}},"5":{"start":{"line":74,"column":8},"end":{"line":74,"column":44}}},"branchMap":{"1":{"line":20,"type":"if","locations":[{"start":{"line":20,"column":61},"end":{"line":20,"column":61}},{"start":{"line":20,"column":61},"end":{"line":20,"column":61}}]},"2":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":51},"end":{"line":29,"column":51}},{"start":{"line":29,"column":51},"end":{"line":29,"column":51}}]},"3":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":13},"end":{"line":40,"column":13}},{"start":{"line":40,"column":13},"end":{"line":40,"column":13}}]},"4":{"line":52,"type":"if","locations":[{"start":{"line":52,"column":13},"end":{"line":52,"column":13}},{"start":{"line":52,"column":13},"end":{"line":52,"column":13}}]},"5":{"line":63,"type":"if","locations":[{"start":{"line":63,"column":13},"end":{"line":63,"column":13}},{"start":{"line":63,"column":13},"end":{"line":63,"column":13}}]},"6":{"line":73,"type":"if","locations":[{"start":{"line":73,"column":13},"end":{"line":73,"column":13}},{"start":{"line":73,"column":13},"end":{"line":73,"column":13}}]}}}, +"contracts/modules/wrapper/extensions/MetaTxModule.sol":{"l":{},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/extensions/MetaTxModule.sol","s":{},"b":{},"f":{"1":204},"fnMap":{"1":{"name":"constructor","line":18,"loc":{"start":{"line":16,"column":4},"end":{"line":20,"column":4}}}},"statementMap":{},"branchMap":{}}, "contracts/test/proxy/CMTAT_PROXY.sol":{"l":{},"path":"/home/ryan/Downloads/CM/CMTAT/contracts/test/proxy/CMTAT_PROXY.sol","s":{},"b":{},"f":{"1":1},"fnMap":{"1":{"name":"constructor","line":18,"loc":{"start":{"line":16,"column":4},"end":{"line":20,"column":4}}}},"statementMap":{},"branchMap":{}}} diff --git a/doc/general/test/coverage/index.html b/doc/general/test/coverage/index.html index f0b6357e..b4ae6e63 100644 --- a/doc/general/test/coverage/index.html +++ b/doc/general/test/coverage/index.html @@ -20,24 +20,24 @@

- 99.65% + 99.66% Statements - 285/286 + 291/292
- 92.86% + 93.1% Branches - 260/280 + 270/290
- 99.12% + 99.13% Functions - 113/114 + 114/115
- 99.48% + 99.49% Lines - 386/388 + 388/390
@@ -75,13 +75,13 @@

contracts/deployment/
100% - 13/13 + 18/18 100% - 4/4 + 14/14 100% 7/7 100% - 21/21 + 31/31 @@ -153,13 +153,13 @@

contracts/modules/internal/
100% - 30/30 + 31/31 85% 17/20 100% - 17/17 + 18/18 100% - 38/38 + 42/42 @@ -172,7 +172,7 @@

100% 14/14 100% - 108/108 + 102/102 @@ -211,7 +211,7 @@

100% 25/25 100% - 74/74 + 68/68 @@ -259,7 +259,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/CMTAT_PROXY.sol.html b/doc/general/test/coverage/lcov-report/contracts/CMTAT_PROXY.sol.html index ff47c5ca..1f6a919f 100644 --- a/doc/general/test/coverage/lcov-report/contracts/CMTAT_PROXY.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/CMTAT_PROXY.sol.html @@ -80,7 +80,7 @@

      -10× +15×       @@ -112,7 +112,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/CMTAT_STANDALONE.sol.html b/doc/general/test/coverage/lcov-report/contracts/CMTAT_STANDALONE.sol.html index 29e13247..9c1ded84 100644 --- a/doc/general/test/coverage/lcov-report/contracts/CMTAT_STANDALONE.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/CMTAT_STANDALONE.sol.html @@ -208,7 +208,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/deployment/CMTAT_BEACON_FACTORY.sol.html b/doc/general/test/coverage/lcov-report/contracts/deployment/CMTAT_BEACON_FACTORY.sol.html index b37a7f2a..92433794 100644 --- a/doc/general/test/coverage/lcov-report/contracts/deployment/CMTAT_BEACON_FACTORY.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/deployment/CMTAT_BEACON_FACTORY.sol.html @@ -22,12 +22,12 @@

100% Statements - 7/7 + 10/10
100% Branches - 2/2 + 8/8
100% @@ -37,7 +37,7 @@

100% Lines - 11/11 + 17/17

@@ -134,7 +134,17 @@

89 90 91 -92  +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102        @@ -165,6 +175,16 @@

      +  + + +  + + +  + + +  @@ -225,7 +245,7 @@

    - 
// SPDX-License-Identifier: UNLICENSED
+ 
//SPDX-License-Identifier: MPL-2.0
 pragma solidity ^0.8.20;
  
 import "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol";
@@ -233,6 +253,7 @@ 

import '@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol'; import "../CMTAT_PROXY.sol"; import "../modules/CMTAT_BASE.sol"; +import "../libraries/FactoryErrors.sol"; import '@openzeppelin/contracts/access/AccessControl.sol';   /** @@ -256,6 +277,15 @@

* @param beaconOwner owner */ constructor(address implementation_, address factoryAdmin, address beaconOwner) { + if(factoryAdmin == address(0)){ + revert FactoryErrors.CMTAT_Factory_AddressZeroNotAllowedForFactoryAdmin(); + } + if(beaconOwner == address(0)){ + revert FactoryErrors.CMTAT_Factory_AddressZeroNotAllowedForBeaconOwner(); + } + if(implementation_ == address(0)){ + revert FactoryErrors.CMTAT_Factory_AddressZeroNotAllowedForLogicContract(); + } beacon = new UpgradeableBeacon(implementation_, beaconOwner); _grantRole(DEFAULT_ADMIN_ROLE, factoryAdmin); _grantRole(CMTAT_DEPLOYER_ROLE, factoryAdmin); @@ -322,7 +352,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/deployment/CMTAT_TP_FACTORY.sol.html b/doc/general/test/coverage/lcov-report/contracts/deployment/CMTAT_TP_FACTORY.sol.html index 72f2fa0c..d87ce0c4 100644 --- a/doc/general/test/coverage/lcov-report/contracts/deployment/CMTAT_TP_FACTORY.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/deployment/CMTAT_TP_FACTORY.sol.html @@ -22,12 +22,12 @@

100% Statements - 6/6 + 8/8
100% Branches - 2/2 + 6/6
100% @@ -37,7 +37,7 @@

100% Lines - 10/10 + 14/14

@@ -120,7 +120,16 @@

75 76 77 -78  +78 +79 +80 +81 +82 +83 +84 +85 +86  +        @@ -147,6 +156,13 @@

      +  + + +  + + +  @@ -197,12 +213,12 @@

    - 
// SPDX-License-Identifier: UNLICENSED
+ 
//SPDX-License-Identifier: MPL-2.0
 pragma solidity ^0.8.20;
  
-import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
 import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
 import "../CMTAT_PROXY.sol";
+import "../libraries/FactoryErrors.sol";
 import '@openzeppelin/contracts/access/AccessControl.sol';
 /**
 * @notice Factory to deploy transparent proxy
@@ -218,12 +234,20 @@ 

bytes32 public constant CMTAT_DEPLOYER_ROLE = keccak256("CMTAT_DEPLOYER_ROLE"); address public immutable logic; address[] public cmtatsList; +  +   /** * @param logic_ contract implementation * @param factoryAdmin admin */ constructor(address logic_, address factoryAdmin) { + if(logic_ == address(0)){ + revert FactoryErrors.CMTAT_Factory_AddressZeroNotAllowedForLogicContract(); + } + if(factoryAdmin == address(0)){ + revert FactoryErrors.CMTAT_Factory_AddressZeroNotAllowedForFactoryAdmin(); + } logic = logic_; _grantRole(DEFAULT_ADMIN_ROLE, factoryAdmin); _grantRole(CMTAT_DEPLOYER_ROLE, factoryAdmin); @@ -280,7 +304,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/deployment/index.html b/doc/general/test/coverage/lcov-report/contracts/deployment/index.html index ebfe16f5..946d15e3 100644 --- a/doc/general/test/coverage/lcov-report/contracts/deployment/index.html +++ b/doc/general/test/coverage/lcov-report/contracts/deployment/index.html @@ -22,12 +22,12 @@

100% Statements - 13/13 + 18/18
100% Branches - 4/4 + 14/14
100% @@ -37,7 +37,7 @@

100% Lines - 21/21 + 31/31

@@ -62,26 +62,26 @@

CMTAT_BEACON_FACTORY.sol
100% - 7/7 + 10/10 100% - 2/2 + 8/8 100% 4/4 100% - 11/11 + 17/17 CMTAT_TP_FACTORY.sol
100% - 6/6 + 8/8 100% - 2/2 + 6/6 100% 3/3 100% - 10/10 + 14/14 @@ -90,7 +90,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/index.html b/doc/general/test/coverage/lcov-report/contracts/index.html index 1fbde2bb..65f726b6 100644 --- a/doc/general/test/coverage/lcov-report/contracts/index.html +++ b/doc/general/test/coverage/lcov-report/contracts/index.html @@ -90,7 +90,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/interfaces/ICCIPToken.sol.html b/doc/general/test/coverage/lcov-report/contracts/interfaces/ICCIPToken.sol.html index 0b62b74f..e63184e5 100644 --- a/doc/general/test/coverage/lcov-report/contracts/interfaces/ICCIPToken.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/interfaces/ICCIPToken.sol.html @@ -93,7 +93,7 @@

   
//SPDX-License-Identifier: MPL-2.0
  
-pragma solidity ^0.8.0;
+pragma solidity ^0.8.20;
  
 /**
 * @notice CCIP Pool with mint
@@ -121,7 +121,7 @@ 

diff --git a/doc/general/test/coverage/lcov-report/contracts/interfaces/ICMTATSnapshot.sol.html b/doc/general/test/coverage/lcov-report/contracts/interfaces/ICMTATSnapshot.sol.html index 34c90baf..7c285dc9 100644 --- a/doc/general/test/coverage/lcov-report/contracts/interfaces/ICMTATSnapshot.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/interfaces/ICMTATSnapshot.sol.html @@ -70,7 +70,29 @@

25 26 27 -28  +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39  +  +  +  +  +  +  +  +  +  +  +        @@ -99,17 +121,12 @@

   
//SPDX-License-Identifier: MPL-2.0
  
-pragma solidity ^0.8.0;
+pragma solidity ^0.8.20;
  
 /**
 * @notice interface to represent a CMTAT with snapshot
 */
 interface ICMTATSnapshot {
-    /**
-    * @notice Return snapshotBalanceOf and snapshotTotalSupply to avoid multiple calls
-    * @return ownerBalance ,  totalSupply - see snapshotBalanceOf and snapshotTotalSupply
-    */
-    function snapshotInfo(uint256 time, address owner) external view returns (uint256 ownerBalance, uint256 totalSupply);
     /** 
     * @notice Return the number of tokens owned by the given owner at the time when the snapshot with the given time was created.
     * @return value stored in the snapshot, or the actual balance if no snapshot
@@ -121,8 +138,24 @@ 

* @return value stored in the snapshot, or the actual totalSupply if no snapshot */ function snapshotTotalSupply(uint256 time) external view returns (uint256); -  + /** + * @notice Return snapshotBalanceOf and snapshotTotalSupply to avoid multiple calls + * @return ownerBalance , totalSupply - see snapshotBalanceOf and snapshotTotalSupply + */ + function snapshotInfo(uint256 time, address owner) external view returns (uint256 ownerBalance, uint256 totalSupply); + /** + * @notice Return snapshotBalanceOf for each address in the array and the total supply + * @return ownerBalances array with the balance of each address, the total supply + */ function snapshotInfoBatch(uint256 time, address[] calldata addresses) external view returns (uint256[] memory ownerBalances, uint256 totalSupply); +  + /** + * @notice Return snapshotBalanceOf for each address in the array and the total supply + * @return ownerBalances array with the balance of each address, the total supply + */ + function snapshotInfoBatch(uint256[] calldata times, address[] calldata addresses) external view returns (uint256[][] memory ownerBalances, uint256[] memory totalSupply); +  +  }  

@@ -130,7 +163,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/interfaces/IDebtGlobal.sol.html b/doc/general/test/coverage/lcov-report/contracts/interfaces/IDebtGlobal.sol.html index 663df801..47fcaefb 100644 --- a/doc/general/test/coverage/lcov-report/contracts/interfaces/IDebtGlobal.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/interfaces/IDebtGlobal.sol.html @@ -103,7 +103,7 @@

   
//SPDX-License-Identifier: MPL-2.0
  
-pragma solidity ^0.8.0;
+pragma solidity ^0.8.20;
  
 /**
 * @notice interface to represent debt tokens
@@ -136,7 +136,7 @@ 

diff --git a/doc/general/test/coverage/lcov-report/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol.html b/doc/general/test/coverage/lcov-report/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol.html index ca2921b6..349aeece 100644 --- a/doc/general/test/coverage/lcov-report/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol.html @@ -97,10 +97,10 @@

   
//SPDX-License-Identifier: MPL-2.0
  
-pragma solidity ^0.8.0;
+pragma solidity ^0.8.20;
  
 /*
-@dev Contrary to the ERC-1404, this interface does not inherit from the ERC20 interface
+* @dev Contrary to the ERC-1404, this interface does not inherit from the ERC20 interface
 */
 interface IERC1404 {
     /**
@@ -127,7 +127,7 @@ 

diff --git a/doc/general/test/coverage/lcov-report/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol.html b/doc/general/test/coverage/lcov-report/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol.html new file mode 100644 index 00000000..e44fda76 --- /dev/null +++ b/doc/general/test/coverage/lcov-report/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol.html @@ -0,0 +1,110 @@ + + + + Code coverage report for contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol + + + + + + + +
+
+

+ all files / contracts/interfaces/draft-IERC1404/ draft-IERC1404EnumCode.sol +

+
+
+ 100% + Statements + 0/0 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 0/0 +
+
+ 100% + Lines + 0/0 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
//SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+interface IERC1404EnumCode {
+    /* 
+    * @dev leave the code 4-9 free/unused for further additions in your ruleEngine implementation
+    */
+    enum REJECTED_CODE_BASE {
+        TRANSFER_OK,
+        TRANSFER_REJECTED_PAUSED,
+        TRANSFER_REJECTED_FROM_FROZEN,
+        TRANSFER_REJECTED_TO_FROZEN
+    }
+}
+ 
+
+
+ + + + + + + diff --git a/doc/general/test/coverage/lcov-report/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol.html b/doc/general/test/coverage/lcov-report/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol.html index 9ebdff15..86c0dea2 100644 --- a/doc/general/test/coverage/lcov-report/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol.html @@ -61,23 +61,7 @@

16 17 18 -19 -20 -21 -22 -23 -24 -25 -26 -27  -  -  -  -  -  -  -  -  +19        @@ -97,20 +81,12 @@

   
//SPDX-License-Identifier: MPL-2.0
  
-pragma solidity ^0.8.0;
+pragma solidity ^0.8.20;
  
 import "./draft-IERC1404.sol";
+import "./draft-IERC1404EnumCode.sol";
  
-interface IERC1404Wrapper is IERC1404 {
-    /* 
-    @dev leave the code 4-9 free/unused for further additions in your ruleEngine implementation
-    */
-    enum REJECTED_CODE_BASE {
-        TRANSFER_OK,
-        TRANSFER_REJECTED_PAUSED,
-        TRANSFER_REJECTED_FROM_FROZEN,
-        TRANSFER_REJECTED_TO_FROZEN
-    }
+interface IERC1404Wrapper is IERC1404, IERC1404EnumCode  {
  
     /**
      * @dev Returns true if the transfer is valid, and false otherwise.
@@ -127,7 +103,7 @@ 

diff --git a/doc/general/test/coverage/lcov-report/contracts/interfaces/draft-IERC1404/index.html b/doc/general/test/coverage/lcov-report/contracts/interfaces/draft-IERC1404/index.html index 63ea4ba7..d1570445 100644 --- a/doc/general/test/coverage/lcov-report/contracts/interfaces/draft-IERC1404/index.html +++ b/doc/general/test/coverage/lcov-report/contracts/interfaces/draft-IERC1404/index.html @@ -71,6 +71,19 @@

0/0 + + draft-IERC1404EnumCode.sol +
+ 100% + 0/0 + 100% + 0/0 + 100% + 0/0 + 100% + 0/0 + + draft-IERC1404Wrapper.sol
@@ -90,7 +103,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/interfaces/engine/IAuthorizationEngine.sol.html b/doc/general/test/coverage/lcov-report/contracts/interfaces/engine/IAuthorizationEngine.sol.html index b045ca87..efafbc17 100644 --- a/doc/general/test/coverage/lcov-report/contracts/interfaces/engine/IAuthorizationEngine.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/interfaces/engine/IAuthorizationEngine.sol.html @@ -85,7 +85,7 @@

   
// SPDX-License-Identifier: MPL-2.0
  
-pragma solidity ^0.8.0;
+pragma solidity ^0.8.20;
  
 interface IAuthorizationEngine {
     /**
@@ -109,7 +109,7 @@ 

diff --git a/doc/general/test/coverage/lcov-report/contracts/interfaces/engine/IRuleEngine.sol.html b/doc/general/test/coverage/lcov-report/contracts/interfaces/engine/IRuleEngine.sol.html index fc3ec454..1bc8a4d2 100644 --- a/doc/general/test/coverage/lcov-report/contracts/interfaces/engine/IRuleEngine.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/interfaces/engine/IRuleEngine.sol.html @@ -79,7 +79,7 @@

   
// SPDX-License-Identifier: MPL-2.0
  
-pragma solidity ^0.8.0;
+pragma solidity ^0.8.20;
  
 import "../draft-IERC1404/draft-IERC1404Wrapper.sol";
  
@@ -100,7 +100,7 @@ 

diff --git a/doc/general/test/coverage/lcov-report/contracts/interfaces/engine/index.html b/doc/general/test/coverage/lcov-report/contracts/interfaces/engine/index.html index daba08c1..38389bf0 100644 --- a/doc/general/test/coverage/lcov-report/contracts/interfaces/engine/index.html +++ b/doc/general/test/coverage/lcov-report/contracts/interfaces/engine/index.html @@ -90,7 +90,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/interfaces/index.html b/doc/general/test/coverage/lcov-report/contracts/interfaces/index.html index 815c8395..0eabfb3c 100644 --- a/doc/general/test/coverage/lcov-report/contracts/interfaces/index.html +++ b/doc/general/test/coverage/lcov-report/contracts/interfaces/index.html @@ -103,7 +103,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/libraries/Errors.sol.html b/doc/general/test/coverage/lcov-report/contracts/libraries/Errors.sol.html index 574b275e..e6ba0ed7 100644 --- a/doc/general/test/coverage/lcov-report/contracts/libraries/Errors.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/libraries/Errors.sol.html @@ -247,7 +247,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/libraries/FactoryErrors.sol.html b/doc/general/test/coverage/lcov-report/contracts/libraries/FactoryErrors.sol.html new file mode 100644 index 00000000..053c177f --- /dev/null +++ b/doc/general/test/coverage/lcov-report/contracts/libraries/FactoryErrors.sol.html @@ -0,0 +1,92 @@ + + + + Code coverage report for contracts/libraries/FactoryErrors.sol + + + + + + + +
+
+

+ all files / contracts/libraries/ FactoryErrors.sol +

+
+
+ 100% + Statements + 0/0 +
+
+ 100% + Branches + 0/0 +
+
+ 100% + Functions + 0/0 +
+
+ 100% + Lines + 0/0 +
+
+
+
+

+
+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10  +  +  +  +  +  +  +  +  + 
//SPDX-License-Identifier: MPL-2.0
+ 
+pragma solidity ^0.8.20;
+ 
+library FactoryErrors {
+    error CMTAT_Factory_AddressZeroNotAllowedForFactoryAdmin();
+    error CMTAT_Factory_AddressZeroNotAllowedForBeaconOwner();
+    error CMTAT_Factory_AddressZeroNotAllowedForLogicContract();
+}
+ 
+
+
+ + + + + + + diff --git a/doc/general/test/coverage/lcov-report/contracts/libraries/index.html b/doc/general/test/coverage/lcov-report/contracts/libraries/index.html index fc0eb653..6f5a0847 100644 --- a/doc/general/test/coverage/lcov-report/contracts/libraries/index.html +++ b/doc/general/test/coverage/lcov-report/contracts/libraries/index.html @@ -71,13 +71,26 @@

0/0 + + FactoryErrors.sol +
+ 100% + 0/0 + 100% + 0/0 + 100% + 0/0 + 100% + 0/0 + +
diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/CMTAT_BASE.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/CMTAT_BASE.sol.html index 60561b71..e6372f2e 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/CMTAT_BASE.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/CMTAT_BASE.sol.html @@ -799,7 +799,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/index.html b/doc/general/test/coverage/lcov-report/contracts/modules/index.html index 7e219b42..a21c1a14 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/index.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/index.html @@ -77,7 +77,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/internal/ERC20SnapshotModuleInternal.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/internal/ERC20SnapshotModuleInternal.sol.html index e350cd02..62c41c3d 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/internal/ERC20SnapshotModuleInternal.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/internal/ERC20SnapshotModuleInternal.sol.html @@ -22,7 +22,7 @@

100% Statements - 15/15 + 16/16
90% @@ -32,12 +32,12 @@

100% Functions - 8/8 + 9/9
100% Lines - 20/20 + 24/24

@@ -172,7 +172,19 @@

127 128 129 -130  +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142        @@ -208,23 +220,34 @@

      +480× +480×           -480× +  +  +160× +160× 480×   +160×             +  +80× 80× 80× -240× +  +  +  +    80×   @@ -237,12 +260,13 @@

      -960× +  +1200×         -960× +1200×       @@ -251,11 +275,11 @@

      -640× +720×       -640× +720×       @@ -305,13 +329,8 @@

  pragma solidity ^0.8.20;   -import "../../../openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol"; -import "../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../../openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; import {Arrays} from '@openzeppelin/contracts/utils/Arrays.sol'; -  -import "../../libraries/Errors.sol"; -import "../../interfaces/ICMTATSnapshot.sol"; import "./base/SnapshotModuleBase.sol"; /** * @dev Snapshot module internal. @@ -347,7 +366,7 @@

}   /** - * @notice Return snapshotBalanceOf for each address in an array and the total supply + * @notice Return snapshotBalanceOf for each address in the array and the total supply * @return ownerBalances array with the balance of each address, the total supply */ function snapshotInfoBatch(uint256 time, address[] calldata addresses) public view returns (uint256[] memory ownerBalances, uint256 totalSupply) { @@ -357,6 +376,23 @@

} totalSupply = snapshotTotalSupply(time); } +  + /** + * @notice Return snapshotBalanceOf for each address in the array and the total supply + * @return ownerBalances array with the balance of each address, the total supply + */ + function snapshotInfoBatch(uint256[] calldata times, address[] calldata addresses) public view returns (uint256[][] memory ownerBalances, uint256[] memory totalSupply) { + ownerBalances = new uint256[][](times.length); + totalSupply = new uint256[](times.length); + for(uint256 iT = 0; iT < times.length; ++iT){ + /*ownerBalances[iT] = new uint256[](addresses.length); + for(uint256 jA = 0; jA < addresses.length; ++jA){ + ownerBalances[iT][jA] = snapshotBalanceOf(times[iT], addresses[jA]); + } + totalSupply[iT] = snapshotTotalSupply(times[iT]);*/ + (ownerBalances[iT], totalSupply[iT]) = snapshotInfoBatch(times[iT],addresses); + } + }   /** * @notice Return the number of tokens owned by the given owner at the time when the snapshot with the given time was created. @@ -436,7 +472,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/internal/EnforcementModuleInternal.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/internal/EnforcementModuleInternal.sol.html index 704ff82a..76be6850 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/internal/EnforcementModuleInternal.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/internal/EnforcementModuleInternal.sol.html @@ -313,7 +313,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/internal/ValidationModuleInternal.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/internal/ValidationModuleInternal.sol.html index d018890c..10dac068 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/internal/ValidationModuleInternal.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/internal/ValidationModuleInternal.sol.html @@ -112,9 +112,7 @@

67 68 69 -70 -71  -  +70        @@ -189,7 +187,6 @@

  import "../../../openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol"; import "../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; -import "../../interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol"; import "../../interfaces/engine/IRuleEngine.sol"; /** * @dev Validation module. @@ -259,7 +256,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/internal/base/SnapshotModuleBase.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/internal/base/SnapshotModuleBase.sol.html index 1fab691f..dff594d5 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/internal/base/SnapshotModuleBase.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/internal/base/SnapshotModuleBase.sol.html @@ -37,7 +37,7 @@

100% Lines - 108/108 + 102/102
@@ -448,13 +448,7 @@

403 404 405 -406 -407 -408 -409 -410 -411 -412  +406        @@ -554,13 +548,11 @@

    +  12×     -12× -12× -        @@ -713,11 +705,9 @@

12×   +  16× -16× -16× -      @@ -747,12 +737,12 @@

      -1600× +1920×   -1600× -1248× +1920× +1484×   -352× +436×       @@ -848,6 +838,7 @@

  86× 86× +  86× 116× 52× @@ -856,9 +847,6 @@

  64×   -52× -52× -    86×   @@ -965,13 +953,11 @@

indexLowerBound - 1; nextScheduledSnapshot = new uint256[](arraySize); - for (uint256 i; i < arraySize; ) { + // No need of unchecked block since Soliditiy 0.8.22 + for (uint256 i; i < arraySize; ++i) { nextScheduledSnapshot[i] = _scheduledSnapshots[ indexLowerBound + 1 + i ]; - unchecked { - ++i; - } } } } @@ -1124,11 +1110,9 @@

if (!isFound) { revert Errors.CMTAT_SnapshotModule_SnapshotNotFound(); } - for (uint256 i = index; i + 1 < _scheduledSnapshots.length; ) { + // No need of unchecked block since Soliditiy 0.8.22 + for (uint256 i = index; i + 1 < _scheduledSnapshots.length; ++i ) { _scheduledSnapshots[i] = _scheduledSnapshots[i + 1]; - unchecked { - ++i; - } } _scheduledSnapshots.pop(); } @@ -1259,7 +1243,8 @@

// mostRecent is initialized in the loop uint256 mostRecent; index = currentArraySize; - for (uint256 i = _currentSnapshotIndex; i < currentArraySize; ) { + // No need of unchecked block since Soliditiy 0.8.22 + for (uint256 i = _currentSnapshotIndex; i < currentArraySize; ++i ) { if (_scheduledSnapshots[i] <= block.timestamp) { mostRecent = _scheduledSnapshots[i]; index = i; @@ -1267,9 +1252,6 @@

// All snapshot are planned in the futur break; } - unchecked { - ++i; - } } return (mostRecent, index); } @@ -1282,7 +1264,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/internal/base/index.html b/doc/general/test/coverage/lcov-report/contracts/modules/internal/base/index.html index b765f516..2d1fa4db 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/internal/base/index.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/internal/base/index.html @@ -37,7 +37,7 @@

100% Lines - 108/108 + 102/102
@@ -68,7 +68,7 @@

100% 14/14 100% - 108/108 + 102/102 @@ -77,7 +77,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/internal/index.html b/doc/general/test/coverage/lcov-report/contracts/modules/internal/index.html index 420d138d..94760538 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/internal/index.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/internal/index.html @@ -22,7 +22,7 @@

100% Statements - 30/30 + 31/31
85% @@ -32,12 +32,12 @@

100% Functions - 17/17 + 18/18
100% Lines - 38/38 + 42/42

@@ -62,13 +62,13 @@

ERC20SnapshotModuleInternal.sol
100% - 15/15 + 16/16 90% 9/10 100% - 8/8 + 9/9 100% - 20/20 + 24/24 @@ -103,7 +103,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/security/AuthorizationModule.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/security/AuthorizationModule.sol.html index 130b2aae..81024f87 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/security/AuthorizationModule.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/security/AuthorizationModule.sol.html @@ -129,43 +129,7 @@

84 85 86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  +87        @@ -256,33 +220,15 @@

pragma solidity ^0.8.20;   import "../../../openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol"; -import "../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; -  import "../../libraries/Errors.sol"; import "../../interfaces/engine/IAuthorizationEngine.sol"; +  abstract contract AuthorizationModule is AccessControlUpgradeable { IAuthorizationEngine private authorizationEngine; /** * @dev Emitted when a rule engine is set. */ event AuthorizationEngine(IAuthorizationEngine indexed newAuthorizationEngine); - // BurnModule - bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE"); - bytes32 public constant BURNER_FROM_ROLE = keccak256("BURNER_FROM_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 - bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); - // PauseModule - bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); - // SnapshotModule - bytes32 public constant SNAPSHOOTER_ROLE = keccak256("SNAPSHOOTER_ROLE"); -  /** * @dev * @@ -361,7 +307,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/security/index.html b/doc/general/test/coverage/lcov-report/contracts/modules/security/index.html index fb7160c2..f33d7151 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/security/index.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/security/index.html @@ -77,7 +77,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/controllers/ValidationModule.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/controllers/ValidationModule.sol.html index ab31fed8..3d62462e 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/controllers/ValidationModule.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/controllers/ValidationModule.sol.html @@ -180,9 +180,7 @@

135 136 137 -138 -139  -  +138        @@ -323,7 +321,6 @@

  pragma solidity ^0.8.20;   -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; import "../../internal/ValidationModuleInternal.sol"; import "../core/PauseModule.sol"; @@ -463,7 +460,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/controllers/index.html b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/controllers/index.html index 6d378fd7..a6acad6f 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/controllers/index.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/controllers/index.html @@ -77,7 +77,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/BaseModule.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/BaseModule.sol.html index 9a406bd6..3bc3b0e3 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/BaseModule.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/BaseModule.sol.html @@ -138,9 +138,7 @@

93 94 95 -96 -97  -  +96        @@ -240,7 +238,6 @@

pragma solidity ^0.8.20;   // required OZ imports here -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; import "../../../libraries/Errors.sol";   @@ -337,7 +334,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/ERC20BaseModule.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/ERC20BaseModule.sol.html index b1e2b157..34b30b36 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/ERC20BaseModule.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/ERC20BaseModule.sol.html @@ -37,7 +37,7 @@

100% Lines - 19/19 + 17/17
@@ -157,12 +157,7 @@

112 113 114 -115 -116 -117 -118 -119  -  +115        @@ -234,9 +229,6 @@

    14× -10× -10× -        @@ -284,7 +276,6 @@

pragma solidity ^0.8.20;   // required OZ imports here -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../../../openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; import "../../../libraries/Errors.sol";   @@ -347,14 +338,11 @@

if (bool(tos.length != values.length)) { revert Errors.CMTAT_ERC20BaseModule_TosValueslengthMismatch(); } -  - for (uint256 i = 0; i < tos.length; ) { + // No need of unchecked block since Soliditiy 0.8.22 + for (uint256 i = 0; i < tos.length; ++i) { // We call directly the internal function transfer // The reason is that the public function adds only the owner address recovery ERC20Upgradeable._transfer(_msgSender(), tos[i], values[i]); - unchecked { - ++i; - } } // not really useful // Here only to keep the same behaviour as transfer @@ -403,7 +391,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/ERC20BurnModule.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/ERC20BurnModule.sol.html index c34fba8e..b01c2741 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/ERC20BurnModule.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/ERC20BurnModule.sol.html @@ -37,7 +37,7 @@

100% Lines - 20/20 + 18/18
@@ -157,9 +157,8 @@

112 113 114 -115 -116 -117  +115  +        @@ -230,9 +229,6 @@

24× 20× -20× -20× -        @@ -280,10 +276,11 @@

pragma solidity ^0.8.20;   import "../../../../openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; import "../../../interfaces/ICCIPToken.sol"; abstract contract ERC20BurnModule is ERC20Upgradeable, ICCIPBurnFromERC20, AuthorizationModule { + bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE"); + bytes32 public constant BURNER_FROM_ROLE = keccak256("BURNER_FROM_ROLE"); /** * @notice Emitted when the specified `value` amount of tokens owned by `owner`are destroyed with the given `reason` */ @@ -342,13 +339,10 @@

if (bool(accounts.length != values.length)) { revert Errors.CMTAT_BurnModule_AccountsValueslengthMismatch(); } -  - for (uint256 i = 0; i < accounts.length; ) { + // No need of unchecked block since Soliditiy 0.8.22 + for (uint256 i = 0; i < accounts.length; ++i ) { _burn(accounts[i], values[i]); emit Burn(accounts[i], values[i], reason); - unchecked { - ++i; - } } }   @@ -397,7 +391,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/ERC20MintModule.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/ERC20MintModule.sol.html index 1398d9f1..f077c4e3 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/ERC20MintModule.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/ERC20MintModule.sol.html @@ -37,7 +37,7 @@

100% Lines - 11/11 + 9/9
@@ -117,9 +117,8 @@

72 73 74 -75 -76 -77  +75  +        @@ -187,9 +186,6 @@

18× 54× 54× -54× -54× -        @@ -200,10 +196,11 @@

pragma solidity ^0.8.20;   import "../../../../openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; import "../../../interfaces/ICCIPToken.sol"; abstract contract ERC20MintModule is ERC20Upgradeable, ICCIPMintERC20, AuthorizationModule { + // MintModule + bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); /** * @notice Emitted when the specified `value` amount of new tokens are created and * allocated to the specified `account`. @@ -259,13 +256,10 @@

if (bool(accounts.length != values.length)) { revert Errors.CMTAT_MintModule_AccountsValueslengthMismatch(); } -  - for (uint256 i = 0; i < accounts.length; ) { + // No need of unchecked block since Soliditiy 0.8.22 + for (uint256 i = 0; i < accounts.length; ++i ) { _mint(accounts[i], values[i]); emit Mint(accounts[i], values[i]); - unchecked { - ++i; - } } }   @@ -277,7 +271,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/EnforcementModule.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/EnforcementModule.sol.html index 04c7c7fa..d0f53140 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/EnforcementModule.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/EnforcementModule.sol.html @@ -97,7 +97,11 @@

52 53 54 -55  +55 +56 +57  +  +        @@ -167,6 +171,8 @@

EnforcementModuleInternal, AuthorizationModule { + // EnforcementModule + bytes32 public constant ENFORCER_ROLE = keccak256("ENFORCER_ROLE"); string internal constant TEXT_TRANSFER_REJECTED_FROM_FROZEN = "Address FROM is frozen";   @@ -211,7 +217,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/PauseModule.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/PauseModule.sol.html index a9f614b3..5d2f5fd8 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/PauseModule.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/PauseModule.sol.html @@ -126,7 +126,9 @@

81 82 83 -84  +84 +85  +        @@ -214,7 +216,6 @@

pragma solidity ^0.8.20;   import "../../../../openzeppelin-contracts-upgradeable/contracts/utils/PausableUpgradeable.sol"; -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol";   /** @@ -228,6 +229,8 @@

* event of a large bug. */ abstract contract PauseModule is PausableUpgradeable, AuthorizationModule { + // PauseModule + bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); string internal constant TEXT_TRANSFER_REJECTED_PAUSED = "All transfers paused"; bool private isDeactivated; @@ -298,7 +301,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/index.html b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/index.html index 370d1aa0..a7da88fb 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/index.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/core/index.html @@ -37,7 +37,7 @@

100% Lines - 74/74 + 68/68
@@ -81,7 +81,7 @@

100% 5/5 100% - 19/19 + 17/17 @@ -94,7 +94,7 @@

100% 4/4 100% - 20/20 + 18/18 @@ -107,7 +107,7 @@

100% 3/3 100% - 11/11 + 9/9 @@ -142,7 +142,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol.html index 8a5d4012..75060568 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol.html @@ -124,7 +124,13 @@

79 80 81 -82  +82 +83 +84 +85  +  +  +        @@ -222,6 +228,9 @@

ContextUpgradeable, AuthorizationModule { + // CreditEvents + bytes32 public constant DEBT_CREDIT_EVENT_ROLE = + keccak256("DEBT_CREDIT_EVENT_ROLE"); CreditEvents public creditEvents;   /* Events */ @@ -292,7 +301,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol.html index 79629ed0..322d1741 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol.html @@ -274,7 +274,11 @@

229 230 231 -232  +232 +233 +234  +  +        @@ -522,6 +526,8 @@

ContextUpgradeable, AuthorizationModule { + // DebtModule + bytes32 public constant DEBT_ROLE = keccak256("DEBT_ROLE"); DebtBase public debt;   /* Events */ @@ -742,7 +748,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/DebtModule/index.html b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/DebtModule/index.html index b57b4919..b75db962 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/DebtModule/index.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/DebtModule/index.html @@ -90,7 +90,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol.html index ef56e98d..fe06161a 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol.html @@ -120,7 +120,9 @@

75 76 77 -78  +78 +79  +        @@ -201,7 +203,6 @@

  pragma solidity ^0.8.20;   -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../security/AuthorizationModule.sol"; import "../../internal/ERC20SnapshotModuleInternal.sol";   @@ -215,6 +216,8 @@

ERC20SnapshotModuleInternal, AuthorizationModule { + // SnapshotModule + bytes32 public constant SNAPSHOOTER_ROLE = keccak256("SNAPSHOOTER_ROLE"); function __ERC20SnasphotModule_init_unchained() internal EonlyInitializing { // no variable to initialize } @@ -280,7 +283,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/MetaTxModule.sol.html b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/MetaTxModule.sol.html index 516d8345..0d146d71 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/MetaTxModule.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/MetaTxModule.sol.html @@ -66,9 +66,7 @@

21 22 23 -24 -25  -  +24        @@ -96,7 +94,6 @@

pragma solidity ^0.8.20;   import "../../../../openzeppelin-contracts-upgradeable/contracts/metatx/ERC2771ContextUpgradeable.sol"; -import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol";   /** * @dev Meta transaction (gasless) module. @@ -121,7 +118,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/index.html b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/index.html index b386ec88..9b3e8d2d 100644 --- a/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/index.html +++ b/doc/general/test/coverage/lcov-report/contracts/modules/wrapper/extensions/index.html @@ -90,7 +90,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/test/proxy/CMTAT_PROXY.sol.html b/doc/general/test/coverage/lcov-report/contracts/test/proxy/CMTAT_PROXY.sol.html index a462c258..77a7b2e2 100644 --- a/doc/general/test/coverage/lcov-report/contracts/test/proxy/CMTAT_PROXY.sol.html +++ b/doc/general/test/coverage/lcov-report/contracts/test/proxy/CMTAT_PROXY.sol.html @@ -118,7 +118,7 @@

diff --git a/doc/general/test/coverage/lcov-report/contracts/test/proxy/index.html b/doc/general/test/coverage/lcov-report/contracts/test/proxy/index.html index 8e5a5676..c64aa1d2 100644 --- a/doc/general/test/coverage/lcov-report/contracts/test/proxy/index.html +++ b/doc/general/test/coverage/lcov-report/contracts/test/proxy/index.html @@ -77,7 +77,7 @@

diff --git a/doc/general/test/coverage/lcov-report/index.html b/doc/general/test/coverage/lcov-report/index.html index f0b6357e..b4ae6e63 100644 --- a/doc/general/test/coverage/lcov-report/index.html +++ b/doc/general/test/coverage/lcov-report/index.html @@ -20,24 +20,24 @@

- 99.65% + 99.66% Statements - 285/286 + 291/292
- 92.86% + 93.1% Branches - 260/280 + 270/290
- 99.12% + 99.13% Functions - 113/114 + 114/115
- 99.48% + 99.49% Lines - 386/388 + 388/390
@@ -75,13 +75,13 @@

contracts/deployment/
100% - 13/13 + 18/18 100% - 4/4 + 14/14 100% 7/7 100% - 21/21 + 31/31 @@ -153,13 +153,13 @@

contracts/modules/internal/
100% - 30/30 + 31/31 85% 17/20 100% - 17/17 + 18/18 100% - 38/38 + 42/42 @@ -172,7 +172,7 @@

100% 14/14 100% - 108/108 + 102/102 @@ -211,7 +211,7 @@

100% 25/25 100% - 74/74 + 68/68 @@ -259,7 +259,7 @@

diff --git a/doc/general/test/coverage/lcov.info b/doc/general/test/coverage/lcov.info index ead7a6f7..6b536d59 100644 --- a/doc/general/test/coverage/lcov.info +++ b/doc/general/test/coverage/lcov.info @@ -3,8 +3,8 @@ SF:/home/ryan/Downloads/CM/CMTAT/contracts/CMTAT_PROXY.sol FN:15,constructor FNF:1 FNH:1 -FNDA:10,constructor -DA:17,10 +FNDA:15,constructor +DA:17,15 LF:1 LH:1 BRF:0 @@ -24,60 +24,80 @@ BRH:0 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/deployment/CMTAT_BEACON_FACTORY.sol -FN:31,constructor -FN:53,deployCMTAT -FN:81,getAddress -FN:89,implementation +FN:32,constructor +FN:63,deployCMTAT +FN:91,getAddress +FN:99,implementation FNF:4 FNH:4 -FNDA:3,constructor +FNDA:9,constructor FNDA:2,deployCMTAT FNDA:1,getAddress FNDA:1,implementation -DA:32,3 -DA:33,3 -DA:34,3 -DA:54,2 -DA:70,2 -DA:71,2 -DA:72,2 -DA:73,2 -DA:74,2 -DA:82,1 -DA:90,1 -LF:11 -LH:11 -BRDA:53,1,0,2 -BRDA:53,1,1,2 -BRF:2 -BRH:2 +DA:33,9 +DA:34,2 +DA:36,7 +DA:37,2 +DA:39,5 +DA:40,2 +DA:42,3 +DA:43,3 +DA:44,3 +DA:64,2 +DA:80,2 +DA:81,2 +DA:82,2 +DA:83,2 +DA:84,2 +DA:92,1 +DA:100,1 +LF:17 +LH:17 +BRDA:33,1,0,2 +BRDA:33,1,1,7 +BRDA:36,2,0,2 +BRDA:36,2,1,5 +BRDA:39,3,0,2 +BRDA:39,3,1,3 +BRDA:63,4,0,2 +BRDA:63,4,1,2 +BRF:8 +BRH:8 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/deployment/CMTAT_TP_FACTORY.sol -FN:27,constructor -FN:46,deployCMTAT -FN:75,getAddress +FN:29,constructor +FN:54,deployCMTAT +FN:83,getAddress FNF:3 FNH:3 -FNDA:3,constructor +FNDA:7,constructor FNDA:2,deployCMTAT FNDA:1,getAddress -DA:28,3 -DA:29,3 -DA:30,3 -DA:47,2 -DA:64,2 -DA:65,2 -DA:66,2 -DA:67,2 -DA:68,2 -DA:76,1 -LF:10 -LH:10 -BRDA:46,1,0,2 -BRDA:46,1,1,2 -BRF:2 -BRH:2 +DA:30,7 +DA:31,2 +DA:33,5 +DA:34,2 +DA:36,3 +DA:37,3 +DA:38,3 +DA:55,2 +DA:72,2 +DA:73,2 +DA:74,2 +DA:75,2 +DA:76,2 +DA:84,1 +LF:14 +LH:14 +BRDA:30,1,0,2 +BRDA:30,1,1,5 +BRDA:33,2,0,2 +BRDA:33,2,1,3 +BRDA:54,3,0,2 +BRDA:54,3,1,2 +BRF:6 +BRH:6 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404.sol @@ -89,6 +109,15 @@ BRF:0 BRH:0 end_of_record TN: +SF:/home/ryan/Downloads/CM/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404EnumCode.sol +FNF:0 +FNH:0 +LF:0 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/interfaces/draft-IERC1404/draft-IERC1404Wrapper.sol FNF:0 FNH:0 @@ -152,6 +181,15 @@ BRF:0 BRH:0 end_of_record TN: +SF:/home/ryan/Downloads/CM/CMTAT/contracts/libraries/FactoryErrors.sol +FNF:0 +FNH:0 +LF:0 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/CMTAT_BASE.sol FN:69,initialize FN:98,__CMTAT_init @@ -226,17 +264,17 @@ SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/internal/base/SnapshotModuleB FN:64,__SnapshotModuleBase_init_unchained FN:74,getAllSnapshots FN:82,getNextSnapshots -FN:120,_scheduleSnapshot -FN:151,_scheduleSnapshotNotOptimized -FN:184,_rescheduleSnapshot -FN:230,_unscheduleLastSnapshot -FN:252,_unscheduleSnapshotNotOptimized -FN:276,_valueAt -FN:309,_updateSnapshot -FN:325,_setCurrentSnapshot -FN:339,_lastSnapshot -FN:353,_findScheduledSnapshotIndex -FN:379,_findScheduledMostRecentPastSnapshot +FN:118,_scheduleSnapshot +FN:149,_scheduleSnapshotNotOptimized +FN:182,_rescheduleSnapshot +FN:228,_unscheduleLastSnapshot +FN:250,_unscheduleSnapshotNotOptimized +FN:272,_valueAt +FN:305,_updateSnapshot +FN:321,_setCurrentSnapshot +FN:335,_lastSnapshot +FN:349,_findScheduledSnapshotIndex +FN:375,_findScheduledMostRecentPastSnapshot FNF:14 FNH:14 FNDA:387,__SnapshotModuleBase_init_unchained @@ -247,7 +285,7 @@ FNDA:16,_scheduleSnapshotNotOptimized FNDA:38,_rescheduleSnapshot FNDA:18,_unscheduleLastSnapshot FNDA:16,_unscheduleSnapshotNotOptimized -FNDA:1600,_valueAt +FNDA:1920,_valueAt FNDA:860,_updateSnapshot FNDA:430,_setCurrentSnapshot FNDA:860,_lastSnapshot @@ -262,107 +300,101 @@ DA:92,48 DA:95,20 DA:97,8 DA:100,8 -DA:101,8 -DA:102,12 -DA:105,12 -DA:106,12 -DA:112,28 -DA:122,176 -DA:123,4 -DA:129,172 -DA:131,98 -DA:134,98 -DA:135,4 -DA:141,4 -DA:144,164 -DA:145,164 -DA:152,16 -DA:153,4 +DA:102,8 +DA:103,12 +DA:110,28 +DA:120,176 +DA:121,4 +DA:127,172 +DA:129,98 +DA:132,98 +DA:133,4 +DA:139,4 +DA:142,164 +DA:143,164 +DA:150,16 +DA:151,4 +DA:156,12 DA:158,12 -DA:160,12 -DA:161,4 -DA:164,8 -DA:165,2 -DA:167,6 -DA:170,6 +DA:159,4 +DA:162,8 +DA:163,2 +DA:165,6 +DA:168,6 +DA:169,10 +DA:170,10 DA:171,10 -DA:172,10 -DA:173,10 -DA:176,6 -DA:178,8 -DA:186,38 -DA:187,4 -DA:189,34 -DA:190,4 -DA:195,30 -DA:196,4 -DA:198,26 -DA:199,26 -DA:200,8 -DA:202,18 -DA:203,14 -DA:204,14 -DA:205,4 -DA:211,4 -DA:214,10 -DA:215,6 -DA:216,4 +DA:174,6 +DA:176,8 +DA:184,38 +DA:185,4 +DA:187,34 +DA:188,4 +DA:193,30 +DA:194,4 +DA:196,26 +DA:197,26 +DA:198,8 +DA:200,18 +DA:201,14 +DA:202,14 +DA:203,4 +DA:209,4 +DA:212,10 +DA:213,6 +DA:214,4 +DA:220,6 DA:222,6 -DA:224,6 -DA:232,18 -DA:233,4 -DA:235,14 -DA:236,4 -DA:239,10 -DA:240,4 -DA:242,6 -DA:243,6 -DA:253,16 -DA:254,4 -DA:256,12 -DA:257,12 -DA:258,4 -DA:260,8 -DA:261,16 -DA:262,16 -DA:263,16 -DA:266,8 -DA:294,1600 -DA:296,1600 -DA:297,1248 -DA:299,352 -DA:313,860 -DA:314,860 -DA:315,36 -DA:316,36 +DA:230,18 +DA:231,4 +DA:233,14 +DA:234,4 +DA:237,10 +DA:238,4 +DA:240,6 +DA:241,6 +DA:251,16 +DA:252,4 +DA:254,12 +DA:255,12 +DA:256,4 +DA:259,8 +DA:260,16 +DA:262,8 +DA:290,1920 +DA:292,1920 +DA:293,1484 +DA:295,436 +DA:309,860 +DA:310,860 +DA:311,36 +DA:312,36 +DA:322,430 DA:326,430 -DA:330,430 -DA:331,18 -DA:332,18 -DA:342,860 -DA:343,852 -DA:345,8 -DA:356,50 -DA:357,50 -DA:359,50 -DA:363,30 +DA:327,18 +DA:328,18 +DA:338,860 +DA:339,852 +DA:341,8 +DA:352,50 +DA:353,50 +DA:355,50 +DA:359,30 +DA:363,10 DA:367,10 -DA:371,10 -DA:384,498 -DA:386,498 -DA:390,412 -DA:393,86 -DA:394,86 -DA:395,86 -DA:396,116 -DA:397,52 -DA:398,52 -DA:401,64 -DA:403,52 -DA:404,52 -DA:407,86 -LF:108 -LH:108 +DA:380,498 +DA:382,498 +DA:386,412 +DA:389,86 +DA:390,86 +DA:392,86 +DA:393,116 +DA:394,52 +DA:395,52 +DA:398,64 +DA:401,86 +LF:102 +LH:102 BRDA:64,1,0,387 BRDA:64,1,1,0 BRDA:85,2,0,68 @@ -371,66 +403,66 @@ BRDA:91,3,0,48 BRDA:91,3,1,20 BRDA:95,4,0,8 BRDA:95,4,1,12 -BRDA:122,5,0,4 -BRDA:122,5,1,172 -BRDA:129,6,0,98 -BRDA:129,6,1,74 -BRDA:134,7,0,4 -BRDA:134,7,1,94 -BRDA:140,8,0,4 -BRDA:140,8,1,90 -BRDA:152,9,0,4 -BRDA:152,9,1,12 -BRDA:160,10,0,4 -BRDA:160,10,1,8 -BRDA:164,11,0,2 -BRDA:164,11,1,6 -BRDA:186,12,0,4 -BRDA:186,12,1,34 -BRDA:189,13,0,4 -BRDA:189,13,1,30 -BRDA:195,14,0,4 -BRDA:195,14,1,26 -BRDA:199,15,0,8 -BRDA:199,15,1,18 -BRDA:202,16,0,14 -BRDA:202,16,1,4 -BRDA:204,17,0,4 -BRDA:204,17,1,10 -BRDA:210,18,0,4 -BRDA:210,18,1,6 -BRDA:214,19,0,6 -BRDA:214,19,1,4 -BRDA:215,20,0,4 -BRDA:215,20,1,2 -BRDA:232,21,0,4 -BRDA:232,21,1,14 -BRDA:235,22,0,4 -BRDA:235,22,1,10 -BRDA:239,23,0,4 -BRDA:239,23,1,6 -BRDA:253,24,0,4 -BRDA:253,24,1,12 -BRDA:257,25,0,4 -BRDA:257,25,1,8 -BRDA:296,26,0,1248 -BRDA:296,26,1,352 -BRDA:314,27,0,36 -BRDA:314,27,1,824 -BRDA:330,28,0,18 -BRDA:330,28,1,412 -BRDA:342,29,0,852 -BRDA:342,29,1,8 -BRDA:359,30,0,30 -BRDA:359,30,1,20 -BRDA:366,31,0,10 -BRDA:366,31,1,10 -BRDA:386,32,0,412 -BRDA:386,32,1,86 -BRDA:387,33,0,412 -BRDA:387,33,1,0 -BRDA:396,34,0,52 -BRDA:396,34,1,64 +BRDA:120,5,0,4 +BRDA:120,5,1,172 +BRDA:127,6,0,98 +BRDA:127,6,1,74 +BRDA:132,7,0,4 +BRDA:132,7,1,94 +BRDA:138,8,0,4 +BRDA:138,8,1,90 +BRDA:150,9,0,4 +BRDA:150,9,1,12 +BRDA:158,10,0,4 +BRDA:158,10,1,8 +BRDA:162,11,0,2 +BRDA:162,11,1,6 +BRDA:184,12,0,4 +BRDA:184,12,1,34 +BRDA:187,13,0,4 +BRDA:187,13,1,30 +BRDA:193,14,0,4 +BRDA:193,14,1,26 +BRDA:197,15,0,8 +BRDA:197,15,1,18 +BRDA:200,16,0,14 +BRDA:200,16,1,4 +BRDA:202,17,0,4 +BRDA:202,17,1,10 +BRDA:208,18,0,4 +BRDA:208,18,1,6 +BRDA:212,19,0,6 +BRDA:212,19,1,4 +BRDA:213,20,0,4 +BRDA:213,20,1,2 +BRDA:230,21,0,4 +BRDA:230,21,1,14 +BRDA:233,22,0,4 +BRDA:233,22,1,10 +BRDA:237,23,0,4 +BRDA:237,23,1,6 +BRDA:251,24,0,4 +BRDA:251,24,1,12 +BRDA:255,25,0,4 +BRDA:255,25,1,8 +BRDA:292,26,0,1484 +BRDA:292,26,1,436 +BRDA:310,27,0,36 +BRDA:310,27,1,824 +BRDA:326,28,0,18 +BRDA:326,28,1,412 +BRDA:338,29,0,852 +BRDA:338,29,1,8 +BRDA:355,30,0,30 +BRDA:355,30,1,20 +BRDA:362,31,0,10 +BRDA:362,31,1,10 +BRDA:382,32,0,412 +BRDA:382,32,1,86 +BRDA:383,33,0,412 +BRDA:383,33,1,0 +BRDA:393,34,0,52 +BRDA:393,34,1,64 BRF:68 BRH:66 end_of_record @@ -470,66 +502,72 @@ BRH:5 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/internal/ERC20SnapshotModuleInternal.sol -FN:32,__ERC20Snapshot_init_unchained -FN:41,snapshotInfo -FN:50,snapshotInfoBatch -FN:62,snapshotBalanceOf -FN:79,snapshotTotalSupply -FN:92,_snapshotUpdate -FN:117,_updateAccountSnapshot -FN:124,_updateTotalSupplySnapshot -FNF:8 -FNH:8 +FN:27,__ERC20Snapshot_init_unchained +FN:36,snapshotInfo +FN:45,snapshotInfoBatch +FN:57,snapshotInfoBatch +FN:74,snapshotBalanceOf +FN:91,snapshotTotalSupply +FN:104,_snapshotUpdate +FN:129,_updateAccountSnapshot +FN:136,_updateTotalSupplySnapshot +FNF:9 +FNH:9 FNDA:387,__ERC20Snapshot_init_unchained FNDA:480,snapshotInfo +FNDA:160,snapshotInfoBatch FNDA:80,snapshotInfoBatch -FNDA:960,snapshotBalanceOf -FNDA:640,snapshotTotalSupply +FNDA:1200,snapshotBalanceOf +FNDA:720,snapshotTotalSupply FNDA:430,_snapshotUpdate FNDA:485,_updateAccountSnapshot FNDA:375,_updateTotalSupplySnapshot -DA:42,480 -DA:43,480 -DA:51,80 -DA:52,80 -DA:53,240 -DA:55,80 -DA:66,960 -DA:71,960 -DA:80,640 -DA:84,640 -DA:96,430 -DA:97,430 -DA:99,99 -DA:100,99 -DA:102,55 -DA:105,44 -DA:109,331 -DA:110,331 -DA:118,485 -DA:125,375 -LF:20 -LH:20 -BRDA:32,1,0,387 -BRDA:32,1,1,0 -BRDA:71,2,0,320 -BRDA:71,2,1,640 -BRDA:84,3,0,32 -BRDA:84,3,1,608 -BRDA:97,4,0,99 -BRDA:97,4,1,331 -BRDA:100,5,0,55 -BRDA:100,5,1,44 +DA:37,480 +DA:38,480 +DA:46,160 +DA:47,160 +DA:48,480 +DA:50,160 +DA:58,80 +DA:59,80 +DA:60,80 +DA:66,80 +DA:78,1200 +DA:83,1200 +DA:92,720 +DA:96,720 +DA:108,430 +DA:109,430 +DA:111,99 +DA:112,99 +DA:114,55 +DA:117,44 +DA:121,331 +DA:122,331 +DA:130,485 +DA:137,375 +LF:24 +LH:24 +BRDA:27,1,0,387 +BRDA:27,1,1,0 +BRDA:83,2,0,400 +BRDA:83,2,1,800 +BRDA:96,3,0,36 +BRDA:96,3,1,684 +BRDA:109,4,0,99 +BRDA:109,4,1,331 +BRDA:112,5,0,55 +BRDA:112,5,1,44 BRF:10 BRH:9 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/internal/ValidationModuleInternal.sol -FN:27,__Validation_init_unchained -FN:37,_validateTransfer -FN:48,_messageForTransferRestriction -FN:57,_detectTransferRestriction -FN:65,_operateOnTransfer +FN:26,__Validation_init_unchained +FN:36,_validateTransfer +FN:47,_messageForTransferRestriction +FN:56,_detectTransferRestriction +FN:64,_operateOnTransfer FNF:5 FNH:5 FNDA:387,__Validation_init_unchained @@ -537,29 +575,29 @@ FNDA:12,_validateTransfer FNDA:6,_messageForTransferRestriction FNDA:6,_detectTransferRestriction FNDA:57,_operateOnTransfer -DA:28,387 +DA:27,387 +DA:28,16 DA:29,16 -DA:30,16 -DA:42,12 -DA:51,6 -DA:62,6 -DA:66,57 +DA:41,12 +DA:50,6 +DA:61,6 +DA:65,57 LF:7 LH:7 -BRDA:27,1,0,387 -BRDA:27,1,1,0 -BRDA:28,2,0,16 -BRDA:28,2,1,371 +BRDA:26,1,0,387 +BRDA:26,1,1,0 +BRDA:27,2,0,16 +BRDA:27,2,1,371 BRF:4 BRH:3 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/security/AuthorizationModule.sol -FN:41,__AuthorizationModule_init_unchained -FN:59,setAuthorizationEngine -FN:67,grantRole -FN:78,revokeRole -FN:92,hasRole +FN:23,__AuthorizationModule_init_unchained +FN:41,setAuthorizationEngine +FN:49,grantRole +FN:60,revokeRole +FN:74,hasRole FNF:5 FNH:5 FNDA:387,__AuthorizationModule_init_unchained @@ -567,66 +605,66 @@ FNDA:8,setAuthorizationEngine FNDA:35,grantRole FNDA:5,revokeRole FNDA:1443,hasRole -DA:42,387 -DA:43,3 -DA:45,384 -DA:46,384 -DA:47,0 -DA:60,8 -DA:61,2 -DA:63,6 -DA:64,6 -DA:68,35 -DA:69,3 -DA:70,3 -DA:72,2 -DA:75,33 -DA:79,5 -DA:80,3 -DA:81,3 -DA:83,2 -DA:86,3 -DA:97,1443 -DA:98,810 -DA:100,633 +DA:24,387 +DA:25,3 +DA:27,384 +DA:28,384 +DA:29,0 +DA:42,8 +DA:43,2 +DA:45,6 +DA:46,6 +DA:50,35 +DA:51,3 +DA:52,3 +DA:54,2 +DA:57,33 +DA:61,5 +DA:62,3 +DA:63,3 +DA:65,2 +DA:68,3 +DA:79,1443 +DA:80,810 +DA:82,633 LF:22 LH:21 -BRDA:41,1,0,387 -BRDA:41,1,1,0 -BRDA:42,2,0,3 -BRDA:42,2,1,384 -BRDA:46,3,0,0 -BRDA:46,3,1,384 -BRDA:59,4,0,8 -BRDA:59,4,1,2 -BRDA:60,5,0,2 -BRDA:60,5,1,6 -BRDA:67,6,0,35 -BRDA:67,6,1,4 -BRDA:68,7,0,3 -BRDA:68,7,1,32 -BRDA:70,8,0,2 -BRDA:70,8,1,1 -BRDA:78,9,0,5 -BRDA:78,9,1,4 -BRDA:79,10,0,3 -BRDA:79,10,1,2 -BRDA:81,11,0,2 -BRDA:81,11,1,1 -BRDA:97,12,0,810 -BRDA:97,12,1,633 +BRDA:23,1,0,387 +BRDA:23,1,1,0 +BRDA:24,2,0,3 +BRDA:24,2,1,384 +BRDA:28,3,0,0 +BRDA:28,3,1,384 +BRDA:41,4,0,8 +BRDA:41,4,1,2 +BRDA:42,5,0,2 +BRDA:42,5,1,6 +BRDA:49,6,0,35 +BRDA:49,6,1,4 +BRDA:50,7,0,3 +BRDA:50,7,1,32 +BRDA:52,8,0,2 +BRDA:52,8,1,1 +BRDA:60,9,0,5 +BRDA:60,9,1,4 +BRDA:61,10,0,3 +BRDA:61,10,1,2 +BRDA:63,11,0,2 +BRDA:63,11,1,1 +BRDA:79,12,0,810 +BRDA:79,12,1,633 BRF:24 BRH:22 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/controllers/ValidationModule.sol -FN:27,__ValidationModule_init_unchained -FN:37,setRuleEngine -FN:50,messageForTransferRestriction -FN:84,detectTransferRestriction -FN:102,validateTransfer -FN:116,_validateTransferByModule -FN:127,_operateOnTransfer +FN:26,__ValidationModule_init_unchained +FN:36,setRuleEngine +FN:49,messageForTransferRestriction +FN:83,detectTransferRestriction +FN:101,validateTransfer +FN:115,_validateTransferByModule +FN:126,_operateOnTransfer FNF:7 FNH:7 FNDA:384,__ValidationModule_init_unchained @@ -636,86 +674,86 @@ FNDA:17,detectTransferRestriction FNDA:19,validateTransfer FNDA:483,_validateTransferByModule FNDA:464,_operateOnTransfer -DA:38,20 -DA:39,6 +DA:37,20 +DA:38,6 +DA:40,14 DA:41,14 -DA:42,14 -DA:53,20 -DA:54,3 -DA:59,4 -DA:64,2 -DA:69,2 -DA:71,6 -DA:73,3 -DA:89,17 -DA:90,4 -DA:92,2 -DA:94,2 -DA:96,6 -DA:98,3 -DA:107,19 -DA:108,4 -DA:110,15 -DA:111,12 -DA:113,3 -DA:121,483 -DA:122,32 -DA:124,451 -DA:128,464 -DA:129,28 -DA:131,436 -DA:132,57 -DA:134,379 +DA:52,20 +DA:53,3 +DA:58,4 +DA:63,2 +DA:68,2 +DA:70,6 +DA:72,3 +DA:88,17 +DA:89,4 +DA:91,2 +DA:93,2 +DA:95,6 +DA:97,3 +DA:106,19 +DA:107,4 +DA:109,15 +DA:110,12 +DA:112,3 +DA:120,483 +DA:121,32 +DA:123,451 +DA:127,464 +DA:128,28 +DA:130,436 +DA:131,57 +DA:133,379 LF:30 LH:30 -BRDA:27,1,0,384 -BRDA:27,1,1,0 -BRDA:37,2,0,20 -BRDA:37,2,1,6 -BRDA:38,3,0,6 -BRDA:38,3,1,14 -BRDA:53,4,0,3 -BRDA:53,4,1,17 -BRDA:55,5,0,4 -BRDA:55,5,1,13 -BRDA:60,6,0,2 -BRDA:60,6,1,11 -BRDA:65,7,0,2 -BRDA:65,7,1,9 -BRDA:70,8,0,6 -BRDA:70,8,1,3 -BRDA:89,9,0,4 -BRDA:89,9,1,13 -BRDA:91,10,0,2 -BRDA:91,10,1,11 -BRDA:93,11,0,2 -BRDA:93,11,1,9 -BRDA:95,12,0,6 -BRDA:95,12,1,3 -BRDA:107,13,0,4 -BRDA:107,13,1,15 -BRDA:110,14,0,12 -BRDA:110,14,1,3 -BRDA:121,15,0,32 -BRDA:121,15,1,451 -BRDA:121,16,0,22 -BRDA:121,16,1,6 -BRDA:121,17,0,6 -BRDA:121,17,1,4 -BRDA:128,18,0,28 -BRDA:128,18,1,436 -BRDA:131,19,0,57 -BRDA:131,19,1,379 +BRDA:26,1,0,384 +BRDA:26,1,1,0 +BRDA:36,2,0,20 +BRDA:36,2,1,6 +BRDA:37,3,0,6 +BRDA:37,3,1,14 +BRDA:52,4,0,3 +BRDA:52,4,1,17 +BRDA:54,5,0,4 +BRDA:54,5,1,13 +BRDA:59,6,0,2 +BRDA:59,6,1,11 +BRDA:64,7,0,2 +BRDA:64,7,1,9 +BRDA:69,8,0,6 +BRDA:69,8,1,3 +BRDA:88,9,0,4 +BRDA:88,9,1,13 +BRDA:90,10,0,2 +BRDA:90,10,1,11 +BRDA:92,11,0,2 +BRDA:92,11,1,9 +BRDA:94,12,0,6 +BRDA:94,12,1,3 +BRDA:106,13,0,4 +BRDA:106,13,1,15 +BRDA:109,14,0,12 +BRDA:109,14,1,3 +BRDA:120,15,0,32 +BRDA:120,15,1,451 +BRDA:120,16,0,22 +BRDA:120,16,1,6 +BRDA:120,17,0,6 +BRDA:120,17,1,4 +BRDA:127,18,0,28 +BRDA:127,18,1,436 +BRDA:130,19,0,57 +BRDA:130,19,1,379 BRF:38 BRH:37 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/BaseModule.sol -FN:46,__Base_init_unchained -FN:59,setTokenId -FN:69,setTerms -FN:79,setInformation -FN:87,setFlag +FN:45,__Base_init_unchained +FN:58,setTokenId +FN:68,setTerms +FN:78,setInformation +FN:86,setFlag FNF:5 FNH:5 FNDA:384,__Base_init_unchained @@ -723,67 +761,67 @@ FNDA:2,setTokenId FNDA:2,setTerms FNDA:2,setInformation FNDA:6,setFlag +DA:46,384 DA:47,384 DA:48,384 DA:49,384 -DA:50,384 +DA:59,2 DA:60,2 -DA:61,2 +DA:69,2 DA:70,2 -DA:71,2 +DA:79,2 DA:80,2 -DA:81,2 -DA:88,6 -DA:89,4 +DA:87,6 +DA:88,4 +DA:90,2 DA:91,2 -DA:92,2 LF:14 LH:14 -BRDA:46,1,0,384 -BRDA:46,1,1,0 -BRDA:59,2,0,2 -BRDA:59,2,1,4 -BRDA:69,3,0,2 -BRDA:69,3,1,4 -BRDA:79,4,0,2 -BRDA:79,4,1,4 -BRDA:87,5,0,6 -BRDA:87,5,1,4 -BRDA:88,6,0,4 -BRDA:88,6,1,2 +BRDA:45,1,0,384 +BRDA:45,1,1,0 +BRDA:58,2,0,2 +BRDA:58,2,1,4 +BRDA:68,3,0,2 +BRDA:68,3,1,4 +BRDA:78,4,0,2 +BRDA:78,4,1,4 +BRDA:86,5,0,6 +BRDA:86,5,1,4 +BRDA:87,6,0,4 +BRDA:87,6,1,2 BRF:12 BRH:11 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/EnforcementModule.sol -FN:23,__EnforcementModule_init_unchained -FN:35,freeze -FN:49,unfreeze +FN:25,__EnforcementModule_init_unchained +FN:37,freeze +FN:51,unfreeze FNF:3 FNH:3 FNDA:384,__EnforcementModule_init_unchained FNDA:22,freeze FNDA:8,unfreeze -DA:36,22 -DA:50,8 +DA:38,22 +DA:52,8 LF:2 LH:2 -BRDA:23,1,0,384 -BRDA:23,1,1,0 -BRDA:35,2,0,22 -BRDA:35,2,1,4 -BRDA:49,3,0,8 -BRDA:49,3,1,4 +BRDA:25,1,0,384 +BRDA:25,1,1,0 +BRDA:37,2,0,22 +BRDA:37,2,1,4 +BRDA:51,3,0,8 +BRDA:51,3,1,4 BRF:6 BRH:5 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/ERC20BaseModule.sol -FN:31,__ERC20BaseModule_init_unchained -FN:41,decimals -FN:57,transferBatch -FN:90,transferFrom -FN:109,balanceInfo +FN:30,__ERC20BaseModule_init_unchained +FN:40,decimals +FN:56,transferBatch +FN:86,transferFrom +FN:105,balanceInfo FNF:5 FNH:5 FNDA:384,__ERC20BaseModule_init_unchained @@ -791,132 +829,126 @@ FNDA:2,decimals FNDA:18,transferBatch FNDA:18,transferFrom FNDA:4,balanceInfo -DA:32,384 -DA:42,2 -DA:61,18 -DA:62,4 -DA:66,14 -DA:67,8 -DA:70,6 -DA:73,14 -DA:74,10 -DA:75,10 -DA:80,2 -DA:95,18 +DA:31,384 +DA:41,2 +DA:60,18 +DA:61,4 +DA:65,14 +DA:66,8 +DA:69,6 +DA:72,14 +DA:76,2 +DA:91,18 +DA:93,2 +DA:94,2 DA:97,2 -DA:98,2 -DA:101,2 +DA:106,4 +DA:107,4 +DA:108,6 DA:110,4 -DA:111,4 -DA:112,6 -DA:114,4 -LF:19 -LH:19 -BRDA:31,1,0,384 -BRDA:31,1,1,0 -BRDA:61,2,0,4 -BRDA:61,2,1,14 -BRDA:66,3,0,8 -BRDA:66,3,1,6 -BRDA:97,4,0,2 -BRDA:97,4,1,0 +LF:17 +LH:17 +BRDA:30,1,0,384 +BRDA:30,1,1,0 +BRDA:60,2,0,4 +BRDA:60,2,1,14 +BRDA:65,3,0,8 +BRDA:65,3,1,6 +BRDA:93,4,0,2 +BRDA:93,4,1,0 BRF:8 BRH:6 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/ERC20BurnModule.sol -FN:18,__ERC20BurnModule_init_unchained -FN:35,burn -FN:59,burnBatch -FN:94,burnFrom +FN:19,__ERC20BurnModule_init_unchained +FN:36,burn +FN:60,burnBatch +FN:92,burnFrom FNF:4 FNH:4 FNDA:384,__ERC20BurnModule_init_unchained FNDA:18,burn FNDA:20,burnBatch FNDA:6,burnFrom -DA:36,18 -DA:37,14 -DA:60,20 -DA:61,4 -DA:65,16 -DA:66,8 -DA:69,8 -DA:70,24 -DA:71,20 +DA:37,18 +DA:38,14 +DA:61,20 +DA:62,4 +DA:66,16 +DA:67,8 +DA:70,8 +DA:71,24 DA:72,20 -DA:73,20 +DA:95,6 +DA:96,6 DA:97,6 -DA:98,6 -DA:99,6 -DA:101,4 -DA:104,2 -DA:105,2 +DA:99,4 +DA:102,2 +DA:103,2 +DA:106,2 DA:108,2 DA:110,2 -DA:112,2 -LF:20 -LH:20 -BRDA:18,1,0,384 -BRDA:18,1,1,0 -BRDA:35,2,0,18 -BRDA:35,2,1,8 -BRDA:59,3,0,20 -BRDA:59,3,1,4 -BRDA:60,4,0,4 -BRDA:60,4,1,16 -BRDA:65,5,0,8 -BRDA:65,5,1,8 -BRDA:94,6,0,6 -BRDA:94,6,1,4 -BRDA:99,7,0,4 -BRDA:99,7,1,2 +LF:18 +LH:18 +BRDA:19,1,0,384 +BRDA:19,1,1,0 +BRDA:36,2,0,18 +BRDA:36,2,1,8 +BRDA:60,3,0,20 +BRDA:60,3,1,4 +BRDA:61,4,0,4 +BRDA:61,4,1,16 +BRDA:66,5,0,8 +BRDA:66,5,1,8 +BRDA:92,6,0,6 +BRDA:92,6,1,4 +BRDA:97,7,0,4 +BRDA:97,7,1,2 BRF:14 BRH:13 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/ERC20MintModule.sol -FN:16,__ERC20MintModule_init_unchained -FN:33,mint -FN:56,mintBatch +FN:17,__ERC20MintModule_init_unchained +FN:34,mint +FN:57,mintBatch FNF:3 FNH:3 FNDA:384,__ERC20MintModule_init_unchained FNDA:277,mint FNDA:30,mintBatch -DA:34,277 DA:35,277 -DA:57,30 -DA:58,4 -DA:62,26 -DA:63,8 -DA:66,18 -DA:67,54 +DA:36,277 +DA:58,30 +DA:59,4 +DA:63,26 +DA:64,8 +DA:67,18 DA:68,54 DA:69,54 -DA:70,54 -LF:11 -LH:11 -BRDA:16,1,0,384 -BRDA:16,1,1,0 -BRDA:33,2,0,277 -BRDA:33,2,1,8 -BRDA:56,3,0,30 -BRDA:56,3,1,4 -BRDA:57,4,0,4 -BRDA:57,4,1,26 -BRDA:62,5,0,8 -BRDA:62,5,1,18 +LF:9 +LH:9 +BRDA:17,1,0,384 +BRDA:17,1,1,0 +BRDA:34,2,0,277 +BRDA:34,2,1,8 +BRDA:57,3,0,30 +BRDA:57,3,1,4 +BRDA:58,4,0,4 +BRDA:58,4,1,26 +BRDA:63,5,0,8 +BRDA:63,5,1,18 BRF:10 BRH:9 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/core/PauseModule.sol -FN:25,__PauseModule_init_unchained -FN:38,pause -FN:50,unpause -FN:68,deactivateContract -FN:78,deactivated +FN:26,__PauseModule_init_unchained +FN:39,pause +FN:51,unpause +FN:69,deactivateContract +FN:79,deactivated FNF:5 FNH:5 FNDA:384,__PauseModule_init_unchained @@ -924,36 +956,36 @@ FNDA:14,pause FNDA:8,unpause FNDA:2,deactivateContract FNDA:4,deactivated -DA:39,14 -DA:51,8 -DA:52,4 -DA:54,4 -DA:70,2 +DA:40,14 +DA:52,8 +DA:53,4 +DA:55,4 DA:71,2 DA:72,2 -DA:79,4 +DA:73,2 +DA:80,4 LF:8 LH:8 -BRDA:25,1,0,384 -BRDA:25,1,1,0 -BRDA:38,2,0,14 -BRDA:38,2,1,6 -BRDA:50,3,0,8 -BRDA:50,3,1,4 -BRDA:51,4,0,4 -BRDA:51,4,1,4 -BRDA:68,5,0,2 -BRDA:68,5,1,4 +BRDA:26,1,0,384 +BRDA:26,1,1,0 +BRDA:39,2,0,14 +BRDA:39,2,1,6 +BRDA:51,3,0,8 +BRDA:51,3,1,4 +BRDA:52,4,0,4 +BRDA:52,4,1,4 +BRDA:69,5,0,2 +BRDA:69,5,1,4 BRF:10 BRH:9 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/extensions/DebtModule/CreditEventsModule.sol -FN:25,__CreditEvents_init_unchained -FN:37,setCreditEvents -FN:49,setFlagDefault -FN:62,setFlagRedeemed -FN:75,setRating +FN:28,__CreditEvents_init_unchained +FN:40,setCreditEvents +FN:52,setFlagDefault +FN:65,setFlagRedeemed +FN:78,setRating FNF:5 FNH:5 FNDA:384,__CreditEvents_init_unchained @@ -961,55 +993,55 @@ FNDA:2,setCreditEvents FNDA:6,setFlagDefault FNDA:6,setFlagRedeemed FNDA:2,setRating -DA:38,2 -DA:39,2 -DA:40,2 DA:41,2 -DA:50,6 -DA:51,4 -DA:53,2 -DA:54,2 -DA:63,6 -DA:64,4 -DA:66,2 -DA:67,2 -DA:76,2 -DA:77,2 +DA:42,2 +DA:43,2 +DA:44,2 +DA:53,6 +DA:54,4 +DA:56,2 +DA:57,2 +DA:66,6 +DA:67,4 +DA:69,2 +DA:70,2 +DA:79,2 +DA:80,2 LF:14 LH:14 -BRDA:25,1,0,384 -BRDA:25,1,1,0 -BRDA:37,2,0,2 -BRDA:37,2,1,4 -BRDA:49,3,0,6 -BRDA:49,3,1,4 -BRDA:50,4,0,4 -BRDA:50,4,1,2 -BRDA:62,5,0,6 -BRDA:62,5,1,4 -BRDA:63,6,0,4 -BRDA:63,6,1,2 -BRDA:75,7,0,2 -BRDA:75,7,1,4 +BRDA:28,1,0,384 +BRDA:28,1,1,0 +BRDA:40,2,0,2 +BRDA:40,2,1,4 +BRDA:52,3,0,6 +BRDA:52,3,1,4 +BRDA:53,4,0,4 +BRDA:53,4,1,2 +BRDA:65,5,0,6 +BRDA:65,5,1,4 +BRDA:66,6,0,4 +BRDA:66,6,1,2 +BRDA:78,7,0,2 +BRDA:78,7,1,4 BRF:14 BRH:13 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/extensions/DebtModule/DebtBaseModule.sol -FN:58,__DebtBaseModule_init_unchained -FN:66,setDebt -FN:102,setInterestRate -FN:113,setParValue -FN:126,setGuarantor -FN:136,setBondHolder -FN:146,setMaturityDate -FN:156,setInterestScheduleFormat -FN:169,setInterestPaymentDate -FN:179,setDayCountConvention -FN:189,setBusinessDayConvention -FN:202,setPublicHolidaysCalendar -FN:215,setIssuanceDate -FN:225,setCouponFrequency +FN:60,__DebtBaseModule_init_unchained +FN:68,setDebt +FN:104,setInterestRate +FN:115,setParValue +FN:128,setGuarantor +FN:138,setBondHolder +FN:148,setMaturityDate +FN:158,setInterestScheduleFormat +FN:171,setInterestPaymentDate +FN:181,setDayCountConvention +FN:191,setBusinessDayConvention +FN:204,setPublicHolidaysCalendar +FN:217,setIssuanceDate +FN:227,setCouponFrequency FNF:14 FNH:14 FNDA:384,__DebtBaseModule_init_unchained @@ -1026,92 +1058,92 @@ FNDA:2,setBusinessDayConvention FNDA:2,setPublicHolidaysCalendar FNDA:2,setIssuanceDate FNDA:2,setCouponFrequency -DA:67,2 -DA:68,2 DA:69,2 DA:70,2 DA:71,2 DA:72,2 DA:73,2 -DA:77,2 -DA:81,2 -DA:85,2 -DA:89,2 -DA:94,2 +DA:74,2 +DA:75,2 +DA:79,2 +DA:83,2 +DA:87,2 +DA:91,2 DA:96,2 -DA:103,6 -DA:104,4 -DA:106,2 -DA:107,2 -DA:114,6 -DA:115,4 -DA:117,2 -DA:118,2 -DA:127,2 -DA:128,2 -DA:137,2 -DA:138,2 -DA:147,2 -DA:148,2 -DA:157,2 -DA:158,2 -DA:170,2 -DA:171,2 -DA:180,2 -DA:181,2 -DA:190,2 -DA:191,2 -DA:203,2 -DA:204,2 -DA:216,2 -DA:217,2 -DA:226,2 -DA:227,2 +DA:98,2 +DA:105,6 +DA:106,4 +DA:108,2 +DA:109,2 +DA:116,6 +DA:117,4 +DA:119,2 +DA:120,2 +DA:129,2 +DA:130,2 +DA:139,2 +DA:140,2 +DA:149,2 +DA:150,2 +DA:159,2 +DA:160,2 +DA:172,2 +DA:173,2 +DA:182,2 +DA:183,2 +DA:192,2 +DA:193,2 +DA:205,2 +DA:206,2 +DA:218,2 +DA:219,2 +DA:228,2 +DA:229,2 LF:41 LH:41 -BRDA:58,1,0,384 -BRDA:58,1,1,0 -BRDA:66,2,0,2 -BRDA:66,2,1,4 -BRDA:102,3,0,6 -BRDA:102,3,1,4 -BRDA:103,4,0,4 -BRDA:103,4,1,2 -BRDA:113,5,0,6 -BRDA:113,5,1,4 -BRDA:114,6,0,4 -BRDA:114,6,1,2 -BRDA:126,7,0,2 -BRDA:126,7,1,4 -BRDA:136,8,0,2 -BRDA:136,8,1,4 -BRDA:146,9,0,2 -BRDA:146,9,1,4 -BRDA:156,10,0,2 -BRDA:156,10,1,4 -BRDA:169,11,0,2 -BRDA:169,11,1,4 -BRDA:179,12,0,2 -BRDA:179,12,1,4 -BRDA:189,13,0,2 -BRDA:189,13,1,4 -BRDA:202,14,0,2 -BRDA:202,14,1,4 -BRDA:215,15,0,2 -BRDA:215,15,1,4 -BRDA:225,16,0,2 -BRDA:225,16,1,4 +BRDA:60,1,0,384 +BRDA:60,1,1,0 +BRDA:68,2,0,2 +BRDA:68,2,1,4 +BRDA:104,3,0,6 +BRDA:104,3,1,4 +BRDA:105,4,0,4 +BRDA:105,4,1,2 +BRDA:115,5,0,6 +BRDA:115,5,1,4 +BRDA:116,6,0,4 +BRDA:116,6,1,2 +BRDA:128,7,0,2 +BRDA:128,7,1,4 +BRDA:138,8,0,2 +BRDA:138,8,1,4 +BRDA:148,9,0,2 +BRDA:148,9,1,4 +BRDA:158,10,0,2 +BRDA:158,10,1,4 +BRDA:171,11,0,2 +BRDA:171,11,1,4 +BRDA:181,12,0,2 +BRDA:181,12,1,4 +BRDA:191,13,0,2 +BRDA:191,13,1,4 +BRDA:204,14,0,2 +BRDA:204,14,1,4 +BRDA:217,15,0,2 +BRDA:217,15,1,4 +BRDA:227,16,0,2 +BRDA:227,16,1,4 BRF:32 BRH:31 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/extensions/ERC20SnapshotModule.sol -FN:19,__ERC20SnasphotModule_init_unchained -FN:28,scheduleSnapshot -FN:39,scheduleSnapshotNotOptimized -FN:51,rescheduleSnapshot -FN:62,unscheduleLastSnapshot -FN:72,unscheduleSnapshotNotOptimized +FN:20,__ERC20SnasphotModule_init_unchained +FN:29,scheduleSnapshot +FN:40,scheduleSnapshotNotOptimized +FN:52,rescheduleSnapshot +FN:63,unscheduleLastSnapshot +FN:73,unscheduleSnapshotNotOptimized FNF:6 FNH:6 FNDA:384,__ERC20SnasphotModule_init_unchained @@ -1120,34 +1152,34 @@ FNDA:16,scheduleSnapshotNotOptimized FNDA:38,rescheduleSnapshot FNDA:18,unscheduleLastSnapshot FNDA:16,unscheduleSnapshotNotOptimized -DA:29,176 -DA:40,16 -DA:52,38 -DA:63,18 -DA:73,16 +DA:30,176 +DA:41,16 +DA:53,38 +DA:64,18 +DA:74,16 LF:5 LH:5 -BRDA:19,1,0,384 -BRDA:19,1,1,0 -BRDA:28,2,0,176 -BRDA:28,2,1,4 -BRDA:39,3,0,16 -BRDA:39,3,1,4 -BRDA:51,4,0,38 -BRDA:51,4,1,4 -BRDA:62,5,0,18 -BRDA:62,5,1,4 -BRDA:72,6,0,16 -BRDA:72,6,1,4 +BRDA:20,1,0,384 +BRDA:20,1,1,0 +BRDA:29,2,0,176 +BRDA:29,2,1,4 +BRDA:40,3,0,16 +BRDA:40,3,1,4 +BRDA:52,4,0,38 +BRDA:52,4,1,4 +BRDA:63,5,0,18 +BRDA:63,5,1,4 +BRDA:73,6,0,16 +BRDA:73,6,1,4 BRF:12 BRH:11 end_of_record TN: SF:/home/ryan/Downloads/CM/CMTAT/contracts/modules/wrapper/extensions/MetaTxModule.sol -FN:19,constructor +FN:18,constructor FNF:1 FNH:1 -FNDA:199,constructor +FNDA:204,constructor LF:0 LH:0 BRF:0 diff --git a/doc/schema/drawio/architecture.drawio b/doc/schema/drawio/architecture.drawio index ad3dd6ff..f8517718 100644 --- a/doc/schema/drawio/architecture.drawio +++ b/doc/schema/drawio/architecture.drawio @@ -1 +1 @@ -7V1Ze5s6E/41ubQfJLFeZut2mjZfkpPl3PTBBie02DiYbP31H9hgw0iYxRLITXvTgAHjmVeza+aAHE9fP4b2/OEscFz/ACvO6wE5OcCYaKoS/5eceVudQRZKz9yHnpOe25y49H676cnssifPcReFC6Mg8CNvXjw5DmYzdxwVztlhGLwUL5sEfvFb5/a9S524HNs+ffbGc6KH9CxSlM0Hn1zv/iH9alNLPxjZ41/3YfA0S7/vAJMPy3+rj6d29qz0+sWD7QQvuVPk9IAch0EQrf6avh67fkLcjGyr+z6UfLp+79CdRXVu+O9O/2Q5P79eTG79b9eKh4zfxgAZq8c82/6Tm/2O5dtGbxmFlr/RTZ6iHJCjlwcvci/n9jj59CUGRXzuIZr68RGK/5x4vn8c+EG4vJdMJuP4X3x+EYXBLzf3CdGJRZzkjmAWpbBAanxM/670pz67YeS+5k6lv/OjG0zdKHyLL0k/NSxtdUsKykHGg5cNh4maXvOQYy6y0gvtFFX362dvKBv/kRK3CaH1akLHCJknfyYkqqJzGER25AWz+HBgKTThR8hxJgqL8EgxiOWKIbyqakNUpL051CyK+IalDC2VRX/LHBqaKB4oTcCOGoPdsV1zwgS7Pjbd0UQQzXGR4LpOg11jgX0tgnch9M9ZaDiPbyfBbTh/xurJy9S7G2hi6TyZuDpbqDiGNVIUMXRGakbYlNAaogmNTYWBao0Dof8hk2fbfjMfP/2M9Dv0/Bqen8eIJmLlt4sczTVYpLZ0g9i6KFIXKW0RmtKIKAxSEyKK1FYj4dGc0v0ID50UKY2Y0gMxKM1DUzIJrdXQlLtJjwkukR76SNcEQdoyioReozdH5zXtOxIegrWh5pqOyqKziUdEF0TngaYUCT1QGcLDwgxK64ooSmOK0sfxL3dfowOs+/G3H43CAt31x6fEK1jSZ7BYEugwvgCp89cllbLP47/uk///nd+HtuPao/j+3WSSAIaoAPkDojIYwuCHMOCzzBPdnia08FOyFo4UL2ZWOEmIluAm/fC+cGl2xIOdn08vjrEiNVMRxVSDoaK1LrnKUhvycfXMjWzHfgfrHtcBiMJwS4QBhA51LDnyDngxQFApYoYMRmylKIgbFpMbhoEa8oOU8CPVsELYQjixxQJcMRlMIV0yhREhORyP3cUioWYY+Jx4IzNTtBo86XShINpOP7efFgnxZKbjABOtmpJqp5Sk7fCEku5Z4DxJKLWJUSSglUW1+4MiHW1K7JmrV046VFJGqIARBsuUYTHCEMYIlZbTT9FDEHq/l1kBSQmJNBBu0hiUxKy4njhI084gZRWm4Iz9BUnpamhQUvSutGhvLCWrcvQUyopPTZeOjgwzeTYJwrE7dTM4fk782JntS0fOWLuDoCfD62Aud1MUPTFt4F7bvufkpKa05LRMQE2NgU5WCFkYOjFtmh7Z0tpTCFuyLW9MW6Snr5E7cxYU9eKTh0m5S3w08oPxr5gm8amMRPrq8IOXfP+SvoVagTzhYwKGb7fpR8uDu+SToZYdnrzmrzx5S48gR9xXL7pd3mlo6eFddmP89+YpyUH2kFI2LoKncOzWMHkiO7x3o20XpsxynULhDw0L1rIJXT8WBc9u4d1YbE8fdx7EVkEOYjpYoypMk61+Z3rbBj3UkwiwlFQMHrSiA/WgGCP2W+6yeXLBosEbDzRl64shtP2G+I/VO2xWxZrm7RcKoT2P47Orw6sfR4eXp9JJGgNUCiC19ygCqRH9XNm5lzN7vngIpDcuMDQueleHKu2VUcaafHSEsWG2VmQE6sXRkR0brsSqdLQ1gRA3ehcDGqteKKXqQZ3QjVESuvk+d2f/ufO563uzdfpsNlrMmyfQyr7i83TuL1fSqvAxfWhMhlF2BQWAZY69wOViMcIsmLkHxcqF9FTsFNwnxZVjNxGA8YmE697Y9g/TD6ae4yRfw4RVEXh5ZBmcoqvQPhiojGq0dc6tUCIlDFusWmIe2NroICVb6O+Z9wgD84IojMAwS/MJY72uU+RPzO/L9DAIo4fgPohZeLo5Cwi1ueZrEMxTjv10o+gtJZ/9FAVFfm48kLwDkn3CdkBqS/lK92FHVwHGmkwo8+t6CpUPKvEUeJnmFq2tP8+8yItX0W85s+EElJf2X5G0LoTIEfEmpsXcTVQmJ/1ZYiSlcrKucCzhjZEdpw9G28QmJWA5cBXw1GQVOLCyjao4npq0GSs8uJOJxHxEZhOgYcvEdURIGeJ1FGgtShuEhErZWBndyfz7yugOrimdBQR3DAAxpMGYTF2RHXuKsB4Hpgo5hXcGqlby0kLDNUhhuHCdBTZzscw6KGauGT5GBD/cZ1q2D+DroNgTUbssagMfwf0GonAPY/0oK0MWi3tGYn4b4Me+vVh4422o5mew5nd0bDFudg2BqzBNBTVsXbDERhEACwym84qBw1fOvkgwVmgZyRkrbAdJVIYm04aSAFGH6homlWsLLaJUPIkXDhWYN+gEh4wsrnyV87Htrq49IskcSgvIKWYZb5eV7gjX2NafEy2pa+fYi4f1Zi9JhYwhlYyhzHi4pbq+RwCftLOM4R3nQZj2Z7eBKjPmC6gqmvI5Ox93bgPxso6rWVcXBNSeKkE5f/g92QsLVjPNzB2B8GnrKJbCrtJ70/4EeNK7iAgUd7y8N6p/SycIzXzT/hG6iAkZAe2c6VmU07Lbcx05nKuq2gTpy6NzN/RimiYB2h2VtoprrhPUpyBHBlGGOsK6ZSBVR6ZOCiBEujE0l8aeghUVYVVvt4yQgoCVD+1AXu6EAfaXIVJV20XdoVfcQP0WvZOFWqN1ASfPuX5MEDROWf6j8ir5xlft15NknjZSYHOLtrlMKlyNYU8GTmsD1lJn3yMYtzW69fzp0UGwL7x1dLCMg/yDg+CNgS1S4wbO2GK23KIl4rJkTuZyfBNE6BVGSxxhhYdMIjJbSHAoYLp0x0+hFyU//m8BU7JCgJmh4Q4LmD5g250+3/yanijXb1dHb55692PAqNwVna6UOqgBN28jykitK6epJyk165OERLaYzGdsAZU1V10bNDVcrf7QpfJDlwrRtXNCmTe6GDth3wG69P7QpWNe6FIpdGW1ltKgi7Gt5x2gq8d4qol4oUuXXzPuURUXP3Rl27h6iUEinRe8Yn9Kenwx+k29A4D1GuQmGjeAIUN+gDWLFLNr3D/YU89PfuMn1392E0eaAYfkOHPDHXdiPy0dfMoTL7rwmwtL0SRJ4I6fQ4hg8TP9KH47VtigwI1AUSMM26YGhn8RsSRQMWG5nNK2Tt7EfSOFDti/A/2E+jSAMMgoWm1LqjA01BVReVb4ykax1JzRcwPuC+dcm87GcrPSdFoV7nfmCWZlWuOK0l/Uk0QLpRoDEvZJfbWJRIq0dKigT1ukwDBn50BpVgUsP1BaBBVFAgV6Uq3tHBix7BwozSp75QdKi/igSKDAmI7Sdv8cDD52DhTuW5Y2QDGJlYfKUFl2oq4Pl+RDjiWLLfZbivSpYE5DgeUu9aM20PgUVGVuZVV64HuEGrmM/p57LcnaxKL3BIagvLZrUcbc9cYHKQUxtr31Aj+kSOZumVRyq7W/BQ3yukhp7sdTln8nIquHGBNrfwHH+FHdeGRW9ZsoeyO1QUU07oDbarW2UksDJn/dXktNoahRrUa21ZAyduoU7h4AigWTycIVI1T3uo6uIzhacM8E1YOofooXFFKa8EncdqbDjSHZO8sOyD56MPHsQ9OZ/ZAJ7epONM3tDG51g6Dm31RAOVbt3ADcsS+oowOcgpe9cOn+l+3XCzJA+qjyWXtVeF9CztxAXNZvufl+XDirTJAnr4JCIqsiv0VgqqXieuqHWF3kwxibCHtqzydAxG/bI1TXDlKGCGX1MyK2GJQwvfk6gMtAVH+eAXzldSC3XJ5T76ZW3FFxQ5mhJd6U4r95sW8lIFc6SYPTaVqvB2plCSp8oN64Yns5gXqE8+QQNmyblT20jfO9z8yWAfNRbW2ZMihxb30DJ+VxhuB/d/ony/n59WJy63+7Vjxk/DaynrV9GBqoB4z2Wz8PPaj2ZT5wlJOoCUwYJFVArK/6zRrfoHJup8NEfR+lky1ydRI0v85yzZWhF9Ki+x2/lQXyxmbr1B/c/q3CcghOK8uE31NVlwn7+fHuGcxcJz2EzMVjvnoPjNIjlFWYEKI67dWPwEPIiEpOwkWzfufay2y9Paf2HZnyLP/1Jdq29g066mCF9bC/v7TlYMOhm+0XWJ+qAspRAq35+sur8JwBFmaDgTfGFWEaGOJsev26U6xQ4DN3v/FoaLNcPwsvmMU0/dvS5oDey61nS6mLjjZs3tNeJx/eHweh+5frqcIEBUOYMYRvLbO6YTurlJvbEL5Vz/f3zHI40pM1ZqrTdd6w4jVrJsutbKzMsjGazhNvb+rU3v+6dwU+1JM0Qe4F/UV4S+VBL/U97CBTs6RU1abGlZC6SSFBmqBUkoj8wIC7r1vPPYEdNjdzUPiXaLOZy0rdNNBlMZ9KTJizq8P9VGN4q1PYQI1B3rIsl24VGaHddL5Luaz1RqF/+96tdw2ud2qV1na2NcrdFuRtg3bROucxR2x47djctVSY7LMjxEucIAIih727v0TUMPIzOxlwr4zjy0N7HO0n33l5QwacDJkt5f4Yn82a4FfvUaY3ihqGpTxYlSLbR3aU8mTPBmMNNKqOrfXMUDgToHZ9H7cMHffKN76Qqqog/WNAZUEgtC+Rg4+iJreJxhT3Ji77gikkmQENTRfK6m09J3RQs4iNG6a493vhjKl3gigMcdA2/Eervq41H/fGMBwQ1cmcUbnaf9CQaq35aGtK1BA/UNa4/iKx1VTcO9TwQGyD/Q1/DGQhzlpvc6PUKhI06mmgGewvElud1CyB9wfJ2EzwyIJYGP5sLWNJRyIWwTfuRMRq3Dvn7ImZKRdc4VxfCmS14ap3JF8py4OzeH2cnh/hH4+P389u7O/45NeVcntVUgNnT5P4aBq5LR4p3qbSRVl/eF+4NDtaxZPDgzoBZbWssObEHUUf/WBk+9Qy6ntGH2zlnbkf+ehulrdjQXyX6O6jezU4Pfn3xnv5fnH9D3mxF18+MsYcbhM9aRC9kODLESw5f25HMbdnyzNYIZTQwZSwKiWrJHJh0+d6XQHQvvwW9smARhw//5PJbkyxO0ndX/04v/h+eyfdatFh1yY9G5BRmGjJYD2PiZZMAtKR6xUBL68Ov50cfv3+7VQ6KloED7UadDTWl3VCyX636ey0S0eYVb9tzfKr2hMxIs6yIMbWO4MbN2+mn6ULagtH1XZpFbOIqQEaGuedn0wESLDfpj18e0QltTsK6W1r92jGC+sMR71z1S4z6g45UUwnUxJDXeKB2lpJWVWl9QHjHNx0Jp09OA5dx4tOn+NfuZCUjFDIMslIuiQjYwrRNklaVRlZSiNJHBhoRrdu4QD7vlIPEuy9NJy4I32LadnmjIEw62b7cmOgVDUN4WW/UYqMc7yWDcOe55sbYGeQZZGmDkzyae3ZDnnPY5tmb9AHz8p62mQbmi1aJfBqVg1Dbm2ln4DxwmVfZDHfuMuOdWzg9zB6nXs36o7RV6Uy2+peQ5RLDF+4XqP0DsDHvXSGn48rV1knQpCHrbuxUIMVMQjqcBN5wEeo6Hxo6c2up5otNb7BwNs7TVO9Xipv0MytNwiyXUQOnIqXaK4uf6gYuJEh3Xrg1NZeHdIsSlUZ6oa1/mcWmW8pQyP3qdFWS+hMmHeWX6Jrb/Ymql8KtX5Cl7DnbOtdiFTOcefI5Q6owY8PowvrK7k/Pvw0ujBiJlzoDZPQGVoKWegiVnJAwvVkF1HzsitpaIC3C6/WwmqbAVHwtLYVX/TSZx8oONI2OqBrFQ/iZVRkLXvS78FVYXHd3Hb9zgqZif1mIS2e2N+ITaOR3CxFeR69zN/aotcyvxZqRZ+aKvyvP2fPGJqWahDdVJNuhUCPD6jaEH4adxtN8wr34hjp2r/z+9B2XHskYUYAlnOui/ELGQFmOQKPQqjpo3l0Yywub0bqly+33vX1t8vTOjpoQzZUg2y5vccHmDi2a07GB7A0M/5EH5vuaCKG0PQEvnVSJd9Qi1VxRm0v5UZpzKC0VPWD8QLCymksccMFp0fKvBiRDsuDBoQBEqR0uRqbJeg4asXSPqMNnYtaSnLb8uhDSRpQLrdWkrA7JxGUAMJgXsKAt83GZBFts30+HI/dxeI4aWIR+FIvdwNSjKV8LcZi55GOZ5KzWZ8iMSZwq8GC+WEQotpQZAunUm6o/ckNBBJWrTf6xA8aEghQJKjSChvFgdlZ8IqX6GCPJqCtn2vb95yY/MFM0gIeRGAdNq5bCcWjepjdjqjfOaTNPOZ++0NkkKseM92j6YHgplRE2va3UVVtqOT+FWUTUnQxKSxqUk7lQAE4TqPyBlXXdrxh6/A7XvsZM23Q63yADjtFqb2uG1i0RaDMrR/Zgo9Sasaymk8HMOFLN03HtrgDcdbvTCtMVJe81LPw3fDvhIAMRDC2RRhNEoU1i2dyv1lyvWI3ZY0BdJs+GLxlmmSlqbDeA2lt06EWLE0V5F1YdDEt3/IOdhSbzr9/C5K38mZj/ylBE1ZGyc/IegLIKS44iAeLGHAXmcqYLSCqlea3E+Pm65fg09Pv11tn8PV/Zx8GM2aOQbbId2whqhQqOHigFOcY/C1nJt3pgOKksH3zTFb2l7ZtvfcUiPKW4ShWHLsc7B3VysBqwNZhazhNjVcuNz4Mg2StbS6P181DbMe5yRX/Bw== \ No newline at end of file +7V1Ze5s6E/41ubQfJLFeZmvTnqbNl+RkOTd9sMEJrW0cTNKkv/4DG2wYidUSyE1704AB45lXs2vmgBzPXj8G9uLx3Hfc6QFWnNcDcnKAsaqaSvRffOZtfQYTnJx5CDxnfQ5tT1x5v93kZHrZs+e4y9yFoe9PQ2+RPzn253N3HObO2UHg/8pfNvGn+W9d2A8udeJqbE/ps7eeEz4mZ5GibD84c72Hx+SrTS35YGSPfz4E/vM8+b4DTD6s/q0/ntnps5Lrl4+24//KnCKnB+Q48P1w/dfs9didxsRNyba+70PBp5v3Dtx5WOeG/+71M8v58eVycjf9eqN4yPhtDJCxfsyLPX1209+xetvwLaXQ6je68VOUA3L069EL3auFPY4//RWBIjr3GM6m0RGK/px40+mxP/WD1b1kMhlH/6LzyzDwf7qZT4hOLOLEd/jzMIEFUqNj+nclP/XFDUL3NXMq+Z0fXX/mhsFbdEnyqWFp61sSUA5SHvzaclgjyTWPGeYiK7nQTlD1sHn2lrLRHwlxmxBaryZ0hJBF/GdMoio6B35oh54/jw4HlkITfoQcZ6KwCI8Ug1iuGMKrqjZEedqbQ82iiG9YytBSWfS3zKGhieKB0gTsqDHYHds1J0yw62PTHU0E0RznCa7rDLCrDLBvRPAuhP4xDwzn6e3EvwsWL1g9+TXz7geaWDpPJq7OFiqOYY0URQydkZoSNiG0hmhC41Qf5lCtcSD0P2TyYttv5tPZj1C/Ry+vwcVFhGgiVn67yNFcg0VqSzeIrYsidZ7SFqEpjYjCIDUhokhtNRIezSndj/DQSZ7SiCk9EIPSPDQlk9BaDU25m/SY4ALpoY90TRCkLSNP6A16M3Te0L4j4SFYG2qu6agsOpt4RHRBdB5oSp7QA5UhPCzMoLSuiKI0pih9HP1y9zU8wPo0+vajUZCju/70HHsFK/oMlisCHUYXIHXxuqJS+nn010P8/7+Lh8B2XHsU3b+bTBLAEBUgf0BUBkMY/BAGfJZ5otuzmBbThKy5I8WLmBVMYqLFuEk+fMhdmh7xYOen08tjrEjNVEQx1WCoaK1LrrLUhnxcPXdD27HfwbrHdQCiMNwSYQChQx0rjrwDXgwQVIqYIYMRWykK4obF5IZhoIb8IAX8SDSsELYQTmyxAFdMBlNIl0xhREgOx2N3uYypGfhTTryRmSlaDZ50ulAQbadf2M/LmHgy03GAiVZNSbVTStJ2eExJ99x3niWU2sTIE9BKo9r9QZGONsX2zPUrJx0qKSNUwAiDZcqwGGEIY4RKy+nn8NEPvN+rrICkhEQaCDdpDEpiVlxPHKRpZ5CyChNwRv6CpHQ1NCgpeldatDeWkFU5eg5kxaemS0dHhpk8n/jB2J25KRw/xX7s3J5KR85Iu4OgJ8PrYC53UxQ9MW3g3thTz8lITWnJaZmAmhoDnawQsjB0Yto0PbKltacQtmRb3pi2SE9fQ3fuLCnqRScP43KX6Gg09cc/I5pEp1IS6evDD178/Sv65moFsoSPCBi83SUfrQ7u40+GWnp48pq98uQtOYIccV+98G51p6Elh/fpjdHf26fEB+lDCtm49J+DsVvD5Ant4MENyy5MmOU6ucIfGhasZRO400gUvLi5d2OxPXnchR9ZBRmI6WCNqjBNtv6dyW1b9FBPIsBSUjF40JoO1IMijNhvmcsW8QXLBm880JTSF0Oo/Iboj/U7bFfFhubtFwqhPY/j8+vD6+9Hh1en0kkaA1QKILX3KAKpEf1c27lXc3uxfPSlNy4wNC56V4cq7ZVRxpp8dISxYbZWZATqxdGRHRuuxKp0tDWBEDd6FwMaq14ooepBndCNURC6+bZw5/+5i4U79eab9Nl8tFw0T6AVfcWn2WK6WknrwsfkoREZRukVFABWOfYcl/PFCHN/7h7kKxeSU5FT8BAXV47dWABGJ2Kue2N7eph8MPMcJ/4aJqzywMsiy+AUXYX2wUBlVKNtcm65Eilh2GLVEvPA1lYHKelCf8+8RxiYF0RhBIZZmk8Y63WdIn9sfl8lh34QPvoPfsTC0+1ZQKjtNV98f5Fw7Icbhm8J+ezn0M/zc+uBZB2Q9BO2A1Jbyle6Dzu6CjDWZEKZX9dTqHxQgafAyzS3aG39ae6FXrSKfsuZDSegvLT/iqRNIUSGiLcRLRZurDI56c8CIymRk3WFYwFvjPQ4eTAqE5uUgOXAVcBTk1XgwMo2quJ4atJmrPDgTioSsxGZbYCGLRM3ESFliDdRoI0obRASKmRjZXQn9e8rozu4pnQWENwxAMSQBmMydUV25CnCehyYKuQU3hmoWsFLCw3XIIXhwnUW2MzEMuugmLlm+BgR/HCfatk+gK+DYk9E7bKoDXwE9xuIwj2M9aO0DFks7hmJ+TLAj6f2cumNy1DNz2DN7ugoMW52DYGrME0FNWxdsERGEQALDKbzioHDV06/SDBWaBnJGStsB0lUhibVhpIAUYfqGiaVawstolQ8iRcOFZg36ASHjCyufJXzke2ubjwiyRxKC8gpZhlvl5XuCNfY1p8RLYlr59jLx81mL0mFjCGVjKHMeLilur5HAJ+0s4zhHedBmPZny0CVGvM5VOVN+Yydjzu3gXhZx9WsqwsCak+VoJw//J70hQWrmWbmjkD4tHUUC2FX6b1pfwI86V1EBIo7Xt4b1b+lE4Smvmn/CF1GhAyBdk71LMpo2fJcRwbnqqo2Qfrq6MINvIimcYB2R6Wt4prrBPUpyJFBlKGOsG4ZSNWRqZMcCJFuDM2VsadgRUVY1dstI6QgYOVDO5CXO2GA/WWIVNV2UXfoFTdQv0XvZKHWaF3AyXOuHxMEjVNW/6i8SrbxVfv1JJmnjRTY3KJtLpMKV2PYk4HT2oC11On3CMZtjW49f3p0EOwLbx0dLOIg/+AgeGNgi9S4gTO2mC23aIm4KpmTuRzfBBF6hdESR1jhIZOIzBYSHAqYrtzxc+CF8Y//W8AUrxBgZmi4wwKmD9h2Zy+3P2cnys3b9dGbp95/HzAqd0WnK6UOasDN24gyUuvKaepJSs36JCGRLSbzGVtAZc1V1wZNDVerP3Sp/NClQnTtnFDmjS7GTth3gC69P3TpmBe6VApdaa2lNOhibOt5B+jqMZ5qIl7o0uXXjHtUxcUPXek2rl5ikEjnBa/In5IeX4x+U+8AYL0GuYnGDWDIkB9gzSLF7Br3D/bMm8a/8cydvrixI82AQ3ycuuGOO7GfVw4+5YnnXfjthYVokiRwx88hRLD4mX4Uvx0rbFDgRqCoEYZtUwPDv4hYEqiYsFxOaVsnb+K+kUIH7N+BfkJ9GkAYZBSttiVVGBrqiqg8K3xlI19qzui5AfeFc65NZ2O5WWk6rQr3O/MEszKtcUXpL+pJooVSjQEJ+6S+2kQiRVo6VNCnLVJgmLNzoDSrApYfKC2CiiKBAj2p1nYOjFh2DpRmlb3yA6VFfFAkUGBMR2m7fw4GHzsHCvctS1ugmMTKQmWorDpR14dL/CHHksUW+y1F+lQwp6HAcpf6URtofAqqMrfSKj3wPUKNXEZ/z72WZG1i0XsCQ1Be27UoY+5644OUnBgrb73ADymSuVsmldxq7W9Bg7wuUpr78ZTl34nI6iHGxNpfwDF+VDcemVb9xsreSGxQEY074LZara3U0oDJX7fXUlMoalSrkbIaUsZOndzdA0AxfzJZumKE6l7X0XUERwvumaB6ENVP8YJCShM+idvOdLgxJH1n2QHZRw8mnn1oOrMfUqFd3YmmuZ3BrW4Q1PybCijHqp0bgDv2BXV0gFPw0hcu3P9Sfr0gA6SPKp+NV4X3JeTMDcRF/Zab78eFs8oEefIqKCSyKvJbBKZaKq6nfojVRT6MsYmwp/Z8AkR82R6hunaQMkQorZ8RscWggOnN1wFcBqL68wzgK28CucXynHo3teKOihuKDC3xphT/zYt9KwG50kkanE7Tej1QK0tQ4QP1xhXbywnUI5wnh7Bh26zsoW2c731mtgyYj2pryxRBiXvrGzgpjzME/7vXzyznx5fLyd30643iIeO3kfas7cPQQD1gtN/6eehBtS/zgaOcRE1gwiCpAmJ91W/W+AaVczsdJur7KJ1skauToPl1mmuuDL2QFt3v+K0skDc2W6f+4PZvFZZDcFpZJvyeqrpM2M+Pd89g5jrpIWQuHvPVe2CUHqGswoQQ1WmvfgQeQkZUchIums07115mm+05te9IlWfxry/QtrVv0FEHK6yH/f2FLQcbDt1sv8D6VBVQjhJozddfXrnnDLAwGwy8Ma4I08AQZ9PrN51ihQKfufuNR0Ob1fpZev48ounfljYH9F5uPV1KXXS0YfOe9jr58P7YD9y/XE8UJigYwowhfBuZ1Q3bWaXc3IbwrXu+v2eWw5GerDFTna7zhhWvaTNZbmVjRZaN0XSeeHtTp/b+170r8KGepAlyL+gvwiWVB73U97CDTM2SUlWbGtdC6jaBBGmCUkki8gMD7r5uPfcEdtjczkHhX6LNZi4rddNAl0V8KjBhzq8P91ON4VKnsIEag7xlWS7dKjJCu+l8l3JR641c//a9W+8aXO/UKq3tbGuUuy3I2wbtonXOY47Y8NqxuWuhMNlnR4iXOEEERA57d3+JqGHk53Y84F4ZR5cH9jjcT77z8oYMOBkyXcr9MT6dNcGv3qNIb+Q1DEt5sCpFykd2FPJkzwZjDTSqjq31zFA4E6B2fR+3DB33yje+kKqqIP1jQGVBILQvkYOPoia3icYU9yYu+4IpJJkBDU0XyuptPSd0ULOIjRumuPd74Yypd4IoDHHQNvxHq76uNR/3xjAcENXJnFG52n/QkGqt+WhrStQQP1DWuPkisdVU3DvU8EBsg/0NfwxkIc5ab3Oj1CoSNOppoBnsLxJbndQsgfcHydhU8MiCWBj+bC1jSUciFsE37kTEatw75+yJmSkXXOFcXwpkteGqdyRfKcuDs3h9ml0c4e9PT9/Ob+1v+OTntXJ3XVADZ8/i+GgSuc0fKd620kXZfPiQuzQ9WseTg4M6AWW1qLDmxB2FH6f+yJ5Sy6jvGX2wlXfqfmSju2nejgXxXaK7T+714PTk31vv17fLm3/IL3v5+SNjzGGZ6EmC6LkEX4Zg8fkLO4y4PV+dwQqhhA6mhFUhWSWRC9s+15sKgPblt7BPBjTi+PmfTHZjit1x6v76+8Xlt7t76VaLDrs26emAjNxESwbreUy0ZBKQjlyvCXh1ffj15PDLt6+n0lHRInio1aCjsbmsE0r2u01np106wqz6sjXLr2pPxIg4y4IY2+wMbty8mX6WLqgtHFXbpVXMIqYGaGicd34yESDBfpv28O0RldTuKKS3rd2jGS+sMxz1zlW7zKg75EQxnUyJDXWJB2prBWVVldYHjHNw05l09uA4cB0vPH2JfuVSUjJCIcskI+mSjIwpRGWStKoyspBGkjgw0Ixu3cIB9n2lHiTYe2k4cUf6FtOyzRkDYdbt9uXGQKlqGsLLfqMUGed4LRuGPc83N8DOIMsiTR2Y+NPasx2ynkeZZm/QB89Ke9qkG5otWiXwalYNQ25tpZ+A8cJFX2Qx37jLjnVs4Pcwep17N+qO0VelMtvqXkOUSwxfuF6j9A7Ax710hp+PK1dZJ0KQh627sVCDFTEI6nATecBHqOh8aOnNrqeaLTW+wcDlnaapXi+VN2hm6Q2CbBeRA6eiJZqpyx8qBm5kSLceOFXaq0OaRakqQ92wNv/MPPMtZWhkPjXaagmdCfPO8kt07c3eRPULodZP6BL2nG29C5HKOe4cudwBNfjpcXRpfSEPx4dno0sjYsKl3jAJnaIll4XOYyUDJFxPdhE1K7vihga4XHi1FlZlBkTO0yorvuilzz5QcKRtdEDXKh7Ey6hIW/Yk34OrwuK6WXb9zgqZif1mIS2e2N+KTaOR3CxEeRa9zN/aotcyvxZqeZ+aKvyvP2fPGJqWahDdVONuhUCPD6jaEH4at4ymWYV7eYx07d/FQ2A7rj2SMCMAyzk3xfi5jACzHIFHIdTsyTy6NZZXtyP18+c77+bm69VpHR20JRuqQbbM3uMDTBzbNSfjA1iaGX2ij013NBFDaHoC3yapkm2oxao4o7aXcqM0ZlBaqvrBaAFh5TSSuMGS0yNlXoxIh+VBA8IACVK6XI3NEnQctWJhn9GGzkUtJVm2PPpQkgaUy62VJOzOSQQlgDCYlzDgbbMxWUTbbJ8Ox2N3uTyOm1j4U6mXuwEpxlK+FmOx80jHM8nZrE+RGBO41WDB7DAIUW0o0oVTKTfU/uQGAgmr1ht9ogcNCQQoElRphY38wOw0eMVLdLBHE9DWz4099ZyI/P5c0gIeRGAdNq5bCcWjepjdjqjfOaTNPOZ++0OkkKseM92j6YHgplRE2va3UVVtqGT+5WUTUnQxKSxqUk7lQAE4TqPyBlXXdryhdPgdr/2MqTbodT5Ah52i1F7XDSzaIlDm1o9swUcpNWNZzacDmPClm6ZjW9yBOOt3phUmqkte4llM3eDvhIAURDC2RRhNEoU1i/96Ytx++eyfPf9+vXMGX/53/mEwZwYRZQttRSpApVDSt4lp0VuZKVYK2xjLZGV/eZluW0aw4lJl2O4nGQ7LfVrHpeC4JGHJGgt9v1YPVfPWm6Kz2x/Pz+ptKL98WG1mvZrbi+WjH4qQEpRIYMC2WOQjMPC2y+3zTIbS3rzEUmK3WDZY+C13PDAKHYpXSkeZYWCMtpcuKhx6JahGl37lqkGMCMS6MOdBjEwe9rHDe7MsjP1aF4ReFyWjTTtZGBaM+qmtw7oIBneoRwmaUIp2nMwbHQZ+rCK3l0eK7jHyv9z4iv8D \ No newline at end of file diff --git a/doc/schema/drawio/architecture.pdf b/doc/schema/drawio/architecture.pdf index ddbab2f8..5341b3dd 100644 Binary files a/doc/schema/drawio/architecture.pdf and b/doc/schema/drawio/architecture.pdf differ diff --git a/test/common/AuthorizationModule/AuthorizationModuleCommon.js b/test/common/AuthorizationModule/AuthorizationModuleCommon.js index 756fc95f..614a542e 100644 --- a/test/common/AuthorizationModule/AuthorizationModuleCommon.js +++ b/test/common/AuthorizationModule/AuthorizationModuleCommon.js @@ -2,7 +2,11 @@ const { expectEvent } = require('@openzeppelin/test-helpers') const { expectRevertCustomError } = require('../../../openzeppelin-contracts-upgradeable/test/helpers/customError') -const { PAUSER_ROLE, DEFAULT_ADMIN_ROLE, ZERO_ADDRESS } = require('../../utils') +const { + PAUSER_ROLE, + DEFAULT_ADMIN_ROLE, + ZERO_ADDRESS +} = require('../../utils') const chai = require('chai') const should = chai.should() function AuthorizationModuleCommon (admin, address1, address2) { diff --git a/test/common/AuthorizationModule/AuthorizationModuleSetAuthorizationEngineCommon.js b/test/common/AuthorizationModule/AuthorizationModuleSetAuthorizationEngineCommon.js index 0f691ac4..a2539d74 100644 --- a/test/common/AuthorizationModule/AuthorizationModuleSetAuthorizationEngineCommon.js +++ b/test/common/AuthorizationModule/AuthorizationModuleSetAuthorizationEngineCommon.js @@ -5,13 +5,20 @@ const { const { DEFAULT_ADMIN_ROLE } = require('../../utils.js') const { should } = require('chai').should() -function AuthorizationModuleSetAuthorizationEngineCommon (admin, address1, authorizationEngine) { +function AuthorizationModuleSetAuthorizationEngineCommon ( + admin, + address1, + authorizationEngine +) { context('AuthorizationEngineSetTest', function () { it('testCanBeSetByAdminIfNotAlreadySet', async function () { // Act - this.logs = await this.cmtat.setAuthorizationEngine(this.authorizationEngineMock.address, { - from: admin - }) + this.logs = await this.cmtat.setAuthorizationEngine( + this.authorizationEngineMock.address, + { + from: admin + } + ) // Assert // emits a RuleEngineSet event expectEvent(this.logs, 'AuthorizationEngine', { @@ -21,14 +28,20 @@ function AuthorizationModuleSetAuthorizationEngineCommon (admin, address1, autho it('testCannotBeSetByAdminIfAlreadySet', async function () { // Arrange - await this.cmtat.setAuthorizationEngine(this.authorizationEngineMock.address, { - from: admin - }) + await this.cmtat.setAuthorizationEngine( + this.authorizationEngineMock.address, + { + from: admin + } + ) // Act await expectRevertCustomError( - this.cmtat.setAuthorizationEngine(this.authorizationEngineMock.address, { - from: admin - }), + this.cmtat.setAuthorizationEngine( + this.authorizationEngineMock.address, + { + from: admin + } + ), 'CMTAT_AuthorizationModule_AuthorizationEngineAlreadySet', [] ) @@ -37,7 +50,10 @@ function AuthorizationModuleSetAuthorizationEngineCommon (admin, address1, autho it('testCannotNonAdminSetAuthorizationEngine', async function () { // Act await expectRevertCustomError( - this.cmtat.setAuthorizationEngine(this.authorizationEngineMock.address, { from: address1 }), + this.cmtat.setAuthorizationEngine( + this.authorizationEngineMock.address, + { from: address1 } + ), 'AccessControlUnauthorizedAccount', [address1, DEFAULT_ADMIN_ROLE] ) @@ -48,19 +64,27 @@ function AuthorizationModuleSetAuthorizationEngineCommon (admin, address1, autho // Arrange await this.authorizationEngineMock.authorizeAdminChange(address1) // Act - await this.cmtat.setAuthorizationEngine(this.authorizationEngineMock.address, { from: admin }) + await this.cmtat.setAuthorizationEngine( + this.authorizationEngineMock.address, + { from: admin } + ) // Assert this.logs = await this.cmtat.grantRole(DEFAULT_ADMIN_ROLE, address1, { from: admin }); // Assert - (await this.cmtat.hasRole(DEFAULT_ADMIN_ROLE, address1)).should.equal(true) + (await this.cmtat.hasRole(DEFAULT_ADMIN_ROLE, address1)).should.equal( + true + ) }) // Mock it('testCannotTransferAdminIfNotAuthorizedByTheEngine', async function () { // Arrange - await this.cmtat.setAuthorizationEngine(this.authorizationEngineMock.address, { from: admin }) + await this.cmtat.setAuthorizationEngine( + this.authorizationEngineMock.address, + { from: admin } + ) // Act await expectRevertCustomError( this.cmtat.grantRole(DEFAULT_ADMIN_ROLE, address1, { @@ -75,19 +99,27 @@ function AuthorizationModuleSetAuthorizationEngineCommon (admin, address1, autho // Arrange await this.authorizationEngineMock.authorizeAdminChange(address1) // Act - await this.cmtat.setAuthorizationEngine(this.authorizationEngineMock.address, { from: admin }) + await this.cmtat.setAuthorizationEngine( + this.authorizationEngineMock.address, + { from: admin } + ) // Assert this.logs = await this.cmtat.revokeRole(DEFAULT_ADMIN_ROLE, address1, { from: admin }); // Assert - (await this.cmtat.hasRole(DEFAULT_ADMIN_ROLE, address1)).should.equal(false) + (await this.cmtat.hasRole(DEFAULT_ADMIN_ROLE, address1)).should.equal( + false + ) }) // Mock it('testCannotRevokeAdminIfNotAuthorizedByTheEngine', async function () { // Arrange - await this.cmtat.setAuthorizationEngine(this.authorizationEngineMock.address, { from: admin }) + await this.cmtat.setAuthorizationEngine( + this.authorizationEngineMock.address, + { from: admin } + ) await this.authorizationEngineMock.setRevokeAdminRoleAuthorized(false) // Act await expectRevertCustomError( diff --git a/test/common/ERC20BaseModuleCommon.js b/test/common/ERC20BaseModuleCommon.js index 13283856..7a16ec1e 100644 --- a/test/common/ERC20BaseModuleCommon.js +++ b/test/common/ERC20BaseModuleCommon.js @@ -33,26 +33,16 @@ function ERC20BaseModuleCommon (admin, address1, address2, address3, proxyTest) it('testHasTheCorrectBalanceInfo', async function () { // Act + Assert // Assert - let ADDRESSES = [address1, address2, address3 ]; - let result = await this.cmtat.balanceInfo(ADDRESSES); - result[0][0].should.be.bignumber.equal( - TOKEN_AMOUNTS[0] - ); - result[0][1].should.be.bignumber.equal( - TOKEN_AMOUNTS[1] - ); - result[1].should.be.bignumber.equal( - TOKEN_INITIAL_SUPPLY - ); + const ADDRESSES = [address1, address2, address3] + let result = await this.cmtat.balanceInfo(ADDRESSES) + result[0][0].should.be.bignumber.equal(TOKEN_AMOUNTS[0]) + result[0][1].should.be.bignumber.equal(TOKEN_AMOUNTS[1]) + result[1].should.be.bignumber.equal(TOKEN_INITIAL_SUPPLY) - let ADDRESSES2 = []; - result = await this.cmtat.balanceInfo(ADDRESSES2); - BN(result[0].length).should.be.bignumber.equal( - BN(0) - ); - result[1].should.be.bignumber.equal( - TOKEN_INITIAL_SUPPLY - ) + const ADDRESSES2 = [] + result = await this.cmtat.balanceInfo(ADDRESSES2) + BN(result[0].length).should.be.bignumber.equal(BN(0)) + result[1].should.be.bignumber.equal(TOKEN_INITIAL_SUPPLY) }) }) diff --git a/test/common/ERC20BurnModuleCommon.js b/test/common/ERC20BurnModuleCommon.js index 6f41bb96..73363ef8 100644 --- a/test/common/ERC20BurnModuleCommon.js +++ b/test/common/ERC20BurnModuleCommon.js @@ -1,5 +1,10 @@ const { BN, expectEvent } = require('@openzeppelin/test-helpers') -const { BURNER_ROLE, BURNER_FROM_ROLE, MINTER_ROLE, ZERO_ADDRESS } = require('../utils') +const { + BURNER_ROLE, + BURNER_FROM_ROLE, + MINTER_ROLE, + ZERO_ADDRESS +} = require('../utils') const { expectRevertCustomError } = require('../../openzeppelin-contracts-upgradeable/test/helpers/customError.js') @@ -134,7 +139,9 @@ function ERC20BurnModuleCommon (admin, address1, address2, address3) { await this.cmtat.grantRole(BURNER_FROM_ROLE, address2, { from: admin }) await this.cmtat.approve(address2, 50, { from: address1 }) // Act - this.logs = await this.cmtat.burnFrom(address1, AMOUNT_TO_BURN, { from: address2 }) + this.logs = await this.cmtat.burnFrom(address1, AMOUNT_TO_BURN, { + from: address2 + }) // Assert expectEvent(this.logs, 'Transfer', { from: address1, @@ -155,14 +162,16 @@ function ERC20BurnModuleCommon (admin, address1, address2, address3) { await expectRevertCustomError( this.cmtat.burnFrom(address1, AMOUNT_TO_BURN, { from: admin }), 'ERC20InsufficientAllowance', - [admin, 0, AMOUNT_TO_BURN]) + [admin, 0, AMOUNT_TO_BURN] + ) }) it('testCannotBeBurntWithoutBurnerFromRole', async function () { await expectRevertCustomError( this.cmtat.burnFrom(address1, 20, { from: address2 }), 'AccessControlUnauthorizedAccount', - [address2, BURNER_FROM_ROLE]) + [address2, BURNER_FROM_ROLE] + ) }) }) @@ -185,7 +194,14 @@ function ERC20BurnModuleCommon (admin, address1, address2, address3) { await this.cmtat.grantRole(MINTER_ROLE, address2, { from: admin }) // await this.cmtat.approve(address2, 50, { from: address1 }) // Act - this.logs = await this.cmtat.burnAndMint(address1, address3, AMOUNT_TO_BURN, AMOUNT_TO_MINT, 'recovery', { from: address2 }) + this.logs = await this.cmtat.burnAndMint( + address1, + address3, + AMOUNT_TO_BURN, + AMOUNT_TO_MINT, + 'recovery', + { from: address2 } + ) // Assert expectEvent(this.logs, 'Transfer', { from: address1, @@ -208,9 +224,15 @@ function ERC20BurnModuleCommon (admin, address1, address2, address3) { account: address3, value: AMOUNT_TO_MINT }); - (await this.cmtat.balanceOf(address1)).should.be.bignumber.equal(INITIAL_SUPPLY.sub(AMOUNT_TO_BURN)); - (await this.cmtat.balanceOf(address3)).should.be.bignumber.equal(AMOUNT_TO_MINT); - (await this.cmtat.totalSupply()).should.be.bignumber.equal(INITIAL_SUPPLY.sub(AMOUNT_TO_BURN).add(AMOUNT_TO_MINT)) + (await this.cmtat.balanceOf(address1)).should.be.bignumber.equal( + INITIAL_SUPPLY.sub(AMOUNT_TO_BURN) + ); + (await this.cmtat.balanceOf(address3)).should.be.bignumber.equal( + AMOUNT_TO_MINT + ); + (await this.cmtat.totalSupply()).should.be.bignumber.equal( + INITIAL_SUPPLY.sub(AMOUNT_TO_BURN).add(AMOUNT_TO_MINT) + ) }) it('canBeBurnAndMintWithoutMinterRole', async function () { @@ -221,9 +243,17 @@ function ERC20BurnModuleCommon (admin, address1, address2, address3) { // await this.cmtat.approve(address2, 50, { from: address1 }) // Act await expectRevertCustomError( - this.cmtat.burnAndMint(address1, address3, AMOUNT_TO_BURN, AMOUNT_TO_MINT, 'recovery', { from: address2 }), + this.cmtat.burnAndMint( + address1, + address3, + AMOUNT_TO_BURN, + AMOUNT_TO_MINT, + 'recovery', + { from: address2 } + ), 'AccessControlUnauthorizedAccount', - [address2, MINTER_ROLE]) + [address2, MINTER_ROLE] + ) }) it('canBeBurnAndMintWithoutBurnerRole', async function () { @@ -234,9 +264,17 @@ function ERC20BurnModuleCommon (admin, address1, address2, address3) { // await this.cmtat.approve(address2, 50, { from: address1 }) // Assert await expectRevertCustomError( - this.cmtat.burnAndMint(address1, address3, AMOUNT_TO_BURN, AMOUNT_TO_MINT, 'recovery', { from: address2 }), + this.cmtat.burnAndMint( + address1, + address3, + AMOUNT_TO_BURN, + AMOUNT_TO_MINT, + 'recovery', + { from: address2 } + ), 'AccessControlUnauthorizedAccount', - [address2, BURNER_ROLE]) + [address2, BURNER_ROLE] + ) }) }) @@ -371,12 +409,9 @@ function ERC20BurnModuleCommon (admin, address1, address2, address3) { const ADDRESS2_BALANCE = await this.cmtat.balanceOf(address2) // Act await expectRevertCustomError( - this.cmtat.burnBatch( - TOKEN_HOLDER, - TOKEN_BY_HOLDERS_TO_BURN_FAIL, - '', - { from: admin } - ), + this.cmtat.burnBatch(TOKEN_HOLDER, TOKEN_BY_HOLDERS_TO_BURN_FAIL, '', { + from: admin + }), 'ERC20InsufficientBalance', [address2, ADDRESS2_BALANCE, TOKEN_BY_HOLDERS_TO_BURN_FAIL[2]] ) diff --git a/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleCommonRescheduling.js b/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleCommonRescheduling.js index 63aaa933..bc687140 100644 --- a/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleCommonRescheduling.js +++ b/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleCommonRescheduling.js @@ -13,7 +13,12 @@ const { checkArraySnapshot } = require('./ERC20SnapshotModuleUtils/ERC20SnapshotModuleUtils') -function ERC20SnapshotModuleCommonRescheduling (owner, address1, address2, address3) { +function ERC20SnapshotModuleCommonRescheduling ( + owner, + address1, + address2, + address3 +) { context('Snapshot rescheduling', function () { beforeEach(async function () { this.currentTime = await time.latest() diff --git a/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleCommonScheduling.js b/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleCommonScheduling.js index b5e21ce0..b86f5a0c 100644 --- a/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleCommonScheduling.js +++ b/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleCommonScheduling.js @@ -12,7 +12,12 @@ const { checkArraySnapshot } = require('./ERC20SnapshotModuleUtils/ERC20SnapshotModuleUtils') -function ERC20SnapshotModuleCommonScheduling (owner, address1, address2, address3) { +function ERC20SnapshotModuleCommonScheduling ( + owner, + address1, + address2, + address3 +) { context('Snapshot scheduling', function () { beforeEach(async function () { this.currentTime = await time.latest() @@ -50,7 +55,9 @@ function ERC20SnapshotModuleCommonScheduling (owner, address1, address2, address this.logs = await this.cmtat.scheduleSnapshot(SNAPSHOT_TIME, { from: owner }) - const SNAPSHOT_TIME_INVALID = SNAPSHOT_TIME.sub(time.duration.seconds(60)) + const SNAPSHOT_TIME_INVALID = SNAPSHOT_TIME.sub( + time.duration.seconds(60) + ) await expectRevertCustomError( this.cmtat.scheduleSnapshot(SNAPSHOT_TIME_INVALID, { from: owner diff --git a/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleCommonUnschedule.js b/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleCommonUnschedule.js index 58a45585..a42b8256 100644 --- a/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleCommonUnschedule.js +++ b/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleCommonUnschedule.js @@ -13,7 +13,12 @@ const { checkArraySnapshot } = require('./ERC20SnapshotModuleUtils/ERC20SnapshotModuleUtils') -function ERC20SnapshotModuleCommonUnschedule (owner, address1, address2, address3) { +function ERC20SnapshotModuleCommonUnschedule ( + owner, + address1, + address2, + address3 +) { context('unscheduleSnapshotNotOptimized', function () { beforeEach(async function () { this.currentTime = await time.latest() diff --git a/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleUtils/ERC20SnapshotModuleUtils.js b/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleUtils/ERC20SnapshotModuleUtils.js index e0a8f18a..ce96fa64 100644 --- a/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleUtils/ERC20SnapshotModuleUtils.js +++ b/test/common/ERC20SnapshotModuleCommon/ERC20SnapshotModuleUtils/ERC20SnapshotModuleUtils.js @@ -11,24 +11,29 @@ async function checkSnapshot (time, totalSupply, addresses, balances) { // Values before the snapshot (await this.cmtat.snapshotTotalSupply(time)).should.be.bignumber.equal( totalSupply - ); - const result = await this.cmtat.methods['snapshotInfoBatch(uint256,address[])'](time, addresses); + ) + const result = await this.cmtat.methods[ + 'snapshotInfoBatch(uint256,address[])' + ](time, addresses) const times = [time] - const result2 = await this.cmtat.methods['snapshotInfoBatch(uint256[],address[])'](times, addresses); + const result2 = await this.cmtat.methods[ + 'snapshotInfoBatch(uint256[],address[])' + ](times, addresses) for (let i = 0; i < balances.length; ++i) { ( await this.cmtat.snapshotBalanceOf(time, addresses[i]) ).should.be.bignumber.equal(balances[i]) - await this.cmtat.snapshotInfo(time, addresses[i]); - const { 0: ownerBalance, 1: totalSupplyGet } = await this.cmtat.snapshotInfo(time, addresses[i]); + await this.cmtat.snapshotInfo(time, addresses[i]) + const { 0: ownerBalance, 1: totalSupplyGet } = + await this.cmtat.snapshotInfo(time, addresses[i]) // const [ownerBalance, totalSupplyGet] ownerBalance.should.be.bignumber.equal(balances[i]) result[0][i].should.be.bignumber.equal(balances[i]) - result2[0][0][i].should.be.bignumber.equal(balances[i]); + result2[0][0][i].should.be.bignumber.equal(balances[i]) totalSupplyGet.should.be.bignumber.equal(totalSupply) } - result[1].should.be.bignumber.equal(totalSupply); - result2[1][0].should.be.bignumber.equal(totalSupply); + result[1].should.be.bignumber.equal(totalSupply) + result2[1][0].should.be.bignumber.equal(totalSupply) } async function checkArraySnapshot (snapshots, snapshotsValue) { diff --git a/test/common/ERC20SnapshotModuleCommon/global/ERC20SnapshotModuleMultiplePlannedTest.js b/test/common/ERC20SnapshotModuleCommon/global/ERC20SnapshotModuleMultiplePlannedTest.js index 3b9e9fcd..c4128811 100644 --- a/test/common/ERC20SnapshotModuleCommon/global/ERC20SnapshotModuleMultiplePlannedTest.js +++ b/test/common/ERC20SnapshotModuleCommon/global/ERC20SnapshotModuleMultiplePlannedTest.js @@ -1,6 +1,8 @@ const { time, BN } = require('@openzeppelin/test-helpers') const { should } = require('chai').should() -const { checkSnapshot } = require('../ERC20SnapshotModuleUtils/ERC20SnapshotModuleUtils') +const { + checkSnapshot +} = require('../ERC20SnapshotModuleUtils/ERC20SnapshotModuleUtils') function ERC20SnapshotModuleMultiplePlannedTest ( admin, diff --git a/test/common/ERC20SnapshotModuleCommon/global/ERC20SnapshotModuleOnePlannedSnapshotTest.js b/test/common/ERC20SnapshotModuleCommon/global/ERC20SnapshotModuleOnePlannedSnapshotTest.js index 989f26d9..83c03981 100644 --- a/test/common/ERC20SnapshotModuleCommon/global/ERC20SnapshotModuleOnePlannedSnapshotTest.js +++ b/test/common/ERC20SnapshotModuleCommon/global/ERC20SnapshotModuleOnePlannedSnapshotTest.js @@ -1,6 +1,8 @@ const { time } = require('@openzeppelin/test-helpers') const { should } = require('chai').should() -const { checkSnapshot } = require('../ERC20SnapshotModuleUtils/ERC20SnapshotModuleUtils') +const { + checkSnapshot +} = require('../ERC20SnapshotModuleUtils/ERC20SnapshotModuleUtils') const reason = 'BURN_TEST' function ERC20SnapshotModuleOnePlannedSnapshotTest ( diff --git a/test/common/ERC20SnapshotModuleCommon/global/ERC20SnapshotModuleZeroPlannedSnapshot.js b/test/common/ERC20SnapshotModuleCommon/global/ERC20SnapshotModuleZeroPlannedSnapshot.js index eac3d097..be02a075 100644 --- a/test/common/ERC20SnapshotModuleCommon/global/ERC20SnapshotModuleZeroPlannedSnapshot.js +++ b/test/common/ERC20SnapshotModuleCommon/global/ERC20SnapshotModuleZeroPlannedSnapshot.js @@ -1,6 +1,8 @@ const { time } = require('@openzeppelin/test-helpers') const { should } = require('chai').should() -const { checkSnapshot } = require('../ERC20SnapshotModuleUtils/ERC20SnapshotModuleUtils') +const { + checkSnapshot +} = require('../ERC20SnapshotModuleUtils/ERC20SnapshotModuleUtils') function ERC20SnapshotModuleCommonGlobal (admin, address1, address2, address3) { context('zeroPlannedSnapshotTest', function () { diff --git a/test/common/EnforcementModuleCommon.js b/test/common/EnforcementModuleCommon.js index 60cf5127..1c7fd267 100644 --- a/test/common/EnforcementModuleCommon.js +++ b/test/common/EnforcementModuleCommon.js @@ -62,7 +62,9 @@ function EnforcementModuleCommon (owner, address1, address2, address3) { }); // Act + Assert // Act + Assert - (await this.cmtat.validateTransfer(address1, address2, 10)).should.be.equal(false); + ( + await this.cmtat.validateTransfer(address1, address2, 10) + ).should.be.equal(false); // Assert (await this.cmtat.frozen(address1)).should.equal(true) @@ -198,9 +200,7 @@ function EnforcementModuleCommon (owner, address1, address2, address3) { from: owner }) // Assert - expectEvent.notEmitted( - this.logs, - 'Freeze'); + expectEvent.notEmitted(this.logs, 'Freeze'); (await this.cmtat.frozen(address1)).should.equal(true) }) @@ -213,17 +213,11 @@ function EnforcementModuleCommon (owner, address1, address2, address3) { await this.cmtat.unfreeze(address1, reasonFreeze, { from: owner }) // Act - this.logs = await this.cmtat.unfreeze( - address1, - reasonUnfreeze, - { - from: owner - } - ) + this.logs = await this.cmtat.unfreeze(address1, reasonUnfreeze, { + from: owner + }) // Assert - expectEvent.notEmitted( - this.logs, - 'Unfreeze'); + expectEvent.notEmitted(this.logs, 'Unfreeze'); (await this.cmtat.frozen(address1)).should.equal(false) }) }) diff --git a/test/common/PauseModuleCommon.js b/test/common/PauseModuleCommon.js index 82d90264..3a7babb5 100644 --- a/test/common/PauseModuleCommon.js +++ b/test/common/PauseModuleCommon.js @@ -104,7 +104,13 @@ function PauseModuleCommon (admin, address1, address2, address3) { // Act await this.cmtat.pause({ from: admin }); // Act + Assert - (await this.cmtat.validateTransfer(address1, address2, AMOUNT_TO_TRANSFER)).should.be.equal(false); + ( + await this.cmtat.validateTransfer( + address1, + address2, + AMOUNT_TO_TRANSFER + ) + ).should.be.equal(false); // Assert ( await this.cmtat.detectTransferRestriction( diff --git a/test/common/ValidationModule/ValidationModuleCommon.js b/test/common/ValidationModule/ValidationModuleCommon.js index f733f41e..04be0b0b 100644 --- a/test/common/ValidationModule/ValidationModuleCommon.js +++ b/test/common/ValidationModule/ValidationModuleCommon.js @@ -31,7 +31,9 @@ function ValidationModuleCommon ( from: admin }); // Act + Assert - (await this.cmtat.validateTransfer(address1, address2, 10)).should.be.equal(true) + ( + await this.cmtat.validateTransfer(address1, address2, 10) + ).should.be.equal(true) }) it('testCanDetectTransferRestrictionValidTransfer', async function () { @@ -39,7 +41,9 @@ function ValidationModuleCommon ( ( await this.cmtat.detectTransferRestriction(address1, address2, 11) ).should.be.bignumber.equal('0'); - (await this.cmtat.validateTransfer(address1, address2, 11)).should.be.equal(true) + ( + await this.cmtat.validateTransfer(address1, address2, 11) + ).should.be.equal(true) }) it('testCanReturnMessageValidTransfer', async function () { @@ -59,8 +63,13 @@ function ValidationModuleCommon ( ) ).should.be.bignumber.equal('10'); - (await this.cmtat.validateTransfer(address1, address2, RULE_MOCK_AMOUNT_MAX + 1)) - .should.be.equal(false) + ( + await this.cmtat.validateTransfer( + address1, + address2, + RULE_MOCK_AMOUNT_MAX + 1 + ) + ).should.be.equal(false) }) it('testCanReturnMessageWithAmountTooHigh', async function () { @@ -81,7 +90,13 @@ function ValidationModuleCommon ( it('testCanTransferAllowedByRule', async function () { const AMOUNT_TO_TRANSFER = 11; // Act - (await this.cmtat.validateTransfer(address1, address2, AMOUNT_TO_TRANSFER)).should.be.equal(true) + ( + await this.cmtat.validateTransfer( + address1, + address2, + AMOUNT_TO_TRANSFER + ) + ).should.be.equal(true) // Act await this.cmtat.transfer(address2, AMOUNT_TO_TRANSFER, { from: address1 @@ -102,7 +117,13 @@ function ValidationModuleCommon ( it('testCannotTransferIfNotAllowedByRule', async function () { const AMOUNT_TO_TRANSFER = RULE_MOCK_AMOUNT_MAX + 1; // Act - (await this.cmtat.validateTransfer(address1, address2, AMOUNT_TO_TRANSFER)).should.be.equal(false) + ( + await this.cmtat.validateTransfer( + address1, + address2, + AMOUNT_TO_TRANSFER + ) + ).should.be.equal(false) // Act await expectRevertCustomError( this.cmtat.transfer(address2, AMOUNT_TO_TRANSFER, { from: address1 }), diff --git a/test/deploymentUtils.js b/test/deploymentUtils.js index 0c4c786a..041da677 100644 --- a/test/deploymentUtils.js +++ b/test/deploymentUtils.js @@ -1,8 +1,6 @@ const { ZERO_ADDRESS } = require('./utils') const CMTAT_STANDALONE = artifacts.require('CMTAT_STANDALONE') -const CMTAT_STANDALONE_SNAPSHOT = artifacts.require( - 'CMTAT_STANDALONE' -) +const CMTAT_STANDALONE_SNAPSHOT = artifacts.require('CMTAT_STANDALONE') const CMTAT_PROXY = artifacts.require('CMTAT_PROXY') // const CMTAT_PROXY_SNAPSHOT_TRUFFLE = artifacts.require('CMTATSnapshotProxyTest') const CMTAT_PROXY_SNAPSHOT_TRUFFLE = artifacts.require('CMTAT_PROXY') @@ -29,10 +27,13 @@ async function deployCMTATStandalone (_, admin, deployerAddress) { return cmtat } -async function deployCMTATProxyImplementation (deployerAddress, forwarderIrrevocable) { - const cmtat = await CMTAT_PROXY.new(forwarderIrrevocable, - { from: deployerAddress } - ) +async function deployCMTATProxyImplementation ( + deployerAddress, + forwarderIrrevocable +) { + const cmtat = await CMTAT_PROXY.new(forwarderIrrevocable, { + from: deployerAddress + }) return cmtat } diff --git a/test/proxy/general/Beacon.test.js b/test/proxy/general/Beacon.test.js index 3a64cd3c..f8746b11 100644 --- a/test/proxy/general/Beacon.test.js +++ b/test/proxy/general/Beacon.test.js @@ -1,5 +1,4 @@ -const CMTAT_BEACON_FACTORY = artifacts.require( - 'CMTAT_BEACON_FACTORY') +const CMTAT_BEACON_FACTORY = artifacts.require('CMTAT_BEACON_FACTORY') const { should } = require('chai').should() const { expectRevertCustomError @@ -7,7 +6,10 @@ const { const CMTAT = artifacts.require('CMTAT_PROXY') const { DEFAULT_ADMIN_ROLE, CMTAT_DEPLOYER_ROLE } = require('../../utils') const { ZERO_ADDRESS } = require('../../utils') -const { DEPLOYMENT_FLAG, deployCMTATProxyImplementation } = require('../../deploymentUtils') +const { + DEPLOYMENT_FLAG, + deployCMTATProxyImplementation +} = require('../../deploymentUtils') const { upgrades } = require('hardhat') const DEPLOYMENT_DECIMAL = 0 const { BN, expectEvent } = require('@openzeppelin/test-helpers') @@ -15,20 +17,29 @@ contract( 'Proxy - Security Test', function ([_, admin, attacker, deployerAddress]) { beforeEach(async function () { - this.CMTAT_PROXY_IMPL = await deployCMTATProxyImplementation(_, deployerAddress) - this.FACTORY = await CMTAT_BEACON_FACTORY.new(this.CMTAT_PROXY_IMPL.address, admin, admin) + this.CMTAT_PROXY_IMPL = await deployCMTATProxyImplementation( + _, + deployerAddress + ) + this.FACTORY = await CMTAT_BEACON_FACTORY.new( + this.CMTAT_PROXY_IMPL.address, + admin, + admin + ) }) context('FactoryDeployment', function () { it('testCanReturnTheRightImplementation', async function () { // Act + Assert - (await this.FACTORY.implementation()).should.equal(this.CMTAT_PROXY_IMPL.address) + (await this.FACTORY.implementation()).should.equal( + this.CMTAT_PROXY_IMPL.address + ) }) }) context('Deploy CMTAT with Factory', function () { it('testCannotBeDeployedByAttacker', async function () { - // Act + // Act await expectRevertCustomError( this.FACTORY.deployCMTAT( admin, @@ -40,12 +51,13 @@ contract( 'https://cmta.ch', ZERO_ADDRESS, 'CMTAT_info', - DEPLOYMENT_FLAG, { from: attacker }), + DEPLOYMENT_FLAG, + { from: attacker } + ), 'AccessControlUnauthorizedAccount', [attacker, CMTAT_DEPLOYER_ROLE] ) }) - // Here the argument to indicate if it is deployed with a proxy, set at false by the attacker it('testCanDeployCMTATWithFactory', async function () { // Act this.logs = await this.FACTORY.deployCMTAT( @@ -58,12 +70,14 @@ contract( 'https://cmta.ch', ZERO_ADDRESS, 'CMTAT_info', - DEPLOYMENT_FLAG, { + DEPLOYMENT_FLAG, + { from: admin - }); + } + ) // Check Id increment - (this.logs.logs[1].args[1]).should.be.bignumber.equal(BN(0)) + this.logs.logs[1].args[1].should.be.bignumber.equal(BN(0)) // Assert const CMTAT_ADDRESS = this.logs.logs[1].args[0]; // Check address with ID @@ -83,11 +97,13 @@ contract( 'https://cmta.ch', ZERO_ADDRESS, 'CMTAT_info', - DEPLOYMENT_FLAG, { + DEPLOYMENT_FLAG, + { from: admin - }); + } + ) // Check Id increment - (this.logs.logs[1].args[1]).should.be.bignumber.equal(BN(1)) + this.logs.logs[1].args[1].should.be.bignumber.equal(BN(1)) }) }) } diff --git a/test/proxy/general/BeaconFactoryDeploy.test copy.js b/test/proxy/general/BeaconFactoryDeploy.test copy.js new file mode 100644 index 00000000..d48bf1d8 --- /dev/null +++ b/test/proxy/general/BeaconFactoryDeploy.test copy.js @@ -0,0 +1,60 @@ +const CMTAT_BEACON_FACTORY = artifacts.require('CMTAT_BEACON_FACTORY') +const { should } = require('chai').should() +const { + expectRevertCustomError +} = require('../../../openzeppelin-contracts-upgradeable/test/helpers/customError.js') +const CMTAT = artifacts.require('CMTAT_PROXY') +const { DEFAULT_ADMIN_ROLE, CMTAT_DEPLOYER_ROLE } = require('../../utils.js') +const { ZERO_ADDRESS } = require('../../utils.js') +const { + DEPLOYMENT_FLAG, + deployCMTATProxyImplementation +} = require('../../deploymentUtils.js') +const { upgrades } = require('hardhat') +const DEPLOYMENT_DECIMAL = 0 +const { BN, expectEvent } = require('@openzeppelin/test-helpers') +contract( + 'Deploy Beacon with Factory', + function ([_, admin, attacker, deployerAddress]) { + beforeEach(async function () { + this.CMTAT_PROXY_IMPL = await deployCMTATProxyImplementation( + _, + deployerAddress + ) + }) + + context('BeaconDeployment', function () { + it('testCannotDeployIfImplementationIsZero', async function () { + await expectRevertCustomError( + CMTAT_BEACON_FACTORY.new(ZERO_ADDRESS, admin, admin, { from: admin }), + 'CMTAT_Factory_AddressZeroNotAllowedForLogicContract', + [] + ) + }) + it('testCannotDeployIfFactoryAdminIsZero', async function () { + await expectRevertCustomError( + CMTAT_BEACON_FACTORY.new( + this.CMTAT_PROXY_IMPL.address, + ZERO_ADDRESS, + admin, + { from: admin } + ), + 'CMTAT_Factory_AddressZeroNotAllowedForFactoryAdmin', + [] + ) + }) + it('testCannotDeployIfBeaconOwnerIsZero', async function () { + await expectRevertCustomError( + CMTAT_BEACON_FACTORY.new( + this.CMTAT_PROXY_IMPL.address, + admin, + ZERO_ADDRESS, + { from: admin } + ), + 'CMTAT_Factory_AddressZeroNotAllowedForBeaconOwner', + [] + ) + }) + }) + } +) diff --git a/test/proxy/general/Proxy.test.js b/test/proxy/general/Proxy.test.js index b2ceb818..f75fd9b0 100644 --- a/test/proxy/general/Proxy.test.js +++ b/test/proxy/general/Proxy.test.js @@ -26,7 +26,6 @@ contract( }) context('Attacker', function () { - // Here the argument to indicate if it is deployed with a proxy, set at false by the attacker it('testCannotBeTakenControlByAttacker', async function () { // Act await expectRevertCustomError( diff --git a/test/proxy/general/Transparent.test.js b/test/proxy/general/Transparent.test.js index 8b090985..e99f2ab4 100644 --- a/test/proxy/general/Transparent.test.js +++ b/test/proxy/general/Transparent.test.js @@ -1,29 +1,44 @@ -const CMTAT_TP_FACTORY = artifacts.require( - 'CMTAT_TP_FACTORY') +const CMTAT_TP_FACTORY = artifacts.require('CMTAT_TP_FACTORY') const { should } = require('chai').should() const { expectRevertCustomError } = require('../../../openzeppelin-contracts-upgradeable/test/helpers/customError.js') const CMTAT = artifacts.require('CMTAT_PROXY') -const { DEFAULT_ADMIN_ROLE, PAUSER_ROLE, CMTAT_DEPLOYER_ROLE } = require('../../utils.js') +const { + DEFAULT_ADMIN_ROLE, + PAUSER_ROLE, + CMTAT_DEPLOYER_ROLE +} = require('../../utils.js') const { ZERO_ADDRESS } = require('../../utils.js') const DECIMAL = 0 -const { deployCMTATProxy, DEPLOYMENT_FLAG, deployCMTATProxyImplementation } = require('../../deploymentUtils.js') +const { + deployCMTATProxy, + DEPLOYMENT_FLAG, + deployCMTATProxyImplementation +} = require('../../deploymentUtils.js') const { upgrades } = require('hardhat') const DEPLOYMENT_DECIMAL = 0 const { BN, expectEvent } = require('@openzeppelin/test-helpers') contract( - 'Proxy - Security Test', + 'Deploy TP with Factory', function ([_, admin, attacker, deployerAddress]) { beforeEach(async function () { - this.CMTAT_PROXY_IMPL = await deployCMTATProxyImplementation(_, deployerAddress) - this.FACTORY = await CMTAT_TP_FACTORY.new(this.CMTAT_PROXY_IMPL.address, admin) + this.CMTAT_PROXY_IMPL = await deployCMTATProxyImplementation( + _, + deployerAddress + ) + this.FACTORY = await CMTAT_TP_FACTORY.new( + this.CMTAT_PROXY_IMPL.address, + admin + ) }) context('FactoryDeployment', function () { it('testCanReturnTheRightImplementation', async function () { // Act + Assert - (await this.FACTORY.logic()).should.equal(this.CMTAT_PROXY_IMPL.address) + (await this.FACTORY.logic()).should.equal( + this.CMTAT_PROXY_IMPL.address + ) }) }) @@ -42,12 +57,13 @@ contract( 'https://cmta.ch', ZERO_ADDRESS, 'CMTAT_info', - DEPLOYMENT_FLAG, { from: attacker }), + DEPLOYMENT_FLAG, + { from: attacker } + ), 'AccessControlUnauthorizedAccount', [attacker, CMTAT_DEPLOYER_ROLE] ) }) - // Here the argument to indicate if it is deployed with a proxy, set at false by the attacker it('testCanDeployCMTATWithFactory', async function () { // Act this.logs = await this.FACTORY.deployCMTAT( @@ -61,12 +77,14 @@ contract( 'https://cmta.ch', ZERO_ADDRESS, 'CMTAT_info', - DEPLOYMENT_FLAG, { + DEPLOYMENT_FLAG, + { from: admin - }); + } + ) // Assert // Check Id - (this.logs.logs[1].args[1]).should.be.bignumber.equal(BN(0)) + this.logs.logs[1].args[1].should.be.bignumber.equal(BN(0)) const CMTAT_ADDRESS = this.logs.logs[1].args[0]; // Check address with ID (await this.FACTORY.getAddress(0)).should.equal(CMTAT_ADDRESS) @@ -86,11 +104,13 @@ contract( 'https://cmta.ch', ZERO_ADDRESS, 'CMTAT_info', - DEPLOYMENT_FLAG, { + DEPLOYMENT_FLAG, + { from: admin - }); + } + ) // Check Id increment - (this.logs.logs[1].args[1]).should.be.bignumber.equal(BN(1)) + this.logs.logs[1].args[1].should.be.bignumber.equal(BN(1)) }) }) } diff --git a/test/proxy/general/TransparentFactoyDeploy.test.js b/test/proxy/general/TransparentFactoyDeploy.test.js new file mode 100644 index 00000000..524073ea --- /dev/null +++ b/test/proxy/general/TransparentFactoyDeploy.test.js @@ -0,0 +1,53 @@ +const CMTAT_TP_FACTORY = artifacts.require('CMTAT_TP_FACTORY') +const { should } = require('chai').should() +const { + expectRevertCustomError +} = require('../../../openzeppelin-contracts-upgradeable/test/helpers/customError.js') +const CMTAT = artifacts.require('CMTAT_PROXY') +const { + DEFAULT_ADMIN_ROLE, + PAUSER_ROLE, + CMTAT_DEPLOYER_ROLE +} = require('../../utils.js') +const { ZERO_ADDRESS } = require('../../utils.js') +const DECIMAL = 0 +const { + deployCMTATProxy, + DEPLOYMENT_FLAG, + deployCMTATProxyImplementation +} = require('../../deploymentUtils.js') +const { upgrades } = require('hardhat') +const DEPLOYMENT_DECIMAL = 0 +const { BN, expectEvent } = require('@openzeppelin/test-helpers') +contract( + 'Deploy TP with Factory', + function ([_, admin, attacker, deployerAddress]) { + beforeEach(async function () { + this.CMTAT_PROXY_IMPL = await deployCMTATProxyImplementation( + _, + deployerAddress + ) + // this.FACTORY = await CMTAT_TP_FACTORY.new(this.CMTAT_PROXY_IMPL.address, admin) + }) + + context('FactoryDeployment', function () { + it('testCannotDeployIfImplementationIsZero', async function () { + await expectRevertCustomError( + CMTAT_TP_FACTORY.new(ZERO_ADDRESS, admin, { from: admin }), + 'CMTAT_Factory_AddressZeroNotAllowedForLogicContract', + [] + ) + }) + + it('testCannotDeployIfFactoryAdminIsZero', async function () { + await expectRevertCustomError( + CMTAT_TP_FACTORY.new(this.CMTAT_PROXY_IMPL.address, ZERO_ADDRESS, { + from: admin + }), + 'CMTAT_Factory_AddressZeroNotAllowedForFactoryAdmin', + [] + ) + }) + }) + } +) diff --git a/test/proxy/modules/AuthorizationModule/AuthorizationModule.test.js b/test/proxy/modules/AuthorizationModule/AuthorizationModule.test.js index 0c86064c..a109c457 100644 --- a/test/proxy/modules/AuthorizationModule/AuthorizationModule.test.js +++ b/test/proxy/modules/AuthorizationModule/AuthorizationModule.test.js @@ -7,7 +7,9 @@ contract( function ([_, admin, address1, address2, deployerAddress]) { beforeEach(async function () { this.cmtat = await deployCMTATProxy(_, admin, deployerAddress) - this.authorizationEngineMock = await AuthorizationEngineMock.new({ from: admin }) + this.authorizationEngineMock = await AuthorizationEngineMock.new({ + from: admin + }) }) AuthorizationModuleCommon(admin, address1, address2) diff --git a/test/proxy/modules/ERC20SnapshotModule.test.js b/test/proxy/modules/ERC20SnapshotModule.test.js index 2746ed01..add41917 100644 --- a/test/proxy/modules/ERC20SnapshotModule.test.js +++ b/test/proxy/modules/ERC20SnapshotModule.test.js @@ -18,11 +18,26 @@ contract( ) }) ERC20SnapshotModuleMultiplePlannedTest(admin, address1, address2, address3) - ERC20SnapshotModuleOnePlannedSnapshotTest(admin, address1, address2, address3) - ERC20SnapshotModuleZeroPlannedSnapshotTest(admin, address1, address2, address3) + ERC20SnapshotModuleOnePlannedSnapshotTest( + admin, + address1, + address2, + address3 + ) + ERC20SnapshotModuleZeroPlannedSnapshotTest( + admin, + address1, + address2, + address3 + ) ERC20SnapshotModuleCommonRescheduling(admin, address1, address2, address3) ERC20SnapshotModuleCommonScheduling(admin, address1, address2, address3) ERC20SnapshotModuleCommonUnschedule(admin, address1, address2, address3) - ERC20SnapshotModuleCommonGetNextSnapshot(admin, address1, address2, address3) + ERC20SnapshotModuleCommonGetNextSnapshot( + admin, + address1, + address2, + address3 + ) } ) diff --git a/test/standard/modules/ERC20SnapshotModule.test.js b/test/standard/modules/ERC20SnapshotModule.test.js index 5e01b210..dcb5e2fc 100644 --- a/test/standard/modules/ERC20SnapshotModule.test.js +++ b/test/standard/modules/ERC20SnapshotModule.test.js @@ -17,11 +17,26 @@ contract( ) }) ERC20SnapshotModuleMultiplePlannedTest(admin, address1, address2, address3) - ERC20SnapshotModuleOnePlannedSnapshotTest(admin, address1, address2, address3) - ERC20SnapshotModuleZeroPlannedSnapshotTest(admin, address1, address2, address3) + ERC20SnapshotModuleOnePlannedSnapshotTest( + admin, + address1, + address2, + address3 + ) + ERC20SnapshotModuleZeroPlannedSnapshotTest( + admin, + address1, + address2, + address3 + ) ERC20SnapshotModuleCommonRescheduling(admin, address1, address2, address3) ERC20SnapshotModuleCommonScheduling(admin, address1, address2, address3) ERC20SnapshotModuleCommonUnschedule(admin, address1, address2, address3) - ERC20SnapshotModuleCommonGetNextSnapshot(admin, address1, address2, address3) + ERC20SnapshotModuleCommonGetNextSnapshot( + admin, + address1, + address2, + address3 + ) } ) diff --git a/test/utils.js b/test/utils.js index 3c07dd6b..cc236e64 100644 --- a/test/utils.js +++ b/test/utils.js @@ -17,7 +17,8 @@ module.exports = { '0xaa2de0737115053bf7d3d68e733306557628aef4b4aefa746cbf344fc7267247', // keccak256("DEBT_CREDIT_EVENT_ROLE"); DEFAULT_ADMIN_ROLE: '0x0000000000000000000000000000000000000000000000000000000000000000', - CMTAT_DEPLOYER_ROLE: '0x13293a342e85bb7a675992804d0c6194d27d85f90a7401d0666e206fe3b06a03', + CMTAT_DEPLOYER_ROLE: + '0x13293a342e85bb7a675992804d0c6194d27d85f90a7401d0666e206fe3b06a03', ZERO_ADDRESS: '0x0000000000000000000000000000000000000000', RULE_MOCK_AMOUNT_MAX: '20', CMTAT_TRANSFER_REJECT: 'CMTAT: transfer rejected by validation module',