Skip to content

Potential Risks

DISCLAIMER // NFA // DYOR

This analysis is based on decompiled bytecode and observations of the contract behavior. We are not smart contract security experts. This document aims to explain what the contract appears to do based on the code. It should not be considered a comprehensive security audit or financial advice. Always verify critical information independently and consult with blockchain security professionals for important decisions.

⊙ generated by robots | curated by humans

METADATA
Proxy Address 0x2a9848c39fff51eb184326d65f1238cc36764069 (etherscan)
Implementation Address 0xe528d428c188a80c4824aad89211d292f9a62d77 (etherscan)
Network Ethereum Mainnet
Analysis Date 2025-12-14

Risk Summary

RISK CATEGORY LEVEL RATIONALE
Centralization High Single admin has sweeping powers; no multisig; instant proxy upgrades possible
Complexity Medium Reward accounting is complex; multiple mappings must stay in sync
Economic Medium Depends entirely on operator deposits; admin can drain funds after 24h
External Dependencies Medium Single point of failure on external token contract; no validation or fallback
Technical/Security High Reentrancy vulnerabilities observed; state updated after external calls
Upgrade Risk Critical Proxy admin can instantly upgrade to malicious implementation; no timelock

Overall Risk Assessment: High to Critical


Centralization Risks

Admin Powers

What the admin can do:

ACTION TIMELOCK IMPACT
Upgrade contract logic ☒ None Can replace entire implementation
Emergency withdrawals 24 hours Can withdraw any ETH or ERC20
Manipulate balances ☒ None Can set any user's balance to arbitrary value
Add operators ☒ None Immediate effect
Remove operators 24 hours Queued with delay
Remove from blacklist ☒ None Immediate effect
Change parameters 24 hours Min balance requirement
Cancel timelocks ☒ None Can cancel any queued action
Transfer admin 24 hours Two-step process

Potential Impact:

  • Rug pull: Admin could upgrade to malicious implementation that steals all funds
  • Fund extraction: After 24 hours, admin can withdraw all ETH from reward pool
  • Reward manipulation: Admin can change user balances to favor certain addresses
  • Denial of service: Admin can prevent operators from functioning by removing them
  • Lock out users: Can blacklist addresses or pause their rewards indefinitely

Observed Mitigations:

  • ☑ 24-hour timelock on critical operations (admin transfer, operator removal, parameter changes, emergency withdrawals)
  • ☑ Two-step admin transfer (queue + accept) prevents accidental transfers
  • ☑ Transparent proxy pattern prevents admin from calling implementation directly
  • No timelock on proxy upgrades (proxy admin can instantly change implementation)
  • ☒ No multisig requirement (single address has all power)
  • ☒ No governance mechanism
  • ☒ No limits on manual balance updates

Operator Powers

What operators can do:

ACTION TIMELOCK IMPACT
Control participation ☒ None Open/close registration
Pause contract ☒ None Block all user operations
Deposit rewards ☒ None Required for system function
Blacklist users ☒ None Block specific addresses
Pause individual users ☒ None Block specific users from claiming
Force deregister ☒ None Remove users without consent

Potential Impact:

  • Denial of service: Operators can prevent users from claiming by pausing
  • Selective access: Can blacklist or force-deregister targeted users
  • Registration manipulation: Can close registration after favored users join
  • Reward timing: Can delay reward deposits to manipulate distribution

Observed Mitigations:

  • ☑ Operators can be removed by admin (with 24-hour timelock)
  • ☑ Admin retains override capability (can unpause users, remove blacklist)
  • ☒ No timelock on operator actions (instant effect)
  • ☒ No checks/balances between operators
  • ☒ Operator count unlimited

Upgrade Risks

ATTRIBUTE VALUE
Upgrade Mechanism EIP-1967 Transparent Proxy
Who can upgrade Proxy admin
Time lock None - instant upgrade possible
What could change Everything (entire contract logic)
Storage collision risk Medium

Upgrade Concerns:

  • Proxy admin is separate from implementation admin (could be different addresses)
  • No timelock means instant upgrade possible
  • Storage layout must be carefully maintained across upgrades
  • New implementation could:
    • Steal all ETH in contract
    • Manipulate balances arbitrarily
    • Change reward calculation logic
    • Add backdoors for fund extraction

Storage Layout Risks:

  • Current implementation uses slots 0-23
  • Proxy uses special EIP-1967 slots (unlikely to collide)
  • Future upgrades must maintain current variable positions
  • Adding new variables at end is safe; reordering is dangerous

External Dependencies

DEPENDENCY ADDRESS PURPOSE RISK IF COMPROMISED
XCL Token Set in initialize() Balance queries determine reward share System halts or manipulation possible

External Token Risks:

  • Trust assumption: Contract trusts token.balanceOf() returns accurate values
  • Availability: If token contract is paused or broken, entire system halts
  • Manipulation: If token allows balance manipulation, reward shares can be gamed
  • Gas: Token could have high gas costs, making operations expensive
  • Malicious: Token could be malicious contract that always reverts

Observed Validations:

  • ☒ No check that token address is a valid contract during initialization
  • ☒ No check that token implements ERC20 interface
  • ☒ No fallback if token queries fail
  • ☒ Token address cannot be changed after initialization

Economic Risks

Underfunding

Can contract run out of funds?

Yes. Reward pool is depleted as users claim. If operators don't deposit more rewards, pool goes to zero.

What happens:

  • Claim transactions revert with "Insufficient reward pool"
  • Users cannot deregister if they have pending rewards (reverts during auto-claim)
  • Operator must deposit more rewards to restore functionality

Mitigations:

  • ☒ None observed in code
  • System depends entirely on operators depositing funds

Overfunding

Can excess funds be extracted?

Yes, by admin via emergency withdrawal after 24-hour timelock. Reward pool accounting is separate from actual ETH balance.

Risks:

  • ETH sent directly to contract (not via depositRewards) not tracked in reward pool
  • Admin could extract this "untracked" ETH
  • Admin could extract legitimate reward pool funds

Price Manipulation

Any price oracle dependencies?

No. Contract does not use any price feeds.

Manipulation risks:

If external token allows flash loans or temporary balance inflation, attacker could:

  1. Inflate balance
  2. Register or update snapshot
  3. Claim disproportionate rewards
  4. Deflate balance

Mitigations:

  • ☑ Snapshot interval rate-limits balance updates (default 1 hour)
  • ☑ Registration requires sustained balance over block boundaries
  • ☒ No flash loan protection
  • ☒ No balance verification across multiple blocks

Game Theory

Incentive misalignments:

ISSUE DESCRIPTION
Sybil resistance None - user can split tokens across multiple addresses
Snapshot gaming Users incentivized to maximize balance just before snapshots
First mover advantage Early registrants with high balances get more rewards
Balance update incentive Users must manually update balances (gas cost)
Operator incentive Operators have no direct incentive to deposit rewards
Registration timing When registration closed, existing users have monopoly

Technical/Security Risks

Complexity Level: Medium

Complex Areas:

  1. Reward accounting math:
    - Uses fixed-point arithmetic with 10^18 scaling
    - Reward debt calculation spans multiple functions
    - Risk of rounding errors or overflow

  2. Array management:
    - Participant array compaction during deregistration
    - Index tracking in separate mapping
    - Risk of index corruption if not synchronized

  3. Multi-mapping state:
    - User state spread across 8+ mappings
    - Must all stay in sync
    - Partial updates could leave inconsistent state

  4. Timelock system:
    - Complex nested mapping for different action types
    - Multiple parameters encoded in hash
    - Risk of hash collisions or incorrect parameter passing


Reentrancy Potential: High Risk

Multiple functions make external calls (ETH transfers, token queries) before state updates complete.

Vulnerable functions:

FUNCTION ISSUE
claimRewards() Updates state after ETH transfer
deregister() Updates state after claim
updateBalanceSnapshot() Updates state after claim
Emergency withdrawal Could be attacked if recipient is contract

Reentrancy Attack Scenario:

1. Attacker registers with minimal balance
2. Attacker calls claimRewards()
3. Contract calculates pending rewards
4. Contract transfers ETH to attacker
5. Attacker's receive() function calls claimRewards() again
6. Contract hasn't updated rewardDebt yet
7. Attacker receives rewards twice
8. Contract updates rewardDebt (too late)

Mitigation status:

  • ☒ No checks-effects-interactions pattern consistently applied
  • ☒ No ReentrancyGuard modifier observed
  • ☒ State updates occur after external calls in several functions

Observed Safety Features

Positive:

  • ☑ 24-hour timelocks on admin transfers, operator removal, parameter changes, emergency withdrawals
  • ☑ Two-step admin transfer (queue + accept)
  • ☑ Transparent proxy pattern prevents selector clashes
  • ☑ Registration closed by default
  • ☑ Multiple pause mechanisms (global, per-user, blacklist)
  • ☑ Snapshot interval rate limiting
  • ☑ Initialized flag prevents re-initialization
  • ☑ Balance tracking validation
  • ☑ Solvency checks before transfers
  • ☑ Event emissions for transparency

Missing:

  • ☒ No reentrancy guards
  • ☒ No timelock on proxy upgrades
  • ☒ No multisig requirement
  • ☒ No pause on individual functions (all-or-nothing)
  • ☒ No maximum operator count
  • ☒ No limits on admin powers (manual balance updates unlimited)
  • ☒ No validation of external token contract
  • ☒ No flash loan protection
  • ☒ No audit results referenced

Trust Assumptions

To use this contract safely, users must trust:

Proxy Admin

  • Will not upgrade to malicious implementation
  • Will not instantly rug pull (no timelock on upgrades)
  • May or may not be same address as implementation admin

Implementation Admin

  • Will not use emergency withdrawal to steal funds (24-hour warning)
  • Will not manipulate user balances maliciously
  • Will not abuse timelock cancel to prevent legitimate operations
  • Will not grant operator role to malicious addresses
  • Will use manual balance update function responsibly

Operators

  • Will deposit rewards regularly for system to function
  • Will not abuse pause functionality to deny service
  • Will not blacklist or force-deregister users arbitrarily
  • Will not close registration unfairly

External Token Contract

  • Returns accurate balances
  • Will not be paused or broken
  • Is not malicious (could DOS entire system)
  • Cannot be changed once initialized

Economic Model

  • Operators will continue to fund rewards
  • Token balances reflect legitimate holdings, not flash loans
  • System will maintain solvency

Code Correctness

  • Decompiled code accurately represents deployed bytecode
  • Reward accounting math is correct
  • No hidden functions or backdoors
  • Array management doesn't corrupt indices

Questions for Team/Community

Governance

  1. Who is the admin address? Is it a multisig?
  2. Is the proxy admin the same as the implementation admin?
  3. Who are the operators? How are they selected?
  4. Is there a timelock on proxy upgrades planned?
  5. Are there plans to decentralize governance?

Technical

  1. What is the address of the external token contract?
  2. Has reentrancy been addressed in the deployed bytecode?
  3. Where do the ETH rewards come from?
  4. How often are global snapshots triggered?

Security

  1. Has this contract been professionally audited?
  2. Is there a bug bounty program?
  3. Is the contract monitored for suspicious activity?
  4. Have there been any security incidents?

Economic

  1. What is the source of ETH rewards?
  2. Is there a schedule for reward deposits?
  3. How long can the reward system be sustained?
  4. Is the reward pool currently solvent?