Интеграция с Superfluid (потоковые платежи)

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Интеграция с Superfluid (потоковые платежи)
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • 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

Интеграция с Superfluid (потоковые платежи)

Традиционный подход к периодическим платежам в Web3 — approve + transferFrom по расписанию, либо предоплата на несколько периодов. Оба варианта требуют или активного участия пользователя, или доверия к контракту держать большие суммы наперёд. Superfluid решает это иначе: деньги текут посекундно, баланс обновляется в реальном времени без отдельных транзакций. Для подписочных dApp, salary streaming или grant distribution — это значимая разница в UX.

Как работает Superfluid под капотом

Super Tokens и реальное время

Superfluid не работает с обычными ERC-20. Нужен Super Token — оверлей над ERC-20 через upgrade() функцию. Пользователь вносит 100 USDC → получает 100 USDCx (Super Token). USDCx — это ERC-20, который умеет в потоки.

balanceOf(address account) у Super Token возвращает реальное значение с учётом всех активных потоков: staticBalance + netFlowRate * (block.timestamp - lastUpdated). Это view функция, которая смотрит в будущее и прошлое одновременно. Никаких on-chain записей каждую секунду — только обновление при открытии/закрытии/изменении потока.

Практическое следствие: баланс меняется с каждой секундой без транзакций. Это означает, что transfer(recipient, amount) с суммой «весь баланс» — опасная операция: между вашим вычислением суммы и исполнением транзакции прошло время, реальный баланс уменьшился.

CFAv1 (Constant Flow Agreement)

Основной инструмент — IConstantFlowAgreementV1. Открыть поток:

ISuperfluid(host).callAgreement(
    cfa,
    abi.encodeWithSelector(
        cfa.createFlow.selector,
        token,        // USDCx
        receiver,     // адрес получателя
        flowRate,     // wei per second (int96)
        new bytes(0)  // userData
    ),
    "0x"
);

flowRate — это int96, не uint256. Отрицательное значение означает входящий поток. Для расчёта flowRate: monthlyAmount * 1e18 / (30 * 24 * 3600) — количество wei USDCx в секунду.

Важный нюанс: int96 ограничен ~39.6 * 10^27 wei/sec. Для большинства use case — с запасом, но при работе с токенами с нестандартным количеством decimals нужно проверять overflow.

Liquidation и solvency buffer

Superfluid защищает получателей от ситуации, когда у отправителя закончились средства, через механизм liquidation. При открытии потока отправитель депонирует solvency buffer — обычно 4-часовой поток. Если баланс упал до нуля, но поток не закрыт — любой может вызвать ликвидацию через deleteFlow, получив часть буфера как reward.

Это меняет UX требования: при интеграции в dApp нужно предупреждать пользователя о минимальном необходимом балансе. Если у пользователя USDCx на 3 часа потока — он не может открыть новый поток (буфер = 4 часа). Это распространённая причина confusing INSUFFICIENT_BALANCE ошибок.

Практическая интеграция

Superfluid SDK

import { Framework } from "@superfluid-finance/sdk-core";
import { ethers } from "ethers";

const sf = await Framework.create({
  chainId: 137, // Polygon
  provider,
});

const usdcx = await sf.loadSuperToken("USDCx");
const createFlowOperation = usdcx.createFlow({
  sender: userAddress,
  receiver: recipientAddress,
  flowRate: "385802469135802", // ~1000 USDC/month
});

const tx = await createFlowOperation.exec(signer);

SDK абстрагирует callAgreement вызовы. Для производственного кода — используем batchCall для объединения нескольких операций в одну транзакцию: upgrade + createFlow за один газ.

Обработка событий протокола

Ключевые события для мониторинга:

  • FlowCreated(token, sender, receiver, flowRate, totalSenderFlowRate, totalReceiverFlowRate) — новый поток
  • FlowUpdated(...) — изменение ставки
  • FlowDeleted(...) — закрытие потока (включая ликвидации)

Для frontend real-time обновлений: WebSocket подписка через wagmi watchContractEvent или The Graph subscription (если развёрнут Superfluid subgraph для вашей сети). Superfluid имеет официальный subgraph на mainnet, Polygon, Optimism, Arbitrum, BNB Chain.

Реальный кейс: подписочный dApp без мониторинга FlowDeleted от ликвидаций — пользователи продолжали получать контент после окончания подписки, потому что фронтенд не знал, что поток был ликвидирован. Решение: event listener + статус проверка через cfa.getFlow().

Работа с userData

createFlow принимает bytes userData — произвольные данные, которые эмитируются в событие. Используем для:

  • Привязки потока к subscription ID
  • Передачи referral кода
  • Идентификатора тарифного плана
bytes memory userData = abi.encode(subscriptionId, planId);

На стороне обработчика событий — decode:

const [subscriptionId, planId] = ethers.utils.defaultAbiCoder.decode(
  ["uint256", "uint256"],
  event.userData
);

ACL (Access Control List) для автоматизации

Если нужно, чтобы смарт-контракт мог управлять потоками от имени пользователя (например, автоматическое обновление flowRate при смене тарифа), используем Superfluid ACL:

// Пользователь даёт разрешение контракту
cfa.authorizeFlowOperatorWithFullControl(token, operatorContract, "0x");

Это аналог ERC-20 approve, но для управления потоками. Operator может создавать, изменять, закрывать потоки от имени пользователя в рамках выданных прав.

Поддерживаемые сети и токены

Сеть USDCx ETHx Нативная ликвидность
Ethereum mainnet Да Да Низкая (gas дорогой)
Polygon Да Да Высокая
Optimism Да Да Средняя
Arbitrum One Да Да Средняя
BNB Chain Да Средняя

Для кастомных токенов: деплой Pure Super Token (без wrapper, нативный super token) через SuperTokenFactory. Используется для in-app валют, где не нужен underlying ERC-20.

Процесс работы

Аналитика (0.5-1 день). Определяем use case: подписки, salary, grants, rewards streaming. Выбираем сеть. Нужен ли ACL для автоматического управления потоками.

Разработка (2-4 дня). Смарт-контракт (если нужна кастомная логика) + SDK интеграция на фронтенде + event обработчики + мониторинг ликвидаций.

Тестирование. Superfluid имеет testnet деплои на Polygon Mumbai (deprecated) и Sepolia. Форк-тесты с mainnet состоянием через Foundry для сложной бизнес-логики.

Ориентиры по срокам

Базовая интеграция (создание/управление потоками в frontend) без кастомного смарт-контракта — 2-3 дня. Полноценная подписочная система с кастомным контрактом, ACL и мониторингом ликвидаций — 4-7 дней.

Стоимость рассчитывается индивидуально после анализа бизнес-логики.