Розробка системи стриміньгових платежів (Superfluid, Sablier)
Стрімінг платежів — це безперервний потік криптовалюти по часу: отримувач може в будь-який момент вивести вже "заробачі" токени, не чекаючи кінця періоду. Замість щомісячної виплати зарплати — потік, який тече по секунді. Технічно це реалізується по-різному у Superfluid та Sablier, та вибір між ними визначає архітектуру всієї системи.
Superfluid vs Sablier: принципова різниця
Superfluid: real-time balance без on-chain транзакцій
Superfluid використовує концепцію Super Token — ERC-20-сумісний токен з розширеною механікою. Баланс Super Token перераховується у реальному часі без окремих транзакцій: balance(t) = initialBalance + flowRate * (t - startTime).
Створення потоку — одна транзакція. Після цього баланс отримувача зростає безперервно, та жодних додаткових транзакцій для оновлення балансу не потрібно. Це головна перевага: газ тільки на створення та закриття потоку.
Обгортка токена у Super Token: USDCx — це Super Token для USDC. Wrap/unwrap через ISuperToken.upgrade(amount) та downgrade(amount). Для роботи з нативним ETH — ETHx через нативну обгортку у Superfluid.
Критичний момент з liquidation. Superfluid вимагає підтримання депозиту (buffer) у відправника. Якщо баланс відправника падає до нуля — потік стає "критичним". Будь-хто може викликати deleteFlow та отримати liquidation bonus з буфера. Якщо ніхто не викликає — потік продовжується та sender уходить у борг (Patrician Period). Це потрібно враховувати у UI: попередження про низький баланс та автоматичний top-up.
Sablier: лінійні потоки з гнучким vesting
Sablier v2 (контракти SablierV2LockupLinear, SablierV2LockupDynamic) — це NFT-стріми. Кожен потік токенізований як ERC-721, що дозволяє передавати його та використовувати як collateral.
LockupLinear — лінійний потік від start до end. LockupDynamic — кастомний графік з сегментами (cliff + linear, exponential, тощо). Для vesting з cliff: перші 12 місяців нічого, потім лінійний потік 24 місяці — це два сегменти у LockupDynamic.
// Створення потоку у Sablier v2
ISablierV2LockupLinear.CreateWithRange({
asset: IERC20(USDC),
sender: msg.sender,
recipient: employee,
totalAmount: 120_000e6, // 120k USDC
range: ISablierV2LockupLinear.Range({
start: uint40(block.timestamp),
cliff: uint40(block.timestamp + 365 days),
end: uint40(block.timestamp + 3 * 365 days)
}),
cancelable: true,
transferable: true
})
Sablier не вимагає депозиту та немає liquidation ризику. Весь totalAmount заблоковується у контракті при створенні потоку. Отримувач забирає накопичену суму через withdraw(). Газ при кожному withdraw — це trade-off vs Superfluid.
Вибір протоколу під завдання
| Параметр | Superfluid | Sablier v2 |
|---|---|---|
| Gas на створення потоку | Низький | Середній |
| Gas на отримання токенів | Немає (realtime balance) | Є (withdraw транзакція) |
| Liquidation ризик | Так (buffer system) | Ні |
| Потік як NFT | Ні | Так |
| Vesting з cliff | Через конфігурацію | Нативно |
| Підходить для | Зарплати, підписки | Vesting, grants |
Superfluid — для регулярних виплат (зарплати, стрімінгові підписки, DCA), де відправник тримає активний баланс. Інтеграції з Gelato для автоматичного top-up.
Sablier — для vesting, grants, односторонніх виплат з фіксованою сумою. NFT-позиція дозволяє інтегрувати secondary market.
Інтеграція у продукт
Superfluid інтеграція
SDK: @superfluid-finance/sdk-core. Основні операції через Framework:
import { Framework } from '@superfluid-finance/sdk-core'
const sf = await Framework.create({ chainId: 137, provider })
const usdc_x = await sf.loadSuperToken('USDCx')
const createFlowOp = usdc_x.createFlow({
sender: senderAddress,
receiver: receiverAddress,
flowRate: '3858024691358024' // ~10k USDC/місяць у wei/sec
})
await createFlowOp.exec(signer)
flowRate у wei/second: для $10,000/місяць = 10000 * 1e6 / (30 * 24 * 3600) = 3858 wei USDC/sec.
Для мониторингу потоків — Superfluid Subgraph (The Graph):
query {
streams(where: { receiver: "0x..." }) {
currentFlowRate
streamedUntilUpdatedAt
}
}
Sablier інтеграція
SDK: @sablier/v2-sdk або прямі виклики контрактів через ethers.js/viem. Адреси контрактів для кожного чейна в документації.
Перед створенням потоку потрібен approve ERC-20 токена: token.approve(sablierAddress, totalAmount).
Після approve — створення потоку, отримання streamId. Цей ID потрібен для всіх подальших операцій: withdraw, cancel, transferFrom.
Підтримувані чейни
Superfluid: Ethereum, Polygon, Arbitrum, Optimism, Base, BNB Chain, Avalanche, Gnosis.
Sablier v2: Ethereum, Arbitrum, Optimism, Base, Polygon, BNB Chain, Avalanche, Blast.
Якщо чейн клієнта не підтримується — є варіант з власною реалізацією базової streaming логіки, хоча це значно дорожче та вимагає аудиту.
Процес розробки
Вибір протоколу (1 день). Аналізуємо use case: розрахункові vesting потоки або постійні виплати, важливий ліи liquidation ризик, потрібна ліи tradeable позиція.
Інтеграція (2-3 дні). SDK + смарт-контракт якщо потрібна кастомна логіка (наприклад, розподіл на кілька отримувачів з одного джерела).
UI (1-2 дні). Dashboard з поточними потоками, балансами, управлінням. wagmi/viem для on-chain читання.
Тести та деплой (1 день). Fork-тесті на mainnet. Деплой на тестнет, потім mainnet.
Орієнтири за часовими рамками
Інтеграція Superfluid або Sablier у існуючий продукт — 3-5 днів. Створення системи управління потоками з UI (створення/скасування/мониторинг) — до 2 тижнів.







