Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. pragma solidity ^0.5.0;
  2.  
  3. contract SupplyChain {
  4. address owner;
  5.  
  6. uint skuCount;
  7.  
  8. mapping(uint => Item) items;
  9.  
  10. enum State {ForSale, Sold, Shipped, Received}
  11. State public state;
  12.  
  13. struct Item {
  14. string name;
  15. uint sku;
  16. uint price;
  17. State state;
  18. address payable seller;
  19. address payable buyer;
  20. }
  21.  
  22. event ForSale(uint sku);
  23. event Sold(uint sku);
  24. event Shipped(uint sku);
  25. event Received(uint sku);
  26.  
  27. modifier onlyOwner (address _address) { require (msg.sender == owner); _;}
  28.  
  29. modifier verifyCaller (address _address) { require (msg.sender == _address); _;}
  30.  
  31. modifier paidEnough(uint _price) { require(msg.value >= _price); _;}
  32.  
  33. modifier checkValue(uint _sku) {
  34. _;
  35. uint _price = items[_sku].price;
  36. uint amountToRefund = msg.value - _price;
  37. items[_sku].buyer.transfer(amountToRefund);
  38. }
  39.  
  40. modifier forSale {
  41. require(state == State.ForSale);
  42. _;
  43. }
  44. modifier sold {
  45. require(state == State.Sold);
  46. _;
  47. }
  48. modifier shipped {
  49. require(state == State.Shipped);
  50. _;
  51. }
  52. modifier received {
  53. require(state == State.Received);
  54. _;
  55. }
  56.  
  57.  
  58. constructor() public {
  59. owner = msg.sender;
  60. skuCount = 0;
  61. }
  62.  
  63. function addItem(string memory _name, uint _price) public returns(bool){
  64. emit ForSale(skuCount);
  65. items[skuCount] = Item({name: _name, sku: skuCount, price: _price, state: State.ForSale, seller: msg.sender, buyer: address(0)});
  66. skuCount = skuCount + 1;
  67. return true;
  68. }
  69.  
  70. function buyItem(uint sku)
  71. public
  72. forSale
  73. paidEnough(items[sku].price)
  74. checkValue(sku)
  75. payable
  76. {
  77. items[sku].state = State.Sold;
  78. items[sku].seller.transfer(msg.value);
  79. emit Sold(sku);
  80. }
  81.  
  82. function shipItem(uint sku)
  83. sold
  84. verifyCaller(items[sku].seller)
  85. public
  86. {
  87. state = State.Shipped;
  88. emit Shipped(sku);
  89. }
  90.  
  91. function receiveItem(uint sku)
  92. received
  93. verifyCaller(items[sku].seller)
  94. public
  95. {
  96. state = State.Received;
  97. emit Received(sku);
  98. }
  99.  
  100. function fetchItem(uint _sku) public view returns (string memory name, uint sku, uint price, uint state, address seller, address buyer) {
  101. name = items[_sku].name;
  102. sku = items[_sku].sku;
  103. price = items[_sku].price;
  104. state = uint(items[_sku].state);
  105. seller = items[_sku].seller;
  106. buyer = items[_sku].buyer;
  107. return (name, sku, price, state, seller, buyer);
  108. }
  109.  
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement