# Plume | Attackathon

## Reports by Severity

<details>

<summary>Critical</summary>

* \#53022 \[SC-Critical] Funds are not properly refunded to user which calls for swap on the dex aggregator
* \#49863 \[SC-Critical] Dex Aggregator ERC20 token theft
* \#51352 \[SC-Critical] User will lose the unspent amount when executing partial swaps via 1inch
* \#53037 \[SC-Critical] Commission changes can retroactively affect user rewards
* \#53011 \[SC-Critical] Uncleaned Partial Approval Consumption in DEX Aggregator Integration Leads to Permanent DoS
* \#51847 \[SC-Critical] DoS via dust leftover in erc-20 approvals
* \#49854 \[SC-Critical] Dex Aggregator partial fill token loss
* \#51283 \[SC-Critical] Permanent Freeze of User token Due to Unhandled Partial Fill Refunds for swap via 1inch in `DexAggregatorWrapperWithPredicateProxy`
* \#52923 \[SC-Critical] Partial fill traps source token residual inside the wrapper and leaves unsafe residual allowance
* \#52178 \[SC-Critical] User will lose the unspent amount when executing partial swaps via OkxRouter
* \#52980 \[SC-Critical] Partial fills strand source tokens in the wrapper and leave dangerous residual allowances

</details>

<details>

<summary>High</summary>

* \#51946 \[SC-High] Commission Claims Fail for Removed Reward Tokens
* \#52964 \[SC-High] if a new reward token is added during a the period a validator is inactive, the validator will still earn rewards/commission for some of the duration in which they were inactive
* \#53020 \[SC-High] There are functions which when inevitably used could result in wrongly accruing yield for inactive validators, which can make the protocol insolvent
* \#52634 \[SC-High] Batch yield distribution has a mathematical flaw that enables economic manipulation
* \#50784 \[SC-High] Any arc token creator can upgrade the implementation
* \#51912 \[SC-High] Mismatched rounding rules in Reward Logic library results in two-fold loss of earnings
* \#50822 \[SC-High] Deployer can cpgrade `ArcToken` to malicious implementation and steal all user funds
* \#50477 \[SC-High] Validator loses all accrued commission when reward token is removed
* \#52097 \[SC-High] Malicious User can steal yield via Reordering Between Batches in `distributeYieldWithLimit`
* \#53034 \[SC-High] ArcTokenFactory doesn't properly handle role management which allows users to arbitrary upgrade their ArcToken's implementation
* \#50735 \[SC-High] some yield tokens will be stuck in contract due to incorrect 'lastProcessedIndex' calculation
* \#51754 \[SC-High] Double yield distribution via token transfers between distributeYieldWithLimit() calls
* \#50450 \[SC-High] Logic error in streak validation causes legitimate jackpot wins to be denied, violating reward contract expectations
* \#50943 \[SC-High] Any malicious token creator can upgrade the Arc Token implementation granting themselves UPGRADER\_ROLE
* \#51558 \[SC-High] ArcToken holder can receive yield twice from `distributeYieldWithLimit`
* \#52955 \[SC-High] A commission rate checkpoint is not created when adding a validator, despite the commission rate being set leading to loss of validator commission.
* \#50860 \[SC-High] Logic Error in Jackpot Eligibility Check Leads to Systematic Theft of User Rewards
* \#52286 \[SC-High] Off-by-One Error in Jackpot Eligibility Check Leads to Denial of Legitimate Rewards
* \#51456 \[SC-High] Token creator can revoke the UPGRADER role from the factory in order to avoid upgrades
* \#52371 \[SC-High] `distributeYieldWithLimit` is vulnerable to inter-batch `balance and holders array` mutations
* \#51589 \[SC-High] TokenCreator retains upgrade rights – Fix remains insufficient - Finding #01: Immunefi Report
* \#53061 \[SC-High] Asymmetric rounding in commission (ceil for users, floor for validators) enables per-segment rounding loss; validators can amplify via frequent commission checkpoints.
* \#49616 \[SC-High] User can steal Rewards
* \#52165 \[SC-High] user can't claim reward ERC20 tokens since rewards transfer will revert
* \#52218 \[SC-High] Creator Retains DEFAULT\_ADMIN\_ROLE, Allowing Bypass of Upgrade Restrictions
* \#52499 \[SC-High] ArcToken Factory's admin cannot upgrade an ArcToken
* \#49731 \[SC-High] Theft on Re-Added Tokens
* \#52833 \[SC-High] bypass the fix of immunefi audit IMM-CRIT-01 ：Token Creator Can Upgrade ArcToken Implementation
* \#51479 \[SC-High] Inaccurate Reward Calculation Post-Validator Slashing Due to Premature Timestamp Update on Token Removal
* \#52983 \[SC-High] Validator will loose commission for the tokens which are removed from the reward tokens but they still have commission left to be claimed.
* \#52527 \[SC-High] The validator admin might claim less commission token when `ValidatorFacet.requestCommissionClaim` is called.
* \#50350 \[SC-High] StakingFacet: stakeOnBehalf allows to prevent withdraws
* \#53001 \[SC-High] Yield tokens become stuck in ArcTokenPurchase contract when distributing yield during active sales
* \#52803 \[SC-High] \_canRecoverFromCooldown is inconsistent when slash and cooldown maturity occur in the same block
* \#52464 \[SC-High] Commission rounding mismatch under payment bug
* \#51526 \[SC-High] Yield token will be locked in ArcToken.sol if the `lastHolder` is not allowed to receive yield
* \#52390 \[SC-High] `_validateIsToken(...)` blocks validators from claiming earned rewards from removed tokens.
* \#49939 \[SC-High] Initial timestamp mismatch might lead to users being able to spin twice in the same day
* \#50490 \[SC-High] User loses reward tokens during validator-user relationship clearing
* \#53051 \[SC-High] Unconsented stakeOnBehalf enables third-party gas-griefing DoS by bloating userValidators, breaking withdraw/claimAll
* \#53025 \[SC-High] Commission on removed tokens is unclaimable
* \#53028 \[SC-High] There is an Asymmetric Rounding issue that is can cause a Theft of Unclaimed Yield in Reward or Commission Accounting
* \#50527 \[SC-High] Attacker can steal yield during batch distribution
* \#51051 \[SC-High] Inactive Validator Reward Accrual Bypass
* \#51992 \[SC-High] Dust Accumulation in ArcToken during Yield Distribution.
* \#52865 \[SC-High] Inconsistency in how stake cooldown is handled due to off by one error
* \#52931 \[SC-High] Validators can not claim their commissions after the reward token removal.
* \#52798 \[SC-High] Integer Division Remainder Loss in Batched Yield Distribution Causes Permanent Fund Lock
* \#52995 \[SC-High] Validators lose access to historical reward tokens when tokens are removed
* \#52409 \[SC-High] Asymmetric commission rounding creates systematic accounting drift
* \#51878 \[SC-High] Timing Misalignment Between Campaign Days and Calendar Days Allows Double Spinning on High-Probability Jackpot Days
* \#49700 \[SC-High] Validator Commission can be Blocked
* \#52424 \[SC-High] There is a Retroactive Commission Miscalculation in PlumeRewardLogic
* \#52961 \[SC-High] Theft of yield from the distributor.
* \#52254 \[SC-High] ArcToken theft beyond unclaimed yield during distribution
* \#53018 \[SC-High] Owed rewards could be lost for some users for periods before slashing time due to incorrect logic.
* \#52517 \[SC-High] Missing Point-in-Time Snapshot in Batched Yield Distribution Enables Double-Claims and Permanent Fund Lock
* \#53016 \[SC-High] ArcTokenPurchase doesn't allow RWA-token owners to recover accrued yield from stored ArcTokens waiting for sale.
* \#51041 \[SC-High] Streak‑Count Misuse in Jackpot Eligibility Allows Theft of User Funds
* \#51116 \[SC-High] Batching yield distribution allows claiming unfair share of the yield
* \#50483 \[SC-High] Final seconds spin requestors of `last week of campaign` will lose jackpots
* \#51999 \[SC-High] Logical Flaw in Validator Reactivation and addRewardToken Allows Claiming Rewards for Validators in Inactive Periods
* \#49673 \[SC-High] Batched Distribution (distributeYieldWithLimit) is vulnerable to double yield claiming attack
* \#52996 \[SC-High] Users can claim rewards for newly added reward tokens even when the validator they staked for was inactive during some time interval.
* \#50252 \[SC-High] Rounding excess yield tokens become permanently stuck when last holder is yield-restricted
* \#52285 \[SC-High] Incorrect Dust Handling in Yield Distribution Leads to Permanent Fund Lock
* \#50951 \[SC-High] Inconsistent streak count usage between jackpot and raffle ticket calculations
* \#50787 \[SC-High] Residual-Yield Bug Locks Tokens Permanently in distributeYield
* \#52576 \[SC-High] Flaw in Raffle::determineReward in Jackpot Prize Calculation after week 12
* \#52667 \[SC-High] commission is not added at point of adding validator hence stakers that stake before the first checkpoint would always use the current commission
* \#50347 \[SC-High] Commission for a validator cannot be claimed when token is removed
* \#51961 \[SC-High] Attackers can deny commission rewards to validators by repeatedly calling forceSettleValidatorCommission()
* \#52770 \[SC-High] Unbounded Gas Consumption via stakeOnBehalf Manipulation
* \#50412 \[SC-High] Illegitimate Reward Claim After Unstake Due to Overlapping Reward Rate Checkpoints
* \#51414 \[SC-High] Attacker can drain yield by transferring tokens to other address in yield batch distributions
* \#52460 \[SC-High] Add RewadToken and SetRewardRate updates the checkpoint of Inactive validators .
* \#52676 \[SC-High] reward rates being set when there is an inactive validator would enable stakers to steal rewards because of the inconsistency in state
* \#52847 \[SC-High] No function to recover the remained yield by distributeYieldWithLimit
* \#51133 \[SC-High] Streak Check Uses Outdated Value in Jackpot Eligibility results in user getting nothing instead of Jackpot
* \#52278 \[SC-High] Incorrect Streak Check in Jackpot Eligibility Leads to Unfair Reward Denial
* \#51905 \[SC-High] Validator commission burn on slashed validator reward path
* \#50167 \[SC-High] Retroactive reward drain via incomplete reward debt reset
* \#50924 \[SC-High] Validators are not able to claim their accrued commission when the reward token is removed.
* \#52104 \[SC-High] Removed reward tokens block validator commission claims
* \#50409 \[SC-High] Validator will lose comission
* \#51987 \[SC-High] Validators will be able to steal more commission from users that isn't the commission to be charged
* \#52572 \[SC-High] A legitimate arc token holder can be denied his yield.
* \#52680 \[SC-High] holders length changing when distributing limit with limit could lead to case where new holders unfairly claim yield and yield is permanently frozen
* \#53077 \[SC-High] Permanent Fund Lock Due to Flawed Remainder Logic in distributeYield
* \#52449 \[SC-High] Broken Streaks Still Pass Jackpot Eligibility in Spin Contract
* \#52458 \[SC-High] In ArcToken::distributeYieldWithLimit() the distribution without snapshot allows more claims from same holder
* \#52061 \[SC-High] Re-adding reward tokens causes userValidatorRewardPerTokenPaid to be uninitialized for users who staked during token removal, allowing them to claim excessive historical rewards
* \#52986 \[SC-High] Jackpot check uses previous `streakCount` instead of current computed streak, denying jackpot on first eligible day
* \#52601 \[SC-High] In Spin::handleRandomness() jackpot eligibility uses outdated streakCount instead of updated streak
* \#52736 \[SC-High] Restaking rewards will revert when users have to catch up with segments
* \#52500 \[SC-High] Missing Commission Checkpoint Initialization Leads to Retroactive Commission Theft of User Rewards
* \#51324 \[SC-High] Rounding in commission accounting burns delegator rewards
* \#52787 \[SC-High] Batched yield distribution rounding in ArcToken permanently freezes unclaimed funds and misreports payouts
* \#51653 \[SC-High] Permanent loss of staker rewards after slashing when validator records are cleared
* \#53039 \[SC-High] Rewards and commissions accrued in the interval before a slash might be lost
* \#52513 \[SC-High] `ValidatorFacet.addValidator` lacks of calling `PlumeRewardLogic.createCommissionRateCheckpoint`
* \#51033 \[SC-High] Off-by-one streak check lets jackpot spins be rejected one day early
* \#51197 \[SC-High] Arc Token owner can take upgrader role for themselves lockout the factory and upgrade the contract without the knowledge of the factory
* \#53043 \[SC-High] handleRandomness doesn't properly account for current streak which could result in the User spinning losing a Jackpot
* \#51060 \[SC-High] PlumeRewardLogic: Improper update of "validatorLastUpdateTimes" can lead to frozen assets
* \#52973 \[SC-High] Anyone can update the last update time of the slashed validator which leads to loss of rewards for the stakers
* \#52780 \[SC-High] Timestamp Manipulation in forceSettleValidatorCommission Leads to Permanent Loss of Staker Rewards
* \#52433 \[SC-High] Permanent loss of user rewards due to improper token removal after validator slashing
* \#52889 \[SC-High] Inactive validators accrue rewards for new tokens
* \#52560 \[SC-High] Incorrect current streak used when calculating whether the jackpot should be awarded or not
* \#50796 \[SC-High] Jackpot eligibility uses stale streak
* \#51090 \[SC-High] malicious user can steal yields when `ArcToken.distributeYieldWithLimit` is used.
* \#52573 \[SC-High] Unconsented `stakeOnBehalf` enables **unbounded gas consumption** via `userValidators[]` growth, causing DoS at scale in `claimAll()` / `withdraw()`
* \#50519 \[SC-High] RewardsFacet: Reintroducing an old reward token will result in wrong accounting, leading to theft of yield
* \#51551 \[SC-High] New rewards tokens will distribute yield to inactive validators
* \#50560 \[SC-High] Inconsistent Commission Rounding Traps User/Validator Funds
* \#52127 \[SC-High] Permanent rewards loss via admin slashing cleanup
* \#51505 \[SC-High] ArcToken creator can still upgrade ArcToken outside of the factory after IMM-CRIT-01 was fixed
* \#51124 \[SC-High] Validator would loss commission fee if the rewards token are removed
* \#52849 \[SC-High] Claimers who claim after (slash/inactive + updateRewardPerTokenForValidator which advances `validatorLastUpdateTimes to be more than slashTimestamp`) will lose rewards for a segment
* \#52956 \[SC-High] State Inconsistency in Batched Yield Distribution Leads to Direct Theft of User Funds and Protocol Insolvency
* \#51172 \[SC-High] Users lose their accrued rewards when the protocol removes a reward token after the user's delegated validator has been slashed.
* \#51941 \[SC-High] Token creator can revoke factory's upgrade capability, permanently blocking upgrades
* \#49710 \[SC-High] Cross-batch state manipulation in yield distribution allows double-dipping of yield funds
* \#50571 \[SC-High] Yield Distribution Meltdown ArcToken's Batch Processing Vulnerability Enables 100% Yield Over Distribution
* \#51866 \[SC-High] Stale Streak Value Used in Jackpot Eligibility Check Causes Denial of Legitimate Jackpot Winners
* \#49787 \[SC-High] Batched Yield Distribution Doesn't Account For Transfers/Purchases Between Batches
* \#52945 \[SC-High] Commission Calculation Rounding Asymmetry Leads to Theft of Unclaimed Yield
* \#51218 \[SC-High] Oracle callback timing vulnerability causes jackpot prize loss
* \#50275 \[SC-High] Eligible user loses Jackpot
* \#51530 \[SC-High] Validators can not Claim Pending Accrued Commission when Reward tokens have been removed from the isRewardToken mapping
* \#51658 \[SC-High] Yield distribution in batches let the same tokens collect rewards in multiple batches, stealing yield from other users
* \#52347 \[SC-High] Improper handling of yield distribution state in distributeYieldWithLimit() leads to revert, freezing users' yield
* \#52711 \[SC-High] In ValidatorFacet, validator cannot claims commissions of removed tokens
* \#52444 \[SC-High] `getMaxNumberOfTokens` returns misleading supply when sales are disabled
* \#50425 \[SC-High] Active non-slashed validators cannot claim rewards when a reward token is disabled
* \#53072 \[SC-High] Ceil-vs-Floor Rounding Mismatch Causes Systematic Underpayment and Unclaimed Yield Leakage
* \#51369 \[SC-High] Unbounded iteration gas‑dos in `_validateTokenForClaim`
* \#51994 \[SC-High] Permanent Loss of Validator Commission Upon Reward Token Removal
* \#50433 \[SC-High] Validator List Griefing: Unrestricted stakeOnBehalf allows User Asset freeze permanently
* \#51813 \[SC-High] Malicious User Can Grief Victims by Staking Them Across Many Validators Leading to Fund Freezing
* \#51452 \[SC-High] stakeOnBehalf() function enables out-of-gas DoS
* \#51896 \[SC-High] Precision Loss in distributeYieldWithLimit Leads to Permanent Locking of Yield Tokens
* \#52944 \[SC-High] The `requestCommisionClaim` function can only claim commission on tokens that are currently reward tokens
* \#50507 \[SC-High] Non atomic yield distribution may lead to theft of yield
* \#51860 \[SC-High] Missing access control in stakeOnBehalf lets anyone bloat another user’s validator list, leading to permanent fund lock via gas-exhaustion DoS
* \#53047 \[SC-High] The jackpot eligibility check uses stale storage data instead of the freshly calculated streak.
* \#52943 \[SC-High] Users can accrue rewards even for periods of validator inactivity
* \#51728 \[SC-High] Users can claim rewards for inactive validator periods due to incorrect checkpoint accrual.
* \#51842 \[SC-High] Unclaimed Staker Rewards Lost When Admin Clears Validator Records Without checking Pending Rewards
* \#52439 \[SC-High] Dust Accumulation in Batched Yield Payouts Leaves Tokens Stranded
* \#51211 \[SC-High] `TellerWithMultiAssetSupportPredicateProxy` lacks withdraw function preventing users from redeeming assets
* \#53070 \[SC-High] Validator Commission Update During Max Allowed Commission Change Causes Incorrect Reward Calculations
* \#52845 \[SC-High] distributeYieldWithLimit Lacks Snapshot Between Batches, Allowing State Changes to Break Distribution and Lock Yield
* \#50916 \[SC-High] Token Creators Can Bypass Factory `Upgrade Controls` via wrong code implementation of `DEFAULT_ADMIN_ROLE` in ArcTokenFactory.sol.
* \#50713 \[SC-High] Deployer’s DEFAULT\_ADMIN\_ROLE Enables Self-Grant of UPGRADER\_ROLE, Bypassing Implementation Whitelist
* \#52649 \[SC-High] Token Creator Can Seize Upgrade Control, Bypassing Factory Whitelist and Enabling Theft of Funds
* \#49723 \[SC-High] Commission‑rounding mismatch in PlumeRewardLogic.sol permanently locks part of every commission
* \#52084 \[SC-High] Unstaking Before Reward Token Removal Leads to Incorrect Reward Accrual on Re-addition
* \#50246 \[SC-High] distributeYieldWithLimit() does not handle rounding errors causing yield to be permanently stuck
* \#52588 \[SC-High] Retroactive reward accrual for newly added tokens when validator was inactive
* \#52198 \[SC-High] Balance Manipulation Between Batches Leading to Inflated Payout and DoS

</details>

<details>

<summary>Medium</summary>

* \#50428 \[SC-Medium] Reverting on callback increases chances of winning
* \#52841 \[SC-Medium] Token admin can DOS admin to not let admin change purchase token
* \#51680 \[SC-Medium] ValidatorFacet: Inactivating a validator will result in frozen commisions
* \#51684 \[SC-Medium] Unbounded Gas Consumption in removeStakerFromAllValidators Leads to Denial-of-Service, Preventing Users with Large Validator Counts from Removing Associations and Potentially Lock...
* \#51887 \[SC-Medium] safeApprove will cause revert of USDT and similar Erc20 token
* \#51666 \[SC-Medium] Inactive Validators Blocked from Claiming Accrued Commission
* \#52620 \[SC-Medium] permanently DoS to ArcTokenPurchase contract
* \#51801 \[SC-Medium] Supra callback allows for theft of gas
* \#50059 \[SC-Medium] ETH Refund in depositAndBridge functions enables DoS
* \#51917 \[SC-Medium] Possible gas griefing on the `handleRandomness(...)` function with a fallback that executes other transactions.
* \#51198 \[SC-Medium] BoringVault cannot receive any deposit due to faulty logic related to the `shareLockPeriod`
* \#51988 \[SC-Medium] `PlumeRewardLogic.calculateRewardsWithCheckpointsView` lacking of checking if the validator is inactive but not slashed.
* \#52719 \[SC-Medium] Inactive validators blocked from claiming commissions despite passed timelock
* \#50340 \[SC-Medium] Any ArcToken admin can block the setting/update of the purchase token indefinitely.
* \#51476 \[SC-Medium] Validators can't claim their accrued commission if they are made inactive
* \#52203 \[SC-Medium] Griefing Attack on ArcTokenPurchase.setPurchaseToken() Function via Front-Running
* \#52919 \[SC-Medium] `_safeTransferPlume` can lead to gas griefing attack
* \#53048 \[SC-Medium] Approval logic can break on non-standard ERC-20s (USDT-style) and leave allowances loose
* \#51909 \[SC-Medium] Inconsistent Commission Claim Logic Denies Legitimate Claims for Inactive Validators
* \#52732 \[SC-Medium] Permanent DoS of Purchase Token Change
* \#51899 \[SC-Medium] Partial Distribution of yield will fail if the totalEfficentive supply increases.
* \#52012 \[SC-Medium] Shares lock Applied to Proxy Causes Deposit DoS When shareLockPeriod > 0
* \#49732 \[SC-Medium] Malicious Token Admin Can Permanently Block setPurchaseToken
* \#49963 \[SC-Medium] Anyone can create an ArcToken and block the setPurchaseToken() function
* \#52290 \[SC-Medium] `deposit` function in **TellerWithMultiAssetSupportPredicateProxy** is completely broken due to wrong share lock
* \#52341 \[SC-Medium] `TellerWithMultiAssetSupportPredicateProxy` ShareLock Incompatibility - Unable to Operate Due to Token Access Restrictions
* \#51043 \[SC-Medium] Core deposit and depositAndBridge Functionality in `TellerWithMultiAssetSupportPredicateProxy` is Non-functional Due to Flawed shareLockPeriod Logic
* \#51613 \[SC-Medium] Yield tokens can be stuck in ArcTokenPurchase , PlumeStakingRewardTreasury or other defi protocols when distributeYield is called.
* \#52075 \[SC-Medium] ArcTokenPurchase Contract is a Token Holder and may be Yield Recipient.
* \#49817 \[SC-Medium] Inactive validators are prevented to claim to eligible commission rewards
* \#52484 \[SC-Medium] Permanent deposit DoS with USDT-like tokens due to approve-from-nonzero pattern in 1inch/OKX paths
* \#52034 \[SC-Medium] Inaccurate Reward Calculation Due to Fallback to Next Checkpoint on Missing Timestamp
* \#50194 \[SC-Medium] `DexAggregatorWrapperWithPredicateProxy` can be stucked by any user
* \#52988 \[SC-Medium] deposit function DOS
* \#53035 \[SC-Medium] Share Lock Applied to Wrapper Instead of End User Breaks Transfers or Bypasses Lock
* \#52925 \[SC-Medium] USDT-like approval hygiene can block subsequent operations after partial fill leaves non-zero allowance
* \#52031 \[SC-Medium] Insufficient Access Control in Token Sales Management Leads to Permanent Griefing Attack
* \#52507 \[SC-Medium] Insufficient Fix: IMMUNEFI REPORT - H1 #35
* \#52690 \[SC-Medium] DoS Of Smart Contracts On Bridging Functions
* \#51180 \[SC-Medium] Function is vulnerable to gas griefing
* \#50397 \[SC-Medium] Inefficient Array Iteration in getPrizeDetails function leads to high gas costs.
* \#52179 \[SC-Medium] Validator Commission Becomes Permanently Locked When Deactivated
* \#51547 \[SC-Medium] Approval Race Condition with safeApprove Leads to Transaction Reverts
* \#50937 \[SC-Medium] Non-zero approve pattern causes permanent freeze of token deposits (e.g. USDT) due to ERC20 incompatibility
* \#51982 \[SC-Medium] Token Approval Issue with Non-Standard ERC20 Tokens Leads to Contract Dysfunction
* \#52397 \[SC-Medium] Repeated approve without zero-reset can revert on nonstandard ERC20s, blocking deposits
* \#52026 \[SC-Medium] claimAll could revert because of unbounded gas consumptions
* \#52974 \[SC-Medium] When the approval to the `okxApprover` is not fully spent the deposit function will be blocked
* \#49705 \[SC-Medium] Two vectors for unbounded Gas Consumption due to the normal `Raffle` operations
* \#51777 \[SC-Medium] Denial of service on depositAndBridge(...) function for shareLockPeriod is non zero
* \#53021 \[SC-Medium] Deposit-and-Bridge Workflow Bricked by Immediate Share Lock: Users Cannot Bridge Immediately After Deposit
* \#52982 \[SC-Medium] Non-standard ERC20 approvals (USDT-like) cause repeat-call failures after partial fills
* \#52726 \[SC-Medium] Non-zero approvals after transaction could be used to DoS USDT deposits
* \#52823 \[SC-Medium] Permanent Denial of Service on setPurchaseToken by Malicious Token Creator

</details>

<details>

<summary>Low</summary>

* \#51519 \[SC-Low] `_unstake` does not validate users remaing stake
* \#52843 \[SC-Low] The zero address cannot be whitelisted, which means during restrictions minting and burning cannot work
* \#51264 \[SC-Low] User may need admin to help claim their prize
* \#52129 \[SC-Low] `previewYieldDistribution` Reverts Instead of Returning Zero When No Tokens Are in Circulation
* \#49915 \[SC-Low] Misleading Event Emission in `createWhitelistRestrictions` Function in `RestrictionsFactory` contract
* \#51316 \[SC-Low] Flawed `claimPrize` Logic Allows Invalid or Blocked Prize Claims
* \#52796 \[SC-Low] Whitelist Restriction in ArcToken Blocks All Minting and Burning
* \#52327 \[SC-Low] Unfair Yield Distribution Due to Last Holder Bias
* \#51596 \[SC-Low] Unsafe uint256 to uint8 Downcast Causes Integer Overflow Leading to Unauthorized Jackpot Payouts After Week 255
* \#52414 \[SC-Low] Slashed-path reward accumulation ignores mid-interval rate changes
* \#52915 \[SC-Low] Yield are transferred before eligibility check potentially leading to freezing of funds
* \#50721 \[SC-Low] Winners cannot claim Prizes until all winners have been drawn in `Raffle::claimPrize`
* \#50399 \[SC-Low] Broken access control in particular contract functions due lack of pause/unpause functionality
* \#51979 \[SC-Low] `getAccruedCommission` returns outdated accrued commission
* \#52710 \[SC-Low] Mint/Burn are blocked when whitelist restrictions are enabled
* \#50082 \[SC-Low] Protocol lets validators operate with dust amounts, making attacks risk-free
* \#50195 \[SC-Low] Unfair Yield Distribution Due to Remainder Allocation to Last Holder
* \#52393 \[SC-Low] Burns blocked by both-sides whitelist with zero-address exclusion when restrictions are enabled
* \#52422 \[SC-Low] Using the current time in getEffectiveRewardRateAt will result in incorrect reward calculation for an entire duration of a time segment
* \#52446 \[SC-Low] Withdrawing Unsold Tokens Desynchronizes Sale Accounting
* \#51816 \[SC-Low] Yield distribution can be front-run to steal rounding remainder as last holder
* \#50839 \[SC-Low] Last Holder Always Gets More Yield
* \#51836 \[SC-Low] Contract Cannot Be Paused Despite Inheriting Pausable
* \#53063 \[SC-Low] `maxValidatorPercentage` can be used to DOS protocol staking
* \#51320 \[SC-Low] Malicious teller parameter allow event data manipulation
* \#53038 \[SC-Low] distributeYield can be frontrun to sandwich rewards. We can force ourselves to be the last holder and get unfairly big bonuses
* \#52277 \[SC-Low] Race Condition in Streak Calculation Leads to Unfair Streak Reset for Users Spinning Near UTC Day Change
* \#51146 \[SC-Low] getMaxNumberOfTokens returns wrong max number of tokens available to buy
* \#52905 \[SC-Low] Incorrect Reward Reporting in View Functions (earned and getClaimableReward) Leads to Zero Balance Display for Active Stakers
* \#51510 \[SC-Low] Bypass of `maxValidatorPercentage` allows a validator to exceed the decentralisation cap
* \#52896 \[SC-Low] “Pause” gate is present but no way to pause
* \#51850 \[SC-Low] upgradeToken(...) can not initialize an upgraded token because the `data` variable of upgradeToAndCall() is hardcoded to empty string
* \#52489 \[SC-Low] When users perform unstake operations in batches, it may cause some funds to be frozen for an additional period of time.
* \#52911 \[SC-Low] Last Holder Potential Extra Token Distribution Encourages Gaming Distribution and Race Conditions
* \#51989 \[SC-Low] Event:: RestrictionsCreated always emits msg.sender as Owner
* \#51571 \[SC-Low] Stale mapping after proxy upgrade
* \#50624 \[SC-Low] There is a Missing Emergency Pause in Predicate Proxy
* \#50977 \[SC-Low] TellerWithMultiAssetSupportPredicateProxy contract cannot be emergency paused
* \#52314 \[SC-Low] Unsold Token Withdrawal Causes Permanent Inventory Mismatch
* \#50343 \[SC-Low] Cooldown reset vulnerability
* \#52113 \[SC-Low] `StakingFacet.unstake(uint16 validatorId, uint256 amount)` can be abused to bypass `$.minStakeAmount`
* \#50694 \[SC-Low] Spins occuring close to midnight lead to users streaks being unfairly broken due to VRF callback delay
* \#51241 \[SC-Low] Cooldown shortening logic allows early withdrawal of locked stake
* \#50040 \[SC-Low] Missing Pause Controls, ETH Refund Flaws, and Miscalculated Shares Enable Fund Loss and Protocol Inconsistency in depositAndBridge
* \#51567 \[SC-Low] Contract Cannot Be Paused: Missing Public pause and unpause Functions
* \#51034 \[SC-Low] Sales information is lost when enabling token
* \#52998 \[SC-Low] Minor delays from oracle can unfairly reset users streak
* \#51129 \[SC-Low] BoringVault proxies do not support smart contract wallets
* \#50783 \[SC-Low] Validator percentage cap does not work properly
* \#52339 \[SC-Low] Loss of Daily Streak and Jackpot Eligibility Due to Supra Generator Callback Delay and On-Callback Time Usage in `Spin.sol`
* \#53015 \[SC-Low] Raffle Does Not Invalidate Used Tickets, Breaking Fairness
* \#50922 \[SC-Low] Unstaking partially will extend the cooldown time for previously unstaked amount too
* \#50504 \[SC-Low] totalAmountClaimable() reverts when called with a removed reward token
* \#51132 \[SC-Low] `TellerWithMultiAssetSupportPredicateProxy` cannot be paused/unpaused
* \#50889 \[SC-Low] ArcTokenPurchase::withdrawUnsoldArcTokens() Fails to Reduce totalAmountForSale, Leaving Availability Counters Wrong
* \#52519 \[SC-Low] Missing Eligibility Check Before Fund Transfer in distributeYield Leads to Permanent Loss of Yield Tokens
* \#50415 \[SC-Low] getMaxNumberOfTokens() returns wrong value when ArcTokens are withdrawn
* \#51943 \[SC-Low] TellerWithMultiAssetSupportPredicateProxy is meant to be pausable but cannot be paused
* \#49715 \[SC-Low] Restriction of token burning on whitelisted addresses
* \#50225 \[SC-Low] User can bypass `minStakeAmount` checking.
* \#52979 \[SC-Low] WhitelistRestrictions unintentionally disables mint and burn when transfers are restricted
* \#51122 \[SC-Low] `ArcTokenPurchase#enableToken` can reset the `amountSold` to 0
* \#51776 \[SC-Low] Streak System Breaks Despite Timely User Action Due to Delayed Supra Oracle Callback
* \#52901 \[SC-Low] Wrapped week index can mis-price jackpot table after long uptime
* \#49647 \[SC-Low] Pausable Functions are Not Exposed
* \#52202 \[SC-Low] Failure to Invalidate Winning Tickets Allows Multiple Wins from Single Entry
* \#52990 \[SC-Low] `uint8` truncation and missing cap on week index can return wrong/zero jackpot amounts (Low — Contract fails to deliver promised returns)
* \#51138 \[SC-Low] Winners cannot claim until all winners are drawn
* \#49623 \[SC-Low] Unstaking allows going below minimum stake
* \#50487 \[SC-Low] Cross-Campaign Jackpot Denial Due to State Pollution
* \#52891 \[SC-Low] Staking and unstaking immediately an amount little less than the original staked amount leaves dust stake amounts in the system.
* \#51951 \[SC-Low] A Global Blocking Check in claimPrize Prevents Individual Winner Claims Until All Winners Are Drawn
* \#49941 \[SC-Low] Permanent Freezing of Yield Tokens Due to Flawed Check in Distribution Logic
* \#50404 \[SC-Low] User withdraw time can be delayed much longer if unstake again before the `cooldownEndTime`
* \#51910 \[SC-Low] Inconsistent yield token transfer logic causes permanent loss of yield in distributeYield()
* \#51391 \[SC-Low] enableToken Function Overwrites amountSold to Zero Causing Permanent Loss of Sales History
* \#50022 \[SC-Low] Missing admin `Pause/Unpause` functions in `TellerWithMultiAssetSupportPredicateProxy` contract
* \#52186 \[SC-Low] Incorrect reward calculation for slashed validators due to single segment time handling
* \#52027 \[SC-Low] WhitelistRestrictions.sol: Mint & Burn Operations Blocked When Transfers Disabled
* \#53059 \[SC-Low] Reward rate checkpoints are used but are never set
* \#51286 \[SC-Low] Event `RestrictionsCreated` uses wrong owner
* \#51771 \[SC-Low] Unsafe downcast of uint256 to uint8 will lead to Silent overflow
* \#52436 \[SC-Low] getAccruedCommission() could return an inaccurate value
* \#51746 \[SC-Low] depositAndBridge(...) function of TellerWithMultiAssetSupportPredicateProxy.sol can not be paused
* \#51980 \[SC-Low] Unstake cooldown period is mistakenly reset on each claim, resulting in temporary frozen funds
* \#52669 \[SC-Low] Token minting is blocked for whitelisted addresses when transfersAllowed is false
* \#52041 \[SC-Low] In ArcToken Attacker Can Reposition to Last Holder and Capture Entire Yield Remainder
* \#52706 \[SC-Low] Multi-Quantity Prize Claims Revert Until All Winners Are Drawn, Freezing Early Winners
* \#51882 \[SC-Low] Unnecessary Claiming Restriction in Raffle Contract Prevents Winners from Claiming Prizes Until All Winners Are Drawn
* \#51969 \[SC-Low] Yield tokens permanently stuck when no eligible holders exist
* \#51260 \[SC-Low] Minstake are not enforced after Unstake which creates a DOS for new stakers
* \#52675 \[SC-Low] Minimum Stake Bypass via Partial Unstaking Creates Dust Stakes
* \#50551 \[SC-Low] Staked dust positions are not properly prevented
* \#51525 \[SC-Low] Unfair Yield Distribution to Last Holder Due to Flawed Dust Handling
* \#51070 \[SC-Low] Winning Raffle Ticket can be re-used to maintain unfair advantage over other players in `Raffle`
* \#51201 \[SC-Low] Contracts Without Payable Entry Points cannot withdraw nor claim rewards
* \#51929 \[SC-Low] Deactivating `isTransferAllowed` indirectly DOSes minting/burning functionality
* \#49698 \[SC-Low] Coordinated Validator Attack Delays Slashing and Enables Commission Theft
* \#50436 \[SC-Low] `voteToSlashValidator` prevents malicious inactive validators to be slashed.
* \#53056 \[SC-Low] Native-withdraw to msg.sender only → non-payable contract stakers cannot withdraw (permanent funds lock)
* \#51970 \[SC-Low] Spin streak computation relies on oracle callback time; any third-party delay can reset the user’s streak and block jackpot eligibility.
* \#52130 \[SC-Low] Validator percentage cap bypass vulnerability
* \#52750 \[SC-Low] Percentage Limit Bypass via Unstaking from Other Validators
* \#52810 \[SC-Low] Batch unstake merged cooldowns leading to full fund slashing
* \#50963 \[SC-Low] Unexpected config applied on the Spin
* \#51501 \[SC-Low] It is not possible to update `l1accountEvmAddress` to the `address(0)`
* \#52794 \[SC-Low] remainingForSale not updated after withdrawUnsoldArcTokens will cause following buy revert
* \#52870 \[SC-Low] Cooldown Extension Logic May Lead to Locked Funds
* \#50745 \[SC-Low] Single Cooldown Entry Design Causes Timer Reset on Multiple Unstakes Leading to Extended Lock Periods
* \#51296 \[SC-Low] ArcTokenPurchase Withdrawal Breaks View Functions
* \#53069 \[SC-Low] Dynamic Cooldown Interval Changes Cause Unexpected Fund Lockup Extensions
* \#51451 \[SC-Low] Token Freezing via Whitelist Restriction Bypass
* \#51162 \[SC-Low] Missing Pause Control Implementation in TellerWithMultiAssetSupportPredicateProxy
* \#51863 \[SC-Low] Lack of Winning Ticket Removal in handleWinnerSelection Leads to Unfair Prize Distribution and Economic Exploitation
* \#50402 \[SC-Low] Single rate assumption ignores checkpoints in slashed case
* \#51502 \[SC-Low] Enabling Transfer Restrictions Permanently Blocks Minting and Burning
* \#51455 \[SC-Low] Inflated `earned()` / UI rewards when validator stake is zero due to missing `totalStaked` guard in view logic
* \#51723 \[SC-Low] Yield Tokens Can Become Permanently Stuck in Contract if No Eligible Holders Exist
* \#52976 \[SC-Low] Turning on transfer restriction permanently blocks minting and burning
* \#52948 \[SC-Low] Jackpot Reward Rejected at Exact Threshold
* \#52890 \[SC-Low] No-Recipient Yield Distribution Locks Yield Tokens on ArcToken (effTotal==0)
* \#50818 \[SC-Low] previewYieldDistribution Returns Zero Addresses When Effective Supply Is Zero
* \#52241 \[SC-Low] Unexposed Pauseable Functionality
* \#50914 \[SC-Low] Bypass of Minimum Stake Enforcement via Partial Unstake
* \#50120 \[SC-Low] ArcTokens cannot be burned or minted when transfers are restricted
* \#51276 \[SC-Low] ArcTokenPurchase: Re-enabling Active Token Sales Causes Accounting Corruption and Token Loss
* \#51412 \[SC-Low] Token admin can withdraw the token from the purchase contract making the token balance to be less than the totalAmountForSale
* \#51457 \[SC-Low] getAccruedCommission() reverts when token was removed instead of returning the accrued commission
* \#51713 \[SC-Low] Missing Minimum Stake Validation in Unstake Operations
* \#51966 \[SC-Low] `totalAmountClaimable` reverts instead of returning the claimable reward for historical tokens
* \#52119 \[SC-Low] Yield Tokens Can Become Stuck When All Current Holders Are Restricted
* \#52312 \[SC-Low] Cooldown coalescing bug: Unintended cooldown extension for prior unstakes
* \#51148 \[SC-Low] lastJackpotClaimWeek not reset between campaigns causing legitimate jackpot winners to lose rewards
* \#52589 \[SC-Low] In distribute yield function if there are no legitimate users i.e no restricted users the funds will remain stuck
* \#50493 \[SC-Low] Immutable Proxy→Implementation Mapping in RestrictionsFactory Breaks Upgrade Logic
* \#51287 \[SC-Low] Incorrect Reward Calculation for Slashed Validators When Reward Rates Change Between Updates
* \#51711 \[SC-Low] Overriding cooldown period during `unstake()` leads to unfair stake penalisation if validator is slashed
* \#51802 \[SC-Low] Temporary freeze of rewards is possible if efficientSupply == 0
* \#52457 \[SC-Low] In ArcToken: branch in effectiveTotalSupply == 0 returns misleading nextIndex

</details>

<details>

<summary>Insight</summary>

* \#50677 \[SC-Insight] Redundant code in `DexAggregatorWrapperWithPredicateProxy` impairs readability and potentially increases gas costs
* \#50628 \[SC-Insight] Incorrect update of Admin state in VRF Requests Leads to Randomness Manipulation and Jackpot Theft
* \#50393 \[SC-Insight] Unused admin state variable increases deployment and storage costs.
* \#50392 \[SC-Insight] Phantom commission burn
* \#51312 \[SC-Insight] Misleading revert
* \#51958 \[SC-Insight] Blacklisted user bricks yield distribution logic
* \#52377 \[SC-Insight] Removed tokens that have not been earned cannot be pulled from the PlumeStakingRewardTreasury.sol
* \#51918 \[SC-Insight] Redundant zero address checks for router address
* \#49708 \[SC-Insight] Yield Distribution in ArcToken does not match expected behavior
* \#52289 \[SC-Insight] In ArcToken.sol redundant holderCount > 0 checks
* \#50502 \[SC-Insight] Raffle contract fails to emit events on multiple state changes
* \#52468 \[SC-Insight] DoS in Batch Yield Distribution Due to Cross-Batch State Inconsistency
* \#49798 \[SC-Insight] Invalid Holder Set Initialization Bypasses Modular Restrictions, Corrupting Yield Distribution
* \#52628 \[SC-Insight] State-Modifying Getter in getPendingRewardForValidator Allows Gas Griefing and Unintended State Changes
* \#52837 \[SC-Insight] Gas-heavy repeated binary search increases reward-calculation gas costs
* \#50974 \[SC-Insight] Inconsistent Validation Between Reward and Jackpot Probability Thresholds
* \#49893 \[SC-Insight] `Raffle.sol` implementation logic allows direct PLUME transfers but has no withdraw locking funds permanently
* \#50580 \[SC-Insight] `ValidatorFacet` missing events on some function state changes
* \#50596 \[SC-Insight] Unnecessary variable setting
* \#50234 \[SC-Insight] Redundant Reward Update in `RewardsFacet::removeRewardToken`
* \#50470 \[SC-Insight] Inefficient Design in `distributeYieldWithLimit:;ArcToken` Creates Unnecessary Gas Consumption
* \#49835 \[SC-Insight] Dex Aggregator unused ETH loss
* \#49671 \[SC-Insight] Wrong emission in Stake
* \#50187 \[SC-Insight] YieldBlacklistRestrictions Uses Slot 0 Instead of Unstructured Storage, Risking Slot Collision
* \#51925 \[SC-Insight] Redundant Checks for Token Transfer Success
* \#51927 \[SC-Insight] Incorrect recipient check in `_update` function
* \#50931 \[SC-Insight] No partial claim may result in a loss of funds
* \#50297 \[SC-Insight] Lack of ETH Rescue Mechanism
* \#51001 \[SC-Insight] Inaccurate share calculation in emitted event for non-bridge deposits
* \#50060 \[SC-Insight] Scattered Module Processing Pattern in `ArcToken._update` Function
* \#51926 \[SC-Insight] ABI mismatch in the claimAll function leads to incorrect reward decoding and potential fund loss for external integrators
* \#50312 \[SC-Insight] Validator can steal user rewards due to a lack of cooldown when validator increases commission
* \#51288 \[SC-Insight] Validators commission can be permanently lost
* \#51228 \[SC-Insight] Missing Zero Address Check in Initialization Leads to Irrecoverable Contract Lock
* \#51100 \[SC-Insight] Gas Inefficiency in Prize Removal Logic
* \#50027 \[SC-Insight] Missing Validation of OKX Swap Output Token in function `_okxHelper()`
* \#50691 \[SC-Insight] No validator limit can lead to DoS
* \#49876 \[SC-Insight] Lack of refund on admin-canceled spin requests leads to permanent loss of funds
* \#49800 \[SC-Insight] Yield distribution could encounter an unexpected revert
* \#51707 \[SC-Insight] Gas inefficiency due to redundant \_validateValidatorExists() modifier in requestCommissionClaim()
* \#50660 \[SC-Insight] Missing event in withdrawPurchaseTokens function
* \#49868 \[SC-Insight] `Raffle.sol` does not enforce `Prize.endTimeStamp` allowing user and admin interactions with expired Prizes
* \#52303 \[SC-Insight] Incorrect Yield Distribution Event Emission
* \#50506 \[SC-Insight] `StakingFacet` missing event emission on any unstaking operations
* \#49726 \[SC-Insight] There is a redundant zero address check in the ValidatorFacet.sol that is obsolete and could never be true
* \#49668 \[SC-Insight] Validator status function emit misleading event
* \#50973 \[SC-Insight] Incorrect Parameter Type in setJackpotProbabilities
* \#50380 \[SC-Insight] Redundant Use of `allowedImplementations` Mapping in Factory Contracts (createToken and createWhitelistRestrictions in ArcTokenFactory and RestrictionsFactory respectively)
* \#49954 \[SC-Insight] `Raffle::editPrizes` lacks logic to make prizes immutable once winner selection starts or users join breaking user trust.
* \#52557 \[SC-Insight] validatorLastUpdateTimes not updated after validator slashing
* \#50887 \[SC-Insight] ArcoTokenPurchase::PurchaseMade Event Mislabels Payment Amount as “pricePaid” Instead Of Unit Price
* \#50168 \[SC-Insight] Unused and duplicated functions should be removed from RewardsFacet and StakingFacet
* \#50461 \[SC-Insight] Incorrect deposit event receiver logged in bridge functions of `DexAggregatorWrapperWithPredicateProxy.sol`
* \#51920 \[SC-Insight] Unnecessary second hand of `if` check in `calculateRewardsWithCheckpointsView`
* \#52248 \[SC-Insight] Lack of initialization check in staking allows users to stake without reward token configured, causing permanent loss of yield
* \#52444 \[SC-Insight] `getMaxNumberOfTokens` returns misleading supply when sales are disabled
* \#53071 \[SC-Insight] `_okxHelper` function incompatible with the `UNISWAP_V3_SWAP_TO_WITH_PERMIT_SELECTOR`
* \#51171 \[SC-Insight] Redundant Storage Reads and Unnecessary Checks in Reward Rate Checkpoint Logic Lead to Inefficient Gas Usage
* \#50284 \[SC-Insight] Incorrect ERC7201 Storage Implementation in Core Factory Contracts
* \#51651 \[SC-Insight] Redundant Array Access in removeStakerFromValidator
* \#51493 \[SC-Insight] Misleading View Function Documentation
* \#50675 \[SC-Insight] Re-Entrant ETH Refund Can Emit Mismatched shares in Deposit event
* \#52646 \[SC-Insight] Missing event emission after reward claim has been finalized in RewardsFacet
* \#51655 \[SC-Insight] Redundant Storage Write in addValidator Function Leads to Unnecessary Gas Costs
* \#52799 \[SC-Insight] unused storage variable
* \#50761 \[SC-Insight] Slashed Validators Not Removed from Active List, Leading to Redundant Reward Checkpoints and Wasted Gas
* \#52935 \[SC-Insight] In Raffle contract, cancel request does not really cancel the request
* \#52937 \[SC-Insight] Redundant Raffle Ticket Balance Check
* \#52918 \[SC-Insight] Redundant Check for AllWinnersDrawn Error
* \#52087 \[SC-Insight] Plume.sol#permit(...) will always revert for smart contract wallet signatures
* \#52137 \[SC-Insight] Silent Override of Non-Global Module Implementation Causes Stored State and Event Log Inconsistency
* \#51028 \[SC-Insight] Gas and Storage Inefficiency in Raffle Ticket Range Tracking
* \#49919 \[SC-Insight] Unstake function does not unstake all as mentioned in the NatSpec
* \#49932 \[SC-Insight] There are five separate but similar implementations of a binary search that can be condensed into one function
* \#49639 \[SC-Insight] Gas Inefficiency in Loop Storage Reads \_processMaturedCooldowns
* \#49738 \[SC-Insight] Active users in prize pool loose invested raffle tickets when `Raffle::removePrize()` is called.
* \#49768 \[SC-Insight] Missing input validation in `Raffle::editPrize` breaks functionality
* \#51083 \[SC-Insight] claimAll() only loops over active reward tokens and ignores historical tokens
* \#50212 \[SC-Insight] Validators without staked funds can control slashing decisions leading to protocol insolvency
* \#52221 \[SC-Insight] Hardcoded Supra subscription wallet can freeze Spin
* \#50949 \[SC-Insight] No check if raffle actually has enough funds
* \#50632 \[SC-Insight] Critical Timestamp Parsing Bug in getYear() of DateTime contract
* \#49626 \[SC-Insight] Modulo Bias in Winner Selection in Raffle
* \#51712 \[SC-Insight] Yield distribution will revert if global module doesn't implement IYieldRestrictions
* \#52960 \[SC-Insight] Incosistent withdrawable amount calculations
* \#50041 \[SC-Insight] Missing global rate fallback in `getEffectiveRewardRateAt`
* \#51738 \[SC-Insight] It's possible to enable the same token multiple times, thereby resetting the parameters
* \#51814 \[SC-Insight] `checkpoint.cumulativeIndex` returned in the `getRewardRateCheckpoint` function will be zero
* \#51159 \[SC-Insight] High Gas: Iterative Date Calculations in DateTime.sol

</details>

## Reports by Type

<details>

<summary>Smart Contract</summary>

* \#51946 \[SC-High] Commission Claims Fail for Removed Reward Tokens
* \#52964 \[SC-High] if a new reward token is added during a the period a validator is inactive, the validator will still earn rewards/commission for some of the duration in which they were inactive
* \#51519 \[SC-Low] `_unstake` does not validate users remaing stake
* \#53020 \[SC-High] There are functions which when inevitably used could result in wrongly accruing yield for inactive validators, which can make the protocol insolvent
* \#52843 \[SC-Low] The zero address cannot be whitelisted, which means during restrictions minting and burning cannot work
* \#53022 \[SC-Critical] Funds are not properly refunded to user which calls for swap on the dex aggregator
* \#51264 \[SC-Low] User may need admin to help claim their prize
* \#52129 \[SC-Low] `previewYieldDistribution` Reverts Instead of Returning Zero When No Tokens Are in Circulation
* \#50428 \[SC-Medium] Reverting on callback increases chances of winning
* \#49915 \[SC-Low] Misleading Event Emission in `createWhitelistRestrictions` Function in `RestrictionsFactory` contract
* \#52634 \[SC-High] Batch yield distribution has a mathematical flaw that enables economic manipulation
* \#52841 \[SC-Medium] Token admin can DOS admin to not let admin change purchase token
* \#51316 \[SC-Low] Flawed `claimPrize` Logic Allows Invalid or Blocked Prize Claims
* \#52796 \[SC-Low] Whitelist Restriction in ArcToken Blocks All Minting and Burning
* \#50784 \[SC-High] Any arc token creator can upgrade the implementation
* \#52327 \[SC-Low] Unfair Yield Distribution Due to Last Holder Bias
* \#51912 \[SC-High] Mismatched rounding rules in Reward Logic library results in two-fold loss of earnings
* \#51596 \[SC-Low] Unsafe uint256 to uint8 Downcast Causes Integer Overflow Leading to Unauthorized Jackpot Payouts After Week 255
* \#50822 \[SC-High] Deployer can cpgrade `ArcToken` to malicious implementation and steal all user funds
* \#52414 \[SC-Low] Slashed-path reward accumulation ignores mid-interval rate changes
* \#50477 \[SC-High] Validator loses all accrued commission when reward token is removed
* \#52915 \[SC-Low] Yield are transferred before eligibility check potentially leading to freezing of funds
* \#51680 \[SC-Medium] ValidatorFacet: Inactivating a validator will result in frozen commisions
* \#52097 \[SC-High] Malicious User can steal yield via Reordering Between Batches in `distributeYieldWithLimit`
* \#53034 \[SC-High] ArcTokenFactory doesn't properly handle role management which allows users to arbitrary upgrade their ArcToken's implementation
* \#50735 \[SC-High] some yield tokens will be stuck in contract due to incorrect 'lastProcessedIndex' calculation
* \#50721 \[SC-Low] Winners cannot claim Prizes until all winners have been drawn in `Raffle::claimPrize`
* \#50399 \[SC-Low] Broken access control in particular contract functions due lack of pause/unpause functionality
* \#51684 \[SC-Medium] Unbounded Gas Consumption in removeStakerFromAllValidators Leads to Denial-of-Service, Preventing Users with Large Validator Counts from Removing Associations and Potentially Lock...
* \#51754 \[SC-High] Double yield distribution via token transfers between distributeYieldWithLimit() calls
* \#51979 \[SC-Low] `getAccruedCommission` returns outdated accrued commission
* \#52710 \[SC-Low] Mint/Burn are blocked when whitelist restrictions are enabled
* \#49863 \[SC-Critical] Dex Aggregator ERC20 token theft
* \#50082 \[SC-Low] Protocol lets validators operate with dust amounts, making attacks risk-free
* \#50450 \[SC-High] Logic error in streak validation causes legitimate jackpot wins to be denied, violating reward contract expectations
* \#50943 \[SC-High] Any malicious token creator can upgrade the Arc Token implementation granting themselves UPGRADER\_ROLE
* \#51887 \[SC-Medium] safeApprove will cause revert of USDT and similar Erc20 token
* \#51558 \[SC-High] ArcToken holder can receive yield twice from `distributeYieldWithLimit`
* \#52955 \[SC-High] A commission rate checkpoint is not created when adding a validator, despite the commission rate being set leading to loss of validator commission.
* \#50860 \[SC-High] Logic Error in Jackpot Eligibility Check Leads to Systematic Theft of User Rewards
* \#50195 \[SC-Low] Unfair Yield Distribution Due to Remainder Allocation to Last Holder
* \#52286 \[SC-High] Off-by-One Error in Jackpot Eligibility Check Leads to Denial of Legitimate Rewards
* \#51456 \[SC-High] Token creator can revoke the UPGRADER role from the factory in order to avoid upgrades
* \#52371 \[SC-High] `distributeYieldWithLimit` is vulnerable to inter-batch `balance and holders array` mutations
* \#52393 \[SC-Low] Burns blocked by both-sides whitelist with zero-address exclusion when restrictions are enabled
* \#51589 \[SC-High] TokenCreator retains upgrade rights – Fix remains insufficient - Finding #01: Immunefi Report
* \#52422 \[SC-Low] Using the current time in getEffectiveRewardRateAt will result in incorrect reward calculation for an entire duration of a time segment
* \#53061 \[SC-High] Asymmetric rounding in commission (ceil for users, floor for validators) enables per-segment rounding loss; validators can amplify via frequent commission checkpoints.
* \#50677 \[SC-Insight] Redundant code in `DexAggregatorWrapperWithPredicateProxy` impairs readability and potentially increases gas costs
* \#49616 \[SC-High] User can steal Rewards
* \#51666 \[SC-Medium] Inactive Validators Blocked from Claiming Accrued Commission
* \#52446 \[SC-Low] Withdrawing Unsold Tokens Desynchronizes Sale Accounting
* \#52165 \[SC-High] user can't claim reward ERC20 tokens since rewards transfer will revert
* \#52218 \[SC-High] Creator Retains DEFAULT\_ADMIN\_ROLE, Allowing Bypass of Upgrade Restrictions
* \#51816 \[SC-Low] Yield distribution can be front-run to steal rounding remainder as last holder
* \#52499 \[SC-High] ArcToken Factory's admin cannot upgrade an ArcToken
* \#49731 \[SC-High] Theft on Re-Added Tokens
* \#52620 \[SC-Medium] permanently DoS to ArcTokenPurchase contract
* \#50839 \[SC-Low] Last Holder Always Gets More Yield
* \#51801 \[SC-Medium] Supra callback allows for theft of gas
* \#51836 \[SC-Low] Contract Cannot Be Paused Despite Inheriting Pausable
* \#52833 \[SC-High] bypass the fix of immunefi audit IMM-CRIT-01 ：Token Creator Can Upgrade ArcToken Implementation
* \#50059 \[SC-Medium] ETH Refund in depositAndBridge functions enables DoS
* \#51479 \[SC-High] Inaccurate Reward Calculation Post-Validator Slashing Due to Premature Timestamp Update on Token Removal
* \#53063 \[SC-Low] `maxValidatorPercentage` can be used to DOS protocol staking
* \#51352 \[SC-Critical] User will lose the unspent amount when executing partial swaps via 1inch
* \#51320 \[SC-Low] Malicious teller parameter allow event data manipulation
* \#52983 \[SC-High] Validator will loose commission for the tokens which are removed from the reward tokens but they still have commission left to be claimed.
* \#50628 \[SC-Insight] Incorrect update of Admin state in VRF Requests Leads to Randomness Manipulation and Jackpot Theft
* \#51917 \[SC-Medium] Possible gas griefing on the `handleRandomness(...)` function with a fallback that executes other transactions.
* \#51198 \[SC-Medium] BoringVault cannot receive any deposit due to faulty logic related to the `shareLockPeriod`
* \#53038 \[SC-Low] distributeYield can be frontrun to sandwich rewards. We can force ourselves to be the last holder and get unfairly big bonuses
* \#51988 \[SC-Medium] `PlumeRewardLogic.calculateRewardsWithCheckpointsView` lacking of checking if the validator is inactive but not slashed.
* \#52527 \[SC-High] The validator admin might claim less commission token when `ValidatorFacet.requestCommissionClaim` is called.
* \#50350 \[SC-High] StakingFacet: stakeOnBehalf allows to prevent withdraws
* \#53037 \[SC-Critical] Commission changes can retroactively affect user rewards
* \#52277 \[SC-Low] Race Condition in Streak Calculation Leads to Unfair Streak Reset for Users Spinning Near UTC Day Change
* \#52719 \[SC-Medium] Inactive validators blocked from claiming commissions despite passed timelock
* \#50340 \[SC-Medium] Any ArcToken admin can block the setting/update of the purchase token indefinitely.
* \#53001 \[SC-High] Yield tokens become stuck in ArcTokenPurchase contract when distributing yield during active sales
* \#51146 \[SC-Low] getMaxNumberOfTokens returns wrong max number of tokens available to buy
* \#52905 \[SC-Low] Incorrect Reward Reporting in View Functions (earned and getClaimableReward) Leads to Zero Balance Display for Active Stakers
* \#52803 \[SC-High] \_canRecoverFromCooldown is inconsistent when slash and cooldown maturity occur in the same block
* \#51510 \[SC-Low] Bypass of `maxValidatorPercentage` allows a validator to exceed the decentralisation cap
* \#52464 \[SC-High] Commission rounding mismatch under payment bug
* \#52896 \[SC-Low] “Pause” gate is present but no way to pause
* \#53011 \[SC-Critical] Uncleaned Partial Approval Consumption in DEX Aggregator Integration Leads to Permanent DoS
* \#51526 \[SC-High] Yield token will be locked in ArcToken.sol if the `lastHolder` is not allowed to receive yield
* \#51476 \[SC-Medium] Validators can't claim their accrued commission if they are made inactive
* \#52390 \[SC-High] `_validateIsToken(...)` blocks validators from claiming earned rewards from removed tokens.
* \#52203 \[SC-Medium] Griefing Attack on ArcTokenPurchase.setPurchaseToken() Function via Front-Running
* \#52919 \[SC-Medium] `_safeTransferPlume` can lead to gas griefing attack
* \#51850 \[SC-Low] upgradeToken(...) can not initialize an upgraded token because the `data` variable of upgradeToAndCall() is hardcoded to empty string
* \#49939 \[SC-High] Initial timestamp mismatch might lead to users being able to spin twice in the same day
* \#52489 \[SC-Low] When users perform unstake operations in batches, it may cause some funds to be frozen for an additional period of time.
* \#52911 \[SC-Low] Last Holder Potential Extra Token Distribution Encourages Gaming Distribution and Race Conditions
* \#51989 \[SC-Low] Event:: RestrictionsCreated always emits msg.sender as Owner
* \#51571 \[SC-Low] Stale mapping after proxy upgrade
* \#50393 \[SC-Insight] Unused admin state variable increases deployment and storage costs.
* \#53048 \[SC-Medium] Approval logic can break on non-standard ERC-20s (USDT-style) and leave allowances loose
* \#50490 \[SC-High] User loses reward tokens during validator-user relationship clearing
* \#50624 \[SC-Low] There is a Missing Emergency Pause in Predicate Proxy
* \#53051 \[SC-High] Unconsented stakeOnBehalf enables third-party gas-griefing DoS by bloating userValidators, breaking withdraw/claimAll
* \#51909 \[SC-Medium] Inconsistent Commission Claim Logic Denies Legitimate Claims for Inactive Validators
* \#53025 \[SC-High] Commission on removed tokens is unclaimable
* \#50977 \[SC-Low] TellerWithMultiAssetSupportPredicateProxy contract cannot be emergency paused
* \#53028 \[SC-High] There is an Asymmetric Rounding issue that is can cause a Theft of Unclaimed Yield in Reward or Commission Accounting
* \#52314 \[SC-Low] Unsold Token Withdrawal Causes Permanent Inventory Mismatch
* \#50343 \[SC-Low] Cooldown reset vulnerability
* \#50527 \[SC-High] Attacker can steal yield during batch distribution
* \#51051 \[SC-High] Inactive Validator Reward Accrual Bypass
* \#50392 \[SC-Insight] Phantom commission burn
* \#52113 \[SC-Low] `StakingFacet.unstake(uint16 validatorId, uint256 amount)` can be abused to bypass `$.minStakeAmount`
* \#50694 \[SC-Low] Spins occuring close to midnight lead to users streaks being unfairly broken due to VRF callback delay
* \#51992 \[SC-High] Dust Accumulation in ArcToken during Yield Distribution.
* \#52732 \[SC-Medium] Permanent DoS of Purchase Token Change
* \#51241 \[SC-Low] Cooldown shortening logic allows early withdrawal of locked stake
* \#50040 \[SC-Low] Missing Pause Controls, ETH Refund Flaws, and Miscalculated Shares Enable Fund Loss and Protocol Inconsistency in depositAndBridge
* \#52865 \[SC-High] Inconsistency in how stake cooldown is handled due to off by one error
* \#52931 \[SC-High] Validators can not claim their commissions after the reward token removal.
* \#51847 \[SC-Critical] DoS via dust leftover in erc-20 approvals
* \#52798 \[SC-High] Integer Division Remainder Loss in Batched Yield Distribution Causes Permanent Fund Lock
* \#51567 \[SC-Low] Contract Cannot Be Paused: Missing Public pause and unpause Functions
* \#52995 \[SC-High] Validators lose access to historical reward tokens when tokens are removed
* \#52409 \[SC-High] Asymmetric commission rounding creates systematic accounting drift
* \#51034 \[SC-Low] Sales information is lost when enabling token
* \#51878 \[SC-High] Timing Misalignment Between Campaign Days and Calendar Days Allows Double Spinning on High-Probability Jackpot Days
* \#52998 \[SC-Low] Minor delays from oracle can unfairly reset users streak
* \#49700 \[SC-High] Validator Commission can be Blocked
* \#52424 \[SC-High] There is a Retroactive Commission Miscalculation in PlumeRewardLogic
* \#51899 \[SC-Medium] Partial Distribution of yield will fail if the totalEfficentive supply increases.
* \#51129 \[SC-Low] BoringVault proxies do not support smart contract wallets
* \#52961 \[SC-High] Theft of yield from the distributor.
* \#52012 \[SC-Medium] Shares lock Applied to Proxy Causes Deposit DoS When shareLockPeriod > 0
* \#52254 \[SC-High] ArcToken theft beyond unclaimed yield during distribution
* \#53018 \[SC-High] Owed rewards could be lost for some users for periods before slashing time due to incorrect logic.
* \#52517 \[SC-High] Missing Point-in-Time Snapshot in Batched Yield Distribution Enables Double-Claims and Permanent Fund Lock
* \#53016 \[SC-High] ArcTokenPurchase doesn't allow RWA-token owners to recover accrued yield from stored ArcTokens waiting for sale.
* \#51041 \[SC-High] Streak‑Count Misuse in Jackpot Eligibility Allows Theft of User Funds
* \#50783 \[SC-Low] Validator percentage cap does not work properly
* \#49732 \[SC-Medium] Malicious Token Admin Can Permanently Block setPurchaseToken
* \#52339 \[SC-Low] Loss of Daily Streak and Jackpot Eligibility Due to Supra Generator Callback Delay and On-Callback Time Usage in `Spin.sol`
* \#53015 \[SC-Low] Raffle Does Not Invalidate Used Tickets, Breaking Fairness
* \#51116 \[SC-High] Batching yield distribution allows claiming unfair share of the yield
* \#50483 \[SC-High] Final seconds spin requestors of `last week of campaign` will lose jackpots
* \#50922 \[SC-Low] Unstaking partially will extend the cooldown time for previously unstaked amount too
* \#49963 \[SC-Medium] Anyone can create an ArcToken and block the setPurchaseToken() function
* \#51999 \[SC-High] Logical Flaw in Validator Reactivation and addRewardToken Allows Claiming Rewards for Validators in Inactive Periods
* \#52290 \[SC-Medium] `deposit` function in **TellerWithMultiAssetSupportPredicateProxy** is completely broken due to wrong share lock
* \#49673 \[SC-High] Batched Distribution (distributeYieldWithLimit) is vulnerable to double yield claiming attack
* \#49854 \[SC-Critical] Dex Aggregator partial fill token loss
* \#52996 \[SC-High] Users can claim rewards for newly added reward tokens even when the validator they staked for was inactive during some time interval.
* \#51312 \[SC-Insight] Misleading revert
* \#50504 \[SC-Low] totalAmountClaimable() reverts when called with a removed reward token
* \#50252 \[SC-High] Rounding excess yield tokens become permanently stuck when last holder is yield-restricted
* \#52285 \[SC-High] Incorrect Dust Handling in Yield Distribution Leads to Permanent Fund Lock
* \#51132 \[SC-Low] `TellerWithMultiAssetSupportPredicateProxy` cannot be paused/unpaused
* \#50951 \[SC-High] Inconsistent streak count usage between jackpot and raffle ticket calculations
* \#50787 \[SC-High] Residual-Yield Bug Locks Tokens Permanently in distributeYield
* \#50889 \[SC-Low] ArcTokenPurchase::withdrawUnsoldArcTokens() Fails to Reduce totalAmountForSale, Leaving Availability Counters Wrong
* \#52519 \[SC-Low] Missing Eligibility Check Before Fund Transfer in distributeYield Leads to Permanent Loss of Yield Tokens
* \#52576 \[SC-High] Flaw in Raffle::determineReward in Jackpot Prize Calculation after week 12
* \#51958 \[SC-Insight] Blacklisted user bricks yield distribution logic
* \#52667 \[SC-High] commission is not added at point of adding validator hence stakers that stake before the first checkpoint would always use the current commission
* \#50415 \[SC-Low] getMaxNumberOfTokens() returns wrong value when ArcTokens are withdrawn
* \#51943 \[SC-Low] TellerWithMultiAssetSupportPredicateProxy is meant to be pausable but cannot be paused
* \#52341 \[SC-Medium] `TellerWithMultiAssetSupportPredicateProxy` ShareLock Incompatibility - Unable to Operate Due to Token Access Restrictions
* \#50347 \[SC-High] Commission for a validator cannot be claimed when token is removed
* \#52377 \[SC-Insight] Removed tokens that have not been earned cannot be pulled from the PlumeStakingRewardTreasury.sol
* \#51961 \[SC-High] Attackers can deny commission rewards to validators by repeatedly calling forceSettleValidatorCommission()
* \#49715 \[SC-Low] Restriction of token burning on whitelisted addresses
* \#52770 \[SC-High] Unbounded Gas Consumption via stakeOnBehalf Manipulation
* \#50225 \[SC-Low] User can bypass `minStakeAmount` checking.
* \#50412 \[SC-High] Illegitimate Reward Claim After Unstake Due to Overlapping Reward Rate Checkpoints
* \#52979 \[SC-Low] WhitelistRestrictions unintentionally disables mint and burn when transfers are restricted
* \#51414 \[SC-High] Attacker can drain yield by transferring tokens to other address in yield batch distributions
* \#51283 \[SC-Critical] Permanent Freeze of User token Due to Unhandled Partial Fill Refunds for swap via 1inch in `DexAggregatorWrapperWithPredicateProxy`
* \#51122 \[SC-Low] `ArcTokenPurchase#enableToken` can reset the `amountSold` to 0
* \#51776 \[SC-Low] Streak System Breaks Despite Timely User Action Due to Delayed Supra Oracle Callback
* \#52460 \[SC-High] Add RewadToken and SetRewardRate updates the checkpoint of Inactive validators .
* \#51043 \[SC-Medium] Core deposit and depositAndBridge Functionality in `TellerWithMultiAssetSupportPredicateProxy` is Non-functional Due to Flawed shareLockPeriod Logic
* \#52676 \[SC-High] reward rates being set when there is an inactive validator would enable stakers to steal rewards because of the inconsistency in state
* \#51613 \[SC-Medium] Yield tokens can be stuck in ArcTokenPurchase , PlumeStakingRewardTreasury or other defi protocols when distributeYield is called.
* \#51918 \[SC-Insight] Redundant zero address checks for router address
* \#52901 \[SC-Low] Wrapped week index can mis-price jackpot table after long uptime
* \#49647 \[SC-Low] Pausable Functions are Not Exposed
* \#49708 \[SC-Insight] Yield Distribution in ArcToken does not match expected behavior
* \#52847 \[SC-High] No function to recover the remained yield by distributeYieldWithLimit
* \#52202 \[SC-Low] Failure to Invalidate Winning Tickets Allows Multiple Wins from Single Entry
* \#51133 \[SC-High] Streak Check Uses Outdated Value in Jackpot Eligibility results in user getting nothing instead of Jackpot
* \#52990 \[SC-Low] `uint8` truncation and missing cap on week index can return wrong/zero jackpot amounts (Low — Contract fails to deliver promised returns)
* \#52278 \[SC-High] Incorrect Streak Check in Jackpot Eligibility Leads to Unfair Reward Denial
* \#52289 \[SC-Insight] In ArcToken.sol redundant holderCount > 0 checks
* \#52075 \[SC-Medium] ArcTokenPurchase Contract is a Token Holder and may be Yield Recipient.
* \#51905 \[SC-High] Validator commission burn on slashed validator reward path
* \#51138 \[SC-Low] Winners cannot claim until all winners are drawn
* \#50167 \[SC-High] Retroactive reward drain via incomplete reward debt reset
* \#50502 \[SC-Insight] Raffle contract fails to emit events on multiple state changes
* \#50924 \[SC-High] Validators are not able to claim their accrued commission when the reward token is removed.
* \#52104 \[SC-High] Removed reward tokens block validator commission claims
* \#50409 \[SC-High] Validator will lose comission
* \#49817 \[SC-Medium] Inactive validators are prevented to claim to eligible commission rewards
* \#51987 \[SC-High] Validators will be able to steal more commission from users that isn't the commission to be charged
* \#52572 \[SC-High] A legitimate arc token holder can be denied his yield.
* \#49623 \[SC-Low] Unstaking allows going below minimum stake
* \#52468 \[SC-Insight] DoS in Batch Yield Distribution Due to Cross-Batch State Inconsistency
* \#52680 \[SC-High] holders length changing when distributing limit with limit could lead to case where new holders unfairly claim yield and yield is permanently frozen
* \#50487 \[SC-Low] Cross-Campaign Jackpot Denial Due To State Pollution
* \#52891 \[SC-Low] Staking and unstaking immediately an amount little less than the original staked amount leaves dust stake amounts in the system.
* \#49798 \[SC-Insight] Invalid Holder Set Initialization Bypasses Modular Restrictions, Corrupting Yield Distribution
* \#51951 \[SC-Low] A Global Blocking Check in claimPrize Prevents Individual Winner Claims Until All Winners Are Drawn
* \#49941 \[SC-Low] Permanent Freezing of Yield Tokens Due To Flawed Check in Distribution Logic
* \#52484 \[SC-Medium] Permanent deposit DoS with USDT-like tokens due to approve-from-nonzero pattern in 1inch/OKX paths
* \#52628 \[SC-Insight] State-Modifying Getter in getPendingRewardForValidator Allows Gas Griefing and Unintended State Changes
* \#52034 \[SC-Medium] Inaccurate Reward Calculation Due To Fallback to Next Checkpoint on Missing Timestamp
* \#53077 \[SC-High] Permanent Fund Lock Due To Flawed Remainder Logic in distributeYield
* \#50194 \[SC-Medium] `DexAggregatorWrapperWithPredicateProxy` can be stucked by any user
* \#52449 \[SC-High] Broken Streaks Still Pass Jackpot Eligibility in Spin Contract
* \#52458 \[SC-High] In ArcToken::distributeYieldWithLimit() the distribution without snapshot allows more claims from same holder
* \#52061 \[SC-High] Re-adding reward tokens causes userValidatorRewardPerTokenPaid to be uninitialized for users who staked during token removal, allowing them to claim excessive historical rewards
* \#52837 \[SC-Insight] Gas-heavy repeated binary search increases reward-calculation gas costs
* \#52986 \[SC-High] Jackpot check uses previous `streakCount` instead of current computed streak, denying jackpot on first eligible day
* \#50404 \[SC-Low] User withdraw time can be delayed much longer if unstake again before the `cooldownEndTime`
* \#52601 \[SC-High] In Spin::handleRandomness() jackpot eligibility uses outdated streakCount instead of updated streak
* \#50974 \[SC-Insight] Inconsistent Validation Between Reward and Jackpot Probability Thresholds
* \#51910 \[SC-Low] Inconsistent yield token transfer logic causes permanent loss of yield in distributeYield()
* \#52736 \[SC-High] Restaking rewards will revert when users have to catch up with segments
* \#49893 \[SC-Insight] `Raffle.sol` implementation logic allows direct PLUME transfers but has no withdraw locking funds permanently
* \#50580 \[SC-Insight] `ValidatorFacet` missing events on some function state changes
* \#52500 \[SC-High] Missing Commission Checkpoint Initialization Leads to Retroactive Commission Theft of User Rewards
* \#51391 \[SC-Low] enableToken Function Overwrites amountSold to Zero Causing Permanent Loss of Sales History
* \#51324 \[SC-High] Rounding in commission accounting burns delegator rewards
* \#50022 \[SC-Low] Missing admin `Pause/Unpause` functions in `TellerWithMultiAssetSupportPredicateProxy` contract
* \#50596 \[SC-Insight] Unnecessary variable setting
* \#50234 \[SC-Insight] Redundant Reward Update in `RewardsFacet::removeRewardToken`
* \#50470 \[SC-Insight] Inefficient Design in `distributeYieldWithLimit:;ArcToken` Creates Unnecessary Gas Consumption
* \#52186 \[SC-Low] Incorrect reward calculation for slashed validators due to single segment time handling
* \#52787 \[SC-High] Batched yield distribution rounding in ArcToken permanently freezes unclaimed funds and misreports payouts
* \#49835 \[SC-Insight] Dex Aggregator unused ETH loss
* \#49671 \[SC-Insight] Wrong emission in Stake
* \#50187 \[SC-Insight] YieldBlacklistRestrictions Uses Slot 0 Instead Of Unstructured Storage, Risking Slot Collision
* \#51925 \[SC-Insight] Redundant Checks For Token Transfer Success
* \#51927 \[SC-Insight] Incorrect recipient check in `_update` function
* \#50931 \[SC-Insight] No partial claim may result in a loss of funds
* \#50297 \[SC-Insight] Lack of ETH Rescue Mechanism
* \#51653 \[SC-High] Permanent loss of staker rewards after slashing when validator records are cleared
* \#51001 \[SC-Insight] Inaccurate share calculation in emitted event for non-bridge deposits
* \#50060 \[SC-Insight] Scattered Module Processing Pattern in `ArcToken._update` Function
* \#52027 \[SC-Low] WhitelistRestrictions.sol: Mint & Burn Operations Blocked When Transfers Disabled
* \#53039 \[SC-High] Rewards and commissions accrued in the interval before a slash might be lost
* \#53059 \[SC-Low] Reward rate checkpoints are used but are never set
* \#52513 \[SC-High] `ValidatorFacet.addValidator` lacks of calling `PlumeRewardLogic.createCommissionRateCheckpoint`
* \#51033 \[SC-High] Off-by-one streak check lets jackpot spins be rejected one day early
* \#52988 \[SC-Medium] deposit function DOS
* \#53035 \[SC-Medium] Share Lock Applied to Wrapper Instead Of End User Breaks Transfers or Bypasses Lock
* \#51197 \[SC-High] Arc Token owner can take upgrader role for themselves lockout the factory and upgrade the contract without the knowledge of the factory
* \#51286 \[SC-Low] Event `RestrictionsCreated` uses wrong owner
* \#53043 \[SC-High] handleRandomness doesn't properly account for current streak which could result in the User spinning losing a Jackpot
* \#51771 \[SC-Low] Unsafe downcast of uint256 to uint8 will lead to Silent overflow
* \#51926 \[SC-Insight] ABI mismatch in the claimAll function leads to incorrect reward decoding and potential fund loss for external integrators
* \#52436 \[SC-Low] getAccruedCommission() could return an inaccurate value
* \#51060 \[SC-High] PlumeRewardLogic: Improper update of "validatorLastUpdateTimes" can lead to frozen assets
* \#52973 \[SC-High] Anyone can update the last update time of the slashed validator which leads to loss of rewards for the stakers
* \#52780 \[SC-High] Timestamp Manipulation in forceSettleValidatorCommission Leads to Permanent Loss of Staker Rewards
* \#52433 \[SC-High] Permanent loss of user rewards due to improper token removal after validator slashing
* \#50312 \[SC-Insight] Validator can steal user rewards due to a lack of cooldown when validator increases commission
* \#51288 \[SC-Insight] Validators commission can be permanently lost
* \#52889 \[SC-High] Inactive validators accrue rewards for new tokens
* \#51746 \[SC-Low] depositAndBridge(...) function of TellerWithMultiAssetSupportPredicateProxy.sol can not be paused
* \#51980 \[SC-Low] Unstake cooldown period is mistakenly reset on each claim, resulting in temporary frozen funds
* \#52560 \[SC-High] Incorrect current streak used when calculating whether the jackpot should be awarded or not
* \#52669 \[SC-Low] Token minting is blocked for whitelisted addresses when transfersAllowed is false
* \#50796 \[SC-High] Jackpot eligibility uses stale streak
* \#52041 \[SC-Low] In ArcToken Attacker Can Reposition to Last Holder and Capture Entire Yield Remainder
* \#51228 \[SC-Insight] Missing Zero Address Check in Initialization Leads to Irrecoverable Contract Lock
* \#51090 \[SC-High] malicious user can steal yields when `ArcToken.distributeYieldWithLimit` is used.
* \#52573 \[SC-High] Unconsented `stakeOnBehalf` enables **unbounded gas consumption** via `userValidators[]` growth, causing DoS at scale in `claimAll()` / `withdraw()`
* \#52706 \[SC-Low] Multi-Quantity Prize Claims Revert Until All Winners Are Drawn, Freezing Early Winners
* \#51100 \[SC-Insight] Gas Inefficiency in Prize Removal Logic
* \#50519 \[SC-High] RewardsFacet: Reintroducing an old reward token will result in wrong accounting, leading to theft of yield
* \#51551 \[SC-High] New rewards tokens will distribute yield to inactive validators
* \#51882 \[SC-Low] Unnecessary Claiming Restriction in Raffle Contract Prevents Winners from Claiming Prizes Until All Winners Are Drawn
* \#51969 \[SC-Low] Yield tokens permanently stuck when no eligible holders exist
* \#50560 \[SC-High] Inconsistent Commission Rounding Traps User/Validator Funds
* \#51260 \[SC-Low] Minstake are not enforced after Unstake which creates a DOS for new stakers
* \#50027 \[SC-Insight] Missing Validation of OKX Swap Output Token in function `_okxHelper()`
* \#52675 \[SC-Low] Minimum Stake Bypass via Partial Unstaking Creates Dust Stakes
* \#50691 \[SC-Insight] No validator limit can lead to DoS
* \#50551 \[SC-Low] Staked dust positions are not properly prevented
* \#52127 \[SC-High] Permanent rewards loss via admin slashing cleanup
* \#51505 \[SC-High] ArcToken creator can still upgrade ArcToken outside of the factory after IMM-CRIT-01 was fixed
* \#51525 \[SC-Low] Unfair Yield Distribution to Last Holder Due to Flawed Dust Handling
* \#51124 \[SC-High] Validator would loss commission fee if the rewards token are removed
* \#51070 \[SC-Low] Winning Raffle Ticket can be re-used to maintain unfair advantage over other players in `Raffle`
* \#51201 \[SC-Low] Contracts Without Payable Entry Points cannot withdraw nor claim rewards
* \#51929 \[SC-Low] Deactivating `isTransferAllowed` indirectly DOSes minting/burning functionality
* \#49698 \[SC-Low] Coordinated Validator Attack Delays Slashing and Enables Commission Theft
* \#50436 \[SC-Low] `voteToSlashValidator` prevents malicious inactive validators to be slashed.
* \#49876 \[SC-Insight] Lack of refund on admin-canceled spin requests leads to permanent loss of funds
* \#49800 \[SC-Insight] Yield distribution could encounter an unexpected revert
* \#52849 \[SC-High] Claimers who claim after (slash/inactive + updateRewardPerTokenForValidator which advances `validatorLastUpdateTimes to be more than slashTimestamp`) will lose rewards for a segment
* \#51707 \[SC-Insight] Gas inefficiency due to redundant \_validateValidatorExists() modifier in requestCommissionClaim()
* \#53056 \[SC-Low] Native-withdraw to msg.sender only → non-payable contract stakers cannot withdraw (permanent funds lock)
* \#51970 \[SC-Low] Spin streak computation relies on oracle callback time; any third-party delay can reset the user’s streak and block jackpot eligibility.
* \#52956 \[SC-High] State Inconsistency in Batched Yield Distribution Leads to Direct Theft of User Funds and Protocol Insolvency
* \#51172 \[SC-High] Users lose their accrued rewards when the protocol removes a reward token after the user's delegated validator has been slashed.
* \#50660 \[SC-Insight] Missing event in withdrawPurchaseTokens function
* \#52923 \[SC-Critical] Partial fill traps source token residual inside the wrapper and leaves unsafe residual allowance
* \#52925 \[SC-Medium] USDT-like approval hygiene can block subsequent operations after partial fill leaves non-zero allowance
* \#49868 \[SC-Insight] `Raffle.sol` does not enforce `Prize.endTimeStamp` allowing user and admin interactions with expired Prizes
* \#51941 \[SC-High] Token creator can revoke factory's upgrade capability, permanently blocking upgrades
* \#52130 \[SC-Low] Validator percentage cap bypass vulnerability
* \#52750 \[SC-Low] Percentage Limit Bypass via Unstaking from Other Validators
* \#52810 \[SC-Low] Batch unstake merged cooldowns leading to full fund slashing
* \#50963 \[SC-Low] Unexpected config applied on the Spin
* \#51501 \[SC-Low] It is not possible to update `l1accountEvmAddress` to the `address(0)`
* \#52794 \[SC-Low] remainingForSale not updated after withdrawUnsoldArcTokens will cause following buy revert
* \#52303 \[SC-Insight] Incorrect Yield Distribution Event Emission
* \#50506 \[SC-Insight] `StakingFacet` missing event emission on any unstaking operations
* \#49710 \[SC-High] Cross-batch state manipulation in yield distribution allows double-dipping of yield funds
* \#50302 \[SC-Insight] Role Documentation Discrepancy
* \#49726 \[SC-Insight] There is a redundant zero address check in the ValidatorFacet.sol that is obsolete and could never be true
* \#49668 \[SC-Insight] Validator status function emit misleading event
* \#50571 \[SC-High] Yield Distribution Meltdown ArcToken's Batch Processing Vulnerability Enables 100% Yield Over Distribution
* \#51866 \[SC-High] Stale Streak Value Used in Jackpot Eligibility Check Causes Denial of Legitimate Jackpot Winners
* \#52031 \[SC-Medium] Insufficient Access Control in Token Sales Management Leads to Permanent Griefing Attack
* \#50973 \[SC-Insight] Incorrect Parameter Type in setJackpotProbabilities
* \#49787 \[SC-High] Batched Yield Distribution Doesn't Account For Transfers/Purchases Between Batches
* \#50380 \[SC-Insight] Redundant Use of `allowedImplementations` Mapping in Factory Contracts (createToken and createWhitelistRestrictions in ArcTokenFactory and RestrictionsFactory respectively)
* \#49954 \[SC-Insight] `Raffle::editPrizes` lacks logic to make prizes immutable once winner selection starts or users join breaking user trust.
* \#52557 \[SC-Insight] validatorLastUpdateTimes not updated after validator slashing
* \#52945 \[SC-High] Commission Calculation Rounding Asymmetry Leads to Theft of Unclaimed Yield
* \#52870 \[SC-Low] Cooldown Extension Logic May Lead to Locked Funds
* \#50745 \[SC-Low] Single Cooldown Entry Design Causes Timer Reset on Multiple Unstakes Leading to Extended Lock Periods
* \#51296 \[SC-Low] ArcTokenPurchase Withdrawal Breaks View Functions
* \#50887 \[SC-Insight] ArcoTokenPurchase::PurchaseMade Event Mislabels Payment Amount as “pricePaid” Instead Of Unit Price
* \#51218 \[SC-High] Oracle callback timing vulnerability causes jackpot prize loss
* \#50275 \[SC-High] Eligible user loses Jackpot
* \#52178 \[SC-Critical] User will lose the unspent amount when executing partial swaps via OkxRouter
* \#53069 \[SC-Low] Dynamic Cooldown Interval Changes Cause Unexpected Fund Lockup Extensions
* \#50168 \[SC-Insight] Unused and duplicated functions should be removed from RewardsFacet and StakingFacet
* \#51451 \[SC-Low] Token Freezing via Whitelist Restriction Bypass
* \#51530 \[SC-High] Validators can not Claim Pending Accrued Commission when Reward tokens have been removed from the isRewardToken mapping
* \#51162 \[SC-Low] Missing Pause Control Implementation in TellerWithMultiAssetSupportPredicateProxy
* \#50461 \[SC-Insight] Incorrect deposit event receiver logged in bridge functions of `DexAggregatorWrapperWithPredicateProxy.sol`
* \#51920 \[SC-Insight] Unnecessary second hand of `if` check in `calculateRewardsWithCheckpointsView`
* \#52248 \[SC-Insight] Lack of initialization check in staking allows users to stake without reward token configured, causing permanent loss of yield
* \#51658 \[SC-High] Yield distribution in batches let the same tokens collect rewards in multiple batches, stealing yield from other users
* \#52347 \[SC-High] Improper handling of yield distribution state in distributeYieldWithLimit() leads to revert, freezing users' yield
* \#52711 \[SC-High] In ValidatorFacet, validator cannot claims commissions of removed tokens
* \#52444 \[SC-Insight] `getMaxNumberOfTokens` returns misleading supply when sales are disabled
* \#50425 \[SC-High] Active non-slashed validators cannot claim rewards when a reward token is disabled
* \#53071 \[SC-Insight] `_okxHelper` function incompatible with the `UNISWAP_V3_SWAP_TO_WITH_PERMIT_SELECTOR`
* \#52507 \[SC-Medium] Insufficient Fix: IMMUNEFI REPORT - H1 #35
* \#53072 \[SC-High] Ceil-vs-Floor Rounding Mismatch Causes Systematic Underpayment and Unclaimed Yield Leakage
* \#51171 \[SC-Insight] Redundant Storage Reads and Unnecessary Checks in Reward Rate Checkpoint Logic Lead to Inefficient Gas Usage
* \#50284 \[SC-Insight] Incorrect ERC7201 Storage Implementation in Core Factory Contracts
* \#51651 \[SC-Insight] Redundant Array Access in removeStakerFromValidator
* \#52690 \[SC-Medium] DoS Of Smart Contracts On Bridging Functions
* \#51863 \[SC-Low] Lack of Winning Ticket Removal in handleWinnerSelection Leads to Unfair Prize Distribution and Economic Exploitation
* \#51180 \[SC-Medium] Function is vulnerable to gas griefing
* \#50397 \[SC-Medium] Inefficient Array Iteration in getPrizeDetails function leads to high gas costs.
* \#51493 \[SC-Insight] Misleading View Function Documentation
* \#50675 \[SC-Insight] Re-Entrant ETH Refund Can Emit Mismatched shares in Deposit event
* \#51369 \[SC-High] Unbounded iteration gas‑dos in `_validateTokenForClaim`
* \#51994 \[SC-High] Permanent Loss of Validator Commission Upon Reward Token Removal
* \#50402 \[SC-Low] Single rate assumption ignores checkpoints in slashed case
* \#50433 \[SC-High] Validator List Griefing: Unrestricted stakeOnBehalf allows User Asset freeze permanently
* \#52179 \[SC-Medium] Validator Commission Becomes Permanently Locked When Deactivated
* \#51813 \[SC-High] Malicious User Can Grief Victims by Staking Them Across Many Validators Leading to Fund Freezing
* \#52646 \[SC-Insight] Missing event emission after reward claim has been finalized in RewardsFacet
* \#51547 \[SC-Medium] Approval Race Condition with safeApprove Leads to Transaction Reverts
* \#50937 \[SC-Medium] Non-zero approve pattern causes permanent freeze of token deposits (e.g. USDT) due to ERC20 incompatibility
* \#51502 \[SC-Low] Enabling Transfer Restrictions Permanently Blocks Minting and Burning
* \#51452 \[SC-High] stakeOnBehalf() function enables out-of-gas DoS
* \#51455 \[SC-Low] Inflated `earned()` / UI rewards when validator stake is zero due to missing `totalStaked` guard in view logic
* \#51982 \[SC-Medium] Token Approval Issue with Non-Standard ERC20 Tokens Leads to Contract Dysfunction
* \#51655 \[SC-Insight] Redundant Storage Write in addValidator Function Leads to Unnecessary Gas Costs
* \#51723 \[SC-Low] Yield Tokens Can Become Permanently Stuck in Contract if No Eligible Holders Exist
* \#52976 \[SC-Low] Turning on transfer restriction permanently blocks minting and burning
* \#52397 \[SC-Medium] Repeated approve without zero-reset can revert on nonstandard ERC20s, blocking deposits
* \#52948 \[SC-Low] Jackpot Reward Rejected at Exact Threshold
* \#51896 \[SC-High] Precision Loss in distributeYieldWithLimit Leads to Permanent Locking of Yield Tokens
* \#52799 \[SC-Insight] unused storage variable
* \#50761 \[SC-Insight] Slashed Validators Not Removed from Active List, Leading to Redundant Reward Checkpoints and Wasted Gas
* \#52890 \[SC-Low] No-Recipient Yield Distribution Locks Yield Tokens on ArcToken (effTotal==0)
* \#52935 \[SC-Insight] In Raffle contract, cancel request does not really cancel the request
* \#52026 \[SC-Medium] claimAll could revert because of unbounded gas consumptions
* \#52937 \[SC-Insight] Redundant Raffle Ticket Balance Check
* \#52918 \[SC-Insight] Redundant Check For AllWinnersDrawn Error
* \#50818 \[SC-Low] previewYieldDistribution Returns Zero Addresses When Effective Supply Is Zero
* \#52087 \[SC-Insight] Plume.sol#permit(...) will always revert for smart contract wallet signatures
* \#52137 \[SC-Insight] Silent Override of Non-Global Module Implementation Causes Stored State and Event Log Inconsistency
* \#52944 \[SC-High] The `requestCommisionClaim` function can only claim commission on tokens that are currently reward tokens
* \#52974 \[SC-Medium] When the approval to the `okxApprover` is not fully spent the deposit function will be blocked
* \#51028 \[SC-Insight] Gas And Storage Inefficiency in Raffle Ticket Range Tracking
* \#49919 \[SC-Insight] Unstake function does not unstake all as mentioned in the NatSpec
* \#49932 \[SC-Insight] There are five separate but similar implementations of a binary search that can be condensed into one function
* \#49705 \[SC-Medium] Two vectors for unbounded Gas Consumption due to the normal `Raffle` operations
* \#50507 \[SC-High] Non atomic yield distribution may lead to theft of yield
* \#49639 \[SC-Insight] Gas Inefficiency in Loop Storage Reads \_processMaturedCooldowns
* \#49738 \[SC-Insight] Active users in prize pool loose invested raffle tickets when `Raffle::removePrize()` is called.
* \#49768 \[SC-Insight] Missing input validation in `Raffle::editPrize` breaks functionality
* \#51083 \[SC-Insight] claimAll() only loops over active reward tokens and ignores historical tokens
* \#50212 \[SC-Insight] Validators without staked funds can control slashing decisions leading to protocol insolvency
* \#52221 \[SC-Insight] Hardcoded Supra subscription wallet can freeze Spin
* \#50949 \[SC-Insight] No check if raffle actually has enough funds
* \#50632 \[SC-Insight] Critical Timestamp Parsing Bug in getYear() of DateTime contract
* \#49626 \[SC-Insight] Modulo Bias in Winner Selection in Raffle
* \#51712 \[SC-Insight] Yield distribution will revert if global module doesn't implement IYieldRestrictions
* \#52960 \[SC-Insight] Incosistent withdrawable amount calculations
* \#50041 \[SC-Insight] Missing global rate fallback in `getEffectiveRewardRateAt`
* \#51738 \[SC-Insight] It's possible to enable the same token multiple times, thereby resetting the parameters
* \#51814 \[SC-Insight] `checkpoint.cumulativeIndex` returned in the `getRewardRateCheckpoint` function will be zero
* \#51159 \[SC-Insight] High Gas: Iterative Date Calculations in DateTime.sol

</details>

(End of report list)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://reports.immunefi.com/plume-or-attackathon.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
