Skip to Content
Courses

The ItemManager Smart Contract

The first thing we need is a ā€œManagementā€ Smart Contract, where we can add items.

pragma solidity ^0.6.0; contract ItemManager{ enum SupplyChainSteps{Created, Paid, Delivered} struct S_Item { ItemManager.SupplyChainSteps _step; string _identifier; uint _priceInWei; } mapping(uint => S_Item) public items; uint index; event SupplyChainStep(uint _itemIndex, uint _step); function createItem(string memory _identifier, uint _priceInWei) public { items[index]._priceInWei = _priceInWei; items[index]._step = SupplyChainSteps.Created; items[index]._identifier = _identifier; emit SupplyChainStep(index, uint(items[index]._step)); index++; } function triggerPayment(uint _index) public payable { require(items[_index]._priceInWei <= msg.value, "Not fully paid"); require(items[_index]._step == SupplyChainSteps.Created, "Item is further in the supply chain"); items[_index]._step = SupplyChainSteps.Paid; emit SupplyChainStep(_index, uint(items[_index]._step)); } function triggerDelivery(uint _index) public { require(items[_index]._step == SupplyChainSteps.Paid, "Item is further in the supply chain"); items[_index]._step = SupplyChainSteps.Delivered; emit SupplyChainStep(_index, uint(items[_index]._step)); } }

With this it’s possible to add items and pay them, move them forward in the supply chain and trigger a delivery.

But that’s something I don’t like, because ideally I just want to give the user a simple address to send money to.

Last updated on