Интеграция с Snapshot (голосование)

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Интеграция с Snapshot (голосование)
Простая
~2-3 рабочих дня
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1258
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1170
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    873
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1092
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    830

Интеграция с Snapshot (голосование)

Snapshot — стандарт off-chain голосования в Web3. Большинство DAO с активным governance используют его: Uniswap, Aave, ENS, Gitcoin, Compound. Причина проста: on-chain голосование через Governor стоит gas каждому участнику, при нескольких тысячах голосующих это существенный барьер.

Snapshot решает это через подписи: голос — это cryptographic signature, не транзакция. Верификация происходит off-chain, результаты публикуются в IPFS. Для большинства DAO этого достаточно.

Что нужно для интеграции

Интеграция Snapshot в продукт занимает 1–2 недели и включает три части: настройку Space, показ предложений в вашем интерфейсе и кнопку голосования.

Настройка Space: создаётся на snapshot.org, конфигурируется JSON-файлом в ENS-записи домена. Ключевые параметры — стратегия подсчёта голосов (какие токены и в какой сети учитываются) и минимальный threshold для создания предложения.

// Пример получения списка предложений через Snapshot GraphQL API
const SNAPSHOT_HUB = 'https://hub.snapshot.org/graphql';

async function getProposals(spaceId) {
    const query = `
        query Proposals($space: String!) {
            proposals(
                where: { space: $space, state: "active" }
                orderBy: "created"
                orderDirection: desc
            ) {
                id
                title
                body
                choices
                start
                end
                snapshot
                state
                scores
                scores_total
                votes
                author
            }
        }
    `;
    
    const response = await fetch(SNAPSHOT_HUB, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ query, variables: { space: spaceId } })
    });
    
    const { data } = await response.json();
    return data.proposals;
}

// Подача голоса через Snapshot SDK
import { Web3Provider } from '@ethersproject/providers';
import Client from '@snapshot-labs/snapshot.js';

async function castVote(proposalId, choiceIndex, provider) {
    const client = new Client.Client('https://hub.snapshot.org');
    const web3 = new Web3Provider(provider);
    const [account] = await web3.listAccounts();
    
    const result = await client.vote(web3, account, {
        space: 'yourspace.eth',
        proposal: proposalId,
        type: 'single-choice',
        choice: choiceIndex,    // 1-based индекс выбора
        reason: '',
        app: 'your-app'
    });
    
    return result;
}

Стратегии голосования

Snapshot поддерживает гибкие стратегии: erc20-balance-of (голос = баланс токена), erc20-votes (delegated voting power из Governor), delegation (переданные голоса), whitelist. Можно комбинировать несколько стратегий с весовыми коэффициентами. Snapshot block используется для snapshot баланса — голосовой вес фиксируется на момент создания предложения, купить токены во время голосования бесполезно.

Когда Snapshot недостаточно

Snapshot подходит для governance сигналов, но не для исполнения решений. Если результат голосования должен автоматически изменить параметр протокола — нужен on-chain execution через Governor + Timelock. В этом случае Snapshot используют как первый этап: off-chain сигнал → on-chain голосование → исполнение. Этот паттерн использует ENS.

Сроки интеграции

Базовый UI с просмотром предложений и голосованием — 1 неделя. Полноценная интеграция с уведомлениями, историей голосов пользователя и делегированием — 2–3 недели.