Разработка системы отслеживания грузов на блокчейне

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

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

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

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

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

Как блокчейн решает проблему доверия в цепочках поставок?

Мы — команда блокчейн-инженеров с опытом в логистике. За это время реализовали 15+ проектов по отслеживанию грузов на Ethereum, Polygon и BNB Chain. Системы отслеживания грузов существуют десятилетиями — TMS, WMS, EDI. Проблема не в отсутствии систем, а в том что они не разговаривают друг с другом. Отправитель в Китае использует одну систему, фрахтовый брокер — другую, таможня — третью, конечный получатель видит только то, что ему соблаговолил сообщить перевозчик. Блокчейн здесь — не про технологию, а про нейтральную платформу, которой доверяют все стороны, потому что никто из них её не контролирует.

Что такое система отслеживания грузов на блокчейне?

Это единое пространство, где каждый участник видит актуальный статус груза в реальном времени. Все действия — создание заявки, загрузка на борт, прохождение таможни, выдача груза — фиксируются как транзакции. Никто не может их подделать или удалить. Блокчейн заменяет шквал email-переписки и звонков одним источником правды.

Почему блокчейн лучше традиционных TMS?

Традиционные TMS работают в изоляции. Смена владельца груза через электронный Bill of Lading занимает в среднем 5–7 дней из-за банковских проверок и бумажного оборота. На блокчейне с умным контрактом передача владения происходит за 10 минут. Документооборот ускоряется на 80%, а количество спорных ситуаций снижается на 90%. Это не теория — мы проверили на пилоте с одним из перевозчиков.

Что именно отслеживается: участники и документы

Какие роли и события критичны? — разработка системы отслеживания

Типичная международная перевозка задействует: Shipper (грузоотправитель), Freight Forwarder, Carrier, Port/Terminal Operator, Customs Broker, Consignee, Bank/Financier, Inspector/Surveyor. Каждый участник имеет свою систему — on-chain система даёт единый source of truth.

Bill of Lading (B/L) — центральный документ в морских перевозках. Это одновременно расписка перевозчика, договор перевозки и товарораспорядительный документ. Токенизация B/L регулируется стандартами BIMCO и DCSA. События жизненного цикла груза:

Booking → Cargo Received at Origin Port → Loaded on Vessel → Departed → In Transit → Arrived at Destination Port → Customs Cleared → Available for Pickup → Delivered

Архитектура: что on-chain, что off-chain

Тип данных Примеры Где хранится
Уникальные идентификаторы, хэши документов, переходы custody, milestone-события shipment ID, хэш B/L, подписи On-chain (EVM)
Полные документы, логи сенсоров, фотографии PDF, XML, CSV IPFS / Arweave
Индексы для быстрых запросов, аналитика Статус всех shipments, отчёты Традиционная БД (PostgreSQL)

Shipment NFT: почему груз как токен?

Груз как NFT — правильная абстракция для уникальных shipments. Передача NFT = передача права собственности. Пример контракта:

contract ShipmentRegistry is ERC721, AccessControl {
    struct Shipment {
        bytes32 shipmentId;
        bytes32 bookingReference;
        ShipmentType shipmentType; // FCL, LCL, Air, Rail, Road
        address shipper;
        address consignee;
        bytes32 originPortHash;
        bytes32 destinationPortHash;
        bytes32 blHash;
        ShipmentStatus status;
        uint64 estimatedDeparture;
        uint64 estimatedArrival;
    }

    mapping(bytes32 => Shipment) public shipments;
    mapping(bytes32 => MilestoneEvent[]) public milestones;
    mapping(bytes32 => bytes32[]) public documentHashes;

    function createShipment(
        bytes32 shipmentId,
        ShipmentType shipmentType,
        address consignee,
        bytes32 blHash,
        bytes32 originPortHash,
        bytes32 destinationPortHash,
        uint64 estimatedDeparture,
        uint64 estimatedArrival
    ) external onlyRole(FREIGHT_FORWARDER_ROLE) returns (uint256 tokenId) {
        tokenId = _nextTokenId++;
        _mint(msg.sender, tokenId);

        shipments[shipmentId] = Shipment({
            shipmentId: shipmentId,
            bookingReference: bytes32(0),
            shipmentType: shipmentType,
            shipper: msg.sender,
            consignee: consignee,
            originPortHash: originPortHash,
            destinationPortHash: destinationPortHash,
            blHash: blHash,
            status: ShipmentStatus.Booked,
            estimatedDeparture: estimatedDeparture,
            estimatedArrival: estimatedArrival
        });

        emit ShipmentCreated(shipmentId, msg.sender, consignee, shipmentType);
    }
}

Как реализовать мультиподписные milestone события?

Критические события требуют подтверждения нескольких сторон. Загрузка на судно должна быть подтверждена перевозчиком и терминалом:

struct PendingMilestone {
    bytes32 shipmentId;
    MilestoneType milestoneType;
    bytes32 locationHash;
    bytes32 evidenceHash;
    uint64 timestamp;
    mapping(address => bool) confirmations;
    uint256 confirmationCount;
    bool executed;
}

function confirmMilestone(bytes32 milestoneId) external {
    PendingMilestone storage milestone = pendingMilestones[milestoneId];
    require(hasRole(getMilestoneRole(milestone.milestoneType), msg.sender),
        "Unauthorized confirmer");
    require(!milestone.confirmations[msg.sender], "Already confirmed");

    milestone.confirmations[msg.sender] = true;
    milestone.confirmationCount++;

    if (milestone.confirmationCount >= REQUIRED_CONFIRMATIONS[milestone.milestoneType]) {
        executeMilestone(milestoneId);
    }
}

Как интегрировать IoT без перегрузки блокчейна?

Для контейнеров критичны: GPS позиция, температура (reefer), вибрация, тамперные сенсоры. Данные с IoT пишутся не напрямую — схема агрегации:

IoT Device → Satellite/Cellular Gateway → Data Aggregation Server → Oracle → Smart Contract (aggregated alerts + checkpoints)

Oraкла записывает позицию каждые 6 часов и аномалии (температура вне диапазона, arrival/departure).

Пример агрегации данных с сенсоровВ одном контейнере может быть до 6 сенсоров: GPS, датчик температуры, вибрации, открытия двери, влажности и освещённости. Каждое устройство отправляет данные раз в 2–5 минут. Чтобы не захламлять блокчейн, мы агрегируем их на сервере и записываем только критические события: отклонение температуры более чем на 2°C, удар свыше 10g, открытие дверей вне заданного порта.

Как автоматизировать Letter of Credit?

Традиционный LC — один из самых сложных инструментов, с задержками 7–30 дней. On-chain автоматизация:

contract LetterOfCredit {
    enum LCStatus { Issued, DocumentsPresented, Verified, PaymentReleased, Rejected }

    struct LC {
        address applicant;
        address beneficiary;
        address issuingBank;
        uint256 amount;
        address paymentToken;    // stablecoin
        bytes32 shipmentId;
        bytes32[] requiredDocHashes;
        uint64 expiryDate;
        LCStatus status;
    }

    function presentDocuments(
        bytes32 lcId,
        bytes32[] calldata documentHashes,
        bytes32 shipmentId
    ) external {
        LC storage lc = lcs[lcId];
        require(msg.sender == lc.beneficiary, "Not beneficiary");
        require(block.timestamp <= lc.expiryDate, "LC expired");
        require(
            shipmentRegistry.getMilestoneStatus(shipmentId, MilestoneType.Delivered),
            "Delivery not confirmed"
        );
        for (uint i = 0; i < lc.requiredDocHashes.length; i++) {
            require(
                isDocumentPresented(documentHashes, lc.requiredDocHashes[i]),
                "Missing required document"
            );
        }
        lc.status = LCStatus.DocumentsPresented;
        emit DocumentsPresented(lcId, msg.sender);
    }

    function releasePayment(bytes32 lcId) external onlyRole(BANK_ROLE) {
        LC storage lc = lcs[lcId];
        require(lc.status == LCStatus.DocumentsPresented, "Documents not presented");
        lc.status = LCStatus.PaymentReleased;
        IERC20(lc.paymentToken).safeTransfer(lc.beneficiary, lc.amount);
        emit PaymentReleased(lcId, lc.beneficiary, lc.amount);
    }
}

Что насчет таможни?

Таможенные органы в разных странах начинают принимать blockchain-верифицированные данные. Ключевые стандарты: WCO Data Model и Single Window системы. Реалистичная интеграция: таможенные документы в IPFS, хэши в блокчейн, брокер подписывает milestone "таможня пройдена". Прямое взаимодействие с госорганами возможно в Сингапуре, ОАЭ, Швейцарии.

Какую сеть выбрать и почему?

Параметр Polygon CDK / Arbitrum Orbit (приватный L2) Polygon PoS / Base (публичная сеть) Hyperledger Fabric
Контроль доступа Полный (permissioned) Открытый Permissioned
Gas Низкий, оплачивается вами Низкий Бесплатно (свои валидаторы)
Экосистема EVM-совместимые инструменты EVM + DeFi Нет DeFi, своя инфра
Рекомендация Для консорциума с ограниченным кругом Для открытой платформы с платежами Только если строгое enterprise-требование

Мы не рекомендуем Hyperledger Fabric без strong enterprise причины — EVM инфраструктура значительно зрелее.

Этапы разработки

Фаза Содержание Срок
Business mapping Участники, документы, milestone-события, интеграции 2–3 нед
Architecture Data model, on/off-chain разделение, выбор сети 2–3 нед
Core contracts ShipmentRegistry, milestones, роли 4–5 нед
Payment layer Escrow, LC автоматизация 3–4 нед
IoT pipeline Gateway, oracle, агрегация 3–5 нед
Participant interfaces Web-/mobile-приложения для каждой роли 5–7 нед
ERP integration TMS/WMS коннекторы 3–4 нед
Pilot with carriers Тестирование на реальных рейсах 4–8 нед

Основной технический риск — IoT надёжность на судне (покрытие, батарея). Основной операционный — онбординг участников.

Что входит в работу

В стоимость под ключ входит: анализ бизнес-процессов, проектирование смарт-контрактов, создание дашборда для каждой роли, интеграция с IoT-провайдерами, развертывание в тестовой сети, обучение команды, 3 месяца гарантийной поддержки. Документация и доступы к исходникам.

Получите консультацию инженера — оценим ваш проект за 2 дня. Свяжитесь с нами для оценки вашего проекта. Подберем архитектуру под ваш масштаб.

Развертывание блокчейн-инфраструктуры: ноды, RPC, индексация

Subgraph упал в 3:47 ночи. К утру пользователи видели устаревшие балансы, транзакции «висели» в UI, поддержка получила 47 тикетов за час. Причина: handler в subgraph упал на транзакции с нестандартным event log — и весь индекс встал. Мы сталкивались с такими ситуациями десятки раз. Наш опыт показывает: блокчейн-инфраструктура не прощает gaps в observability. Гарантировать uptime без многослойного мониторинга и fault‑tolerant архитектуры невозможно. За 8 лет работы с Ethereum, Polygon и Solana мы выработали подход, который позволяет предсказуемо развёртывать инфраструктуру любого масштаба — от одиночной ноды до мультичейн‑сетки с десятками субграфов.

Архитектура RPC-слоя

Каждое взаимодействие dApp с блокчейном идёт через RPC — JSON‑RPC API, которую предоставляет нода. Три варианта:

Managed providers — Alchemy, QuickNode, Infura, Ankr. Минимальные операционные расходы, SLA, встроенный мониторинг. Ограничения: rate limits (Alchemy Free: 300 RU/sec), vendor lock, потенциальные downtime при инцидентах провайдера. Для большинства проектов — правильный выбор на старте.

Собственные ноды — полный контроль, нет rate limits, нет зависимости от третьих сторон. Стоимость: архивная нода Ethereum занимает 2.5–3TB SSD, требует мощный сервер и DevOps‑поддержку. Sync с нуля на Ethereum через Geth/Nethermind — 3–7 дней. Оправдано при высокой нагрузке или требованиях к latency.

Гибрид — собственная нода как primary, managed provider как fallback. Стандарт для протоколов с TVL от $10M. Правильная балансировка может сократить расходы на 20–30% по сравнению с чисто managed‑схемой. При нагрузке 10 млн запросов в месяц гибрид экономит от $1500 до $3000.

Провайдер Сильная сторона Ограничение
Alchemy Supernode, Enhanced APIs, webhooks Дорогой на high-volume
QuickNode Низкая latency, multi-chain Дороже Alchemy на базовом плане
Infura Историческая надёжность Rate limits на бесплатном, один крупный инцидент остановил пол‑DeFi
Ankr Дешёвый, 40+ чейнов Менее стабильный

Как настроить RPC-слой без единой точки отказа?

Минимум два провайдера, DNS round‑robin с health check каждые 5 секунд, автоматическое переключение на fallback при latency >500 мс. На практике это даёт 99.99% доступности при любом сбое провайдера. Для протоколов с TVL от $10M мы рекомендуем собственный HA‑прокси (nginx или Envoy) перед двумя managed‑провайдерами.

Почему гибридная RPC-схема выгоднее чисто managed?

При 50 млн запросов в месяц Alchemy стоит $2000+, QuickNode — $2500+, собственная нода — $400–600 за хостинг + DevOps. Гибрид: primary — своя нода ($500), fallback — QuickNode ($500), итого ~$1000. Экономия 50–60% без потери SLA.

Клиенты нод Ethereum

Execution clients: Geth (наиболее используемый), Nethermind (C#, быстрая sync), Besu (Java, enterprise), Erigon (самый быстрый sync, архивный режим эффективен по диску — ~2TB вместо 3TB).

Consensus clients (post‑Merge): Lighthouse (Rust), Prysm (Go), Teku (Java), Nimbus (Nim). Каждая нода после The Merge требует пары execution + consensus client.

Для DevOps: eth‑docker — Docker Compose конфигурации для всех комбинаций клиентов. Настройка мониторинга через Grafana + Prometheus — обязательна, стандартный дашборд есть в репозитории каждого клиента.

The Graph: индексация событий

The Graph Protocol — decentralized indexing. Subgraph описывает какие события с каких контрактов индексировать и как трансформировать их в GraphQL схему.

Структура subgraph:

  • subgraph.yaml — манифест: адреса контрактов, startBlock, события которые обрабатываются
  • schema.graphql — GraphQL схема entities
  • src/mapping.ts — AssemblyScript обработчики событий
dataSources:
  - kind: ethereum
    name: UniswapV3Pool
    network: mainnet
    source:
      address: "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640"
      abi: UniswapV3Pool
      startBlock: 12370624
    mapping:
      eventHandlers:
        - event: Swap(indexed address,indexed address,int256,int256,uint160,uint128,int24)
          handler: handleSwap

AssemblyScript handlers — не TypeScript. Нет nullable types, нет closures, нет многих стандартных API. Ошибка в handler останавливает индексацию subgraph-а на той транзакции. Важно: добавлять try‑catch на операции которые могут падать (например store.get() для entity которая может не существовать).

Как избежать остановки индексации субграфа?

Лог файлы Graph Node мониторятся в реальном времени, при hasIndexingErrors = true срабатывает алерт и автоматический рестарт ноды (через systemd или Kubernetes). Типичный downtime при ошибке — 150–300 секунд до восстановления. Дополнительно: для production ставим watchdog, который перезапускает Graph Node если subgraph lag превышает 50 блоков.

Выбор между Hosted Service и Decentralized Network

Graph Hosted Service (бесплатный, централизованный) deprecated в пользу Subgraph Studio + Graph Network. Для продакшн: деплой на Graph Network с GRT curation signal — субграф получает indexers пропорционально curation.

Альтернативы The Graph: Ponder (TypeScript, self-hosted, проще дебагать), Envio (ultra‑fast indexer, поддерживает EVM + non‑EVM), Subsquid (TypeScript, своя сеть), Moralis Streams (managed, webhook‑based). Наш опыт показывает: для высоконагруженных проектов с уникальной логикой эффективнее Ponder или Envio — они дают полный контроль над процессом и не требуют токеномики GRT.

Webhooks и real-time нотификации

Alchemy Webhooks и QuickNode Streams позволяют получать события в реальном времени через HTTP webhook или WebSocket. Для мониторинга адресов, новых транзакций, минтов — это быстрее чем polling RPC.

Tenderly — платформа для мониторинга и алертов. Можно настроить alert на конкретный event из контракта, на изменение баланса, на вызов функции с определёнными параметрами. Симуляция транзакций через Tenderly API — бесценно для debugging.

Мониторинг и observability

Минимальный стек мониторинга для протокола:

On‑chain: OpenZeppelin Defender Sentinel — watches contract events, вызывает webhook или Autotask при срабатывании условий. Forta Network — community‑maintained боты детектируют аномалии (большие withdrawals, flash loans, governance attacks).

Infrastructure: Grafana + Prometheus для нод, Datadog или Grafana Cloud для managed метрик. Alert на: нода отстала на 10+ блоков, RPC latency > 500ms, subgraph lag > 100 блоков.

Uptime: Better Uptime или PagerDuty на RPC endpoint и subgraph health endpoint (The Graph предоставляет _meta { hasIndexingErrors, block { number } }).

Почему мониторинг без Tenderly недостаточен?

Tenderly даёт симуляцию транзакций и детальные трейсы — это критично для отладки ошибок в субграфах и смарт‑контрактах. Forta же фокусируется на аномалиях в сети, а не на вашей инфраструктуре. Комбинация Tenderly + собственный дашборд Grafana покрывает 90% сценариев инцидентов.

Мультичейн инфраструктура

Протокол на 5 чейнах = 5 отдельных RPC endpoints, 5 subgraphs, 5 мониторинг‑конфигов. Это управляемо, но нужна автоматизация деплоя.

Для subgraph multi‑network деплой: graph deploy --network mainnet, graph deploy --network arbitrum-one и т.д. с единой кодовой базой и network‑specific адресами в отдельных файлах конфигурации.

Chainlink CCIP и LayerZero для cross‑chain messaging требуют мониторинга состояния обоих чейнов и транзакций на intermediate relayers. Реорг на source chain при уже подтверждённом минте на target chain — классическая проблема мостов. Решение: ждать finality (на Ethereum ~15 минут после Merge для экономической finality) перед подтверждением на target chain.

Процесс настройки инфраструктуры

  1. Аудит текущего стека — определяем чейны, объём запросов, требования к latency и доступности.
  2. Проектирование архитектуры — выбор провайдеров, балансировка, redundancy.
  3. Разработка subgraph — манифест → схема → handlers → тестирование на локальной Graph Node → деплой на testnet → mainnet.
  4. Конфигурация мониторинга — Tenderly alerts, Grafana дашборд, PagerDuty интеграция.
  5. Документация и runbook — что делать при: subgraph fell behind, RPC downtime, нода desync.
  6. Передача в эксплуатацию — обучение команды, передача доступов, поддержка первый месяц.

Что входит в работу

  • Развёртывание managed или self‑hosted нод Ethereum, Polygon, BNB Chain
  • Настройка RPC‑слоя с primary/fallback и load balancing
  • Разработка и деплой subgraph под ваш протокол
  • Подключение мониторинга (Tenderly, Grafana, алерты)
  • Создание runbook и документации по эксплуатации
  • Обучение команды (до 4 часов онлайн)
  • Поддержка в течение 30 дней после сдачи

Сроки

Работа Срок
Настройка RPC и базового мониторинга 1–2 недели
Subgraph для одного протокола 2–4 недели
Self-hosted нода с мониторингом 2–3 недели
Полная инфраструктура (multi-chain, мониторинг, runbooks) 6–10 недель

Все проекты ведутся в репозитории на GitHub/GitLab с CI/CD, код конфигураций остаётся у вас. Закажите развертывание инфраструктуры — расскажем, как сократить расходы на 20–30% без потери надёжности. JSON‑RPC спецификация, документация The Graph. Получите консультацию — покажем, как мы развёртывали инфраструктуру для протокола с TVL $50M+ на Ethereum и Arbitrum.

Свяжитесь с нами.