Інтеграція з WorldCoin (Proof of Personhood)

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Інтеграція з WorldCoin (Proof of Personhood)
Середній
від 1 дня до 3 днів
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1309
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1222
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    922
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1151
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    614
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    887

WorldCoin інтеграція (Proof of Personhood)

WorldCoin вирішує одну з фундаментальних проблем Web3: як довести що за адресою стоїть унікальна жива людина, без розкриття ідентичності. Стандартні KYC системи вимагають паспорт та прив'язують адресу до реальної людини. WorldCoin використовує iris-scanning та zero-knowledge proof для підтвердження людської природи без деанонімізації.

Як працює World ID

Iris-based біометрія та ZK-proof

Користувач проходить сканування радужної оболонки через Orb пристрій. Зі скану формується IrisCode — 2048-бітний хеш біометричних даних. IrisCode не зберігається відкрито: у Semaphore-дереві (Merkle tree) додається leaf з commitment користувача.

Коли користувач доводить унікальність додатку, генерує ZK-SNARK proof, що доводить:

  • Commitment користувача в дереві (пройшов Orb верифікацію)
  • Користувач ще не використав World ID для даної action (nullifier унікальний)

Proof не розкриває адресу, IrisCode чи зв'язок між різними додатками. Це selective disclosure у чистому вигляді.

Nullifier та захист від double-spend

Ключовий криптографічний примітив: nullifier_hash = hash(identity_secret, app_id, action_id). Одна людина для однієї action в одному додатку завжди генерує той же nullifier. Потрібно тільки зберігати вже використані nullifiers — перевіряємо що такого немає, додаємо, більше використовувати не можна.

Це аналог серійного номера в фізичному грошах — при погашенні купюри номер записується як "використаний". Без розкриття хто саме її погасив.

Технічна інтеграція

On-chain верифікація через WorldID контракт

import { IWorldID } from "@worldcoin/world-id-contracts/src/interfaces/IWorldID.sol";

contract MyApp {
    IWorldID internal immutable worldId;
    uint256 internal immutable groupId = 1; // Orb-verified
    uint256 internal immutable externalNullifier;
    
    mapping(uint256 => bool) internal nullifierHashes;

    constructor(IWorldID _worldId, string memory appId, string memory actionId) {
        worldId = _worldId;
        externalNullifier = abi.encodePacked(
            abi.encodePacked(appId).hashToField(),
            abi.encodePacked(actionId).hashToField()
        ).hashToField();
    }

    function verifyAndExecute(
        address signal,
        uint256 root,
        uint256 nullifierHash,
        uint256[8] calldata proof
    ) public {
        require(!nullifierHashes[nullifierHash], "Already used");
        
        worldId.verifyProof(
            root,
            groupId,
            abi.encodePacked(signal).hashToField(),
            nullifierHash,
            externalNullifier,
            proof
        );
        
        nullifierHashes[nullifierHash] = true;
        // подальша логіка
    }
}

Off-chain верифікація через Developer Portal

Для Web2 бекенду — спрощений варіант без on-chain транзакції:

import { verifyCloudProof } from "@worldcoin/idkit";

const result = await verifyCloudProof(
  proof,          // з IDKit віджету
  app_id,
  action,
  signal          // опціональний
);

if (result.success) {
  // користувач верифікований, nullifier вже позначений
}

Cloud верифікація простіша, але централізована — Developer Portal Worldcoin бачить всі верифікації вашого додатку. Для privacy-critical випадків — тільки on-chain.

IDKit React віджет

import { IDKitWidget, VerificationLevel } from "@worldcoin/idkit";

<IDKitWidget
  app_id="app_staging_..."
  action="vote_proposal_123"
  verification_level={VerificationLevel.Orb}
  onSuccess={(proof) => sendToContract(proof)}
>
  {({ open }) => <button onClick={open}>Verify with World ID</button>}
</IDKitWidget>

VerificationLevel.Device — нижчий рівень (без Orb, тільки phone верифікація), придатний для менш critical actions. VerificationLevel.Orb — повна біометрична верифікація.

Випадки використання та обмеження

Де застосовно

Захист airdrop від sybil: замість "1 адреса = 1 allocation" → "1 людина = 1 allocation". Nullifier прив'язаний до action (наприклад, claim_airdrop_season1) — повторна реєстрація іншою адресою не допоможе.

Governance: "1 людина = 1 голос" в DAO без довіри до token-weighted голосування.

Rate limiting: обмеження дій (безплатна trial, faucet) по-людськи, не по-адресно.

Certificate/credential системи: видання credential унікальному користувачу з можливістю його предʼявити без розкриття ідентичності.

Обмеження

Географічне покриття Orb: пристрої Orb неправномірно розподілені. У регіонах з низьким покриттям користувачі не можуть верифікуватися — реальне UX обмеження.

World App залежність: ZK proof генерується у World App (мобільному додатку). Користувач без смартфона або той що не хоче встановлювати додаток — не може верифікуватися. Для B2B та enterprise сценаріїв це проблема.

Device верифікація: менш строгий рівень, але phone унікальність — слабіша ніж iris унікальність.

Процес інтеграції

Етап Зміст Час
Реєстрація в Developer Portal Створення app_id, налаштування actions 1 день
Smart contract WorldID верифікатор + nullifier сховище 2-3 дні
Frontend IDKit віджет, обробка proof 1-2 дні
Тестування Staging environment, testnet deploy 1-2 дні

Базова інтеграція з on-chain верифікацією — 5-7 робочих днів. Вартість розраховується індивідуально.