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

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1306 услуг
Интеграция с Snapshot (голосование)
Простой
~2-3 дня
Часто задаваемые вопросы

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

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

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1306
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1218
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    920
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1147
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    610
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    885

Интеграция с 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 недели.