Advertisement
DAG1

Untitled

Feb 20th, 2019
539
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.50 KB | None | 0 0
  1. pragma solidity ^0.5.0;
  2. contract MyToken{
  3.  
  4. struct Lot{
  5. address payable owner;
  6. uint tokens;
  7. uint price;
  8. uint index;
  9. }
  10.  
  11. uint totalsupply;
  12. mapping (address => uint) tokenOwners;
  13. mapping (bytes32 => Lot) lots;
  14. bytes32[] hashLots;
  15. address payable owner;
  16. uint sellingRate;
  17. uint eth;
  18. bool closed;
  19.  
  20. constructor (uint _sellingRate) public{
  21. owner = msg.sender;
  22. if (_sellingRate == 0)
  23. {
  24. sellingRate = 1;
  25. }
  26. else
  27. {
  28. sellingRate = _sellingRate;
  29. }
  30. }
  31.  
  32. function totalSupply() public view returns (uint){
  33. return totalsupply;
  34. }
  35.  
  36. function changeRate(uint _sellingRate) public {
  37. require(msg.sender == owner);
  38. if (_sellingRate != 0)
  39. sellingRate = _sellingRate;
  40. else
  41. sellingRate = 1;
  42. }
  43.  
  44. function balanceOf(address tokenOwner) public view returns (uint balance){
  45. return balance = tokenOwners[tokenOwner];
  46. }
  47.  
  48. function transfer(address to, uint tokens) public returns (bool success){
  49. if (tokenOwners[msg.sender] >= tokens){
  50. tokenOwners[msg.sender] -= tokens;
  51. tokenOwners[to] += tokens;
  52. emit Transfer(msg.sender, to, tokens);
  53. return true;
  54. }
  55. else{
  56. return false;
  57. }
  58. }
  59.  
  60. function () external payable{
  61. require(!closed);
  62. totalsupply += msg.value / sellingRate;
  63. tokenOwners[msg.sender] = msg.value / sellingRate;
  64. eth += msg.value;
  65. }
  66.  
  67. function getETH() public{
  68. require(msg.sender == owner);
  69. owner.transfer(eth);
  70. eth = 0;
  71. }
  72.  
  73. function close(bool _open) public{
  74. require(msg.sender == owner);
  75. closed = _open;
  76. }
  77.  
  78. function placeLot(uint _tokens, uint price) public returns(bytes32 hash){
  79. require(closed && (tokenOwners[msg.sender] >= _tokens));
  80. if (price == 0)
  81. price = _tokens * sellingRate;
  82. tokenOwners[msg.sender] -= _tokens;
  83. bytes32 nowHash = sha256(abi.encodePacked(msg.sender, _tokens, now));
  84. lots[nowHash] = Lot(msg.sender, _tokens, _tokens * sellingRate, hashLots.push(nowHash) - 1);
  85. return nowHash;
  86. }
  87.  
  88. function buyLot(bytes32 _lot) public payable{
  89. require(msg.value >= lots[_lot].price, "You need send ETH");
  90. if (msg.value >= lots[_lot].price){
  91. (msg.sender).transfer(msg.value - lots[_lot].price);
  92. }
  93. (lots[_lot].owner).transfer(lots[_lot].price);
  94. tokenOwners[msg.sender] += lots[_lot].tokens;
  95. hashLots[lots[_lot].index] = hashLots[hashLots.length - 1];
  96. hashLots.pop();
  97. delete lots[_lot];
  98. }
  99.  
  100. function cancelLot(bytes32 _lot) public{
  101. require(lots[_lot].owner == msg.sender);
  102. tokenOwners[msg.sender] += lots[_lot].tokens;
  103. hashLots[lots[_lot].index] = hashLots[hashLots.length - 1];
  104. hashLots.pop();
  105. delete lots[_lot];
  106. }
  107.  
  108. function getLotInfo(bytes32 _lot) public view returns(address payable addressOwner, uint tokens, uint price){
  109. return (lots[_lot].owner, lots[_lot].price, lots[_lot].price);
  110. }
  111.  
  112. function getAllLots() public view returns(bytes32[] memory hashs){
  113. return hashLots;
  114. }
  115.  
  116. event Transfer(address indexed from, address indexed to, uint tokens);
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement