Розробка системи anti-sybil верифікації
Sybil атака — створення множини fake identity для отримання несправедливої переваги. У DeFi: одна людина створює 1000 адрес та отримує airdrop 1000 раз. У DAO: накопичення voting power через множину кошельків. Anti-sybil система намагається відокремити унікальних реальних людей від ботів та fake accounts.
Чому це складно
Блокчейн адреса — просто пара ключів. Створити 10000 адрес — питання хвилин. Нема вбудованого механізму зв'язку адреси з реальною людиною. При цьому не можна вимагати повну ідентифікацію — це протирічить privacy та accessibility.
Баланс: достатня защита від sybil з мінімальним friction для чесних користувачів.
Сигнали anti-sybil
On-chain сигнали (не вимагають KYC)
Transaction history: акаунт з >2 років історії, >100 транзакцій, взаємодія з >10 протоколами — висока ймовірність реальної людини. Новий адрес з 3 транзакціями — сумнівно.
Asset holdings: мінімальний ETH баланс + різноманітний портфель. Sybil фермери економлять на газу та тримають мінімум.
DeFi участь: забезпечення ліквідності, запозичення, governance голосування — реальні on-chain паттерни.
NFT власність: перевірені NFT колекції, особливо ті що вимагають gas-intensive mint.
Proof of Humanity системи
Proof of Humanity (PoH): видеоверифікація. Користувач записує відео з ім'ям та реєструється в реєстрі. Інші користувачи перевіряють запис. Sybil challenge: будь-хто може оспорити + bond.
BrightID: соціальна верифікація. Користувачі підтверджують знайомство у відеоконференціях. Sybil неможливий без реальних соціальних зв'язків.
Worldcoin: біометричне сканування iris. Найсильніший сигнал унікальності, але найбільш invasive. Використовує ZK для приватності.
Основний Anti-sybil контракт
contract AntiSybilSystem {
// Різні сигнали з вагами
struct SybilScore {
uint256 humanityScore; // 0-100
bool isVerified;
uint256 lastUpdated;
bytes32[] passedChecks;
}
mapping(address => SybilScore) public scores;
// Chainlink-based on-chain activity агрегація
function updateActivityScore(
address user,
uint256 txCount,
uint256 uniqueProtocols,
uint256 accountAgeDays
) external onlyOracle {
uint256 score = 0;
// Вік акаунту (max 30 points)
if (accountAgeDays > 730) score += 30; // > 2 років
else if (accountAgeDays > 365) score += 20; // > 1 року
else if (accountAgeDays > 90) score += 10; // > 3 місяців
// Кількість транзакцій (max 30 points)
if (txCount > 500) score += 30;
else if (txCount > 100) score += 20;
else if (txCount > 20) score += 10;
// Різноманітність протоколів (max 40 points)
if (uniqueProtocols > 20) score += 40;
else if (uniqueProtocols > 10) score += 25;
else if (uniqueProtocols > 5) score += 15;
scores[user].humanityScore = score;
scores[user].lastUpdated = block.timestamp;
}
// Перевірити зовнішні верифікації (PoH, BrightID, Worldcoin)
function registerExternalVerification(
address user,
bytes32 verificationType,
bytes calldata proof
) external onlyVerifier {
require(_verifyProof(verificationType, proof, user), "Invalid proof");
scores[user].passedChecks.push(verificationType);
scores[user].isVerified = true;
// Зовнішня верифікація = макс humanity score
scores[user].humanityScore = 100;
}
}
Gitcoin Passport інтеграція
Gitcoin Passport — агрегатор anti-sybil stamps. Користувач збирає stamps (Google OAuth, GitHub, BrightID, ENS, PoH, on-chain активність) та отримує composite score.
interface IGitcoinPassport {
function getScore(address user) external view returns (uint256);
function hasStamp(address user, bytes32 stampType) external view returns (bool);
function isAboveThreshold(address user, uint256 threshold) external view returns (bool);
}
contract GatedFeature {
IGitcoinPassport passport = IGitcoinPassport(PASSPORT_ADDRESS);
modifier onlyHumans() {
require(
passport.isAboveThreshold(msg.sender, 20), // score >= 20
"Insufficient humanity score"
);
_;
}
}
Quadratic Funding та anti-sybil
Gitcoin Grants використовує quadratic funding: сума грантів пропорційна квадрату кількості донорів, не сумі. Це робить sybil особливо прибутковим (1 людина з 1000 адрес = sqrt(1000) разів більший matching).
Anti-sybil критичний для quadratic механіки. MACI (Minimal Anti-Collusion Infrastructure) + Gitcoin Passport — стандартне рішення.
ZK anti-sybil
Nullifier pattern: користувач доводить що має унікальний credential (Worldcoin iris) без розкриття ідентичності. Nullifier — унікальне значення, похідне від credential. Повторна реєстрація з тим же credential → той же nullifier → виявлення дубля.
ZK Proof:
Input (private): iris_scan_hash, secret
Input (public): world_tree_root, nullifier_hash
Proves: iris_scan_hash is in world_tree_root
Nullifier = hash(iris_scan_hash, secret)
// Не можна зареєструватися двічі — nullifier розкриває факт
Розробка production anti-sybil системи — 6-12 тижнів. Це ongoing робота: sybil атаки еволюціонують, захисти повинні теж.







