Для протоколів із постійним потоком транзакцій — автоматичні ліквідації, rebalancing, keeper-функції, bridge relayers — вартість газу безпосередньо впливає на економіку. При ліквідації на $50 і gas cost $30 рентабельність залежить від того, чи відправляєте ви транзакцію при 20 Gwei чи при 80 Gwei. Ми розробляємо комплексні системи оптимізації газу — не разовий рефактор контрактів, а зв'язку контрактних оптимізацій, динамічного timing та інфраструктури моніторингу. Наш досвід: 10+ років у блокчейні, 50+ проєктів із доведеною економією. Часта помилка — ігнорувати gas price volatility та відправляти всі транзакції з фіксованим maxFeePerGas — в результаті протокол втрачає до 60% бюджету на газ. Ми вирішуємо це через адаптивні стратегії. Наприклад, протокол із 5000 транзакціями на місяць знизив витрати з $15 000 до $4500 — це реальна економія. Пишіть — оцінимо ваш проєкт та запропонуємо рішення під ключ.
Як оптимізувати gas на рівні смарт-контрактів?
Перший шар оптимізації — самі контракти. Приріст продуктивності тут може становити 30–70% порівняно з наївною реалізацією.
Хранилище (Storage) — найдорожча операція. SSTORE — один із найдорожчих opcodes. Стратегії:
- Packing storage variables — змінні одного слота (32 байти) читаються і пишуться разом. Solidity компілятор автоматично пакує змінні менше 32 байт, якщо вони оголошені послідовно. Аналізуйте через Foundry gas reports.
- Уникати повторних SLOAD в одній функції. Один раз читаємо в memory змінну, працюємо з нею.
- Custom errors замість require strings —
error InsufficientBalanceекономить ~200 gas на деплої та ~50 gas при виклику.
Calldata оптимізація: Zero bytes в calldata коштують 4 gas, non-zero bytes — 16 gas (EIP-2028). Використовуйте bitmap для boolean flags замість окремих параметрів:
function execute(uint8 flags) external { bool useFlashLoan = flags & 0x01 != 0; bool reinvest = flags & 0x02 != 0; bool autoCompound = flags & 0x04 != 0; } Multicall pattern — батчинг кількох викликів в одну транзакцію через OpenZeppelin Multicall. Економія: 21000 gas × (N-1) для N операцій.
Yul/Assembly для критичних шляхів: Для inner loop функцій із тисячами викликів inline assembly дає 10–40% економії. Приклад — оптимізований трансфер токена:
function _efficientTransfer(address token, address to, uint256 amount) internal { assembly { let ptr := mload(0x40) mstore(ptr, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) mstore(add(ptr, 0x04), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) mstore(add(ptr, 0x24), amount) if iszero(call(gas(), token, 0, ptr, 0x44, ptr, 0x20)) { revert(0, 0) } } } Використовуйте Yul тільки коли профілювання показує реальний bottleneck — такий код складніше аудитувати.
Динамічна стратегія timing транзакцій
Другий шар — коли відправляти транзакцію. Газ в Ethereum має циклічний патерн: найнижчий у вихідні (особливо неділя UTC 02:00–08:00), вищий у будні під час торгової сесії США (14:00–22:00 UTC). Для некритичних операцій відкладання до low-gas періоду економить реальні гроші (до $5000/міс за нашими даними).
EIP-1559 модель: effectiveGasPrice = min(maxFeePerGas, baseFee + maxPriorityFeePerGas). baseFee алгоритмічно адаптується до завантаження мережі. Передбачуваність baseFee на 1–3 блоки вперед досить висока — можна чекати зниження.
Gas Oracle: система прийняття рішень з експоненціальним backoff і jitter очікування:
async function waitForOptimalGas(strategy: GasStrategy): Promise<void> { while (true) { const block = await provider.getBlock("latest"); const baseFee = block.baseFeePerGas!; if (baseFee <= strategy.maxBaseFee || block.number >= strategy.deadline) break; const waitMs = Math.min(12000, 3000 * Math.random() + 3000); await sleep(waitMs); } } Batch операції та EIP-4337 Account Abstraction
Account Abstraction через EIP-4337 додає можливості:
- UserOperation batching: кілька операцій в одному
UserOpз атомарним виконанням. - Gas sponsorship (Paymaster): платите gas в ERC-20 токенах, якщо на keeper-гаманці немає ETH.
- Паралельна відправка через EntryPoint: кілька UserOp від різних користувачів батяться bundler'ом, економія ділиться.
| Стратегія | Економія газу | Складність впровадження |
|---|---|---|
| Storage packing | 30-50% | Низька |
| Multicall | 40-70% | Середня |
| EIP-4337 batching | 50-80% | Висока |
EIP-4337 batching економить в 1.5–2 рази більше газу, ніж простий Multicall, за рахунок відмови від зовнішніх викликів.
Чому транзакції застряють і як це запобігти?
При різкому зростанні gas price транзакція із заниженим maxFeePerGas може не включатися годинами. Потрібен watchdog-сервіс, який через 10–20 блоків відправляє replacement з тим же nonce і підвищеним maxFeePerGas (+20%):
async function speedUpTransaction(originalTx: TransactionResponse) { const currentBaseFee = (await provider.getBlock("latest"))!.baseFeePerGas!; const newMaxFee = maxBigInt( originalTx.maxFeePerGas! * 120n / 100n, currentBaseFee * 2n ); return wallet.sendTransaction({ ...originalTx, maxFeePerGas: newMaxFee, maxPriorityFeePerGas: originalTx.maxPriorityFeePerGas! * 120n / 100n, }); } Що ви отримуєте в результаті роботи
- Оптимізовані смарт-контракти (аудит включено)
- Стратегію timing транзакцій з Gas Oracle
- Інфраструктуру моніторингу (Prometheus + Grafana) з алертами
- Документацію та навчання команди
- Гарантію на систему — 6 місяців підтримки
Додатково ми налаштовуємо алерти на зниження комісій та аномалії в моніторингу газу. Замовте консультацію — ми підберемо рішення під ваш протокол. Середня економія для наших клієнтів — від $5000 на рік при помірному навантаженні.
Wikipedia: Gas (Ethereum) — базова концепція, яку ми враховуємо.
Підсумковий ефект від комплексної системи газ-оптимізації для протоколів з високим транзакційним навантаженням: 40–70% зниження витрат на газ відносно неоптимізованої baseline. Конкретні цифри залежать від типу операцій, мережі та volatility газового ринку. Зв'яжіться з нами для оцінки вашого проєкту — ми розробимо та впровадимо систему під ключ.







