Supply Chain
Motivation
Blockchain has the ability to massively benefit both the supply chain and transport industries, by introducing a new level of data transparency and responsiveness that helps to improve processes and attract potential clients. Applying blockchain to certain supply chains can benefit the primary producer right down to the end consumer, including all other ancillary parties in between; and furthermore also providing enhanced insights into the entire process.
The blockchain network is the decentralized database layer that stores all relevant information about both the supply chain and the products, and moreover ensures that the data cannot be manipulated once it is stored on the blockchain.
Objective
The goal here is to create a simple decentralized supply chain tracking system. The participants of the network can send, transport, and receive packets with each other.
For the transportation of the packet, a simple trust system is implemented, that enables the sender to set certain requirements for the carrier of the packet. The packet will be an active participant in the transportation process, as it will track itself with sensors during the transportation. This is done to ensure that it has not been manipulated during the transport.
The carrier will be rewarded upon the successful transportation, and penalized if the transportation has failed for some reason.
For convenient usage of the system, a client application called Lisk Transport will be provided that visualizes all relevant information regarding the supply chain tracking system. In turn the Lisk Transport application enables the users to interact with the system by posting custom transactions.
General procedure
The diagram shown below describes the general workflow and description of each step of the supply chain tracking system:

Initialize packet account
Before registering the packet on the network, the sender needs to create a new account for the packet and store the passphrase on the IoT device inside the packet. This is necessary because the packet needs to sign the transactions it sends to the network in order to communicate with it.
Register packet
The packets are registered on the blockchain network by the packet sender.
When creating the RegisterPacketTransaction
, the sender must define the following criteria:
-
packetId
: The ID of the packet that has been initialized in the previous step. -
postage
: This is the amount that will be paid to the carrier for the transport of the packet. -
security
: The security is the amount of tokens that will be locked in the carrier’s account, when the carrier receives the packet from the sender. -
minTrust
: The minimum amount of trust a carrier requires in order to transport this packet. -
recipientId
: The ID of the desired recipient of the packet. Only the recipient can send theFinishTransaction
later, which will complete the transport.
This transaction will then perform the following:
-
Add the above data to the packet account.
-
Set the
status
of the packet topending
. -
Transfer the postage from the sender’s account to the packet account.
Start transport
The next step would be for the carrier to go to the packet sender’s address, then receive the packet and start the delivery to the recipient.
The carrier needs to sign a transaction StartTransportTransaction
, that verifies that the packet has been passed on to the carrier.
When creating the StartTransportTransaction
, the carrier defines the following criteria:
-
packetID
: The ID of the packet that the carrier is going to transport.
This transaction will then perform the following:
-
Lock the specified
security
of the packet in the carrier’s account. This security cannot be accessed by the carrier, unless the transport has been successfully completed. -
Add the
carrier
to the packet account. -
Set the
status
of the packet frompending
toongoing
.
Light alarm
During the transportation of the packet, it will track itself with different sensors in order to check if it has been tampered with during the transportation phase. If any manipulation has occured, then the packet will send a self-signed alarm transaction to the network.
This LightAlarmTransaction
will perform the following:
-
Change the packet’s
status
toalarm
. -
Add the current
timestamp
to the listasset.alarms.light
inside of the packet account.
Finish transport
When reaching the recipient of the packet, the carrier passes the packet to the recipient.
The recipient then needs to sign the FinishTransportTransaction
.
This verifies that the packet has been sent on to the recipient.
When sending the transaction, the recipient needs to specify the following criteria:
-
packetID
: The ID of the packet that the recipient received. -
status
: The status of the transport, which has 2 options:"success"
or"fail"
.
This transaction will perform the following:
-
If
status="success"
-
Send
postage
to carrier account. -
Unlock
security
in carrier account. -
Increase
trust
of carrier +1. -
Set packet
status
tosuccess
.
-
-
If
status="fail"
-
Send
postage
to sender account. -
Add
security
to the sender account, and nullifylockedSecurity
from the account for the carrier. -
Decrease
trust
of carrier by -1. -
Set packet
status
tofail
.
-