Разработка системы 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: minimal ETH balance + diverse portfolio. Sybil фермеры экономят на gas и держат минимум.
DeFi participation: liquidity provision, borrowing, governance voting — реальные on-chain паттерны.
NFT ownership: верифицированные NFT коллекции, особенно требующие gas-intensive mint.
Proof of Humanity системы
Proof of Humanity (PoH): видеовидеоверификация. Пользователь снимает видео с именем и регистрируется в реестре. Другие пользователи верифицируют запись. Sybil challenge: любой может оспорить + bond.
BrightID: социальная верификация. Пользователи подтверждают знакомство в видеоконференциях. Sybil невозможен без настоящих социальных связей.
Worldcoin: биометрическая iris scan. Самый сильный сигнал уникальности, но самый invasive. Использует ZK для приватности.
Сcore 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 aggregation
function updateActivityScore(
address user,
uint256 txCount,
uint256 uniqueProtocols,
uint256 accountAgeDays
) external onlyOracle {
uint256 score = 0;
// Возраст аккаунта (max 30 points)
if (accountAgeDays > 730) score += 30; // > 2 years
else if (accountAgeDays > 365) score += 20; // > 1 year
else if (accountAgeDays > 90) score += 10; // > 3 months
// Количество транзакций (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;
// External verification = max humanity score
scores[user].humanityScore = 100;
}
}
Gitcoin Passport интеграция
Gitcoin Passport — агрегатор anti-sybil stamps. Пользователь собирает stamps (Google OAuth, GitHub, BrightID, ENS, PoH, on-chain activity) и получает 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 mechanics. MACI (Minimal Anti-Collusion Infrastructure) + Gitcoin Passport — стандартное решение.
ZK anti-sybil
Nullifier pattern: пользователь доказывает что имеет уникальный credential (Worldcoin iris) без раскрытия identity. 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 атаки эволюционируют, защиты должны тоже.







