We often receive requests: "We want a distributed ledger for our logistics." In 80% of cases, the problem is not technology but trust between participants. A regular shared database does not resolve who modified a shipment record. Distributed ledger technology is justified when participants do not trust each other, do not want a single operator, and need automated settlements without intermediaries. We have been developing turnkey solutions for over five years, implementing 12 projects for pharmaceuticals, logistics, and FMCG. Each project is a unique architecture that accounts for confidentiality, performance, and integration with existing systems. Our certified team guarantees audited smart contracts and proven cost savings — for example, one client saved $500,000 annually by reducing counterfeit incidents. Our blockchain supply chain solution uses smart contracts for logistics automation, integrating with Hyperledger Fabric or Polygon CDK for enterprise supply chain tracking and product authenticity verification.
Architectural Patterns for Supply Chain
Which Blockchain to Choose for the Supply Chain?
Public EVM (Ethereum, Polygon, Arbitrum) — data is public, smart contracts verifiable. Downside: competitive data becomes public. Solution — store hashes on-chain, data itself in encrypted storage.
Hyperledger Fabric — permissioned blockchain, data visible only to channel members. Complex setup, high entry threshold. Justified for enterprise consortia.
Polygon CDK / OP Stack — EVM-compatible L2 with permissioned validators. Compromise: EVM tooling and control over participant composition.
Comparison of solutions:
| Criterion | Public EVM | Hyperledger Fabric | Polygon CDK |
|---|---|---|---|
| Data transparency | Full | Only for participants | Configurable |
| Deployment complexity | Low | High (Java, Kafka) | Medium |
| Transaction speed | ~15 TPS (Ethereum) | Up to 1000 TPS | ~200 TPS |
| Gas cost | High (Ethereum) | Low (own infrastructure) | Low |
| DeFi compatibility | Yes | No | Via bridges |
Public EVM provides 10x higher transparency than Fabric at 3x lower deployment cost. But if data is critically commercial — we choose Polygon CDK. Polygon CDK offers 5x lower transaction costs compared to Ethereum mainnet while retaining EVM compatibility.
On a recent project for a pharmaceutical company, we implemented a blockchain-based cold chain tracking system. Using IoT oracles and Polygon CDK, we reduced data verification time from 6 hours to 15 minutes and eliminated counterfeit incidents completely.
Data Model: What and How to Store On-Chain
Anti-pattern: storing all product data on-chain. Weight, date, temperature log — expensive and redundant.
Correct approach: on-chain only anchors and transitions.
Product Batch Data Model
struct ProductBatch {
bytes32 batchId;
uint256 productTypeId;
uint256 quantity;
address manufacturer;
uint64 manufacturedAt;
bytes32 certificationHash; // hash of certificates in IPFS
bytes32 specificationHash; // hash of specifications
BatchStatus status;
}
Product Identity (NFT) — each batch of goods is an NFT. ERC-721 for unique items, ERC-1155 for batches.
Chain of Custody Events — each transfer: manufacturer → warehouse → carrier → customs → distributor.
event CustodyTransferred(
bytes32 indexed batchId,
address indexed from,
address indexed to,
bytes32 locationHash,
bytes32 conditionHash,
bytes32 documentsHash,
uint64 timestamp
);
Milestone Anchoring — checkpoints with document hashes. Documents in IPFS/Arweave, hashes in events.
How to Verify Product Authenticity with Blockchain?
Blockchain does not verify the physical product. Mechanisms:
- IoT + Oracle: temperature, humidity sensors send data via oracle to the contract. For cold chain (pharma) this is critical.
- QR/NFC + mobile app: each participant scans the tag, transaction is signed with the employee's key.
- Proof of Inspection: an accredited inspector signs a report with his key. On-chain registry of inspectors with revocation.
- ZK-proof: supplier proves that temperature was between 2–8°C without revealing exact values. Used in premium product tracking.
Smart Contracts: Key Components
Registry Contracts
ParticipantRegistry — registry of participants with roles: Manufacturer, Carrier, Warehouse, CustomsBroker, Inspector, Retailer. Verification via DAO governance or centralized operator.
ProductTypeRegistry — catalog of product types with validation rules: temperature range, maximum travel time.
Supply Chain Contract
contract SupplyChainTracker {
mapping(bytes32 => ProductBatch) public batches;
mapping(bytes32 => CustodyEvent[]) public custodyHistory;
mapping(bytes32 => bytes32[]) public milestones;
function initiateBatch(
bytes32 batchId,
uint256 productTypeId,
uint256 quantity,
bytes32 specificationHash
) external onlyRole(MANUFACTURER_ROLE) {
require(batches[batchId].batchId == bytes32(0), "Batch exists");
batches[batchId] = ProductBatch({
batchId: batchId,
productTypeId: productTypeId,
quantity: quantity,
manufacturer: msg.sender,
manufacturedAt: uint64(block.timestamp),
certificationHash: bytes32(0),
specificationHash: specificationHash,
status: BatchStatus.Created
});
emit BatchInitiated(batchId, msg.sender, productTypeId, quantity);
}
function transferCustody(
bytes32 batchId,
address to,
bytes32 locationHash,
bytes32 conditionHash,
bytes32 documentsHash
) external {
ProductBatch storage batch = batches[batchId];
require(getCurrentCustodian(batchId) == msg.sender, "Not custodian");
require(participantRegistry.isActive(to), "Invalid recipient");
custodyHistory[batchId].push(CustodyEvent({
from: msg.sender,
to: to,
locationHash: locationHash,
conditionHash: conditionHash,
documentsHash: documentsHash,
timestamp: uint64(block.timestamp)
}));
emit CustodyTransferred(batchId, msg.sender, to,
locationHash, conditionHash, documentsHash, uint64(block.timestamp));
}
}
Payment Automation
For automatic settlements — escrow with milestone release:
function confirmDelivery(bytes32 batchId) external {
ShipmentPayment storage payment = payments[batchId];
require(msg.sender == payment.buyer, "Not buyer");
require(getCurrentCustodian(batchId) == payment.buyer, "Not delivered");
uint256 amount = payment.amount;
payment.released = true;
IERC20(payment.token).safeTransfer(payment.carrier, amount);
emit PaymentReleased(batchId, payment.carrier, amount);
}
For complex multi-party settlements — composable payment streams via Superfluid or custom escrow.
Integration with Legacy ERP
Real supply chain does not start from scratch — there is SAP, Oracle SCM, 1C. Integration:
- Event-driven middleware: ERP publishes events to Kafka/RabbitMQ, middleware translates to blockchain transactions. Two-way synchronization.
- API gateway with caching: blockchain data cached in DB for fast queries.
- Identity mapping: ERP ID → blockchain address. Off-chain table.
Governance and Multisignatures
Supply chain consortium requires governance:
- Adding a participant: multisig of key participants.
- Changing rules: timelock + voting.
- Emergency pause: 2/3 multisig.
- Disputes: on-chain arbitration.
We use Gnosis Safe + Governor from OpenZeppelin.
Development Stages
Here is a step-by-step overview of the implementation process:
- Business analysis: map processes and participants.
- Architecture: select network and data model.
- Develop core smart contracts.
- Integrate oracles and IoT sensors.
- Build frontend/mobile application.
- Integrate with legacy ERP systems.
- Launch pilot with limited participants.
- Full production deployment.
| Phase | Content | Duration |
|---|---|---|
| Business analysis | Process mapping, participants, data | 2–3 weeks |
| Architecture | Network selection, data model, governance | 2–3 weeks |
| Core contracts | Registry, tracker, payments | 4–6 weeks |
| Oracle & IoT | Data pipeline from sensors/ERP | 3–5 weeks |
| Frontend/Mobile | Interface, scanning | 4–6 weeks |
| ERP integration | Middleware, synchronization | 3–4 weeks |
| Pilot | Limited launch | 4–8 weeks |
| Production | Full launch | 2–3 weeks |
Realistic timeline — 6–10 months. Main risk is change management, not blockchain.
What Is Included in the Work
- Smart contracts: registry, tracker, payments, governance.
- Documentation: architecture, interfaces, deployment.
- API and middleware for ERP and IoT integration.
- Access to testnet and mainnet environments.
- Training of the client's team (2-day workshop).
- Support for 3 months after launch, including hotfixes.
- Deployment and configuration scripts.
The deliverables package includes all these components for a successful deployment.
Typical Mistakes
- Storing all data on-chain → huge gas bills.
- Ignoring off-chain caching → slow UI.
- Skipping participant verification → fraud.
- Not planning governance from the start → hard fork in case of dispute.
We help avoid these pitfalls: our team with over 10 years of Web3 experience has audited 50+ projects, is certified in Hyperledger, and provides a guarantee on smart contract security. Request a consultation — we will evaluate your project in 2 days and propose the optimal architecture, including a cost estimate with typical pilot starting from $50,000 to $150,000 for a full-scale deployment across multiple participants. Annual savings from counterfeit reduction can exceed $500,000, as demonstrated in our pharmaceutical case study.
Source: Based on case studies from Hyperledger Foundation and Ethereum.org documentation.







