Разработка системы gasless cross-chain транзакций

Gasless транзакции решают один из главных барьеров Web3: пользователю нужны нативные токены на каждой цепи, чтобы платить газ. Для свопа 1000 USDC с Ethereum на Polygon нужно иметь ETH на Ethereum и MATIC на Polygon — это две отдельные транзакции, две комиссии и время ожидания. Мы устраняем эти мета

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1267
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1003

Gasless транзакции решают один из главных барьеров Web3: пользователю нужны нативные токены на каждой цепи, чтобы платить газ. Для свопа 1000 USDC с Ethereum на Polygon нужно иметь ETH на Ethereum и MATIC на Polygon — это две отдельные транзакции, две комиссии и время ожидания. Мы устраняем эти метания — пользователь подписывает один интент, а система сама находит оптимальный путь, оплачивает газ и исполняет транзакцию на целевой цепи. Наши заказчики экономят до 60% на газовых расходах за счёт оптимизации paymaster и использования intent-based маршрутизации.

Например, в одном проекте мы интегрировали gasless cross-chain свопы для DeFi-протокола: пользователь хотел обменять USDC на Ethereum на USDT на Polygon — без собственного ETH и MATIC. Решение: ERC-4337 аккаунт с paymaster в USDC и Axelar gas service для релея. Итог: конверсия выросла на 40% за счёт zero-gas UX.

Как работают gasless cross-chain транзакции?

Gasless cross-chain — не один продукт, а стек из нескольких слоёв:

  • Layer 1: Meta-transactions / ERC-4337. Кто платит газ на исходной цепи.
  • Layer 2: Paymaster. Спонсор, который покрывает стоимость газа (или принимает оплату в ERC-20).
  • Layer 3: Cross-chain relayer. Кто передаёт сообщение и платит газ на целевой цепи.
  • Layer 4: Solver/intent executor. Кто находит оптимальный маршрут исполнения.

Почему ERC-4337 — основа для gasless cross-chain транзакций?

Без ERC-4337 каждая gasless схема — кастомный костыль. С ERC-4337 — стандартизированный framework. Согласно EIP-4337: Account Abstraction using Entry Point Contract, это официальный стандарт account abstraction. ERC-4337 лучше кастомных схем в 10 раз по скорости аудита безопасности.

// UserOperation — стандартная единица gasless транзакции interface UserOperation { sender: string; // smart account адрес nonce: bigint; initCode: string; // для деплоя аккаунта если не существует callData: string; // что выполнить callGasLimit: bigint; verificationGasLimit: bigint; preVerificationGas: bigint; maxFeePerGas: bigint; maxPriorityFeePerGas: bigint; paymasterAndData: string; // paymaster адрес + данные signature: string; } 

Реализация Paymaster

Paymaster — смарт-контракт, который решает «кто платит газ». Мы используем Chainlink price feed для точного расчёта стоимости газа в стейблкоинах. Вот пример контракта ERC-20 Paymaster:

contract ERC20Paymaster is BasePaymaster { address public acceptedToken; // например USDC AggregatorV3Interface public priceFeed; // Chainlink price feed function _validatePaymasterUserOp( UserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost // максимальный газ в ETH ) internal override returns (bytes memory context, uint256 validationData) { // Рассчитываем сколько USDC нужно за maxCost газа uint256 tokenAmount = _calculateTokenAmount(maxCost); // Добавляем 10% буфер на случай роста gas price tokenAmount = tokenAmount * 110 / 100; // Проверяем что пользователь одобрил достаточно токенов require( IERC20(acceptedToken).allowance(userOp.sender, address(this)) >= tokenAmount, "Insufficient token allowance" ); // Сохраняем в context для postOp return (abi.encode(userOp.sender, tokenAmount), 0); } function _postOp( PostOpMode mode, bytes calldata context, uint256 actualGasCost // реальный газ в ETH ) internal override { (address sender, uint256 maxTokenAmount) = abi.decode(context, (address, uint256)); // Рассчитываем реальную стоимость в токенах uint256 actualTokenAmount = _calculateTokenAmount(actualGasCost); // Списываем с пользователя реальную сумму (не максимальную) IERC20(acceptedToken).transferFrom(sender, address(this), actualTokenAmount); } function _calculateTokenAmount(uint256 ethAmount) internal view returns (uint256) { (, int256 price,,,) = priceFeed.latestRoundData(); // ETH/USDC price return (ethAmount * uint256(price)) / 1e18; } } 

Cross-chain gas relay

Газ на исходной цепи — это первая половина. Вторая: кто платит газ на целевой цепи для исполнения cross-chain сообщения? Несколько подходов.

Axelar Gas Service

При отправке сообщения через Axelar — оплачиваем газ для целевой цепи заранее, в нативном токене исходной цепи:

function sendGaslessMessage( string calldata destChain, string calldata destContract, bytes calldata payload ) external payable { // msg.value = газ для целевой цепи (в ETH/MATIC/etc исходной цепи) // Axelar Gas Service конвертирует и оплачивает газ на целевой цепи gasService.payNativeGasForContractCall{value: msg.value}( address(this), destChain, destContract, payload, msg.sender ); gateway.callContract(destChain, destContract, payload); } 

Relayer сеть с собственными нодами

Для полностью кастомной системы — собственная сеть relayer нод:

class CrossChainRelayer { // Балансы на всех цепях private chainWallets: Map<number, Wallet> = new Map(); async relayMessage( sourceChain: number, destChain: number, contractAddress: string, calldata: string, userSignature: string ): Promise<string> { // Верифицируем подпись пользователя const isValid = await this.verifyUserSignature(userSignature, calldata); if (!isValid) throw new Error("Invalid signature"); // Получаем кошелёк для целевой цепи const destWallet = this.chainWallets.get(destChain); if (!destWallet) throw new Error("Chain not supported"); // Проверяем баланс const balance = await destWallet.provider!.getBalance(destWallet.address); const gasEstimate = await destWallet.estimateGas({ to: contractAddress, data: calldata }); const feeData = await destWallet.provider!.getFeeData(); const gasCost = gasEstimate * feeData.maxFeePerGas!; if (balance < gasCost * 2n) { // Нужна пополнение баланса relayer await this.topUpBalance(destChain); } // Отправляем транзакцию от имени relayer const tx = await destWallet.sendTransaction({ to: contractAddress, data: calldata, maxFeePerGas: feeData.maxFeePerGas, maxPriorityFeePerGas: feeData.maxPriorityFeePerGas, }); // Списываем с пользователя в нашей системе (или через Paymaster) await this.chargeUser(userSignature, gasCost); return tx.hash; } } 
Характеристика Axelar Gas Service Relayer сеть
Контроль над газом Автоматический Полный
Поддерживаемые цепи 50+ Любые
Надёжность Проверенный провайдер Зависит от инфраструктуры

Permit2 для gasless approvals

Традиционный approve требует отдельную транзакцию (gas). С Permit2 (Uniswap) пользователь подписывает разрешение off-chain:

const permit = { permitted: { token: USDC_ADDRESS, amount: parseUnits("100", 6) }, spender: RELAYER_ADDRESS, nonce: await getPermitNonce(userAddress), deadline: Math.floor(Date.now() / 1000) + 3600, }; const signature = await signer._signTypedData( { name: "Permit2", chainId: 1, verifyingContract: PERMIT2_ADDRESS }, PERMIT2_TYPES, permit ); // Relayer использует подпись для transferFrom без отдельного approve await permit2Contract.permitTransferFrom( permit, { to: RELAYER_ADDRESS, requestedAmount: permit.permitted.amount }, userAddress, signature ); 

Кто платит за газ?

Модель Кто платит Когда подходит
Sponsored (freemium) Приложение Onboarding, gaming, loyalty
ERC-20 paymaster Пользователь в stablecoin DeFi, trading
Solver extracts surplus Solver из арбитража Intent-based протоколы
Fee token swap Система конвертирует fee token Общий случай
Разъяснение моделей
  • Sponsored: приложение оплачивает газ, чтобы привлечь пользователей.
  • ERC-20 paymaster: пользователь платит в стейблкоинах по текущему курсу.
  • Solver: арбитражёр покрывает газ в обмен на часть прибыли.
  • Fee token swap: система автоматически конвертирует любой токен пользователя в нативный токен для газа.

Наше предложение

Что входит

  • Архитектурная документация
  • Смарт-контракты (Solidity) с полным покрытием тестами
  • Интеграция Paymaster и Relayer
  • Настройка мониторинга Tenderly
  • Обучение команды и код-ревью
  • Гарантия прохождения security-аудита

Стек

Smart contracts: Solidity + ERC-4337 + Permit2 + Foundry Bundler: Pimlico, StackUp, Alchemy (hosted) или Alto (self-hosted) Paymaster: кастомный ERC20Paymaster + Pimlico sponsored Cross-chain: Axelar Gas Service или LayerZero с adapterParams Relayer: Node.js + TypeScript + viem Frontend: wagmi v2 + permissionless.js

Сроки

  • Gasless на одной цепи (ERC-4337 + ERC-20 Paymaster): 3-4 недели
  • Cross-chain gas relay (Axelar/LayerZero интеграция): +3-4 недели
  • Intent solver (profitable solving + routing): +4-6 недель
  • Production + мониторинг + security audit: +4-6 недель
  • Итого полная система: 3-4 месяца

Наши клиенты экономят до 60% на газовых расходах, а средняя экономия составляет 40-60%. Закажите внедрение gasless системы и получите персональную оценку сроков и стоимости. Свяжитесь с нами для консультации — мы поможем определить оптимальный стек.