Conversation
| @@ -1,5 +1,5 @@ | |||
| // SPDX-License-Identifier: UNLICENSED | |||
| pragma solidity >=0.8.25 <0.9.0; | |||
| pragma solidity ^0.8.20; | |||
There was a problem hiding this comment.
this was breaking coverage
Slither reportStatic Analysis Report**THIS CHECKLIST IS NOT COMPLETE**. Use `--show-ignored-findings` to show all the results. Summary - [locked-ether](#locked-ether) (1 results) (Medium) - [reentrancy-no-eth](#reentrancy-no-eth) (2 results) (Medium) - [unused-return](#unused-return) (8 results) (Medium) - [incorrect-modifier](#incorrect-modifier) (1 results) (Low) - [calls-loop](#calls-loop) (2 results) (Low) - [reentrancy-benign](#reentrancy-benign) (3 results) (Low) - [reentrancy-events](#reentrancy-events) (4 results) (Low) - [dead-code](#dead-code) (44 results) (Informational) - [solc-version](#solc-version) (3 results) (Informational) - [incorrect-using-for](#incorrect-using-for) (1 results) (Informational) - [missing-inheritance](#missing-inheritance) (2 results) (Informational) - [naming-convention](#naming-convention) (13 results) (Informational) - [unimplemented-functions](#unimplemented-functions) (4 results) (Informational) ## locked-ether Impact: Medium Confidence: High - [ ] ID-0 Contract locking ether found: Contract [MutablePauseTarget](https://github.com/equilibria-xyz/root/blob/9955006221ec660d8ef3a85f6503e0757ad17a45/src/mutability/Mutable.sol#L132-L137) has payable functions: - [MutablePauseTarget.fallback()](https://github.com/equilibria-xyz/root/blob/9955006221ec660d8ef3a85f6503e0757ad17a45/src/mutability/Mutable.sol#L133-L135) But does not have a function to withdraw the etherreentrancy-no-ethImpact: Medium
root/src/mutability/Mutable.sol Lines 94 to 107 in 9955006
root/src/mutability/Mutable.sol Lines 117 to 121 in 9955006 unused-returnImpact: Medium
root/src/token/types/Token6.sol Lines 43 to 45 in 9955006
root/src/token/types/Token.sol Lines 51 to 53 in 9955006
root/src/token/types/Token18.sol Lines 53 to 55 in 9955006
root/src/token/types/Token6.sol Lines 54 to 56 in 9955006
root/src/distribution/Airdrop.sol Lines 25 to 31 in 9955006
root/src/mutability/Mutator.sol Lines 34 to 43 in 9955006
root/src/token/types/Token.sol Lines 40 to 42 in 9955006
root/src/token/types/Token18.sol Lines 43 to 45 in 9955006 incorrect-modifierImpact: Low
root/src/attribute/Attribute.sol Lines 28 to 32 in 9955006 calls-loopImpact: Low
root/src/mutability/Mutator.sol Lines 54 to 57 in 9955006
root/src/mutability/Mutator.sol Lines 59 to 62 in 9955006 reentrancy-benignImpact: Low
root/src/mutability/Mutator.sol Lines 59 to 62 in 9955006
root/src/mutability/Mutator.sol Lines 54 to 57 in 9955006
root/src/mutability/Mutator.sol Lines 34 to 43 in 9955006 reentrancy-eventsImpact: Low
root/src/mutability/Mutable.sol Lines 117 to 121 in 9955006
root/src/mutability/Mutator.sol Lines 54 to 57 in 9955006
root/src/mutability/Mutator.sol Lines 59 to 62 in 9955006
root/src/mutability/Mutable.sol Lines 110 to 114 in 9955006 dead-codeImpact: Informational
root/src/number/types/UFixed18.sol Lines 288 to 290 in 9955006
root/src/number/types/Fixed6.sol Lines 295 to 297 in 9955006
root/src/number/types/UFixed6.sol Lines 295 to 297 in 9955006
root/src/number/types/Fixed6.sol Lines 287 to 289 in 9955006
root/src/mutability/Implementation.sol Lines 54 to 56 in 9955006
root/src/number/types/Fixed18.sol Lines 288 to 290 in 9955006
root/src/number/types/Fixed6.sol Lines 311 to 313 in 9955006
root/src/number/types/Fixed6.sol Lines 327 to 329 in 9955006
root/src/number/types/UFixed6.sol Lines 311 to 314 in 9955006
root/src/number/types/Fixed6.sol Lines 335 to 337 in 9955006
root/src/number/types/Fixed18.sol Lines 304 to 306 in 9955006
root/src/number/types/Fixed6.sol Lines 343 to 346 in 9955006
root/src/number/types/UFixed18.sol Lines 313 to 316 in 9955006
root/src/number/types/UFixed18.sol Lines 280 to 282 in 9955006
root/src/number/types/UFixed6.sol Lines 329 to 331 in 9955006
root/src/number/types/Fixed18.sol Lines 280 to 282 in 9955006
root/src/number/types/Fixed6.sol Lines 303 to 305 in 9955006
root/src/number/types/Fixed6.sol Lines 361 to 363 in 9955006
root/src/number/types/UFixed6.sol Lines 279 to 281 in 9955006
root/src/number/types/Fixed6.sol Lines 369 to 371 in 9955006
root/src/number/types/UFixed18.sol Lines 330 to 332 in 9955006
root/src/number/types/UFixed18.sol Lines 272 to 274 in 9955006
root/src/number/types/Fixed6.sol Lines 352 to 355 in 9955006
root/src/number/types/Fixed6.sol Lines 319 to 321 in 9955006
root/src/number/types/UFixed18.sol Lines 296 to 298 in 9955006
root/src/mutability/Implementation.sol Lines 59 to 61 in 9955006
root/src/number/types/Fixed18.sol Lines 312 to 314 in 9955006
root/src/number/types/UFixed6.sol Lines 320 to 323 in 9955006
root/src/number/types/Fixed18.sol Lines 345 to 348 in 9955006
root/src/number/types/Fixed18.sol Lines 336 to 339 in 9955006
root/src/number/types/Fixed18.sol Lines 362 to 364 in 9955006
root/src/number/types/Fixed18.sol Lines 320 to 322 in 9955006
root/src/number/types/UFixed18.sol Lines 264 to 266 in 9955006
root/src/number/types/UFixed6.sol Lines 303 to 305 in 9955006
root/src/number/types/UFixed18.sol Lines 304 to 307 in 9955006
root/src/number/types/UFixed18.sol Lines 322 to 324 in 9955006
root/src/number/types/UFixed6.sol Lines 271 to 273 in 9955006
root/src/number/types/UFixed6.sol Lines 263 to 265 in 9955006
root/src/number/types/Fixed18.sol Lines 296 to 298 in 9955006
root/src/number/types/Fixed18.sol Lines 354 to 356 in 9955006
root/src/number/types/UFixed6.sol Lines 337 to 339 in 9955006
root/src/number/types/UFixed6.sol Lines 287 to 289 in 9955006
root/src/number/types/UFixed18.sol Lines 256 to 258 in 9955006
root/src/number/types/Fixed18.sol Lines 328 to 330 in 9955006 solc-versionImpact: Informational
root/src/number/types/Fixed18.sol Line 2 in 9955006
root/src/attribute/Attribute.sol Line 2 in 9955006
root/src/vrgda/VRGDADecayMath.sol Line 2 in 9955006 incorrect-using-forImpact: Informational
root/src/mutability/types/Version.sol Lines 16 to 20 in 9955006 missing-inheritanceImpact: Informational
root/src/attribute/OwnableStub.sol Lines 9 to 15 in 9955006
naming-conventionImpact: Informational
root/src/attribute/Pausable.sol Lines 34 to 36 in 9955006
root/src/mutability/Mutable.sol Lines 34 to 38 in 9955006
root/src/mutability/Mutable.sol Line 31 in 9955006
root/src/attribute/Ownable.sol Line 21 in 9955006
root/src/attribute/Ownable.sol Lines 42 to 44 in 9955006
root/src/mutability/Implementation.sol Line 19 in 9955006
root/src/attribute/Ownable.sol Lines 24 to 28 in 9955006
root/src/mutability/Implementation.sol Lines 22 to 26 in 9955006
root/src/attribute/Pausable.sol Line 23 in 9955006
root/src/attribute/Pausable.sol Lines 26 to 30 in 9955006
root/src/mutability/Implementation.sol Line 64 in 9955006
root/src/attribute/Attribute.sol Lines 20 to 24 in 9955006
root/src/attribute/Attribute.sol Line 17 in 9955006 unimplemented-functionsImpact: Informational
root/src/attribute/OwnerExecutable.sol Lines 10 to 19 in 9955006
root/src/attribute/OwnerWithdrawable.sol Lines 9 to 16 in 9955006
root/src/attribute/OwnerDelegatable.sol Lines 10 to 18 in 9955006
root/src/mutability/Implementation.sol Lines 11 to 65 in 9955006 |
src/mutability/Mutator.sol
Outdated
| function _pause() internal { | ||
| for (uint256 i = 0; i < _mutables.length(); i++) IMutable(_mutables.at(i)).pause(); | ||
| super._pause(); | ||
| emit IMutableTransparent.Paused(); |
There was a problem hiding this comment.
I think we can forgo this event, the IMutableTransparent's should be emmitting their own version of these
src/mutability/Mutator.sol
Outdated
| } | ||
|
|
||
| function _pause() internal override { | ||
| function _pause() internal { |
There was a problem hiding this comment.
I suppose this was a problem before, but what happens if we (1) pause, then (2) create a new mutable, then (3) unpause.
I think step (3) would revert since the new mutable would not be in then "unpaused" state.
There was a problem hiding this comment.
Agree; two options:
- Update
Mutator.createto check the state of the first Mutable in the array (if any). Pause after creation if appropriate. This should ensure consistent state. - Update
Mutator.pauseandunpauseto check state in each iteration. This seems safer but the cost would exascerbate the unbounded iteration.
There was a problem hiding this comment.
Yeah, I kind of don't love either option because it would also require us to put a getter in the fallback of Mutable which we don't have structure for already.
I'm wondering if it'd be easier to just not delete Pausable (actually forgot it was being used here), and instead add a fix to the create() function to pause the new Mutable on creation if Mutator is paused. While we don't need pausing functionality in Implementation-based contracts, we may want it still in Derived-based contracts.
Unit Test Coverage ReportCoverage after merging ed/pe-2585 into v3 will be
Coverage Report
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Removed artifacts per ticket. Rolled
PausableintoMutator. Implemented missingAttributeandMutabletests.