-
Notifications
You must be signed in to change notification settings - Fork 30
L-01: tryDecrease return initialized value if delta is initialized
#241
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
✅ Deploy Preview for confidential-tokens ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
Important Review skippedAuto incremental reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the WalkthroughThe pull request modifies the Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes
Possibly related PRs
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
contracts/utils/FHESafeMath.sol (1)
32-36: Inconsistent handling when both values are uninitialized.Line 36 correctly returns an initialized value (
FHE.asEuint64(0)) whenoldValueis uninitialized butdeltais initialized. However, line 34 still returns the uninitializedoldValuewhen both parameters are uninitialized. This is inconsistent with the PR's objective of returning initialized values.Semantically, when treating uninitialized values as 0, the operation
0 - 0 = 0should return an initialized zero value.Apply this diff to fix the inconsistency:
if (!FHE.isInitialized(delta)) { - return (FHE.asEbool(true), oldValue); + return (FHE.asEbool(true), FHE.asEuint64(0)); }
🧹 Nitpick comments (1)
contracts/utils/FHESafeMath.sol (1)
17-19: Consider similar fix intryIncreasefor consistency.The
tryIncreasefunction has a similar pattern where it returnsdelta(line 19) without verifying whetherdeltais initialized. Ifdeltais uninitialized, this would return an uninitialized value, which is inconsistent with the approach taken in this PR fortryDecrease.For consistency across the library, consider updating this function to handle the case where both
oldValueanddeltaare uninitialized.Suggested fix:
function tryIncrease(euint64 oldValue, euint64 delta) internal returns (ebool success, euint64 updated) { if (!FHE.isInitialized(oldValue)) { + if (!FHE.isInitialized(delta)) { + return (FHE.asEbool(true), FHE.asEuint64(0)); + } return (FHE.asEbool(true), delta); }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
contracts/utils/FHESafeMath.sol(1 hunks)test/utils/FHESafeMath.test.ts(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: boostsecurity - boostsecurityio/semgrep-pro
- GitHub Check: coverage
- GitHub Check: tests
- GitHub Check: slither
🔇 Additional comments (1)
test/utils/FHESafeMath.test.ts (1)
64-67: LGTM! Test cases correctly validate the new behavior.The test cases properly verify that when
oldValueis uninitialized:
undefined - 0 = 0withsuccess=true(line 64)undefined - 1 = 0withsuccess=false(line 67)This correctly matches the contract logic at line 36 in
FHESafeMath.solwheresuccess = FHE.eq(delta, 0)andupdated = FHE.asEuint64(0).
…241) * L-01: `tryDecrease` return initialized value if delta is initialized * add comment * Add changeset
* Start release candidate * Release v0.3.0 (rc) (#221) * Release v0.3.0 (rc) * Update changelog --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: James Toussaint <33313130+james-toussaint@users.noreply.github.com> * Update `checkOnTransferReceived` doc (#235) * Versioned Docs (#236) * generate versioned docs * publish docs even on pre-release * N-04: remove unused import in `ERC7984Rwa` (#243) * N-01: reset user instead of allowing user in `unblockUser` (#244) * N-05: Named mapping var in `ERC7984ObserverAccess` (#251) * N-05: Named mapping var in `ERC7984ObserverAccess` * Update contracts/token/ERC7984/extensions/ERC7984ObserverAccess.sol Co-authored-by: James Toussaint <33313130+james-toussaint@users.noreply.github.com> --------- Co-authored-by: James Toussaint <33313130+james-toussaint@users.noreply.github.com> * N-08: constant names are screaming camel case (#247) * N-08: constant names are screaming camel case * fix lint * N-02: reorder allowances omnibus (#250) * Support ERC-165 interface detection on ERC-7984 (#246) * Support ERC-165 interface detection on ERC-7984 * update link format * Add ERC7984 impl changeset * Update changeset --------- Co-authored-by: Arr00 <13561405+arr00@users.noreply.github.com> * M-03: grant allowances to agent in `ERC7984Rwa` (#242) * M-03: grant allowances to agent in `ERC7984Rwa` * up * N-12: update docs in `ERC7984Restricted` (#245) * Upgrade to use fhevm contracts v0.9.0 (#248) * chore: fhevm-v9 * chore: port all tests for fhevm v9 * Merge pull request #1 from OpenZeppelin/chore/update-disclose-flow update disclose flow * Update wrapper contract (#2) * Update wrapper contract * fix tests * fix mock * update docs * add changeset * request id unnecessary * Update contracts/token/ERC7984/extensions/ERC7984ERC20Wrapper.sol Co-authored-by: James Toussaint <33313130+james-toussaint@users.noreply.github.com> * remove unused params * Update test/token/ERC7984/ERC7984.test.ts Co-authored-by: James Toussaint <33313130+james-toussaint@users.noreply.github.com> * `cts` -> `handles` * `cleartext` -> `cleartextAmount` * Update test/token/ERC7984/extensions/ERC7984Wrapper.test.ts Co-authored-by: James Toussaint <33313130+james-toussaint@users.noreply.github.com> * nit --------- Co-authored-by: 0xalexbel <alexandre.belhoste@zama.ai> Co-authored-by: James Toussaint <33313130+james-toussaint@users.noreply.github.com> * N-[9,11]: fix `ERC7984Rwa` docs (#249) * M-11: fix `ERC7984Rwa` docs * add docs * Update contracts/token/ERC7984/extensions/ERC7984Rwa.sol * L-05: Grant allowances in `confidentialAvailable` (#252) * L-05: Grant allowances in `confidentialAvailable` * fix doc * L-01: `tryDecrease` return initialized value if delta is initialized (#241) * L-01: `tryDecrease` return initialized value if delta is initialized * add comment * Add changeset * Upgrade to use fhevm contracts v0.9.1 (#254) * Upgrade to use fhevm contracts v0.9.1 * bump sub package as well * Update `ERC7984Rwa` docs (#255) * Exit pre-release (#258) * Release v0.3.0 (#253) * Release v0.3.0 * Update changelog (#259) * Update changelog * Update CHANGELOG.md Co-authored-by: James Toussaint <33313130+james-toussaint@users.noreply.github.com> --------- Co-authored-by: James Toussaint <33313130+james-toussaint@users.noreply.github.com> * remove duplicate entry --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Arr00 <13561405+arr00@users.noreply.github.com> Co-authored-by: James Toussaint <33313130+james-toussaint@users.noreply.github.com> --------- Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: James Toussaint <33313130+james-toussaint@users.noreply.github.com> Co-authored-by: Arr00 <13561405+arr00@users.noreply.github.com> Co-authored-by: 0xalexbel <alexandre.belhoste@zama.ai>
Summary by CodeRabbit
Bug Fixes
Tests