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

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка системи gasless cross-chain транзакцій
Складний
~1-2 тижні
Часті запитання

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

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1306
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1218
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    920
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1147
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    610
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    885

Gasless крос-чейн транзакції

Gasless вирішує головний Web3 бар'єр: користувачам потрібні native токени на кожному чейні для оплати газу. Хочете Arbitrum? Потрібен ETH на Arbitrum. Хочете Base? Потрібен ETH на Base. Погана UX. Gasless кросс-чейн йде далі: користувач не думає про газ І не думає про те, на якому чейні знаходиться.

Компоненти

Layer 1: Meta-транзакції / ERC-4337. Хто платить газ на вихідному чейні.

Layer 2: Paymaster. Спонсор, що покриває газ або приймає ERC-20 оплату.

Layer 3: Крос-чейн relayer. Хто передає повідомлення і платить газ на цільовому.

Layer 4: Solver/intent executor. Знаходить оптимальний маршрут виконання.

ERC-4337 як фундамент

Без ERC-4337 кожна gasless схема — кастомний костиль. З ERC-4337 — стандартизований framework:

interface UserOperation {
  sender: string;
  nonce: bigint;
  initCode: string;
  callData: string;
  callGasLimit: bigint;
  verificationGasLimit: bigint;
  preVerificationGas: bigint;
  maxFeePerGas: bigint;
  maxPriorityFeePerGas: bigint;
  paymasterAndData: string;
  signature: string;
}

Bundler збирає UserOperations, упаковує в транзакцію, відправляє on-chain. Bundler платить газ та отримує відшкодування від paymaster або рахунку користувача.

Реалізація Paymaster

Paymaster вирішує "хто платить газ":

contract ERC20Paymaster is BasePaymaster {
    address public acceptedToken;
    AggregatorV3Interface public priceFeed;
    
    function _validatePaymasterUserOp(
        UserOperation calldata userOp,
        bytes32 userOpHash,
        uint256 maxCost
    ) internal override returns (bytes memory context, uint256 validationData) {
        uint256 tokenAmount = _calculateTokenAmount(maxCost);
        tokenAmount = tokenAmount * 110 / 100; // 10% буфер
        
        require(
            IERC20(acceptedToken).allowance(userOp.sender, address(this)) >= tokenAmount,
            "Insufficient token allowance"
        );
        
        return (abi.encode(userOp.sender, tokenAmount), 0);
    }
    
    function _postOp(
        PostOpMode mode,
        bytes calldata context,
        uint256 actualGasCost
    ) internal override {
        (address sender, uint256 maxTokenAmount) = abi.decode(context, (address, uint256));
        uint256 actualTokenAmount = _calculateTokenAmount(actualGasCost);
        IERC20(acceptedToken).transferFrom(sender, address(this), actualTokenAmount);
    }
}

Крос-чейн gas relay

Хто платить газ на цільовому?

Axelar Gas Service: передоплатити газ для цільового в native токені на вихідному:

function sendGaslessMessage(
    string calldata destChain,
    string calldata destContract,
    bytes calldata payload
) external payable {
    gasService.payNativeGasForContractCall{value: msg.value}(
        address(this), destChain, destContract, payload, msg.sender
    );
    gateway.callContract(destChain, destContract, payload);
}

LayerZero з gas drop: airdrop нативний газ на адресу цільового:

function sendWithGasDrop(
    uint16 dstChainId,
    bytes calldata payload,
    address payable refundAddress,
    address zroPaymentAddress,
    uint256 dstNativeAmount,
    address dstNativeAddress
) external payable {
    bytes memory adapterParams = abi.encodePacked(
        uint16(2),
        uint256(200000),
        dstNativeAmount,
        dstNativeAddress
    );
    
    lzEndpoint.send{value: msg.value}(
        dstChainId,
        abi.encode(destContract),
        payload,
        refundAddress,
        zroPaymentAddress,
        adapterParams
    );
}

Кастомна relayer мережа: власні relayer ноди, що тримають balances native токенів на всіх чейнах.

Intent-based gasless

Найбільш продвинута: користувач підписує намір, solver виконує і отримує прибуток від арбітражу:

interface GaslessIntent {
  user: string;
  sourceChain: number;
  destChain: number;
  action: string;
  inputToken: string;
  inputAmount: string;
  minOutputAmount: string;
  deadline: number;
  signature: string;
}

class IntentSolver {
  async solve(intent: GaslessIntent): Promise<void> {
    const route = await this.findOptimalRoute(intent);
    const expectedOutput = await this.simulate(route, intent);
    const gasCosts = await this.estimateTotalGasCosts(route);
    
    const profit = expectedOutput - BigInt(intent.minOutputAmount) - gasCosts;
    
    if (profit < this.minProfitThreshold) return;
    
    await this.executeRoute(route, intent);
  }
}

Permit2 для gasless approvals

Традиційний approve вимагає окремої транзакції (газ). З Permit2 (Uniswap):

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
);

await permit2Contract.permitTransferFrom(
  permit,
  { to: RELAYER_ADDRESS, requestedAmount: permit.permitted.amount },
  userAddress,
  signature
);

Економіка

Хто платить в результаті?

Модель Платник Коли
Sponsored (freemium) Додаток Onboarding, ігри, лояльність
ERC-20 paymaster Користувач в stablecoin DeFi, trading
Solver extracts surplus Solver з арбітражу Intent-based протоколи
Fee token swap Система конвертує Загальний випадок

Stack

Смарт-контракти: Solidity + ERC-4337 + Permit2 + Foundry. Bundler: Pimlico, StackUp, Alchemy або Alto. Paymaster: кастомний ERC20Paymaster. Крос-чейн: Axelar Gas Service або LayerZero. Relayer: Node.js + viem. Frontend: wagmi v2 + permissionless.js.

Таймлайни

  • Gasless один чейн (ERC-4337 + paymaster): 3-4 тижні
  • Крос-чейн gas relay (Axelar/LayerZero): +3-4 тижні
  • Intent solver: +4-6 тижнів
  • Production + моніторинг + аудит: +4-6 тижнів
  • Всього: 3-4 місяці