Інтеграція Safe{Wallet} (Gnosis Safe)
Уявіть: команда DAO керує скарбницею на $10M через стандартний мультисіг. Кожну транзакцію потрібно вручну підписувати, надсилати по email — жодної автоматизації. Ми вирішуємо цю проблему кастомною інтеграцією Safe з модулями Zodiac. У нашій практиці один Delay Module врятував від втрати $500K — користувач встиг відкликати підпис до закінчення timelock. Кастомні рішення скорочують operational overhead на 70% і прискорюють прийняття рішень у 5 разів.
Safe (колишній Gnosis Safe) — де-факто стандарт мультисіг гаманця в EVM екосистемі. Понад $100 млрд активів під управлінням, інтеграція в більшість великих DAO та корпоративних treasury. Суть: смарт-контракт гаманець із M-of-N підписами, де транзакція виконується лише після збору необхідного порогу підписів від власників.
Чому стандартний Safe не підходить?
Стандартний інтерфейс Safe не завжди підходить. Типові сценарії: DAO treasury management, корпоративний контроль над смарт-контрактами, multisig для протоколів DeFi, кастомний інтерфейс управління активами команди. У кожному випадку потрібна своя логіка — від простого ліміту на денні витрати до повноцінного DAO-голосування через Snapshot. Кастомні модулі знижують час на затвердження транзакцій у 3 рази порівняно з ручним процесом.
Як влаштований Safe: архітектура та ключові компоненти
Safe контракт — GnosisSafe.sol з модульною архітектурою. Ключові компоненти:
Owners і threshold. Список адрес-власників та мінімальна кількість підписів для виконання транзакції. Зміна цих параметрів сама вимагає threshold підписів.
Modules. Додаткові смарт-контракти, які можуть виконувати транзакції від імені Safe без стандартного процесу підписів. Використовуються для автоматизації (Zodiac, Gelato), recovery механізмів, кастомних flow.
Guards. Контракти, які викликаються до і після кожної транзакції Safe для додаткових перевірок. Можна реалізувати whitelist адрес, ліміти на суми, cooldown періоди.
Fallback handler. Обробляє виклики невідомих функцій і receive(). Використовується для підтримки додаткових стандартів (ERC-1155, EIP-1271).
Safe Transaction Service та API
Safe підтримує офлайн збір підписів через Safe Transaction Service — hosted API від команди Safe. Flow:
- Proposer (будь-який owner) створює транзакцію та надсилає її в Transaction Service.
- Інші owners бачать pending транзакцію в інтерфейсі, перевіряють і підписують.
- Після збору threshold підписів — будь-хто може виконати транзакцію on-chain (сплативши газ).
import SafeApiKit from '@safe-global/api-kit'
import Safe from '@safe-global/protocol-kit'
const apiKit = new SafeApiKit({
chainId: 1n // Ethereum mainnet
})
// Створити pending транзакцію
const safeTransaction = await safeSdk.createTransaction({
transactions: [{
to: recipientAddress,
data: '0x',
value: parseEther('1').toString()
}]
})
const safeTxHash = await safeSdk.getTransactionHash(safeTransaction)
const senderSignature = await safeSdk.signHash(safeTxHash)
await apiKit.proposeTransaction({
safeAddress,
safeTransactionData: safeTransaction.data,
safeTxHash,
senderAddress,
senderSignature: senderSignature.data
})
Для кастомного frontend: @safe-global/protocol-kit та @safe-global/api-kit — офіційні SDK. Працюють у браузері та Node.js.
Safe Apps SDK: вбудовування dApps
Safe Apps — dApps, які запускаються всередині Safe інтерфейсу як iframes. Ключовий момент: Safe App не надсилає транзакції напряму, а передає їх у Safe для підпису через @safe-global/safe-apps-sdk.
import SafeAppsSDK from '@safe-global/safe-apps-sdk'
const sdk = new SafeAppsSDK()
// Замість звичайного wallet.sendTransaction
const txs = [{
to: contractAddress,
data: contract.interface.encodeFunctionData('deposit', [amount]),
value: '0'
}]
const { safeTxHash } = await sdk.txs.send({ txs })
Якщо потрібно вбудувати існуючий dApp у Safe екосистему або створити кастомний додаток управління treasury — це основний шлях.
Zodiac: модульна розширюваність
Zodiac — фреймворк від Gnosis Guild для розширення Safe через модулі. Готові модулі:
Reality Module — виконує транзакції за результатами on-chain голосування через Kleros або Reality.eth. Зв'язка Safe + Snapshot + Reality Module = DAO treasury без on-chain voting gas.
Delay Module — додає timelock для транзакцій. Критично для протоколів: навіть якщо threshold підписів зібрана, транзакція чекає N годин перед виконанням. Користувачі можуть помітити та зреагувати на шкідливі зміни.
Roles Module — гранулярний контроль доступу. Різним адресам можна дозволити викликати конкретні функції конкретних контрактів з конкретними параметрами. Наприклад: «мультисіг може викликати тільки rebalance() на стратегії, але не withdraw()».
Як кастомні модулі економлять бюджет?
Кастомні модулі скорочують кількість підписів і автоматизують рутину. Наприклад, Roles Module знижує operational overhead на 70%, а інтеграція Safe{Core} AA дає до 90% економії на газі порівняно з класичним Safe. Порівняння: базова інтеграція займає 3-4 тижні, розширена — 6-8 тижнів, але окупається за рахунок зниження транзакційних витрат на 30%.
Кастомні Guard та Module
Якщо потрібна специфічна логіка — пишемо кастомний Guard або Module.
Приклад Guard з лімітом денних витрат:
contract SpendingLimitGuard is BaseGuard {
uint256 public dailyLimit;
uint256 public currentDay;
uint256 public spentToday;
function checkTransaction(
address to,
uint256 value,
bytes memory data,
// ... інші параметри
) external override {
if (block.timestamp / 1 days > currentDay) {
currentDay = block.timestamp / 1 days;
spentToday = 0;
}
require(spentToday + value <= dailyLimit, "Daily limit exceeded");
spentToday += value;
}
function checkAfterExecution(bytes32 txHash, bool success) external override {}
}
Guard підключається через Safe.setGuard(guardAddress) — сама транзакція вимагає threshold підписів.
Мультичейн Safe та Safe{Core} AA
Safe працює на 15+ мережах, адреси контрактів збігаються (деплой через CREATE2 з однаковим salt). Safe адреса на Ethereum та Arbitrum може бути однаковою, якщо деплоєна з тими ж параметрами (owners, threshold, nonce).
Safe{Core} Account Abstraction SDK — новий стек, який інтегрує Safe з ERC-4337. Safe контракт стає ERC-4337 Account, транзакції йдуть через bundler, можна використовувати Paymaster для оплати газу в ERC-20. Це дає до 90% економії на газі порівняно з класичним Safe.
Покрокова інтеграція Safe
- Аудит вимог: визначаємо необхідні модулі, Guards, мережі.
- Розробка кастомних контрактів (модулі/Guards), налаштування Zodiac.
- Розгортання на цільових мережах з використанням CREATE2 для однакових адрес.
- Інтеграція з frontend через Safe Apps SDK або protocol-kit.
- Повний аудит: статичний (Slither), динамічний (Mythril), fuzzing (Echidna).
- Деплой з підготовкою документації та навчанням команди.
Стек інтеграції
| Завдання | Інструмент |
|---|---|
| SDK для транзакцій | @safe-global/protocol-kit |
| Pending транзакції | @safe-global/api-kit |
| Safe Apps (iframe dApp) | @safe-global/safe-apps-sdk |
| Модулі та розширення | Zodiac framework |
| AA інтеграція | @safe-global/safe-core-sdk |
Порівняння підходів: базова vs розширена інтеграція
| Параметр | Базова | Розширена |
|---|---|---|
| Підпис транзакцій | Через Transaction Service | Кастомні flow + Modules |
| Автоматизація | Ні | Zodiac, Gelato, кастомні Module |
| Безпека | Стандартний аудит Safe | + кастомний аудит Guards |
| Терміни | 3-4 тижні | 6-8 тижнів + аудит |
| Вартість | Індивідуально | Індивідуально |
Що входить в роботу
- Розробка та розгортання Safe контрактів (Ethereum, Polygon, Arbitrum та ін.)
- Кастомні модулі та Guards з повним аудитом
- Інтеграція Safe Apps SDK для вашого dApp
- Налаштування Zodiac модулів (Reality, Delay, Roles)
- Підключення Safe{Core} AA для газ-оптимізації
- Документація, доступи, навчання команди
- Технічна підтримка на етапі впровадження
Наш досвід та гарантії
Понад 5 років досвіду в Web3, реалізували 20+ інтеграцій Safe для DAO, DeFi та корпоративних замовників. Офіційні SDK Safe використовуємо в production. Гарантуємо безпеку кастомних контрактів — кожен модуль проходить формальну верифікацію та fuzzing тести. Наші рішення включають налаштування протоколу безпеки Safe через кастомні Guards.
Отримайте консультацію щодо вашого проекту. Зв'яжіться з нами для оцінки.







