@@ -70,192 +70,193 @@
Branch data Line data Source code
1 : : // SPDX-License-Identifier: MPL-2.0
- 2 : :
- 3 : : pragma solidity ^0.8.20;
- 4 : :
- 5 : : import {AccessControl} from "OZ/access/AccessControl.sol";
- 6 : : /* ==== Abtract contracts === */
- 7 : : import {RuleBlacklistInvariantStorage} from
- 8 : : "./abstract/RuleAddressSet/invariantStorage/RuleBlacklistInvariantStorage.sol";
- 9 : : import {RuleAddressSet} from "./abstract/RuleAddressSet/RuleAddressSet.sol";
- 10 : : import {RuleValidateTransfer, RuleValidateTransfer} from "./abstract/RuleValidateTransfer.sol";
- 11 : : /* ==== Interfaces === */
- 12 : : import {IERC7943NonFungibleComplianceExtend} from "../interfaces/IERC7943NonFungibleCompliance.sol";
- 13 : : /* ==== CMTAT === */
- 14 : : import {IERC1404, IERC1404Extend} from "CMTAT/interfaces/tokenization/draft-IERC1404.sol";
- 15 : : import {IERC3643IComplianceContract} from "CMTAT/interfaces/tokenization/IERC3643Partial.sol";
- 16 : : import {IRuleEngine} from "CMTAT/interfaces/engine/IRuleEngine.sol";
- 17 : : /* ==== IRuleEngine === */
- 18 : : import {IRule} from "RuleEngine/interfaces/IRule.sol";
- 19 : :
- 20 : : /**
- 21 : : * @title a blacklist manager
- 22 : : */
- 23 : : contract RuleBlacklist is RuleValidateTransfer, RuleAddressSet, RuleBlacklistInvariantStorage {
- 24 : : /*//////////////////////////////////////////////////////////////
- 25 : : CONSTRUCTOR
- 26 : : //////////////////////////////////////////////////////////////*/
- 27 : : /**
- 28 : : * @param admin Address of the contract (Access Control)
- 29 : : * @param forwarderIrrevocable Address of the forwarder, required for the gasless support
- 30 : : */
- 31 : : constructor(address admin, address forwarderIrrevocable) RuleAddressSet(admin, forwarderIrrevocable) {}
- 32 : :
- 33 : : /* ============ View Functions ============ */
- 34 : : /**
- 35 : : * @notice Check if an addres is in the whitelist or not
- 36 : : * @param from the origin address
- 37 : : * @param to the destination address
- 38 : : * @return The restricion code or REJECTED_CODE_BASE.TRANSFER_OK
- 39 : : *
- 40 : : */
- 41 : 22 : function detectTransferRestriction(address from, address to, uint256 /* value */ )
- 42 : : public
- 43 : : view
- 44 : : override(IERC1404)
- 45 : : returns (uint8)
- 46 : : {
- 47 [ + + ]: 43 : if (isAddressListed(from)) {
- 48 : 14 : return CODE_ADDRESS_FROM_IS_BLACKLISTED;
- 49 [ + + ]: 29 : } else if (isAddressListed(to)) {
- 50 : 13 : return CODE_ADDRESS_TO_IS_BLACKLISTED;
- 51 : : } else {
- 52 : 16 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK);
- 53 : : }
- 54 : : }
- 55 : :
- 56 : : /*
- 57 : : * @inheritdoc IERC7943NonFungibleComplianceExtend
- 58 : : */
- 59 : 7 : function detectTransferRestriction(address from, address to, uint256, /* tokenId */ uint256 value)
- 60 : : public
- 61 : : view
- 62 : : override(IERC7943NonFungibleComplianceExtend)
- 63 : : returns (uint8)
- 64 : : {
- 65 : 7 : return detectTransferRestriction(from, to, value);
- 66 : : }
- 67 : :
- 68 : : /*
- 69 : : * @inheritdoc IERC1404Extend
- 70 : : */
- 71 : 16 : function detectTransferRestrictionFrom(address spender, address from, address to, uint256 value)
- 72 : : public
- 73 : : view
- 74 : : override(IERC1404Extend)
- 75 : : returns (uint8)
- 76 : : {
- 77 [ + + ]: 20 : if (isAddressListed(spender)) {
- 78 : 6 : return CODE_ADDRESS_SPENDER_IS_BLACKLISTED;
- 79 : : } else {
- 80 : 14 : return detectTransferRestriction(from, to, value);
- 81 : : }
- 82 : : }
- 83 : :
- 84 : : /**
- 85 : : * @inheritdoc IERC7943NonFungibleComplianceExtend
- 86 : : */
- 87 : 4 : function detectTransferRestrictionFrom(
- 88 : : address spender,
- 89 : : address from,
- 90 : : address to,
- 91 : : uint256, /* tokenId */
- 92 : : uint256 value
- 93 : : ) public view override(IERC7943NonFungibleComplianceExtend) returns (uint8) {
- 94 : 4 : return detectTransferRestrictionFrom(spender, from, to, value);
- 95 : : }
- 96 : :
- 97 : : /**
- 98 : : * @notice To know if the restriction code is valid for this rule or not.
- 99 : : * @param _restrictionCode The target restriction code
- 100 : : * @return true if the restriction code is known, false otherwise
- 101 : : *
- 102 : : */
- 103 : 4 : function canReturnTransferRestrictionCode(uint8 _restrictionCode)
- 104 : : public
- 105 : : pure
- 106 : : virtual
- 107 : : override(IRule)
- 108 : : returns (bool)
- 109 : : {
- 110 : 4 : return _restrictionCode == CODE_ADDRESS_FROM_IS_BLACKLISTED
- 111 : 2 : || _restrictionCode == CODE_ADDRESS_TO_IS_BLACKLISTED || _restrictionCode == CODE_ADDRESS_SPENDER_IS_BLACKLISTED;
- 112 : : }
- 113 : :
- 114 : : /**
- 115 : : * @notice Return the corresponding message
- 116 : : * @param _restrictionCode The target restriction code
- 117 : : * @return true if the transfer is valid, false otherwise
- 118 : : *
- 119 : : */
- 120 : 8 : function messageForTransferRestriction(uint8 _restrictionCode)
+ 2 : : pragma solidity ^0.8.20;
+ 3 : :
+ 4 : : import {IRuleEngine} from "CMTAT/interfaces/engine/IRuleEngine.sol";
+ 5 : : import {IERC1404, IERC1404Extend} from "CMTAT/interfaces/tokenization/draft-IERC1404.sol";
+ 6 : : import {IERC3643ComplianceRead, IERC3643IComplianceContract} from "CMTAT/interfaces/tokenization/IERC3643Partial.sol";
+ 7 : : import {IERC7551Compliance} from "CMTAT/interfaces/tokenization/draft-IERC7551.sol";
+ 8 : : import {IRule} from "RuleEngine/interfaces/IRule.sol";
+ 9 : : import {ITransferContext} from "../../interfaces/ITransferContext.sol";
+ 10 : : import {IERC20} from "OZ/token/ERC20/IERC20.sol";
+ 11 : : import {
+ 12 : : RuleConditionalTransferLightInvariantStorage
+ 13 : : } from "./RuleConditionalTransferLightInvariantStorage.sol";
+ 14 : : import {VersionModule} from "../../../modules/VersionModule.sol";
+ 15 : :
+ 16 : : /**
+ 17 : : * @title RuleConditionalTransferLightBase
+ 18 : : * @dev Requires operator approval for each transfer. Same transfer (from, to, value)
+ 19 : : * can be approved multiple times to allow repeated transfers.
+ 20 : : */
+ 21 : : abstract contract RuleConditionalTransferLightBase is VersionModule, RuleConditionalTransferLightInvariantStorage, IRule {
+ 22 : : // Mapping from transfer hash to approval count
+ 23 : : mapping(bytes32 => uint256) public approvalCounts;
+ 24 : :
+ 25 : 1940 : function approveTransfer(address from, address to, uint256 value) public onlyTransferApprover {
+ 26 : 1941 : bytes32 transferHash = _transferHash(from, to, value);
+ 27 : 1941 : approvalCounts[transferHash] += 1;
+ 28 : 1941 : emit TransferApproved(from, to, value, approvalCounts[transferHash]);
+ 29 : : }
+ 30 : :
+ 31 : 4 : function cancelTransferApproval(address from, address to, uint256 value) public onlyTransferApprover {
+ 32 : 3 : bytes32 transferHash = _transferHash(from, to, value);
+ 33 : 3 : uint256 count = approvalCounts[transferHash];
+ 34 [ + + ]: 3 : require(count != 0, TransferApprovalNotFound());
+ 35 : 2 : approvalCounts[transferHash] = count - 1;
+ 36 : 2 : emit TransferApprovalCancelled(from, to, value, approvalCounts[transferHash]);
+ 37 : : }
+ 38 : :
+ 39 : : /**
+ 40 : : * @notice Approves and performs a transferFrom using this rule as spender.
+ 41 : : * @dev Requires `from` to have approved this contract on the token.
+ 42 : : * @dev This function is only safe for tokens that call back `transferred()` during transfer.
+ 43 : : * @dev CEI is intentionally inverted so the approval exists for the callback.
+ 44 : : */
+ 45 : 4 : function approveAndTransferIfAllowed(address token, address from, address to, uint256 value)
+ 46 : : public
+ 47 : : onlyTransferApprover
+ 48 : : returns (bool)
+ 49 : : {
+ 50 [ + + ]: 4 : require(token != address(0), RuleConditionalTransferLight_TokenAddressZeroNotAllowed());
+ 51 : :
+ 52 : 3 : approveTransfer(from, to, value);
+ 53 : :
+ 54 : 3 : uint256 allowed = IERC20(token).allowance(from, address(this));
+ 55 [ + + ]: 3 : require(
+ 56 : : allowed >= value,
+ 57 : : RuleConditionalTransferLight_InsufficientAllowance(token, from, allowed, value)
+ 58 : : );
+ 59 : :
+ 60 : 2 : bool success = IERC20(token).transferFrom(from, to, value);
+ 61 [ + + ]: 2 : require(success, RuleConditionalTransferLight_TransferFailed());
+ 62 : 1 : return true;
+ 63 : : }
+ 64 : :
+ 65 : 264 : function approvedCount(address from, address to, uint256 value) public view returns (uint256) {
+ 66 : 264 : bytes32 transferHash = _transferHash(from, to, value);
+ 67 : 264 : return approvalCounts[transferHash];
+ 68 : : }
+ 69 : :
+ 70 : 856 : function transferred(address from, address to, uint256 value)
+ 71 : : public
+ 72 : : override(IERC3643IComplianceContract)
+ 73 : : onlyTransferExecutor
+ 74 : : {
+ 75 : 854 : _transferred(from, to, value);
+ 76 : : }
+ 77 : :
+ 78 : 1 : function transferred(address /* spender */, address from, address to, uint256 value)
+ 79 : : public
+ 80 : : override(IRuleEngine)
+ 81 : : onlyTransferExecutor
+ 82 : : {
+ 83 : 1 : _transferred(from, to, value);
+ 84 : : }
+ 85 : :
+ 86 : 7 : function detectTransferRestriction(address from, address to, uint256 value)
+ 87 : : public
+ 88 : : view
+ 89 : : override(IERC1404)
+ 90 : : returns (uint8)
+ 91 : : {
+ 92 [ + ]: 13 : if (from == address(0) || to == address(0)) {
+ 93 : 4 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK);
+ 94 : : }
+ 95 : 9 : bytes32 transferHash = _transferHash(from, to, value);
+ 96 [ + ]: 9 : if (approvalCounts[transferHash] == 0) {
+ 97 : 6 : return CODE_TRANSFER_REQUEST_NOT_APPROVED;
+ 98 : : }
+ 99 : 3 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK);
+ 100 : : }
+ 101 : :
+ 102 : 1 : function detectTransferRestrictionFrom(address /* spender */, address from, address to, uint256 value)
+ 103 : : public
+ 104 : : view
+ 105 : : override(IERC1404Extend)
+ 106 : : returns (uint8)
+ 107 : : {
+ 108 : 2 : return detectTransferRestriction(from, to, value);
+ 109 : : }
+ 110 : :
+ 111 : 4 : function canTransfer(address from, address to, uint256 value)
+ 112 : : public
+ 113 : : view
+ 114 : : override(IERC3643ComplianceRead)
+ 115 : : returns (bool)
+ 116 : : {
+ 117 : 4 : return detectTransferRestriction(from, to, value) == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK);
+ 118 : : }
+ 119 : :
+ 120 : 1 : function canTransferFrom(address spender, address from, address to, uint256 value)
121 : : public
- 122 : : pure
- 123 : : virtual
- 124 : : override(IERC1404)
- 125 : : returns (string memory)
- 126 : : {
- 127 [ + + ]: 8 : if (_restrictionCode == CODE_ADDRESS_FROM_IS_BLACKLISTED) {
- 128 : 3 : return TEXT_ADDRESS_FROM_IS_BLACKLISTED;
- 129 [ + + ]: 5 : } else if (_restrictionCode == CODE_ADDRESS_TO_IS_BLACKLISTED) {
- 130 : 2 : return TEXT_ADDRESS_TO_IS_BLACKLISTED;
- 131 [ + + ]: 3 : } else if (_restrictionCode == CODE_ADDRESS_SPENDER_IS_BLACKLISTED) {
- 132 : 1 : return TEXT_ADDRESS_SPENDER_IS_BLACKLISTED;
- 133 : : } else {
- 134 : 2 : return TEXT_CODE_NOT_FOUND;
- 135 : : }
- 136 : : }
- 137 : :
- 138 : 0 : function supportsInterface(bytes4 interfaceId) public view virtual override(AccessControl, RuleValidateTransfer) returns (bool) {
- 139 : 0 : return AccessControl.supportsInterface(interfaceId) || RuleValidateTransfer.supportsInterface(interfaceId);
- 140 : : }
- 141 : :
- 142 : : /* ============ State Functions ============ */
- 143 : :
- 144 : 9 : function transferred(address from, address to, uint256 value)
- 145 : : public
- 146 : : view
- 147 : : virtual
- 148 : : override(IERC3643IComplianceContract)
- 149 : : {
- 150 : 12 : uint8 code = this.detectTransferRestriction(from, to, value);
- 151 [ + + ]: 12 : require(
- 152 : : code == uint8(REJECTED_CODE_BASE.TRANSFER_OK),
- 153 : : RuleBlacklist_InvalidTransfer(address(this), from, to, value, code)
- 154 : : );
- 155 : : }
- 156 : :
- 157 : 2 : function transferred(address spender, address from, address to, uint256 value)
- 158 : : public
- 159 : : view
- 160 : : virtual
- 161 : : override(IRuleEngine)
- 162 : : {
- 163 : 4 : uint8 code = this.detectTransferRestrictionFrom(spender, from, to, value);
- 164 [ + + ]: 4 : require(
- 165 : : code == uint8(REJECTED_CODE_BASE.TRANSFER_OK),
- 166 : : RuleBlacklist_InvalidTransferFrom(address(this), spender, from, to, value, code)
- 167 : : );
- 168 : : }
- 169 : :
- 170 : 2 : function transferred(address spender, address from, address to, uint256 /* tokenId */,uint256 value)
- 171 : : public
- 172 : : view
- 173 : : virtual
- 174 : : override(IERC7943NonFungibleComplianceExtend)
- 175 : : {
- 176 : 2 : transferred(spender, from, to, value);
- 177 : : }
- 178 : :
- 179 : 3 : function transferred(address from, address to, uint256 /* tokenId */,uint256 value)
- 180 : : public
- 181 : : view
- 182 : : virtual
- 183 : : override(IERC7943NonFungibleComplianceExtend)
- 184 : : {
- 185 : 3 : transferred(from, to, value);
- 186 : : }
- 187 : : }
+ 122 : : view
+ 123 : : override(IERC7551Compliance)
+ 124 : : returns (bool)
+ 125 : : {
+ 126 : 1 : return detectTransferRestrictionFrom(spender, from, to, value)
+ 127 : : == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK);
+ 128 : : }
+ 129 : :
+ 130 : 1 : function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override(IRule) returns (bool) {
+ 131 : 1 : return restrictionCode == CODE_TRANSFER_REQUEST_NOT_APPROVED;
+ 132 : : }
+ 133 : :
+ 134 : 2 : function messageForTransferRestriction(uint8 restrictionCode)
+ 135 : : external
+ 136 : : pure
+ 137 : : override(IERC1404)
+ 138 : : returns (string memory)
+ 139 : : {
+ 140 [ + ]: 2 : if (restrictionCode == CODE_TRANSFER_REQUEST_NOT_APPROVED) {
+ 141 : 1 : return TEXT_TRANSFER_REQUEST_NOT_APPROVED;
+ 142 : : }
+ 143 : 1 : return TEXT_CODE_NOT_FOUND;
+ 144 : : }
+ 145 : :
+ 146 : 3 : function transferred(ITransferContext.FungibleTransferContext calldata ctx) external onlyTransferExecutor {
+ 147 : 3 : _transferredFromContext(ctx);
+ 148 : : }
+ 149 : :
+ 150 : 3 : function _transferredFromContext(ITransferContext.FungibleTransferContext calldata ctx) internal virtual {
+ 151 : 3 : _transferred(ctx.from, ctx.to, ctx.value);
+ 152 : : }
+ 153 : :
+ 154 : 860 : function _transferred(address from, address to, uint256 value) internal virtual {
+ 155 [ + ]: 860 : if (from == address(0) || to == address(0)) {
+ 156 : 860 : return;
+ 157 : : }
+ 158 : 846 : bytes32 transferHash = _transferHash(from, to, value);
+ 159 : 846 : uint256 count = approvalCounts[transferHash];
+ 160 : :
+ 161 [ + + ]: 846 : require(count != 0, TransferNotApproved());
+ 162 : :
+ 163 : 843 : approvalCounts[transferHash] = count - 1;
+ 164 : 843 : emit TransferExecuted(from, to, value, approvalCounts[transferHash]);
+ 165 : : }
+ 166 : :
+ 167 : 3063 : function _transferHash(address from, address to, uint256 value) internal pure virtual returns (bytes32 hash) {
+ 168 : 3063 : return keccak256(abi.encodePacked(from, to, value));
+ 169 : : }
+ 170 : :
+ 171 : : /*//////////////////////////////////////////////////////////////
+ 172 : : ACCESS CONTROL
+ 173 : : //////////////////////////////////////////////////////////////*/
+ 174 : :
+ 175 : 4 : modifier onlyTransferApprover() {
+ 176 : 4 : _authorizeTransferApproval();
+ 177 : : _;
+ 178 : : }
+ 179 : :
+ 180 : 3 : modifier onlyTransferExecutor() {
+ 181 : 3 : _authorizeTransferExecution();
+ 182 : : _;
+ 183 : : }
+ 184 : :
+ 185 : : function _authorizeTransferApproval() internal view virtual;
+ 186 : :
+ 187 : : function _authorizeTransferExecution() internal view virtual;
+ 188 : : }
@@ -263,7 +264,7 @@
diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-b.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-b.html
new file mode 100644
index 0000000..1481813
--- /dev/null
+++ b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-b.html
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+ LCOV - lcov.info - /home/ryan/Pictures/dev/Rules/src/rules/operation/abstract
+
+
+
+
+
+
+ | LCOV - code coverage report |
+  |
+
+
+
+
+
+
+
+ |
+ |
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+ |
+ |
+ |
+
+
+
+
+
+  |
+
+ |
+
+
+  |
+
+
+
+
+
+
+
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+
+ Filename  |
+ Line Coverage  |
+ Functions  |
+ Branches  |
+
+
+ | RuleConditionalTransferLightBase.sol |
+
+
+ |
+ 100.0 % |
+ 62 / 62 |
+ 100.0 % |
+ 18 / 18 |
+ 100.0 % |
+ 14 / 14 |
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-f.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-f.html
new file mode 100644
index 0000000..3d54907
--- /dev/null
+++ b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-f.html
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+ LCOV - lcov.info - /home/ryan/Pictures/dev/Rules/src/rules/operation/abstract
+
+
+
+
+
+
+ | LCOV - code coverage report |
+  |
+
+
+
+
+
+
+
+ |
+ |
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+ |
+ |
+ |
+
+
+
+
+
+  |
+
+ |
+
+
+  |
+
+
+
+
+
+
+
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+
+ Filename  |
+ Line Coverage  |
+ Functions  |
+ Branches  |
+
+
+ | RuleConditionalTransferLightBase.sol |
+
+
+ |
+ 100.0 % |
+ 62 / 62 |
+ 100.0 % |
+ 18 / 18 |
+ 100.0 % |
+ 14 / 14 |
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-l.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-l.html
new file mode 100644
index 0000000..90e3217
--- /dev/null
+++ b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-l.html
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+ LCOV - lcov.info - /home/ryan/Pictures/dev/Rules/src/rules/operation/abstract
+
+
+
+
+
+
+ | LCOV - code coverage report |
+  |
+
+
+
+
+
+
+
+ |
+ |
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+ |
+ |
+ |
+
+
+
+
+
+  |
+
+ |
+
+
+  |
+
+
+
+
+
+
+
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+
+ Filename  |
+ Line Coverage  |
+ Functions  |
+ Branches  |
+
+
+ | RuleConditionalTransferLightBase.sol |
+
+
+ |
+ 100.0 % |
+ 62 / 62 |
+ 100.0 % |
+ 18 / 18 |
+ 100.0 % |
+ 14 / 14 |
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index.html
new file mode 100644
index 0000000..1a454a5
--- /dev/null
+++ b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index.html
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+ LCOV - lcov.info - /home/ryan/Pictures/dev/Rules/src/rules/operation/abstract
+
+
+
+
+
+
+ | LCOV - code coverage report |
+  |
+
+
+
+
+
+
+
+ |
+ |
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+ |
+ |
+ |
+
+
+
+
+
+  |
+
+ |
+
+
+  |
+
+
+
+
+
+
+
|
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+
+
+
+ Filename  |
+ Line Coverage  |
+ Functions  |
+ Branches  |
+
+
+ | RuleConditionalTransferLightBase.sol |
+
+
+ |
+ 100.0 % |
+ 62 / 62 |
+ 100.0 % |
+ 18 / 18 |
+ 100.0 % |
+ 14 / 14 |
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/coverage/coverage/validation/abstract/RuleAddressSet/index-sort-b.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index-sort-b.html
similarity index 54%
rename from doc/coverage/coverage/validation/abstract/RuleAddressSet/index-sort-b.html
rename to doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index-sort-b.html
index fe9d655..4c73cf0 100644
--- a/doc/coverage/coverage/validation/abstract/RuleAddressSet/index-sort-b.html
+++ b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index-sort-b.html
@@ -4,22 +4,22 @@
- LCOV - lcov.info - validation/abstract/RuleAddressSet
-
+ LCOV - lcov.info - /home/ryan/Pictures/dev/Rules/src/rules/operation
+
| LCOV - code coverage report |
-  |
+  |
-
+
|
|
@@ -31,18 +31,18 @@
|
-
-
-
+
+
+
-
+
|
-
-
-
+
+
+
|
@@ -53,12 +53,12 @@
-  |
+  |
|
-  |
+  |
@@ -76,32 +76,32 @@
- Filename  |
- Line Coverage  |
- Functions  |
- Branches  |
+ Filename  |
+ Line Coverage  |
+ Functions  |
+ Branches  |
- | RuleAddressSetInternal.sol |
+ RuleConditionalTransferLightOwnable2Step.sol |
-
+
|
100.0 % |
- 14 / 14 |
+ 5 / 5 |
100.0 % |
- 6 / 6 |
+ 3 / 3 |
- |
0 / 0 |
- | RuleAddressSet.sol |
+ RuleConditionalTransferLight.sol |
-
+
|
- 87.5 % |
- 28 / 32 |
- 81.8 % |
- 9 / 11 |
+ 100.0 % |
+ 11 / 11 |
+ 100.0 % |
+ 6 / 6 |
100.0 % |
2 / 2 |
@@ -110,7 +110,7 @@
diff --git a/doc/coverage/coverage/validation/abstract/RuleAddressSet/index-sort-f.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index-sort-f.html
similarity index 54%
rename from doc/coverage/coverage/validation/abstract/RuleAddressSet/index-sort-f.html
rename to doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index-sort-f.html
index b79046b..eba8d47 100644
--- a/doc/coverage/coverage/validation/abstract/RuleAddressSet/index-sort-f.html
+++ b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index-sort-f.html
@@ -4,22 +4,22 @@
- LCOV - lcov.info - validation/abstract/RuleAddressSet
-
+ LCOV - lcov.info - /home/ryan/Pictures/dev/Rules/src/rules/operation
+
| LCOV - code coverage report |
-  |
+  |
-
+
|
|
@@ -31,18 +31,18 @@
|
-
-
-
+
+
+
-
+
|
-
-
-
+
+
+
|
@@ -53,12 +53,12 @@
-  |
+  |
|
-  |
+  |
@@ -76,41 +76,41 @@
- Filename  |
- Line Coverage  |
- Functions  |
- Branches  |
+ Filename  |
+ Line Coverage  |
+ Functions  |
+ Branches  |
- | RuleAddressSet.sol |
+ RuleConditionalTransferLightOwnable2Step.sol |
-
+
|
- 87.5 % |
- 28 / 32 |
- 81.8 % |
- 9 / 11 |
100.0 % |
- 2 / 2 |
+ 5 / 5 |
+ 100.0 % |
+ 3 / 3 |
+ - |
+ 0 / 0 |
- | RuleAddressSetInternal.sol |
+ RuleConditionalTransferLight.sol |
-
+
|
100.0 % |
- 14 / 14 |
+ 11 / 11 |
100.0 % |
6 / 6 |
- - |
- 0 / 0 |
+ 100.0 % |
+ 2 / 2 |