Система unified accounts: единый аккаунт для кросчейн-операций

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Система unified accounts: единый аккаунт для кросчейн-операций
Сложный
от 2 недель до 3 месяцев
Часто задаваемые вопросы

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

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

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

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

Разработка системы unified accounts

Сталкивались с ситуацией, когда для работы в разных блокчейнах приходится держать десяток кошельков и вручную перебрасывать ликвидность? Наша команда инженеров решает эту проблему с помощью системы unified accounts — единого аккаунта, который работает на всех сетях. Это не просто удобная абстракция, а архитектурное решение, объединяющее детерминированное развёртывание контрактов, кросчейн-синхронизацию и интент-ориентированное исполнение. Давайте разберём, как это устроено на уровне смарт-контрактов и инфраструктуры. Unified accounts эволюционируют от мультичейн-подхода (много кошельков) к chain-abstracted (один кошелёк, прозрачная мультичейн). Задача нетривиальная: реализовать её правильно означает решить несколько независимых технических проблем одновременно. Опыт нашей команды в кросчейн-разработке — более 10 успешных проектов.

Как unified account решает проблему фрагментации ликвидности?

При работе с несколькими L1/L2 цепями (Ethereum, Polygon, Arbitrum, Optimism, Base) пользователь вынужден держать средства на каждой сети отдельно. Unified account использует CREATE2 для детерминированного адреса и синхронизирует состояние через защищённый bridge. Это позволяет иметь единый логический баланс, который автоматически доступен на всех цепях без ручных переводов. Сравните: в традиционной схеме для stake 100 USDC в протоколе на Arbitrum нужно сначала перевести USDC с Ethereum — это минимум две транзакции и 15 минут ожидания. В unified account пользователь указывает намерение, а система сама маршрутизирует ликвидность через оптимальный bridge за пару кликов. Гарантируем, что экономия на газе и времени достигает 40–60% на типовых операциях.

Что такое unified account на техническом уровне?

Наивная реализация: смарт-контракт на каждой поддерживаемой цепи с одинаковым адресом (через CREATE2), синхронизация состояния через bridge. Это работает, но создаёт сложность: состояние разрознено, синхронизация имеет задержку и стоимость.

Продвинутая реализация разделяет четыре слоя: Identity, Intent, Execution, Settlement. Каждый слой решает свою задачу, а вместе они обеспечивают бесшовный кросчейн-опыт.

Слой Задача
Identity Определяет пользователя на всех цепях (один адрес)
Intent Принимает намерение пользователя (что сделать)
Execution Выбирает оптимальную цепь и маршрут исполнения
Settlement Проводит окончательный расчёт и синхронизацию

Детерминированные адреса через CREATE2

Первый шаг — один и тот же адрес на всех EVM цепях:

// Factory контракт с одинаковым адресом на всех цепях
contract AccountFactory {
    function deployAccount(
        bytes32 salt,
        bytes calldata initCode
    ) external returns (address account) {
        // CREATE2: адрес зависит только от factory address + salt + initCode
        // Если factory задеплоен через keyless deployment (один адрес на всех EVM),
        // то и Account будет иметь одинаковый адрес
        assembly {
            account := create2(0, add(initCode, 32), mload(initCode), salt)
        }
        
        if (account == address(0)) revert DeploymentFailed();
    }
    
    function predictAddress(
        bytes32 salt,
        bytes32 initCodeHash
    ) external view returns (address) {
        return address(uint160(uint256(keccak256(abi.encodePacked(
            bytes1(0xff),
            address(this),
            salt,
            initCodeHash
        )))));
    }
}

Keyless deployment (через ERC-2470 Singleton Factory или Nick's method) обеспечивает одинаковый адрес factory на всех EVM цепях. Следовательно — один и тот же salt + initCode = один адрес account на всех цепях. ERC-2470: Singleton Factory — это стандартный способ развёртывания контрактов с одинаковым адресом.

Cross-chain state synchronization

Второй шаг — синхронизация данных аккаунта между цепями. Например: пользователь обновляет список owners на Ethereum, это должно отразиться на Polygon.

Паттерн: Primary chain + синхронизация через bridge:

contract UnifiedAccountPrimary {
    // Primary state хранится на "home" цепи
    mapping(address => bool) public owners;
    uint256 public nonce;
    
    // Синхронизация изменений на другие цепи
    function addOwnerAndSync(
        address newOwner,
        uint64[] calldata targetChains,
        address[] calldata targetAccounts
    ) external onlyOwner {
        owners[newOwner] = true;
        
        // Отправляем update через bridge (CCIP, Axelar, LayerZero)
        for (uint i = 0; i < targetChains.length; i++) {
            bytes memory payload = abi.encode(
                "ADD_OWNER",
                newOwner,
                ++nonce
            );
            
            bridge.sendMessage(targetChains[i], targetAccounts[i], payload);
        }
        
        emit OwnerAdded(newOwner);
    }
}

contract UnifiedAccountReplica {
    // Реплика получает обновления от Primary
    uint256 public lastSyncedNonce;
    
    function receiveSync(
        bytes calldata payload,
        bytes32 originMessageId
    ) external onlyBridge {
        (string memory action, address target, uint256 nonce) = 
            abi.decode(payload, (string, address, uint256));
        
        // Защита от replay: nonce должен быть следующим
        require(nonce == lastSyncedNonce + 1, "Invalid nonce");
        lastSyncedNonce = nonce;
        
        if (keccak256(bytes(action)) == keccak256(bytes("ADD_OWNER"))) {
            _addOwner(target);
        }
    }
}

Intent-based execution

Unified account принимает намерения пользователя, не конкретные транзакции. Пользователь говорит «хочу stake 100 USDC в протоколе X» — система сама решает откуда взять USDC и на какой цепи исполнить:

interface UserIntent {
  action: "stake" | "swap" | "transfer" | "borrow";
  targetProtocol: string;
  targetChain?: number;  // опционально — если не указана, система выбирает
  inputToken: string;
  inputAmount: string;
  outputToken?: string;
  minOutputAmount?: string;
  deadline?: number;
}

class IntentRouter {
  async resolveIntent(intent: UserIntent, userProfile: UserProfile): Promise<ExecutionPlan> {
    // 1. Находим лучшую цепь для исполнения
    const targetChain = intent.targetChain || 
      await this.findOptimalChain(intent, userProfile);
    
    // 2. Определяем откуда взять средства
    const fundingSource = await this.findBestFundingSource(
      intent.inputToken,
      intent.inputAmount,
      userProfile.balances,
      targetChain
    );
    
    // 3. Строим execution plan
    const steps: ExecutionStep[] = [];
    
    if (fundingSource.chainId !== targetChain) {
      // Нужен bridge
      steps.push({
        type: "bridge",
        fromChain: fundingSource.chainId,
        toChain: targetChain,
        token: intent.inputToken,
        amount: intent.inputAmount,
        bridgeProtocol: await this.selectBridge(fundingSource.chainId, targetChain),
      });
    }
    
    // Основное действие
    steps.push({
      type: intent.action,
      chainId: targetChain,
      protocol: intent.targetProtocol,
      ...
    });
    
    return {
      steps,
      estimatedGas: await this.estimateTotalGas(steps),
      estimatedTime: this.estimateTime(steps),
    };
  }
}

Gasless cross-chain операции

Для полного UX unified account — пользователь не должен думать о газе. Система абстрагирует это:

// Пользователь платит в USDC, система конвертирует в нативные токены
async function executeGasless(
  intent: UserIntent,
  feeToken: "USDC" | "USDT" | string
): Promise<string> {
  const plan = await intentRouter.resolveIntent(intent, userProfile);
  
  // Рассчитываем общую стоимость в feeToken
  const totalCostInFeeToken = await priceOracle.convertGasCost(
    plan.estimatedGas,
    plan.steps.map(s => s.chainId),
    feeToken
  );
  
  // Получаем UserOperation со sponsored газом
  const userOp = await buildSponsordUserOp(plan, feeToken, totalCostInFeeToken);
  
  // Подписываем один раз на исходной цепи
  const signedOp = await userAccount.signUserOperation(userOp);
  
  // Executor relay выполняет все steps
  return relayer.submitIntent(signedOp);
}

Account abstraction как фундамент

Unified accounts нативно строятся на ERC-4337: Smart account вместо EOA на каждой цепи, UserOperations как единица intent, Bundler как executor, Paymaster как gas abstraction layer. ZeroDev Kernel, Safe с модулями или кастомная реализации — выбор зависит от требуемой гибкости.

Проблема атомарности

Критический вопрос: что происходит если шаг 1 (bridge) прошёл успешно, а шаг 2 (stake на целевой цепи) завершился ошибкой? Варианты: Optimistic execution (продолжаем, записываем pending state, retry при неудаче), Atomic through escrow (средства в escrow контракте до подтверждения финального шага), Two-phase commit (prepare → commit/rollback). На практике большинство систем используют optimistic с retry механизмом и ручным fallback (средства остаются на целевой цепи если действие не выполнено).

Сравнение подходов к кросчейн-коммуникации

Протокол Тип Задержка Безопасность
LayerZero light oracle + relayer ~1 минута зависит от оракула
Axelar validator set ~5 минут 2/3 валидаторов
CCIP (Chainlink) децентрализованные оракулы ~10 минут проверенный аудитом

Что входит в работу над unified account

  1. Анализ целевых сетей и требований к синхронизации.
  2. Проектирование архитектуры identity и intent слоёв.
  3. Развёртывание factory контрактов через keyless deployment.
  4. Интеграция bridge-протокола и настройка синхронизации.
  5. Реализация intent router с поддержкой gas abstraction.
  6. Интеграция frontend SDK.
  7. Развёртывание на testnet и проведение аудита.
  8. Deploy на mainnet и запуск.

Сроки

  • Базовая unified identity (CREATE2 одинаковые адреса, базовый sync): 4-6 недель
  • Intent routing + cross-chain execution: 6-8 недель
  • Gas abstraction + feeToken: 3-4 недели
  • Production hardening + security audit: 6-8 недель
  • Итого: 4-6 месяцев

Бюджет на разработку unified account рассчитывается индивидуально. Свяжитесь с нами, предоставьте спецификацию используемых цепей и требования к синхронизации — мы подготовим индивидуальное предложение с точными сроками. Закажите консультацию, чтобы оценить ваш проект и получить профессиональную разработку под ключ.

Разработка кросс-чейн мостов: архитектура, риски, реализация

Мы занимаемся разработкой кросс-чейн мостов и кросс-чейн решений под ключ. Знаем, как избежать катастроф. Несколько лет назад мост Binance BNB Chain потерял $570M — атакующий подделал Merkle proof в BSC's native bridge. В том же году Wormhole потерял $320M: верификация подписей guardians была обойдена через баг в Solana's secp256k1 program. Ronin Bridge — $625M. Это не случайности. Мосты — самая атакуемая инфраструктура в Web3, потому что они агрегируют ликвидность и имеют сложную межцепочечную логику верификации.

Почему мосты ломаются: три архитектурных класса уязвимостей

Проблема finality и reorg. Ethereum имеет probabilistic finality до Merge и economic finality после (2 эпохи, ~12 минут). Bitcoin — ~6 блоков (~60 минут). Solana — ~400ms. Если мост минтит wrapped tokens на целевой цепочке сразу после 1-2 блоков на исходной — reorg на 3+ блоков позволяет атакующему получить токены на целевой цепочке при откате транзакции на исходной. Правильная защита: ждать finality confirmation, специфичный для каждой цепочки. Для Ethereum — 64+ блоков (2 эпохи). Не один блок.

Верификация подписей. Большинство мостов используют multisig committee или threshold signature: N из M валидаторов должны подписать событие с исходной цепочки. Wormhole использовал 13 из 19 guardians. Атака была не на сами ключи — атакующий нашёл уязвимость в коде верификации подписей на Solana, где устаревший sysvar account принимался как валидный без проверки. On-chain верификация подписей — сложнее, чем кажется.

Lock-and-Mint vs Burn-and-Mint. В Lock-and-Mint модели оригинальные токены заблокированы в контракте на исходной цепочке, wrapped токены минтятся на целевой. Контракт на исходной цепочке — honeypot: там весь locked TVL. Один баг в unlock логике — и все средства доступны атакующему без необходимости что-либо делать на целевой цепочке. Native Burn-and-Mint (как у Circle CCTP для USDC) безопаснее: нет locked pool.

Как выбрать messaging layer под ваш проект?

LayerZero — протокол передачи произвольных сообщений между цепочками. Не мост сам по себе, а инфраструктура для построения мостов и omnichain приложений.

Архитектура: Endpoint контракт на каждой цепочке, Executor (доставляет сообщения на целевую цепочку), DVN (Decentralized Verifier Network — верифицирует факт транзакции на исходной цепочке).

Source chain:
  OApp.send() → Endpoint.send() → [emits packet event]

Destination chain:
  DVN verifies packet hash → Executor calls Endpoint.deliver() → OApp.lzReceive()

В v2 разработчик выбирает DVN: официальные (LayerZero Labs, Google Cloud, Polyhedra), или кастомные. Можно настроить required DVN + optional DVN: сообщение принимается только если все required DVN подтвердили. Это позволяет строить мосты с разным trade-off между безопасностью и скоростью.

OApp (Omnichain Application) — базовый контракт для интеграции. Наследуешь OApp, реализуешь _lzSend и _lzReceive. Для токен-мостов — OFT (Omnichain Fungible Token) стандарт из коробки делает burn-on-source / mint-on-destination.

Wormhole использует сеть из 19 guardians (крупные компании типа Jump Crypto, Everstake и т.д.), каждый из которых подписывает наблюдаемые события. Threshold — 13 из 19. VAA (Verified Action Approval) — подписанное сообщение, которое принимается на целевой цепочке.

Главное отличие от LayerZero: Wormhole имеет нативную поддержку не-EVM: Solana, Aptos, Sui, Algorand, Near. Для проектов, которым нужен мост между Ethereum и Solana — Wormhole часто единственный production-ready вариант.

После эксплойта Wormhole добавил Native Token Transfers (NTT) — архитектура без locked pool, аналогичная CCTP. NTT + Hub-and-Spoke модель: избыточная ликвидность не накапливается на одной цепочке.

Relay архитектура и light client верификация

Relay-based мосты (IBC в Cosmos ecosystem, Succinct's Telepathy) верифицируют состояние исходной цепочки через light client на целевой цепочке. Для EVM→EVM: контракт на Ethereum хранит и верифицирует BLS-подписи блоков исходной цепочки.

ZK-bridges — следующий уровень. Succinct, Polyhedra zkBridge, Electron Labs генерируют ZK-proof корректности консенсуса исходной цепочки. На целевой цепочке верифицируется proof, не подписи валидаторов. Убирает доверие к committee. Но верификация ZK-proof дорогая по газу — от 200k до 500k gas на Ethereum L1 в зависимости от системы доказательств. ZK-bridge безопаснее relay-based моста, но требует в 2-3 раза больше газа на верификацию.

Характеристика LayerZero Wormhole IBC (Cosmos) ZK-bridge
EVM поддержка Все EVM + Solana, Aptos Все EVM + Solana, Aptos, Sui Cosmos chains Растёт
Модель доверия DVN (выбирается) 13/19 guardians Light client ZK proof
Latency 1-5 мин 1-5 мин ~30 сек 5-30 мин
Gas на верификацию ~100-150k ~150-200k ~200-300k 200-500k

Что входит в разработку кросс-чейн моста

Мы реализуем проект под ключ и передаём полный набор результатов. Наши заказчики получают:

Этап Результат
Анализ и выбор архитектуры Техническое задание, обоснование выбора messaging layer
Проектирование смарт-контрактов Спецификация, диаграммы потоков, описание модели доверия
Разработка и тестирование Исходный код, unit/интеграционные тесты, симуляция cross-chain сценариев
Аудит безопасности Отчёт внешних аудиторов, исправленные уязвимости
Деплой и мониторинг Контракты в mainnet, дашборд с алертами, документация для эксплуатации
Поддержка после запуска 3 месяца гарантийной поддержки, помощь с эксплуатацией

Реализация: что нужно учесть до первой строки кода

Обязательные компоненты любого production моста:

Паузер. Emergency pause функция, вызываемая мультисигом или автоматически при обнаружении аномалии (подозрительный объём, нехарактерная последовательность вызовов). Большинство взломанных мостов не имели или не использовали паузер вовремя.

Rate limiting. Ограничение объёма вывода за временной интервал. Если атакующий дренирует мост — rate limit даёт время на реакцию. Реализация: transferVolume[currentEpoch] += amount; require(transferVolume[currentEpoch] <= epochLimit).

Finality checks. Специфичные для каждой цепочки. Не "подождать 1 блок", а использовать finality API или ждать нужного числа confirmations.

Relayer мониторинг. Автономный сервис, который следит за состоянием обеих сторон моста. Если сообщение отправлено но не доставлено за N минут — alert. Если locked balance расходится с totalSupply wrapped token — critical alert.

Сроки и стоимость

Простой ERC-20 мост поверх существующего messaging layer (LayerZero OFT или Wormhole NTT) — 4-8 недель включая тестирование и аудит. Кастомный мост с собственной верификацией, multi-chain поддержкой, rate limiting, мониторингом — 12-24 недели. ZK-bridge с кастомными proof circuits — от 6 месяцев.

Аудит моста занимает больше времени, чем аудит обычного DeFi протокола: нужно тестировать cross-chain сценарии, finality edge cases, атаки через reorg. Минимум 3-4 недели для production-grade решения.

Стоимость рассчитывается индивидуально после оценки объёма работ. Работаем с 2018 года, реализовали 15+ проектов в области блокчейн-инфраструктуры. Пишите — оценим ваш проект и предложим оптимальную архитектуру моста.