From 85151a0bfd4ad0ff3c39b8ecdf66969f5afbd2d7 Mon Sep 17 00:00:00 2001 From: Ryan Sauge Date: Fri, 28 Jul 2023 15:56:10 +0200 Subject: [PATCH 1/4] Update doc + adapt arg name to the new OZ version --- .../modules/wrapper/mandatory/BurnModule.sol | 44 ++++--- .../wrapper/mandatory/ERC20BaseModule.sol | 98 +++++++-------- .../modules/wrapper/mandatory/MintModule.sol | 57 +++++---- doc/modules/presentation/mandatory/burn.md | 20 ++- .../presentation/mandatory/erc20base.md | 117 ++++++++++-------- doc/modules/presentation/mandatory/mint.md | 34 +++-- .../schema/sol2uml/mandatory/BurnModule.svg | 6 +- .../sol2uml/mandatory/ERC20BaseModule.svg | 49 ++++---- .../schema/sol2uml/mandatory/MintModule.svg | 6 +- .../surya_graph_ERC20BaseModule.sol.png | Bin 76894 -> 94013 bytes test/common/BurnModuleCommon.js | 18 +-- test/common/ERC20BaseModuleCommon.js | 2 +- test/common/MintModuleCommon.js | 24 ++-- 13 files changed, 262 insertions(+), 213 deletions(-) diff --git a/contracts/modules/wrapper/mandatory/BurnModule.sol b/contracts/modules/wrapper/mandatory/BurnModule.sol index d1d540b8..b95e02af 100644 --- a/contracts/modules/wrapper/mandatory/BurnModule.sol +++ b/contracts/modules/wrapper/mandatory/BurnModule.sol @@ -7,7 +7,10 @@ import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Ini import "../../security/AuthorizationModule.sol"; abstract contract BurnModule is ERC20Upgradeable, AuthorizationModule { - event Burn(address indexed owner, uint256 amount, string reason); + /** + * @notice Emitted when the specified `value` amount of tokens owned by `owner`are destroyed with the given `reason` + */ + event Burn(address indexed owner, uint256 value, string reason); function __BurnModule_init( string memory name_, @@ -35,51 +38,56 @@ abstract contract BurnModule is ERC20Upgradeable, AuthorizationModule { } /** - * @dev Destroys `amount` tokens from `account` - * + * @notice Destroys a `value` amount of tokens from `account`, by transferring it to address(0). + * @dev * See {ERC20-_burn} * Emits a {Burn} event + * Emits a {Transfer} event with `to` set to the zero address (emits inside _burn). + * Requirements: + * - the caller must have the `BURNER_ROLE`. */ function forceBurn( address account, - uint256 amount, + uint256 value, string memory reason ) public onlyRole(BURNER_ROLE) { - _burn(account, amount); - emit Burn(account, amount, reason); + _burn(account, value); + emit Burn(account, value, reason); } /** * - * @dev batch version of {forceBurn}. - * + * @notice batch version of {forceBurn}. + * @dev * See {ERC20-_burn} and {OpenZeppelin ERC1155_burnBatch}. * - * Emits a {Burn} event by burn action. - * + * For each burn action: + * -Emits a {Burn} event + * -Emits a {Transfer} event with `to` set to the zero address (emits inside _burn). + * The burn `reason`is the same for all `accounts` which tokens are burnt. * Requirements: - * - `tos` and `amounts` must have the same length + * - `accounts` and `values` must have the same length * - the caller must have the `BURNER_ROLE`. */ function forceBurnBatch( address[] calldata accounts, - uint256[] calldata amounts, + uint256[] calldata values, string memory reason ) public onlyRole(BURNER_ROLE) { require( accounts.length > 0, - "CMTAT: tos is empty" + "CMTAT: accounts is empty" ); - // We do not check that amounts is not empty since + // We do not check that values is not empty since // this require will throw an error in this case. require( - accounts.length == amounts.length, - "CMTAT: accounts and amounts length mismatch" + accounts.length == values.length, + "CMTAT: accounts and values length mismatch" ); for (uint256 i = 0; i < accounts.length; ) { - _burn(accounts[i], amounts[i]); - emit Burn(accounts[i], amounts[i], reason); + _burn(accounts[i], values[i]); + emit Burn(accounts[i], values[i], reason); unchecked { ++i; } diff --git a/contracts/modules/wrapper/mandatory/ERC20BaseModule.sol b/contracts/modules/wrapper/mandatory/ERC20BaseModule.sol index 11a60c9e..f11a9004 100644 --- a/contracts/modules/wrapper/mandatory/ERC20BaseModule.sol +++ b/contracts/modules/wrapper/mandatory/ERC20BaseModule.sol @@ -6,19 +6,23 @@ pragma solidity ^0.8.17; import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import "../../../../openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol"; + abstract contract ERC20BaseModule is ERC20Upgradeable { /* Events */ - event Spend(address indexed owner, address indexed spender, uint256 amount); + /** + @notice Emitted when the specified `spender` spends the specified `value` tokens owned by the specified `owner` reducing the corresponding allowance. + */ + event Spend(address indexed owner, address indexed spender, uint256 value); /* Variables */ uint8 private _decimals; /* Initializers */ /** - * @dev Sets the values for {name} and {symbol}. + * @dev Sets the values for {name}, {symbol} and decimals. * - * All two of these values are immutable: they can only be set once during - * construction. + * These values are immutable: they can only be set once during + * construction/initialization. */ function __ERC20Module_init( string memory name_, @@ -41,50 +45,14 @@ abstract contract ERC20BaseModule is ERC20Upgradeable { /* Methods */ /** - * @notice Returns the number of decimals used to get its user representation. - * @dev - * For example, if `decimals` equals `2`, a balance of `505` tokens should - * be displayed to a user as `5,05` (`505 / 10 ** 2`). * - * Tokens usually opt for a value of 18, imitating the relationship between - * Ether and Wei. This is the value {ERC20} uses, unless this function is - * overridden; - * - * NOTE: This information is only used for _display_ purposes: it in - * no way affects any of the arithmetic of the contract, including - * {IERC20-balanceOf} and {IERC20-transfer}. + * @notice Returns the number of decimals used to get its user representation. + * @inheritdoc ERC20Upgradeable */ function decimals() public view virtual override returns (uint8) { return _decimals; } - /** - * @dev See {IERC20-transferFrom}. - * - * Emits an {Approval} event indicating the updated allowance. This is not - * required by the EIP. See the note at the beginning of {ERC20}. - * - * Requirements: - * - * - `sender` and `recipient` cannot be the zero address. - * - `sender` must have a balance of at least `amount`. - * - the caller must have allowance for ``sender``'s tokens of at least - * `amount`. - */ - function transferFrom( - address sender, - address recipient, - uint256 amount - ) public virtual override returns (bool) { - bool result = super.transferFrom(sender, recipient, amount); - // The result will be normally always true because OpenZeppelin uses require to check all the conditions. - if (result) { - emit Spend(sender, _msgSender(), amount); - } - - return result; - } - /** * @notice batch version of transfer * @param tos can not be empty, must have the same length as values @@ -94,13 +62,13 @@ abstract contract ERC20BaseModule is ERC20Upgradeable { * * Requirements: * - `tos` and `values` must have the same length - * - `tos`cannot contain a zero address + * - `tos`cannot contain a zero address (check made by transfer) * - the caller must have a balance cooresponding to the total values */ function transferBatch( address[] calldata tos, uint256[] calldata values - ) public { + ) public returns (bool) { require( tos.length > 0, "CMTAT: tos is empty" @@ -111,35 +79,55 @@ abstract contract ERC20BaseModule is ERC20Upgradeable { tos.length == values.length, "CMTAT: tos and values length mismatch" ); - bool result; for (uint256 i = 0; i < tos.length; ) { - result = ERC20Upgradeable.transfer(tos[i], values[i]); - require(result, "CMTAT: transfer failed"); + // 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 + return true; } /** - * @dev See {IERC20-approve}. - * - * Requirements: - * - * - `spender` cannot be the zero address. + * @notice Transfers `value` amount of tokens from address `from` to address `to` + * @inheritdoc ERC20Upgradeable + * @custom:dev-cmtat + * Emits a {Spend} event indicating the spended allowance. + */ + function transferFrom( + address from, + address to, + uint256 value + ) public virtual override returns (bool) { + bool result = ERC20Upgradeable.transferFrom(from, to, value); + // The result will be normally always true because OpenZeppelin will revert in case of an error + if (result) { + emit Spend(from, _msgSender(), value); + } + + return result; + } + + /** + * @notice Allows `spender` to withdraw from your account multiple times, up to the `value` amount + * @dev see {OpenZeppelin ERC20 - approve} */ function approve( address spender, - uint256 amount, + uint256 value, uint256 currentAllowance ) public virtual returns (bool) { require( allowance(_msgSender(), spender) == currentAllowance, "CMTAT: current allowance is not right" ); - super.approve(spender, amount); + ERC20Upgradeable.approve(spender, value); return true; } uint256[50] private __gap; -} \ No newline at end of file +} diff --git a/contracts/modules/wrapper/mandatory/MintModule.sol b/contracts/modules/wrapper/mandatory/MintModule.sol index c50f191b..82bdf847 100644 --- a/contracts/modules/wrapper/mandatory/MintModule.sol +++ b/contracts/modules/wrapper/mandatory/MintModule.sol @@ -7,7 +7,11 @@ import "../../../../openzeppelin-contracts-upgradeable/contracts/proxy/utils/Ini import "../../security/AuthorizationModule.sol"; abstract contract MintModule is ERC20Upgradeable, AuthorizationModule { - event Mint(address indexed beneficiary, uint256 amount); + /** + * @notice Emitted when the specified `value` amount of new tokens are created and + * allocated to the specified `account`. + */ + event Mint(address indexed account, uint256 value); function __MintModule_init( string memory name_, @@ -35,49 +39,54 @@ abstract contract MintModule is ERC20Upgradeable, AuthorizationModule { } /** - * @dev Creates `amount` new tokens for `to`. - * - * See {ERC20-_mint}. + * @notice Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0) + * @dev + * See {OpenZeppelin ERC20-_mint}. + * Emits a {Mint} event. + * Emits a {Transfer} event with `from` set to the zero address (emits inside _mint). * * Requirements: - * - * - the caller must have the `MINTER_ROLE`. + * - `account` cannot be the zero address (check made by _mint). + * - The caller must have the `MINTER_ROLE`. */ - function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) { - _mint(to, amount); - emit Mint(to, amount); + function mint(address account, uint256 value) public onlyRole(MINTER_ROLE) { + _mint(account, value); + emit Mint(account, value); } /** * - * @dev batch version of {mint}. - * - * See {ERC20-_mint} and {OpenZeppelin ERC1155_mintBatch}. + * @notice batch version of {mint} + * @dev + * See {OpenZeppelin ERC20-_mint} and {OpenZeppelin ERC1155_mintBatch}. * - * Emits a {Mint} event. + * For each mint action: + * - Emits a {Mint} event. + * - Emits a {Transfer} event with `from` set to the zero address (emits inside _mint). * * Requirements: - * - `tos` and `amounts` must have the same length + * - `accounts` and `values` must have the same length + * - `accounts` cannot contain a zero address (check made by _mint). * - the caller must have the `MINTER_ROLE`. */ function mintBatch( - address[] calldata tos, - uint256[] calldata amounts + address[] calldata accounts, + uint256[] calldata values ) public onlyRole(MINTER_ROLE) { require( - tos.length > 0, - "CMTAT: tos is empty" + accounts.length > 0, + "CMTAT: accounts is empty" ); - // We do not check that amounts is not empty since + // We do not check that values is not empty since // this require will throw an error in this case. require( - tos.length == amounts.length, - "CMTAT: tos and amounts length mismatch" + accounts.length == values.length, + "CMTAT: accounts and values length mismatch" ); - for (uint256 i = 0; i < tos.length; ) { - _mint(tos[i], amounts[i]); - emit Mint(tos[i], amounts[i]); + for (uint256 i = 0; i < accounts.length; ) { + _mint(accounts[i], values[i]); + emit Mint(accounts[i], values[i]); unchecked { ++i; } diff --git a/doc/modules/presentation/mandatory/burn.md b/doc/modules/presentation/mandatory/burn.md index 67ff7cc5..5043d426 100644 --- a/doc/modules/presentation/mandatory/burn.md +++ b/doc/modules/presentation/mandatory/burn.md @@ -51,8 +51,11 @@ public onlyRole(BURNER_ROLE) ##### Description -Redeem the given `amount` of tokens from the given `account`. -Only authorized users are allowed to call this function. +Destroys a `value` amount of tokens from `account`, by transferring it to address(0). + +##### Requirements + +Only authorized users (*BURNER_ROLE*) are allowed to call this function. #### `forceBurnBatch(address[],uint256[],string) ` @@ -65,11 +68,16 @@ public onlyRole(BURNER_ROLE) ##### Description -For each account in `accounts`, redeem the corresponding amount of tokens given by `amounts`. -Only authorized users are allowed to call this function. +For each account in `accounts`, destroys a `value` amount of tokens from `account`, by transferring it to address(0). The burn `reason`is the same for all `accounts` which tokens are burnt. +##### Requirements + +- `accounts` and `values` must have the same length + +- The caller must have the `BURNER_ROLE`. + ### Events #### `Burn(address,uint,string)` @@ -82,4 +90,6 @@ event Burn(address indexed owner, uint256 amount, string reason) ##### Description -Emitted when the specified `amount` of tokens was burnt from the specified `account`. +Emitted when the specified `value` amount of tokens owned by `owner`are destroyed with the given `reason` + +​ diff --git a/doc/modules/presentation/mandatory/erc20base.md b/doc/modules/presentation/mandatory/erc20base.md index 8b72035d..d769ebff 100644 --- a/doc/modules/presentation/mandatory/erc20base.md +++ b/doc/modules/presentation/mandatory/erc20base.md @@ -62,101 +62,108 @@ Base Module API for Ethereum blockchain extends the [ERC-20](https://github.com/ ### Functions -#### `totalSupply()` +#### OpenZeppelin + +##### `totalSupply()` Origin: OpenZeppelin (ERC20Upgradeable) -##### Definition: +###### Definition ```solidity -function totalSupply() -external view +function totalSupply() public view virtual returns (uint256) ``` -##### Description: +###### Description Return the total number of tokens currently in circulation. -#### `balanceOf(address)` +##### `balanceOf(address)` Origin: OpenZeppelin (ERC20Upgradeable) -##### Definition: +###### Definition ```solidity function balanceOf(address account) -external view +public view virtual returns (uint256) ``` -##### Description: +###### Description Return the number of tokens currently owned by the given `owner`. -#### `transfer(address,uint256)` +##### `transfer(address,uint256)` Origin: OpenZeppelin (ERC20Upgradeable) -##### Definition: +###### Definition ```solidity -function transfer(address to, uint256 amount) -external +function transfer(address to, uint256 value) +public virtual returns (bool) ``` -##### Description: +###### Description Transfer the given `amount` of tokens from the caller to the given `destination` address. The function returns `true` on success and reverts on error. -#### `approve(address,uint256)` +##### `approve(address,uint256)` Origin: OpenZeppelin (ERC20Upgradeable) -##### Definition: +###### Definition ```solidity -function approve(address spender, uint256 amount) -external +function approve(address spender, uint256 value) +public virtual returns (bool) ``` -##### Description: +###### Description Allow the given `spender` to transfer at most the given `amount` of tokens from the caller. The function returns `true` on success and reverts of error. -#### `allowance(address,address)` +###### Requirement + +`spender` cannot be the zero address. + +##### `allowance(address,address)` Origin: OpenZeppelin (ERC20Upgradeable) -##### Definition: +###### Definition ```solidity function allowance(address owner, address spender) -external view +public view virtual returns (uint256) ``` -##### Description: +###### Description Return the number of tokens the given `spender` is currently allowed to transfer from the given `owner`. -#### `approve(address,uint256,uint256)` +#### CMTAT + +##### `approve(address,uint256,uint256)` -##### Definition: +###### Definition ```solidity -function approve(address spender,uint256 amount,uint256 currentAllowance) +function approve(address spender,uint256 value,uint256 currentAllowance) public virtual returns (bool) ``` -##### Description: +###### Description -Allow the given `spender` to transfer at most the given `amount` of tokens from the caller. +Allows `spender` to withdraw from your account multiple times, up to the `value` amount The function may be successfully executed only when the given `currentAllowance` values equals to the amount of token the spender is currently allowed to transfer from the caller. The function returns `true` on success and reverts of error. @@ -174,62 +181,74 @@ So, Bob got 210 tokens in total, while Alice never means to allow him to transfe In order to mitigate this kind of attack, Alice at step 3 calls `approve (bob, 110, 100)`. Such call could only succeed if the allowance is still 100, i.e. Bob's attempt to front run the transaction will make Alice's transaction to fail. -#### `transferFrom(address,address,uint256)` +##### `transferFrom(address,address,uint256)` + +This function overrides the function `transferFrom`from OpenZeppelin -##### Definition: +###### Definition ```solidity -function transferFrom(address sender,address recipient,uint256 amount) +function transferFrom(address from,address to,uint256 value) public virtual override -returns (bool) +returns (bool) ``` -##### Description: +###### Description -Transfer the given `amount` of tokens from the given `owner` to the given `destination` address. -`sender` and `recipient` cannot be the zero address. -The function returns `true` on success and reverts of error. +Transfers `value` amount of tokens from address `from` to address `to` + +The function returns `true` on success, nothing if the parent function return false. The behavior of the parent function in case of an error is to revert rather than returned false. + +###### Requirement + +`from` and `to` cannot be the zero address. ### Events -#### `Transfer(address,address,uint256)` +#### OpenZeppelin + +##### `Transfer(address,address,uint256)` Origin: OpenZeppelin (ERC20Upgradeable) -##### Definition: +###### Definition ```solidity event Transfer(address indexed from, address indexed to, uint256 value) ``` -##### Description: +###### Description -Emitted when the specified `amount` of tokens was transferred from the specified `origin` address to the specified `destination` address. +Emitted when `value` tokens are moved from one account (`from`) to another (`to`). -#### `Approval(address,address,uint256)` +Note that `value` may be zero. + +##### `Approval(address,address,uint256)` Origin: OpenZeppelin (ERC20Upgradeable) -##### Definition: +###### Definition ```solidity event Approval(address indexed owner, address indexed spender, uint256 value) ``` -##### Description: +###### Description + +Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance. -Emitted when the specified `owner` allowed the specified `spender` to transfer the specified `amount` of tokens. +#### CMTAT -#### `Spend(address,address,uint256)` +##### `Spend(address,address,uint256)` -##### Definition: +###### Definition ```solidity -event Spend (address indexed owner, address indexed spender, uint256 amount) +event Spend (address indexed owner, address indexed spender, uint256 value) ``` -##### Description: +###### Description -Emitted when the specified `spender` spends the specified `amount` of the tokens owned by the specified `owner` reducing the corresponding allowance. +Emitted when the specified `spender` spends the specified `value` tokens owned by the specified `owner` reducing the corresponding allowance. This event is not defined by ERC-20 and is needed to track allowance changes. diff --git a/doc/modules/presentation/mandatory/mint.md b/doc/modules/presentation/mandatory/mint.md index 7a011814..854c9d7e 100644 --- a/doc/modules/presentation/mandatory/mint.md +++ b/doc/modules/presentation/mandatory/mint.md @@ -33,7 +33,7 @@ This document defines Mint Module for the CMTA Token specification. | File Name | SHA-1 Hash | | ------------------------------------------ | ---------------------------------------- | -| ./modules/wrapper/mandatory/MintModule.sol | 59896c200ba366d171fc377d8b78d757aefbc69d | +| ./modules/wrapper/mandatory/MintModule.sol | 3d6fa6f2890f85f4f426aee39ea2ee31203f2109 | ### Contracts Description Table @@ -50,6 +50,8 @@ This document defines Mint Module for the CMTA Token specification. | β”” | mintBatch | Public ❗️ | πŸ›‘ | onlyRole | + + ### Legend | Symbol | Meaning | @@ -70,28 +72,40 @@ This section describes the Ethereum API of Issue Module. ##### Definition ```solidity -function mint(address to, uint256 amount) +function mint(address account, uint256 value) public onlyRole(MINTER_ROLE) ``` ##### Description -Create the given `amount` of tokens and allocate them to the given address`to`. -Only authorized users are allowed to call this function. + Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0) + + +##### Requirements + +- Only authorized users (`MINTER_ROLE`) are allowed to call this function. +- `account` cannot be the zero address (check made by _mint). #### `mintBatch(address[],uint256[]) ` ##### Definition ```solidity -function mintBatch(address[] calldata to,uint256[] calldata amounts) +function mintBatch(address[] calldata accounts,uint256[] calldata values) public onlyRole(MINTER_ROLE) ``` ##### Description -For each address in `to`, create the corresponding amount of tokens given by `amounts` and allocate them to the given address`to`. -Only authorized users are allowed to call this function. +For each address in `accounts`, create the corresponding amount of tokens given by `amounts` and allocate them to the given address`to`. + +##### Requirements + +Only authorized users (`MINTER_ROLE`) are allowed to call this function + +`accounts` and `values` must have the same length + +`accounts` cannot contain a zero address (check made by _mint). ### Events @@ -101,11 +115,11 @@ Only authorized users are allowed to call this function. ```solidity -event Mint (address indexed beneficiary,uint256 amount) +event Mint(address indexed account, uint256 value) ``` ##### Description -Emitted when the specified `amount` of new tokens was created and -allocated to the specified `beneficiary`. +Emitted when the specified `value` amount of new tokens were created and +allocated to the specified `account`. diff --git a/doc/modules/schema/sol2uml/mandatory/BurnModule.svg b/doc/modules/schema/sol2uml/mandatory/BurnModule.svg index 08a35b36..59a74bc0 100644 --- a/doc/modules/schema/sol2uml/mandatory/BurnModule.svg +++ b/doc/modules/schema/sol2uml/mandatory/BurnModule.svg @@ -59,9 +59,9 @@    __BurnModule_init(name_: string, symbol_: string, admin: address) <<onlyInitializing>>    __BurnModule_init_unchained() <<onlyInitializing>> Public: -    <<event>> Burn(owner: address, amount: uint256, reason: string) -    forceBurn(account: address, amount: uint256, reason: string) <<onlyRole>> -    forceBurnBatch(accounts: address[], amounts: uint256[], reason: string) <<onlyRole>> +    <<event>> Burn(owner: address, value: uint256, reason: string) +    forceBurn(account: address, value: uint256, reason: string) <<onlyRole>> +    forceBurnBatch(accounts: address[], values: uint256[], reason: string) <<onlyRole>> diff --git a/doc/modules/schema/sol2uml/mandatory/ERC20BaseModule.svg b/doc/modules/schema/sol2uml/mandatory/ERC20BaseModule.svg index bcf5742a..71f5fcd9 100644 --- a/doc/modules/schema/sol2uml/mandatory/ERC20BaseModule.svg +++ b/doc/modules/schema/sol2uml/mandatory/ERC20BaseModule.svg @@ -4,36 +4,37 @@ - - + + UmlClassDiagram - + cluster_0 - + contracts/modules/wrapper/mandatory - + -25 - -<<Abstract>> -ERC20BaseModule -contracts/modules/wrapper/mandatory/ERC20BaseModule.sol - -Private: -   _decimals: uint8 -   __gap: uint256[50] - -Internal: -    __ERC20Module_init(name_: string, symbol_: string, decimals_: uint8) <<onlyInitializing>> -    __ERC20Module_init_unchained(decimals_: uint8) <<onlyInitializing>> -Public: -    <<event>> Spend(owner: address, spender: address, amount: uint256) -    decimals(): uint8 -    transferFrom(sender: address, recipient: address, amount: uint256): bool -    approve(spender: address, amount: uint256, currentAllowance: uint256): bool +28 + +<<Abstract>> +ERC20BaseModule +contracts/modules/wrapper/mandatory/ERC20BaseModule.sol + +Private: +   _decimals: uint8 +   __gap: uint256[50] + +Internal: +    __ERC20Module_init(name_: string, symbol_: string, decimals_: uint8) <<onlyInitializing>> +    __ERC20Module_init_unchained(decimals_: uint8) <<onlyInitializing>> +Public: +    <<event>> Spend(owner: address, spender: address, value: uint256) +    decimals(): uint8 +    transferBatch(tos: address[], values: uint256[]): bool +    transferFrom(from: address, to: address, value: uint256): bool +    approve(spender: address, value: uint256, currentAllowance: uint256): bool diff --git a/doc/modules/schema/sol2uml/mandatory/MintModule.svg b/doc/modules/schema/sol2uml/mandatory/MintModule.svg index 74239d2c..1deb5ab8 100644 --- a/doc/modules/schema/sol2uml/mandatory/MintModule.svg +++ b/doc/modules/schema/sol2uml/mandatory/MintModule.svg @@ -59,9 +59,9 @@    __MintModule_init(name_: string, symbol_: string, admin: address) <<onlyInitializing>>    __MintModule_init_unchained() <<onlyInitializing>> Public: -    <<event>> Mint(beneficiary: address, amount: uint256) -    mint(to: address, amount: uint256) <<onlyRole>> -    mintBatch(to: address[], amounts: uint256[]) <<onlyRole>> +    <<event>> Mint(account: address, value: uint256) +    mint(account: address, value: uint256) <<onlyRole>> +    mintBatch(accounts: address[], values: uint256[]) <<onlyRole>> diff --git a/doc/modules/schema/surya_graph/surya_graph_ERC20BaseModule.sol.png b/doc/modules/schema/surya_graph/surya_graph_ERC20BaseModule.sol.png index 63f732c109edd7063cbdefc734099a1d6b3480f6..dfd36bb1626328d0598062ece97647b15a6233db 100644 GIT binary patch literal 94013 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 TwI72~7fElYk@i!Xb?|=yZDGqh literal 76894 zcmce;2RzpQ-!^`_QUA~U13gzP=^L`)i<2c@Du(sxDie1dR2m}I!in5|E zfv`1)K-fmUV=Mk3o9 zgvH1Awxp}|O7FJW#_A|DG&}rpc6L@Z{bdF17DB+NX}QPL!g%Xc;`YMOJ(6tIJ^2^z zWM$cUTW`Vg9*JMpzjo~!{^0PqCX@`Tt5&=DKV9-r`~Aek3Y%t5Y3Xt@O18qQf`pkr z3ao^tu94cvR~vcXzI|KLynE?O0@L2T2OlW+NK+F$b5iyYZ0tXVv97GFbaZqW85xa_ zkE^D)eE$5bA~NmWyLa1n(--1iX3CD^LgdDOU$U~YLPA0g4pU2-WB%uijf=1D`o|B< z+{1gw$jJQm*SBlPJ@+KhCgg0+Y|Ku z8=LGk5>nEa;pf(|*QZ07#eM%Qd<h2@!~~ycXxz=;sKiAT$9o?KiZ{dRSF#E8JHOv zsUDn2{q*mHLA7B=}q>eq!(1;HTT4$ZQBx$=-I_*BfT*7M`L5$3upb)|sXj}NCvT|d2 z(4YONb4pg$_>JwmIk~vz=jZG2q?2S>=;@Ud8HCK#)zxL(f9hSl_`T*1r9qC-`>=WM zYuAbjRWvjxSYoG6r0Y^Y(9N3cEfxy@7!n$KF~+$obvq$I;<^+eg$YkAoLxRQJGA$G-4rCfL|U_Vo0$wdrxHs;XKtDy3>C9CHl}(oB|fu(n=qH!$xhsT#+Yn*w?g^lqvCm4kvv*28!Rm?6A}{_7Z)ok zDoSrN2$~3sh}abd=j1r3#s6MexzeDYYtmipWd3U^kb>o*>i4&|ci%pd`rtwHt(~;d zLgv55$4hNnx!2f9dKi8&cqZB$(NL1>?L_v#vF4Ag?V89UVI7cjze$?3~8o+E~o<4`mW1 zJw+h6ssHXJX}a{Quk?(O5i>LMwZ)(9xGc`(y?gikH&+K~c{J^(+X#fXJJ|LHaux~x zBS&W6+$3Z7U3j215|5GXU z|9H;+?_4lo^Kn_(wXrXWm6er)KJyK`L)X4ZZ6ySBoMdg18*NO^YgZ_C>`yAG{SeA> zQKUOWb8_g-%>wI2O%08Uj7l1!vFh}D_bzrAJDoE$d=wi?!6?ijAt50u>iYe2RL;G= z&tU|!Q{4|M?kwr)ob~3}I%D;8ThGUE`He@($3ma z=OYiIc4+v<&yO`OPj-uPb0e!CJ9q9JPQ^q=j`Y=E33u+Cwy?0^<0{VJ3NU#1=v{KN zb+py7un+5+ReZ|L158^Al`|`7n@oy|ik6m^ik$|R78XWkleF*O4h+0xZC#b{?)mfQ zZOt<7>n%e=-^H} zS8ypkGqcW0#N6CmR8;i#i8sRabKmQNm3gCHvN-k@HFS0^|LQMC#^qAFH#F;MYilbf zCue`FJ=?&%%&oS$`9VyDX-u&|rGSfc6YOJsBC9 z+JOkK`O)zoKlaIZ&IFrY9dEfk6=%UHZm^uZ--XM(*#Q6lyX*%i4hKK%n&dTYIeY(Y z(xiN5V`dW_gNtnu6M&Z2jXXAw8)haZee)y_>b~RTXJlmHxek8}clv&~Jp1oUom)*) z)3NsxAx~1ag^P3l&dlaQI#n;laK9()IwT6G1Ef;6Wo2dUPy6%d+ER{cIwxnkuF7V@ z4^i@yib+XHxZ-Yle(ZmJW1|pGh4+%Zp`qbpjkb^KDk`eVZ(Nf80_PWax5)T6GWe@<03wcaxK%lMUu zgKBn{FLQBnB7z#~>k$ffDA~=U5I4{|3O; z)a0ZQ(>dSMggmJ&JC$00aJfCXrJ8oQCwy&YhVUb(XG-%nz0D`zo7B|Q6jj@;t*zzd z<$q0mj^bNgnyRble_?SFipS}P6qGw3T=x2!7Dc$83^xidaNZ}fkp*+Aji2>Cz1*7(Qm#%Qb=qrWMT(_ zU_|L&twytN-}82nUokh@yGpJ+R_FF^_F|LqbY7b5#>4;VAE3$|iF8$gszgsuf9cYt zZKUL=<9N;{r7jmyHD01>M5HCq?VU;_QOHi&YdNe&C|^7lXUERb-A;x_?Z8OPh*no1xrf=Ezn0)a&nbpe;H7hm!~Hk zJ$;dg%Vnvpo@Z4=550-g-FA4ID$A}{nuXx*)+4=zf|G8SgT4I|-NVJVJ`TJ8Y#T41 zuJpEKrDA4|OH5q9LAz$Iudi>{F*-6r&MMW`(lUp9+~;)C+tbs&r?9rY9VjOIABo?< z*q1_9HRbf|69(IADdUuW04yn46ydo}S{$l`E)zK60C(k^@JbhX~aDrLH`joF@*@pc;{qkQf>n z{pxx3&wCsDPE@c9AMR1_LV*oLdFb0uEP5Jm=SLeNRns3lcwj^%!%%ojZ2e^x(F>B+JVmJ64KT zPO;E${m;oedvZ)lMa0F$IXO8+MCNje2j-TRzBDu(O#63b@eHw;{oiHrEN}a#2VAE( zQR(KEmp6yQ<&z%y=<7$L<>)IFO>Q)3on+#a)W3Fnbu-gNwjM5SE^qcPRP{UI7W+RC!?Jz zZoMYNonUQBvUhOE)QInJ4!(Z<&A0a#KT7{%{|Vn>nMHj9tD?oOM4#gK zuViF(+aFw!bYa%g9Ih={RjVgYIZ{t+Z%xasE-WfKJTUtG`}&`WysEXiI_!lXTJcMg z7Cb-Rzke^QRpnCJhsbJc6B7_{So=MjBXjX8V%6O}s@4ic(1C?%Xz^n!7bi`Z_Hy2j zn{><`F#{$yI0-$hKLhqyG^d?H^W#z~gR|P2p>h29@i%YY5J7rvBu_W#WUXY4u;R%0 zxUHRC+4(m&&@8X5t-XBt66iee_HF71|ES5er!M6kZ|m$Va4IDQ*gkgb7_Kv^ctY^# zx@&ui#r?o8p6v|@#|pqnG(STJJ=I%WEcfyca67FGD<`KZ?N6EL0r}&}%1@W2XqKF& z3ke$xKLcWTgoN@CeYv?|-q%u8(?2&hZekPA1|wOXzQ;KGhK&6M?VqkyQalu`WVsyO ztonwA;6vC3VEBUv4UaOy(li06cwFcUPi+8M7uoRni(7vVs3049~Y;ph(b$V zbBOM)sPz}BX8epVGPZfvne5B~CN$Y46=$WR|nb`}rWokx9od*nzR* zI?t~1c8}!S>^+^^|C@y1AOnG5W4(9p-pK;F-do6fsi_vmr*3w#flCbV;HD4ho!Qb0 zE(aZ(L$=LKPmMe1z5kJZG)rNTbVSqq4*BlG2kxUs4G+)=m{-2m;KXhT85Mr|^5qxW zZU-7F@RYPa11{ZTlQqiT!WN#HmpA?62kKGv)2B~?zdA^$L*64#6kKY!2B7jpC9=q& zS6^E@CB0oj{+N{OX#LZthkh;Jjz1V#o0gU~aBV^W{Fta{!Io{L?>>A07y!{U=T$cF z58#lrLr98)KqzFxTfY1Facp!n4p}WOZs4`o8NnC^I=ac8S9NV|Zuqn8wS^M2rnEQl zSJ{=7e%M%C4W*4Y>aNA3mHDw^mB8TOV1Qoj)}ghPd0FqJd%?l6qSl%y=6-$~W$qKe zXJcQ#>KGdSu3yJr=AJ7Ujg|D@xn&DsC~K(l%_wTpuG=SK)jJ-aru3){z>>)sUjV>$ z7g$rWNKB&Y;~nid0sR%Uw5H!*v~h6gZ+Qk7mwNIJ$W60KpV-xvOO%x18u1dPWo2e) zVq>K#C@31feDND?Fh8L{Ab9dJQhG|6`>(qzC{zQ+r9FP!eei!M{fRPOx@u~CQc`74 zp4_T<>5K!12aNtZpJx`0IKmb^K25OI?6>#04-XFyoW-$gw#<=>o#y_F(}RQ6)zx)% zY7Jjqv2nUtVj?0Dd|Qu-UaEI?c0O;;!^5+>vckm7d{;5ewlyRF=DeND?wvckfj6jQ z#P8{!dM@*z;pyY_dH#UcSETf~IB9&8sSH6-rGu z_6?$ulA+DGdCX&yk-FCE<&xⅅ^$2g@yKIGIDZBLCAEBf!#$8@rbSd@~a_t?<(D6 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 F{{>d(NW%aC diff --git a/test/common/BurnModuleCommon.js b/test/common/BurnModuleCommon.js index c460a8ca..4a36dc74 100644 --- a/test/common/BurnModuleCommon.js +++ b/test/common/BurnModuleCommon.js @@ -30,7 +30,7 @@ function BurnModuleCommon (admin, address1, address2) { // Emits a Burn event expectEvent.inLogs(this.logs1, 'Burn', { owner: address1, - amount: VALUE1, + value: VALUE1, reason: REASON }); // Check balances and total supply @@ -52,7 +52,7 @@ function BurnModuleCommon (admin, address1, address2) { // Emits a Burn event expectEvent.inLogs(this.logs2, 'Burn', { owner: address1, - amount: DIFFERENCE, + value: DIFFERENCE, reason: REASON }); // Check balances and total supply @@ -78,7 +78,7 @@ function BurnModuleCommon (admin, address1, address2) { // Emits a Burn event expectEvent.inLogs(this.logs, 'Burn', { owner: address1, - amount: VALUE1, + value: VALUE1, reason: REASON }) }) @@ -145,7 +145,7 @@ function BurnModuleCommon (admin, address1, address2) { // emits a Mint event expectEvent.inLogs(this.logs1, 'Burn', { owner: TOKEN_HOLDER[i], - amount: TOKEN_BY_HOLDERS_TO_BURN[i], + value: TOKEN_BY_HOLDERS_TO_BURN[i], reason: REASON }) } @@ -158,7 +158,7 @@ function BurnModuleCommon (admin, address1, address2) { (await this.cmtat.totalSupply()).should.be.bignumber.equal(TOTAL_SUPPLY_AFTER_BURN) }) - it('testCanBeBurntByBurnerRole', async function () { + it('testCanBeBurntBatchByBurnerRole', async function () { // Arrange await this.cmtat.grantRole(BURNER_ROLE, address2, { from: admin }); @@ -184,7 +184,7 @@ function BurnModuleCommon (admin, address1, address2) { // emits a Mint event expectEvent.inLogs(this.logs1, 'Burn', { owner: TOKEN_HOLDER[i], - amount: TOKEN_BY_HOLDERS_TO_BURN[i] + value: TOKEN_BY_HOLDERS_TO_BURN[i] }) } // Check balances and total supply @@ -220,15 +220,15 @@ function BurnModuleCommon (admin, address1, address2) { const TOKEN_HOLDER_INVALID = [admin, address1] await expectRevert( this.cmtat.forceBurnBatch(TOKEN_HOLDER_INVALID, TOKEN_BY_HOLDERS_TO_BURN, REASON, { from: admin }), - 'CMTAT: accounts and amounts length mismatch' + 'CMTAT: accounts and values length mismatch' ) }) it('testCannotBurnBatchIfAccountsIsEmpty', async function () { const TOKEN_ADDRESS_TOS_INVALID = [] await expectRevert( - this.cmtat.transferBatch(TOKEN_ADDRESS_TOS_INVALID, TOKEN_BY_HOLDERS_TO_BURN, { from: admin }), - 'CMTAT: tos is empty' + this.cmtat.forceBurnBatch(TOKEN_ADDRESS_TOS_INVALID, TOKEN_BY_HOLDERS_TO_BURN, REASON, { from: admin }), + 'CMTAT: accounts is empty' ) }) }) diff --git a/test/common/ERC20BaseModuleCommon.js b/test/common/ERC20BaseModuleCommon.js index fa3d15dd..cad3b12e 100644 --- a/test/common/ERC20BaseModuleCommon.js +++ b/test/common/ERC20BaseModuleCommon.js @@ -238,7 +238,7 @@ function BaseModuleCommon (admin, address1, address2, address3, proxyTest) { expectEvent.inLogs(this.logs, 'Spend', { owner: address1, spender: address3, - amount: '11' + value: '11' }) }) diff --git a/test/common/MintModuleCommon.js b/test/common/MintModuleCommon.js index 1152beba..61bd19ca 100644 --- a/test/common/MintModuleCommon.js +++ b/test/common/MintModuleCommon.js @@ -35,8 +35,8 @@ function MintModuleCommon (admin, address1, address2) { }) // emits a Mint event expectEvent.inLogs(this.logs1, 'Mint', { - beneficiary: address1, - amount: VALUE1 + account: address1, + value: VALUE1 }); // Act @@ -58,8 +58,8 @@ function MintModuleCommon (admin, address1, address2) { }) // emits a Mint event expectEvent.inLogs(this.logs2, 'Mint', { - beneficiary: address2, - amount: VALUE2 + account: address2, + value: VALUE2 }) }) @@ -89,8 +89,8 @@ function MintModuleCommon (admin, address1, address2) { }) // emits a Mint event expectEvent.inLogs(this.logs1, 'Mint', { - beneficiary: address1, - amount: VALUE1 + account: address1, + value: VALUE1 }) }) @@ -147,8 +147,8 @@ function MintModuleCommon (admin, address1, address2) { for (let i = 0; i < TOKEN_HOLDER.length; ++i) { // emits a Mint event expectEvent.inLogs(this.logs1, 'Mint', { - beneficiary: TOKEN_HOLDER[i], - amount: TOKEN_SUPPLY_BY_HOLDERS[i] + account: TOKEN_HOLDER[i], + value: TOKEN_SUPPLY_BY_HOLDERS[i] }) } }) @@ -191,8 +191,8 @@ function MintModuleCommon (admin, address1, address2) { // emits a Mint event for (let i = 0; i < TOKEN_HOLDER.length; ++i) { expectEvent.inLogs(this.logs1, 'Mint', { - beneficiary: TOKEN_HOLDER[i], - amount: TOKEN_SUPPLY_BY_HOLDERS[i] + account: TOKEN_HOLDER[i], + value: TOKEN_SUPPLY_BY_HOLDERS[i] }) } }) @@ -214,7 +214,7 @@ function MintModuleCommon (admin, address1, address2) { const TOKEN_SUPPLY_BY_HOLDERS = [BN(10), BN(100), BN(1000)] await expectRevert( this.cmtat.mintBatch(TOKEN_HOLDER_INVALID, TOKEN_SUPPLY_BY_HOLDERS, { from: admin }), - 'CMTAT: tos and amounts length mismatch' + 'CMTAT: accounts and values length mismatch' ) }) @@ -223,7 +223,7 @@ function MintModuleCommon (admin, address1, address2) { const TOKEN_SUPPLY_BY_HOLDERS = [] await expectRevert( this.cmtat.mintBatch(TOKEN_HOLDER_INVALID, TOKEN_SUPPLY_BY_HOLDERS, { from: admin }), - 'CMTAT: tos is empty' + 'CMTAT: accounts is empty' ) }) }) From a0047953548a9f91209dff7dd300423fefbe0650 Mon Sep 17 00:00:00 2001 From: Ryan Sauge Date: Mon, 31 Jul 2023 10:32:37 +0200 Subject: [PATCH 2/4] ERC20BaseModule improvement + doc --- .../modules/wrapper/mandatory/ERC20BaseModule.sol | 7 +++++-- doc/modules/presentation/mandatory/erc20base.md | 10 ++++++++++ doc/modules/presentation/mandatory/mint.md | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/contracts/modules/wrapper/mandatory/ERC20BaseModule.sol b/contracts/modules/wrapper/mandatory/ERC20BaseModule.sol index f11a9004..be7ace73 100644 --- a/contracts/modules/wrapper/mandatory/ERC20BaseModule.sol +++ b/contracts/modules/wrapper/mandatory/ERC20BaseModule.sol @@ -121,11 +121,14 @@ abstract contract ERC20BaseModule is ERC20Upgradeable { uint256 value, uint256 currentAllowance ) public virtual returns (bool) { + address owner = _msgSender(); require( - allowance(_msgSender(), spender) == currentAllowance, + allowance(owner, spender) == currentAllowance, "CMTAT: current allowance is not right" ); - ERC20Upgradeable.approve(spender, value); + // We call directly the internal function _approve + // The reason is that the public function adds only the owner address recovery + ERC20Upgradeable._approve(owner, spender, value); return true; } diff --git a/doc/modules/presentation/mandatory/erc20base.md b/doc/modules/presentation/mandatory/erc20base.md index d769ebff..94c35924 100644 --- a/doc/modules/presentation/mandatory/erc20base.md +++ b/doc/modules/presentation/mandatory/erc20base.md @@ -112,6 +112,11 @@ returns (bool) Transfer the given `amount` of tokens from the caller to the given `destination` address. The function returns `true` on success and reverts on error. +###### Requirements + + * `to` cannot be the zero address. + * the caller must have a balance of at least `value`. + ##### `approve(address,uint256)` Origin: OpenZeppelin (ERC20Upgradeable) @@ -181,6 +186,11 @@ So, Bob got 210 tokens in total, while Alice never means to allow him to transfe In order to mitigate this kind of attack, Alice at step 3 calls `approve (bob, 110, 100)`. Such call could only succeed if the allowance is still 100, i.e. Bob's attempt to front run the transaction will make Alice's transaction to fail. +###### Requirement + +- The given `currentAllowance` value has to be equal to the amount of token the spender is currently allowed to transfer from the caller. +- `spender`and the sender cannot be the zero address (check made by `OpenZeppelin-_approve`). + ##### `transferFrom(address,address,uint256)` This function overrides the function `transferFrom`from OpenZeppelin diff --git a/doc/modules/presentation/mandatory/mint.md b/doc/modules/presentation/mandatory/mint.md index 854c9d7e..af3f3474 100644 --- a/doc/modules/presentation/mandatory/mint.md +++ b/doc/modules/presentation/mandatory/mint.md @@ -120,6 +120,6 @@ event Mint(address indexed account, uint256 value) ##### Description -Emitted when the specified `value` amount of new tokens were created and +Emitted when the specified `value` amount of new tokens are created and allocated to the specified `account`. From eb50966169bd3c26469242e0c9c812f063ee574e Mon Sep 17 00:00:00 2001 From: Ryan Sauge Date: Mon, 31 Jul 2023 10:33:09 +0200 Subject: [PATCH 3/4] Improve doc --- doc/modules/presentation/mandatory/erc20base.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/modules/presentation/mandatory/erc20base.md b/doc/modules/presentation/mandatory/erc20base.md index 94c35924..26c59790 100644 --- a/doc/modules/presentation/mandatory/erc20base.md +++ b/doc/modules/presentation/mandatory/erc20base.md @@ -22,7 +22,7 @@ The ERC20Base Module sets forth the ERC20 basic functionalities a token must hav ### Graph -![surya_graph_ERC20BaseModule.sol](../..//schema/surya_graph/surya_graph_ERC20BaseModule.sol.png) +![surya_graph_ERC20BaseModule.sol](/home/ryan/Downloads/no_backup/CM/cmtat-2.3/CMTAT/out/surya_graph/surya_graph_ERC20BaseModule.sol.png) ## SΕ«rya's Description Report @@ -33,7 +33,6 @@ The ERC20Base Module sets forth the ERC20 basic functionalities a token must hav | ----------------------------------------------- | ---------------------------------------- | | ./modules/wrapper/mandatory/ERC20BaseModule.sol | fdaf8d8a710a4ae6166fb0e491018c559acb4e89 | - ### Contracts Description Table @@ -45,10 +44,10 @@ The ERC20Base Module sets forth the ERC20 basic functionalities a token must hav | β”” | __ERC20Module_init | Internal πŸ”’ | πŸ›‘ | onlyInitializing | | β”” | __ERC20Module_init_unchained | Internal πŸ”’ | πŸ›‘ | onlyInitializing | | β”” | decimals | Public ❗️ | | NO❗️ | +| β”” | transferBatch | Public ❗️ | πŸ›‘ | NO❗️ | | β”” | transferFrom | Public ❗️ | πŸ›‘ | NO❗️ | | β”” | approve | Public ❗️ | πŸ›‘ | NO❗️ | - ### Legend | Symbol | Meaning | From 4b4cdea447453a0c4279d4001d7503c081cbcbe7 Mon Sep 17 00:00:00 2001 From: JP Aumasson Date: Fri, 4 Aug 2023 02:03:39 +0900 Subject: [PATCH 4/4] faq review --- FAQ.md | 102 +++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 63 insertions(+), 39 deletions(-) diff --git a/FAQ.md b/FAQ.md index bf292d24..f80ef5d2 100644 --- a/FAQ.md +++ b/FAQ.md @@ -1,81 +1,105 @@ # FAQ -## IDE (Truffle, Hardhat, ...) +This FAQ is intended to developers familiar with smart contracts +development. + +## Toolkit support > Why do you continue using Truffle instead of migrating to HardHat or Foundry? -**Hardhat VS Truffle** +Regarding [Hardhat](https://hardhat.org/): - Our tests are not working with Hardhat so to migrate to hardhat, we will have to update our tests which will require a lot of works. - Moreover, we do not see a use case where hardhat will be better than Truffle. - Hardhat has a lot of plugins, but for example, for the coverage, we can run the coverage without be fully compatible with Hardhat. -**Truffle VS Foundry** +Regarding [Foundry](https://book.getfoundry.sh/): - The plugin "upgrades plugin" by OpenZeppelin is not available with Foundry and it is a very good tool to check the proxy implementation and perform automatic tests. See [https://docs.openzeppelin.com/upgrades-plugins/1.x/](https://docs.openzeppelin.com/upgrades-plugins/1.x/) -- The tests for the gasless module (MetaTx) will be difficult to write in Solidity, see [https://github.com/CMTA/CMTAT/blob/master/test/common/MetaTxModuleCommon.js](https://github.com/CMTA/CMTAT/blob/master/test/common/MetaTxModuleCommon.js) -- OpenZeppelin, the main libraries we use, have their tests mainly written in JavaScript, so it provides good examples for our tests -- But for performance, we have seen indeed that Foundry is better than Truffle, notably to test the Snapshot Module +- The tests for the gasless module (MetaTx) would be difficult to write + in Solidity, as Foundry requires, see [https://github.com/CMTA/CMTAT/blob/master/test/common/MetaTxModuleCommon.js](https://github.com/CMTA/CMTAT/blob/master/test/common/MetaTxModuleCommon.js) +- The OpenZeppelin libraries that we use have their tests mainly written in JavaScript, which provides a good basis for our tests +- Performance wise, we observed that Foundry is superior to Truffle, notably to test the Snapshot module +- We have a repository [CMTA/CMTAT-Foundry](https://github.com/CMTA/CMTAT-foundry) that provides experimental support for Foundry, but it does not provide complete support and testing for the latest CMTAT version. + -> Do you plan to support Foundry in the near Future? I see a CMTAT-Foundry repo. Is it reliable? +> Do you plan to fully support Foundry in the near future? -No, it is currently not reliable. +For the foreseeable future, we plan to keep Truffle as the main +development and testing suite. -We have not planned to export all the tests in their Solidity version, but some tests are available +We have not planned to export all the tests from the Truffle suite to +their Solidity version equivalent suitable to Foundry, though some tests +are already available. -The repo CMTAT-Foundry will have the latest CMTAT version +The CMTAT-Foundry repository uses CMTAT as a submodule, whose version is +documented in its +[README](https://github.com/CMTA/CMTAT-Foundry/blob/main/README.md#cmtat---using-the-foundry-suite). -Please, note that we provide only a minimal support for the foundry repository as well as Hardhat. -We use Truffle to maintain the project. +> Can Hardhat be used to run tests? -> Hardhat tests: are they really working in v2.3.0? +No, please use Truffle to run the tests. -No, please use Truffle to run the tests ## Modules -> Why the Snapshot module is not audited in the version v2.3.0? +> What is the reason the Snapshot module wasn't audited in version v2.3.0? -It was out of scope because it’s not really used yet and will likely be subject to changes soon. +This module was left out of scope because it is not used yet (and not +included in a default deployment) and will be +subject to changes soon. -At deployment, this module is not included by default +> What is the status of [ERC1404](https://erc1404) compatibility? -> What is the status for ERC1404 compatibility? +We have not planned to be fully compatible with ERC1404 (which, in fact, +is only an EIP at the time of writing). +CMTAT includes the two functions defind by ERC1404, namely +`detectTransferRestriction` and `messageForTransferRestriction`. +Thus CMTAT can provide the same functionality as ERC1404. -We have not planned to be fully compatible since this ERC is not an ERC, it is only an EIP. +However, from a pure technical perspective, CMTAT is not fully compliant +with the ERC1404 specification, due the way it inherits the ERC20 +interface. -To be fully compatible, we have to inherit of ERC20 inside the interface and it will break our architecture. +> What is the purpose of the flag parameter in the Base module? -See [https://erc1404.org/](https://erc1404.org/) +It is just a variable to include some additional information under the form of bit fields. +It is not used inside the code because it is destined to provide more +information on the tokens to the "outside", for example for the token +owners. -> What is exactly the purpose of the flag parameter in BaseModule? -> I see that it’s a variable (uint256) to include some information, but I don’t see any use case in the code. -It is just a variable to include some additional information under the form of bit flags. -It is not used inside the code because it is destined to provide more information on the tokens to the "outside", for example for the token owners. +> Is the Validation module optional? +Generally, for a CMTAT token, the Validation functionality is optional +from the legal perspective (please contact admin@cmta.ch for detailed +information). +However, in order to use the functions from the Pause and Enforcement +modules, our CMTAT implementation requires the Validation module +Therefore, the Validation module is effectively required *in this +implementation*. -> Question regarding the ValidationModule optional module. -> -> Why is it optional? The module is required by Pauser and Enforcer mandatory modules +If you remove the Validation module and want to use the Pause or the +Enforcement module, you have to call the functions of modules inside the +main contracts. It was initially the case but we have changed this +behaviour when addressing an issue reported by a security audit. +Here is an old version: +[https://github.com/CMTA/CMTAT/blob/ed23bfc69cfacc932945da751485c6472705c975/contracts/CMTAT.sol#L205](https://github.com/CMTA/CMTAT/blob/ed23bfc69cfacc932945da751485c6472705c975/contracts/CMTAT.sol#L205), +and the relevant Pull [Request](https://github.com/CMTA/CMTAT/pull/153). -- ValidationModule is optional from the legal perspective, but you can ask admin@cmta.ch to have a better/clearer information on that. -- It is the opposite: PauseModule and EnforcementModule are required to use the ValidationModule (but indeed, you actually need the ValidationModule for the functions to be called) -- If you remove the ValidationModule and want to use the Pause and Enforcement module, you have to call the functions of modules inside the main contracts. It was initially the case but we have changed this behaviour by fixing the CVF-1 -Here an old version: [https://github.com/CMTA/CMTAT/blob/ed23bfc69cfacc932945da751485c6472705c975/contracts/CMTAT.sol#L205](https://github.com/CMTA/CMTAT/blob/ed23bfc69cfacc932945da751485c6472705c975/contracts/CMTAT.sol#L205) -The PR: [https://github.com/CMTA/CMTAT/pull/153](https://github.com/CMTA/CMTAT/pull/153) -We could probably move the ValidationModule inside the mandatory modules and think about a better architecture (but probably not for the next release) ## Documentation -> What is the code coverage? +> What is the code coverage of the test suite? -A code coverage is available here: [https://github.com/CMTA/CMTAT/blob/master/doc/general/test/coverage/index.html](https://github.com/CMTA/CMTAT/blob/master/doc/general/test/coverage/index.html) +A [code coverage report](https://github.com/CMTA/CMTAT/blob/master/doc/general/test/coverage/index.html) +is available. -Normally, you can run the code coverage with `npx hardhat coverage` +Normally, you can run the test suite and generate a code coverage report with `npx hardhat coverage`. -Please clone the repository and open the file inside your navigator +Please clone the repository and open the file inside your browser. -You will find a summary of all automatic tests in the file [test.pdf](https://github.com/CMTA/CMTAT/blob/master/doc/general/test/test.pdf) \ No newline at end of file +You will find a summary of all automatic tests in +[test.pdf](https://github.com/CMTA/CMTAT/blob/master/doc/general/test/test.pdf).