Розробка системи відстеження вантажів на блокчейні
Ми — команда блокчейн-інженерів з досвідом у логістиці. За цей час реалізували 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 дні. Зв'яжіться з нами для оцінки вашого проекту. Підберемо архітектуру під ваш масштаб.







