Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.16 KB | None | 0 0
  1. pragma solidity ^0.4.23;
  2.  
  3. interface IERC20 {
  4. function totalSupply() external view returns (uint256);
  5. function balanceOf(address who) external view returns (uint256);
  6. function allowance(address owner, address spender) external view returns (uint256);
  7. function transfer(address to, uint256 value) external returns (bool);
  8. function approve(address spender, uint256 value) external returns (bool);
  9. function transferFrom(address from, address to, uint256 value) external returns (bool);
  10.  
  11. event Transfer(address indexed from, address indexed to, uint256 value);
  12. event Approval(address indexed owner, address indexed spender, uint256 value);
  13. }
  14.  
  15. library SafeMath {
  16. function mul(uint256 a, uint256 b) internal pure returns (uint256) {
  17. if (a == 0) {
  18. return 0;
  19. }
  20. uint256 c = a * b;
  21. assert(c / a == b);
  22. return c;
  23. }
  24.  
  25. function div(uint256 a, uint256 b) internal pure returns (uint256) {
  26. uint256 c = a / b;
  27. return c;
  28. }
  29.  
  30. function sub(uint256 a, uint256 b) internal pure returns (uint256) {
  31. assert(b <= a);
  32. return a - b;
  33. }
  34.  
  35. function add(uint256 a, uint256 b) internal pure returns (uint256) {
  36. uint256 c = a + b;
  37. assert(c >= a);
  38. return c;
  39. }
  40.  
  41. function ceil(uint256 a, uint256 m) internal pure returns (uint256) {
  42. uint256 c = add(a,m);
  43. uint256 d = sub(c,1);
  44. return mul(div(d,m),m);
  45. }
  46. }
  47.  
  48. contract ApproveAndCallFallBack {
  49. function receiveApproval(address from, uint256 tokens, address token, bytes memory data) public;
  50. }
  51.  
  52. contract VoidToken is IERC20 {
  53. using SafeMath for uint256;
  54.  
  55. string constant tokenName = "Void Token";
  56. string constant tokenSymbol = "VOID";
  57. uint8 constant tokenDecimals = 18; // 18 decimal places
  58. uint256 public totalSupply = 10000000e18; // 10m VOID supply
  59.  
  60. mapping (address => uint256) private balances;
  61. mapping (address => mapping (address => uint256)) private allowed;
  62.  
  63. constructor() public {
  64. _mint(msg.sender, totalSupply);
  65. }
  66.  
  67. function name() public pure returns(string memory) {
  68. return tokenName;
  69. }
  70.  
  71. function symbol() public pure returns(string memory) {
  72. return tokenSymbol;
  73. }
  74.  
  75. function decimals() public pure returns(uint8) {
  76. return tokenDecimals;
  77. }
  78.  
  79. function totalSupply() public view returns (uint256) {
  80. return totalSupply;
  81. }
  82.  
  83. function balanceOf(address owner) public view returns (uint256) {
  84. return balances[owner];
  85. }
  86.  
  87. function allowance(address owner, address spender) public view returns (uint256) {
  88. return allowed[owner][spender];
  89. }
  90.  
  91. function transfer(address to, uint256 value) public returns (bool) {
  92. require(value <= balances[msg.sender]);
  93. require(to != address(0));
  94.  
  95. uint256 tokensToBurn = value.div(20);
  96. uint256 tokensToTransfer = value.sub(tokensToBurn);
  97.  
  98. balances[msg.sender] = balances[msg.sender].sub(value);
  99. balances[to] = balances[to].add(tokensToTransfer);
  100.  
  101. totalSupply = totalSupply.sub(tokensToBurn);
  102.  
  103. emit Transfer(msg.sender, to, tokensToTransfer);
  104. emit Transfer(msg.sender, address(0), tokensToBurn);
  105.  
  106. return true;
  107. }
  108.  
  109. function multiTransfer(address[] memory receivers, uint256[] memory amounts) public {
  110. for (uint256 i = 0; i < receivers.length; i++) {
  111. transfer(receivers[i], amounts[i]);
  112. }
  113. }
  114.  
  115. function approveAndCall(address spender, uint value, bytes memory data) public returns (bool success) {
  116. require(spender != address(0));
  117. allowed[msg.sender][spender] = value;
  118. emit Approval(msg.sender, spender, value);
  119. if (isContract(spender)) {
  120. ApproveAndCallFallBack(spender).receiveApproval(msg.sender, value, address(this), data);
  121. }
  122.  
  123. return true;
  124. }
  125.  
  126. function approve(address spender, uint256 value) public returns (bool) {
  127. require(spender != address(0));
  128. allowed[msg.sender][spender] = value;
  129. emit Approval(msg.sender, spender, value);
  130.  
  131. return true;
  132. }
  133.  
  134. function transferFrom(address from, address to, uint256 value) public returns (bool) {
  135. require(value <= balances[from]);
  136. require(value <= allowed[from][msg.sender]);
  137. require(to != address(0));
  138.  
  139. balances[from] = balances[from].sub(value);
  140.  
  141. uint256 tokensToBurn = value.div(20);
  142. uint256 tokensToTransfer = value.sub(tokensToBurn);
  143.  
  144. balances[to] = balances[to].add(tokensToTransfer);
  145. totalSupply = totalSupply.sub(tokensToBurn);
  146.  
  147. allowed[from][msg.sender] = allowed[from][msg.sender].sub(value);
  148.  
  149. emit Transfer(from, to, tokensToTransfer);
  150. emit Transfer(from, address(0), tokensToBurn);
  151.  
  152. return true;
  153. }
  154.  
  155. function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
  156. require(spender != address(0));
  157. allowed[msg.sender][spender] = (allowed[msg.sender][spender].add(addedValue));
  158. emit Approval(msg.sender, spender, allowed[msg.sender][spender]);
  159.  
  160. return true;
  161. }
  162.  
  163. function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
  164. require(spender != address(0));
  165. allowed[msg.sender][spender] = (allowed[msg.sender][spender].sub(subtractedValue));
  166. emit Approval(msg.sender, spender, allowed[msg.sender][spender]);
  167.  
  168. return true;
  169. }
  170.  
  171. function _mint(address account, uint256 amount) internal {
  172. require(amount != 0);
  173. balances[account] = balances[account].add(amount);
  174. emit Transfer(address(0), account, amount);
  175. }
  176.  
  177. function burn(uint256 amount) external {
  178. _burn(msg.sender, amount);
  179. }
  180.  
  181. function burnFrom(address account, uint256 amount) external {
  182. require(amount <= allowed[account][msg.sender]);
  183. allowed[account][msg.sender] = allowed[account][msg.sender].sub(amount);
  184. _burn(account, amount);
  185. }
  186.  
  187. function _burn(address account, uint256 amount) internal {
  188. require(amount != 0);
  189. require(amount <= balances[account]);
  190. totalSupply = totalSupply.sub(amount);
  191. balances[account] = balances[account].sub(amount);
  192. emit Transfer(account, address(0), amount);
  193. }
  194.  
  195. function isContract(address _addr) private view returns (bool hasCode) {
  196. uint length;
  197. assembly { length := extcodesize(_addr) }
  198. return length > 0;
  199. }
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement