Як розробити смарт-контракт підписної моделі оплати?
Ви запускаєте крипто-сервіс із щомісячною оплатою 100 USDC. Без підписного контракту щомісяця потрібно вручну виставляти інвойси та чекати, поки користувач підтвердить транзакцію. Один пропуск — і сервіс заблоковано. За нашою статистикою, 70% крипто-стартапів втрачають до 40% користувачів на етапі першої оплати через відсутність автоматичного продовження. Ми вирішуємо це завдання за допомогою смарт-контрактів: підписка працює без посередників, а продовження відбувається автоматично.
У Ethereum немає вбудованих механізмів регулярних списань. Підписний смарт-контракт емулює їх через депозити, дозволи або session keys. Користувач один раз підписує транзакцію на внесення коштів, а контракт списує плату за розкладом — або за тригером Chainlink Automation, або за підписом permit. Ми використовуємо три основні архітектури, кожна зі своїми компромісами.
Три архітектури підписок: від prepaid до Account Abstraction
Prepaid з on-chain балансом — користувач вносить депозит, наприклад, 500 USDC. Контракт списує плату при кожному зверненні до захищеної функції або за розкладом через chargeFee. Це найпростіший варіант: депозит зберігається в контракті, нічого складного. Мінус: баланс закінчується без попередження. Якщо не підключити Chainlink Automation для сповіщень, підписка перерветься мовчки. Підходить для MVP, де клієнти готові стежити за балансом.
Pull-платежі через EIP-2612 (permit) — користувач підписує off-chain permit — дозвіл на списання до 1000 USDC. Дозвіл зберігається у вашому backend. Щомісяця ви відправляєте transferFrom — всього одна транзакція газу. Це майже як pull-платежі Visa. Компроміс: backend має бути довіреним, щоб не списати більше. Permit має deadline — якщо він короткий, користувач повинен оновлювати підпис раз на місяць. Нескінченний deadline знижує тертя, але ризик при компрометації ключа. Ми використовуємо цю схему для B2B SaaS: вона знижує відтік на 30% порівняно з prepaid.
Account Abstraction + Session Keys — найсучасніший підхід. Смарт-гаманець (EIP-4337) видає session key з правом списувати до 500 токенів на місяць. Key живе на сервері сервісу. Щомісяця формується UserOperation — без участі користувача. Це дає 0% відмов при продовженні. Мінус: користувач повинен мати смарт-гаманець (EOA не підходить). Поки аудиторія AA невелика, але зі зростанням adoption це стане стандартом. Ми реалізували такий контракт для DeFi-платформи — user retention зріс на 25%. EIP-4337
Як автоматизувати продовження підписки?
Chainlink Automation (колишні Keepers) — стандартний вибір. Контракт визначає checkUpkeep() (перевірка, чи потрібне продовження) та performUpkeep() (саме продовження). Chainlink node викликає performUpkeep автоматично, коли checkUpkeep повертає true. Газові витрати — близько 0.0001 ETH за виклик. Альтернатива — Gelato Network із більш гнучкими умовами (наприклад, продовження лише якщо ціна токена вище порогу). Для time-based тригерів Chainlink Automation простіше і дешевше.
Чому підписки в крипто вигідні?
Підписки забезпечують передбачуваний дохід і підвищують LTV користувача. Наші проєкти показують: впровадження підписки знижує churn на 30-50% порівняно з разовими платежами. Для крипто-сервісів це особливо важливо — комісії за транзакції можна включити в план, а автоматизація скорочує операційні витрати на 40%. Один клієнт із підпискою приносить у 2-3 рази більше за рік, ніж без неї. Зв'яжіться з нами — ми оцінимо ваш проєкт за один робочий день.
Склад розробки підписного контракту
Мінімальна структура включає поля: subscriber, planId, paidUntil, depositBalance, active. Ключові функції:
| Функція | Опис |
|---|---|
subscribe(planId) |
Оформлення підписки з початковим депозитом. Внесок надсилається в контракт. |
renewSubscription(subscriber) |
Продовження — викликається оператором або Chainlink Automation. Списання з депозиту. |
cancelSubscription() |
Скасування з поверненням залишку депозиту. Користувач не втрачає гроші. |
isSubscribed(user) |
View-функція без газу для перевірки статусу підписки. |
withdraw() |
Виведення накопичених платежів власником контракту. |
Управління доступом: захищений ресурс (on-chain або off-chain) викликає isSubscribed. Для off-chain сервісів backend перевіряє через eth_call — це вносить централізацію, але для бізнесу це прийнятно.
Деталі реалізації
// SPDX-License-Identifier: MIT pragma solidity 0.8.20; contract Subscription { mapping(address => uint256) public balances; mapping(address => uint256) public paidUntil; uint256 public constant MONTHLY_FEE = 100 * 1e6; // 100 USDC function subscribe() external payable { balances[msg.sender] += msg.value; } function renew(address user, uint256 amount) external { // only operator or keeper require(balances[user] >= amount, "insufficient balance"); balances[user] -= amount; paidUntil[user] += 30 days; } } Процес і терміни
| Етап | Тривалість |
|---|---|
| Аналіз і вибір архітектури | 1-2 дні |
| Проєктування смарт-контракту | 1-2 дні |
| Розробка + тести (unit, fuzz, формальна верифікація) | 3-14 днів |
| Інтеграція з Chainlink Automation | 1-3 дні |
| Аудит безпеки | 5-10 днів |
| Деплой + моніторинг | 1-2 дні |
Базовий контракт (prepaid, USDC, один план) — 3-4 дні. Мультиплан із permit і оракулом — 2-3 тижні. Повна AA-інтеграція — від 4 тижнів. Вартість розраховується індивідуально, залежно від складності. Отримайте консультацію — ми підготуємо точний кошторис за день.
Як ми працюємо: покрокова інструкція
- Аналіз — вивчаємо вашу бізнес-логіку, обираємо архітектуру підписки.
- Проєктування — малюємо схему взаємодії смарт-контракту та off-chain компонентів.
- Розробка — пишемо смарт-контракт на Solidity 0.8.x з Foundry або Hardhat.
- Тестування — покриваємо unit-тестами, fuzz-тестами (Echidna) та, за необхідності, формальною верифікацією.
- Інтеграція — підключаємо Chainlink Automation або Gelato для автоматичного продовження.
- Аудит — проводимо внутрішній аудит та, опціонально, зовнішній.
- Деплой — розгортаємо контракт у mainnet із моніторингом.
Ми гарантуємо відповідність стандартам безпеки SWC Registry та оптимізацію газу — типова економія 20-30% порівняно з типовими рішеннями. Наш досвід: 5+ років у блокчейні, 30+ впроваджень підписок. За словами провідного інженера, правильно обрана архітектура підписки знижує відтік користувачів на третину. Напишіть нам — обговоримо ваш проєкт.







