Advertisement
DAG1

Untitled

Feb 20th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.42 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) public returns(bytes32 hash){
  79. require(closed && (tokenOwners[msg.sender] >= _tokens));
  80. tokenOwners[msg.sender] -= _tokens;
  81. bytes32 nowHash = sha256(abi.encodePacked(msg.sender, _tokens, now));
  82. lots[nowHash] = Lot(msg.sender, _tokens, _tokens * sellingRate, hashLots.push(nowHash) - 1);
  83. return nowHash;
  84. }
  85.  
  86. function buyLot(bytes32 _lot) public payable{
  87. require(msg.value >= lots[_lot].price, "You need send ETH");
  88. if (msg.value >= lots[_lot].price){
  89. (msg.sender).transfer(msg.value - lots[_lot].price);
  90. }
  91. (lots[_lot].owner).transfer(lots[_lot].price);
  92. tokenOwners[msg.sender] += lots[_lot].tokens;
  93. hashLots[lots[_lot].index] = hashLots[hashLots.length - 1];
  94. hashLots.pop();
  95. delete lots[_lot];
  96. }
  97.  
  98. function cancelLot(bytes32 _lot) public{
  99. require(lots[_lot].owner == msg.sender);
  100. tokenOwners[msg.sender] += lots[_lot].tokens;
  101. hashLots[lots[_lot].index] = hashLots[hashLots.length - 1];
  102. hashLots.pop();
  103. delete lots[_lot];
  104. }
  105.  
  106. function getLotInfo(bytes32 _lot) public view returns(address payable addressOwner, uint tokens, uint price){
  107. return (lots[_lot].owner, lots[_lot].price, lots[_lot].price);
  108. }
  109.  
  110. function getAllLots() public view returns(bytes32[] memory hashs){
  111. return hashLots;
  112. }
  113.  
  114. event Transfer(address indexed from, address indexed to, uint tokens);
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement