Normal behavior: register_pizza_lover
should allow each user to be registered once.
Problem: It doesn’t check whether a user is already registered before calling get_random_slice
, which internally calls table::add
. If the user already exists, this aborts with a low-level table error.
Also, the registration should ideally be user-driven or trustless. But, here the owner has full control (centralisation) and there are chances that the owner might turn out to be mischievous and perform malpractice to take all the registrations of his own due to which allocations might be done by the owner to his self-controlled accounts.
Likelihood:
Will frequently happen in practice due to user error or replayed transactions.
Always present — since all registrations are routed through the owner.
Malicious or careless owner behavior will directly impact fairness.
Impact:
Causes poor UX and may result in DoS if the owner’s automation retries registrations.
Owner can register fake addresses they control and drain the airdrop.
Legitimate users cannot self-register.
Centralized control undermines decentralization and fairness of the distribution.
What it proves: Because the owner is the sole registrar and there’s no pre-allocation budget check, the owner can register many addresses (possibly their own) and make the allocations towards his own addresses.
Because allocations are “random” (100–500), a small total_fund
like 1_000
makes it very likely the first three claims deplete the pool; the victim’s claim_pizza_slice
then reliably aborts with E_INSUFFICIENT_FUND
.
This is a strong, behavior-level PoC for the centralization + over-allocation risk (the owner can create a registration order and enough addresses to starve others).
We need to remove the centralisation risk - no need for the user to be approved by the owner before being a part of the airdrop. Instead, any user could register for the airdrop and could get in without requiring any permission from the owner - to maintain fairness.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.