Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.05 KB | None | 0 0
  1. pragma solidity >=0.4.0 <0.6.0;
  2.  
  3. import "./ownable.sol";
  4.  
  5. contract MyToken is Ownable {
  6. string public name = "MyToken"; // Token의 이름
  7. string public symbol = "WT"; // Token 이름의 줄임 말
  8. uint24 public totalWT = 100000 ; // Token의 총 발행 량
  9. uint8 public decimals = 17 ; // 1ETH = 10ET
  10. uint public balanceWT = 100000 ; // ICO기간 중 Token의 재고량
  11. uint public WTPrice = 10 ** 17; // ETH대비 Token의 가격 1eth = 10 token
  12. uint public salesStatus; // Token ICO기간 중 Token의 판매 량
  13.  
  14. uint public startTime; // Token ICO기간의 시작시간
  15. uint public deadline; // Token ICO기간의 마감 시간
  16. mapping (address => uint) public balanceOf; // 특정 Address이 가진 Token의 수
  17.  
  18.  
  19. constructor (uint _salesMinutes) public{// Token의 CA를 배포할 때 ICO를 몇 분 동안 진행할지 입력
  20.  
  21. startTime = now; // ICO시작 시간은 현재시간
  22. deadline = startTime + _salesMinutes * 1 minutes; // 마감시간 계산
  23.  
  24. }
  25.  
  26. modifier meetDeadline() {// ICO의 마감시간이 되었는지 체크하는 함수
  27. require(now < deadline);
  28. _;
  29. }
  30.  
  31. function () payable external meetDeadline {// ETH를 송금 받으면, 자동으로 보낸 사람의 Token잔고를 올려주는 함수
  32. uint amountWT = msg.value / WTPrice; // Token의 Price에 맞게 개수를 조절 1ETH = 10 TOKEN
  33. require(balanceWT >= amountWT ); // Token의 잔고가 충분한지 검사
  34. balanceOf[msg.sender]+= amountWT; // Ether를 송금한 사람의 Token잔고 증가
  35. salesStatus+=amountWT; // 현재 Token 총 판매량 증가
  36. balanceWT -= amountWT; // 현재 Token의 남은 재고량 차감
  37. }
  38. // ETH가 아닌 Token을 송금할 경우 Log로 저장하는 함수
  39. event Transfer(address indexed _from, address indexed _to, uint _value, uint _time);
  40. function transferFrom(address _from, address _to, uint256 _value)public{
  41. require(balanceOf[_from] >= _value); // 보내는 사람의 잔고 확인, 없으면 롤백
  42. balanceOf[_from] -= _value; // 보내는 사람의 잔고를 _value만큼 차감
  43. balanceOf[_to] += _value; // 받는 사람의 잔고를 _value만큼 증가
  44. emit Transfer(_from, _to, _value, now); // Transfer라는 event 함수 호출
  45. }
  46.  
  47. function withdraw(uint _amount) onlyOwner public{// onlyOwner modifier를 이용해 토큰의 CA에 대한 소유권이 있는 EOA만 누적된 ETH 출금
  48. require(now > deadline); // ICO기간이 지나고 나서 가능
  49. msg.sender.transfer(_amount); // CA 소유권이 있는 EOA에 TOKEN 송금
  50. }
  51.  
  52.  
  53. function refunds() public {// ICO의 마감시간 이전 ETH를 투자한 사람들에게 환불해주는 함수
  54. balanceWT += balanceOf[msg.sender]; // TOKEN의 재고량 검사
  55. uint ethValue = balanceOf[msg.sender] * WTPrice; // 환불할 ETH의 개수 계산
  56. balanceOf[msg.sender] = 0; // 환불 요청한 EOA의 TOKEN 잔고 0으로 초기화
  57. msg.sender.transfer(ethValue); // ETH 환불처리
  58. }
  59.  
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement