Why
In a permissionless system, an address costs nothing — so any benefit keyed to an address is keyed to nothing. One person is a thousand wallets whenever a thousand wallets pay better than one. Every airdrop-farming industry, every drained testnet faucet, every sybil-swept referral program is the same arithmetic: benefit per wallet greater than cost per wallet, repeated until the pool is empty.
The defense is not detection — it is repricing. Attach to each claim a cost the attacker cannot manufacture: time (cooldowns cap extraction rate), money (a small stake makes 1,000 wallets 1,000 stakes), computation, or identity (proof-of-personhood, at its own trust cost). The design question is a product question: which cost can you impose that a legitimate user barely notices and a wallet-generator cannot amortize? The faucet is the minimal lab for this, but the same table prices your airdrop, your free tier and your sponsored gas.
How it works
One naive faucet, one scripted sybil, four gates, and the attacker's P&L per gate.
PoC
On anvil (or a public testnet): Faucet.sol paying 0.1 tokens per claim. Attack script: generate 50 wallets, claim with each, sweep balances to one address — record time and gas spent vs tokens extracted. Then add gates one at a time and rerun: (1) per-address cooldown of 24h — extraction throttles but new wallets bypass it, proving address-keyed limits alone fail; (2) claim requires a 0.02 stake locked for a week — the sybil's capital cost now scales with wallet count; (3) claimer pays own gas on a chain where gas is nontrivial — same effect via fees; (4) a proof-of-personhood stub (one signature per registered identity). Output: one table, rows = gates, columns = attacker cost, attacker yield, legitimate-user friction.
What it proves
Sybil resistance is not a detection feature bolted on later — it is the pricing of the free thing, decided at design time. The winning gates are the ones that scale cost with wallet count while staying flat for a human with one wallet; the table makes that trade-off measurable instead of rhetorical. Directly reusable for the paymaster caps in sponsored-gas-is-cogs and any future Jayverse airdrop.
Where it lands in Jayverse
- Devnet: run this page's PoC directly against the devnet faucet. Fifty generated wallets, measure extraction, then add a per-address cooldown or small stake gate and re-measure before any public-facing devnet faucet ships.
- Rabbit: apply the same cost-the-attacker-cannot-mint table to sponsored session-key calls. Size paymaster caps from cooldown, stake, or proof-of-personhood gates rather than a flat sponsorship limit.
- Token: fill in the attacker P&L table per gate for any future JYVE airdrop or referral bonus before launch, not after farming is observed.
Key expressions
| Expression | 뜻 · 쓰이는 자리 |
|---|---|
| farm (동사) | (부정 이득을) 파밍하다, 긁어모으다 · 무료 혜택을 대량 지갑으로 반복 착취하는 행위. "gets farmed by generated wallets within hours" |
| sybil-swept | 시빌 공격으로 싹쓸이당한 · 가짜 계정을 대량 생성해 시스템을 속이는 공격의 결과. "every sybil-swept referral program" |
| keyed to | ~에 연동된, ~을 기준으로 결정되는 · 혜택이 주소 하나에 결부되어 있다는 뜻. "any benefit keyed to an address" |
| amortize | (비용을) 분산 상각하다, 나누어 감당하다 · 공격 비용을 여러 시도에 나눠서 줄이는 것. "a wallet-generator cannot amortize" |
| repricing | 가격 재산정 · 공짜였던 것에 비용을 다시 매기는 방어 전략. "The defense is not detection — it is repricing" |
| bolt on | (나중에) 덧붙이다, 임시로 추가하다 · 사후에 급조해 붙인 기능을 비판할 때. "not a detection feature bolted on later" |
| cooldown | 재사용 대기시간, 쿨다운 · 남용을 막기 위해 두는 시간 제한. "a per-address cooldown of 24h" |
| unit economics | 단위 경제성 · 지갑 하나당 수익과 비용 구조. "how each gate changes the attacker's unit economics" |
| P&L | 손익(수익-비용) · 공격자의 수익 구조를 표로 나타낼 때 쓰는 약어. "the attacker's P&L per gate" |
| stub | 임시 구현체, 최소 동작 코드 · 완전한 기능 대신 껍데기만 있는 코드. "a proof-of-personhood stub" |
| proof-of-personhood | 인격 증명(사람임을 증명하는 절차) · 실명이 아니라 '한 사람=한 신원'임을 증명하는 시빌 저항 기법. "identity (proof-of-personhood, at its own trust cost)" |
| paymaster | 페이마스터(가스비 대납 컨트랙트) · 사용자 대신 가스비를 지불하는 계정 추상화 구성요소. "reusable for the paymaster caps in sponsored-gas-is-cogs" |