Skip to content

Instantly share code, notes, and snippets.

@denniswon
Created March 16, 2026 07:03
Show Gist options
  • Select an option

  • Save denniswon/80db91c5f2d4db883312479f1336db00 to your computer and use it in GitHub Desktop.

Select an option

Save denniswon/80db91c5f2d4db883312479f1336db00 to your computer and use it in GitHub Desktop.
[Low/informational[ Complete Triage: All 30 Findings
Complete Triage: All 30 Findings
Core Protocol — Actionable Fixes
┌─────┬─────────────────────────────────────────────────────────────────────┬───────────────┬─────────────────────────────────────────────────┐
│ # │ Finding │ Verdict │ Action │
├─────┼─────────────────────────────────────────────────────────────────────┼───────────────┼─────────────────────────────────────────────────┤
│ #4 │ IRegoVerifier calldata return type │ Valid │ Fix — change to memory in interface │
├─────┼─────────────────────────────────────────────────────────────────────┼───────────────┼─────────────────────────────────────────────────┤
│ #10 │ Missing TaskChallengedSuccessfully event in │ Valid │ Fix — add event emission │
│ │ challengeDirectlyVerifiedAttestation │ │ │
├─────┼─────────────────────────────────────────────────────────────────────┼───────────────┼─────────────────────────────────────────────────┤
│ #23 │ taskCreationBufferWindow not set in initialize() │ Partially │ Fix — set default in initialize or document │
│ │ │ valid │ │
├─────┼─────────────────────────────────────────────────────────────────────┼───────────────┼─────────────────────────────────────────────────┤
│ #26 │ Sentinel collision via crafted expireAfter │ Partially │ Fix — guard against sentinel value in │
│ │ │ valid │ createAttestationHash │
└─────┴─────────────────────────────────────────────────────────────────────┴───────────────┴─────────────────────────────────────────────────┘
Core Protocol — Won't Fix (informational/theoretical)
┌─────┬─────────────────────────────────────────────────────┬───────────────┬─────────────────────────────────────────────────────────────────┐
│ # │ Finding │ Verdict │ Reason │
├─────┼─────────────────────────────────────────────────────┼───────────────┼─────────────────────────────────────────────────────────────────┤
│ #1 │ 32-bit block truncation │ Partially │ Year 2106 issue, 80 years away. Consistent truncation. │
│ │ │ valid │ │
├─────┼─────────────────────────────────────────────────────┼───────────────┼─────────────────────────────────────────────────────────────────┤
│ #5 │ IdentityRegistry reinitializer │ Invalid │ Function doesn't exist (evaluated earlier) │
├─────┼─────────────────────────────────────────────────────┼───────────────┼─────────────────────────────────────────────────────────────────┤
│ #8 │ Missing contract check in sanityCheckAttestation │ Valid but low │ Malformed input causes revert either way, just with unclear │
│ │ │ │ error. Defense-in-depth. │
├─────┼─────────────────────────────────────────────────────┼───────────────┼─────────────────────────────────────────────────────────────────┤
│ #16 │ RegoVerifier unchecked return │ Invalid │ SP1 verifier reverts on failure, doesn't return bool │
├─────┼─────────────────────────────────────────────────────┼───────────────┼─────────────────────────────────────────────────────────────────┤
│ #18 │ ECDSAOperatorTableUpdater 32-bit timestamp │ Partially │ Year 2106, matches EigenLayer upstream pattern │
│ │ │ valid │ │
├─────┼─────────────────────────────────────────────────────┼───────────────┼─────────────────────────────────────────────────────────────────┤
│ #22 │ DestinationTaskResponseHandler missing constructor │ Valid but low │ Deployment-time misconfiguration caught at first use │
│ │ validation │ │ │
├─────┼─────────────────────────────────────────────────────┼───────────────┼─────────────────────────────────────────────────────────────────┤
│ #27 │ Missing owner validation in PolicyFactory │ Valid but low │ Deployer error, not exploitable │
├─────┼─────────────────────────────────────────────────────┼───────────────┼─────────────────────────────────────────────────────────────────┤
│ #28 │ PolicyClientRegistry ERC165 without zero check │ Partially │ address(0) gives opaque revert instead of NotPolicyClient │
│ │ │ valid │ │
├─────┼─────────────────────────────────────────────────────┼───────────────┼─────────────────────────────────────────────────────────────────┤
│ #29 │ NewtonPolicyData.attest missing checks │ Invalid │ Expiration checked by signature + downstream enforcement │
├─────┼─────────────────────────────────────────────────────┼───────────────┼─────────────────────────────────────────────────────────────────┤
│ #30 │ ECDSAOperatorTableUpdater zero root return │ Invalid │ View function, integrators handle zero │
└─────┴─────────────────────────────────────────────────────┴───────────────┴─────────────────────────────────────────────────────────────────┘
Example Contract Findings (all lower priority, no core impact)
┌─────┬───────────────────────────────────────────────────┬─────────────┬────────────────────────────┐
│ # │ Finding │ File │ Quick Assessment │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #2 │ Zero-denominator in SharedVault │ examples/ │ Standard ERC4626 edge case │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #3 │ Missing max-shares bound in ERC4626Router │ examples/ │ Parameter validation gap │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #6 │ Unchecked multiplication in SharedVault │ examples/ │ Overflow concern │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #7 │ Unbounded enumeration in PolicyFactory │ core (view) │ Off-chain DoS only │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #9 │ Unbounded enumeration in PolicyClientRegistry │ core (view) │ Off-chain DoS only │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #11 │ Ignored _validateAttestation return │ examples/ │ Gate bypass in example │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #12 │ Rounding dust in SupporterRewardManager │ examples/ │ Arithmetic precision │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #13 │ Unauthenticated setters in NewtonProtectedERC20 │ examples/ │ Access control gap │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #14 │ Unprotected init in RewardManagerFactory │ examples/ │ Missing access control │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #15 │ Misleading comment in ERC20ProtectedProxy │ examples/ │ Code quality │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #17 │ Overflow in SupporterRewardManager claim │ examples/ │ Arithmetic overflow │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #19 │ Missing beneficiary validation in PersonalVault │ examples/ │ Zero-address check │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #20 │ Missing validation in SupporterRewardManager init │ examples/ │ Zero-address check │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #21 │ Disabled policy gate in ERC20Protected │ examples/ │ Design choice │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #24 │ Intent field misuse in ERC20ProtectedProxy │ examples/ │ Parameter mapping │
├─────┼───────────────────────────────────────────────────┼─────────────┼────────────────────────────┤
│ #25 │ Proxy gating DoS in ERC20Protected │ examples/ │ Architecture issue │
└─────┴───────────────────────────────────────────────────┴─────────────┴────────────────────────────┘
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment