From 415804cc5b6b5358afe70cb27f22169681264b9f Mon Sep 17 00:00:00 2001 From: Greg Shuflin Date: Sun, 9 Oct 2022 21:50:19 -0700 Subject: [PATCH] Catdrugs ERC-20 token --- catdrugs.sol | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 catdrugs.sol diff --git a/catdrugs.sol b/catdrugs.sol new file mode 100644 index 0000000..4a14ae0 --- /dev/null +++ b/catdrugs.sol @@ -0,0 +1,116 @@ +pragma solidity ^0.4.24; + +//Safe Math Interface + +contract SafeMath { + + function safeAdd(uint a, uint b) public pure returns (uint c) { + c = a + b; + require(c >= a); + } + + function safeSub(uint a, uint b) public pure returns (uint c) { + require(b <= a); + c = a - b; + } + + function safeMul(uint a, uint b) public pure returns (uint c) { + c = a * b; + require(a == 0 || c / a == b); + } + + function safeDiv(uint a, uint b) public pure returns (uint c) { + require(b > 0); + c = a / b; + } +} + + +//ERC Token Standard #20 Interface + +contract ERC20Interface { + function totalSupply() public constant returns (uint); + function balanceOf(address tokenOwner) public constant returns (uint balance); + function allowance(address tokenOwner, address spender) public constant returns (uint remaining); + function transfer(address to, uint tokens) public returns (bool success); + function approve(address spender, uint tokens) public returns (bool success); + function transferFrom(address from, address to, uint tokens) public returns (bool success); + + event Transfer(address indexed from, address indexed to, uint tokens); + event Approval(address indexed tokenOwner, address indexed spender, uint tokens); +} + + +//Contract function to receive approval and execute function in one call + +contract ApproveAndCallFallBack { + function receiveApproval(address from, uint256 tokens, address token, bytes data) public; +} + +//Actual token contract + +contract CatDrugsDoken is ERC20Interface, SafeMath { + string public symbol; + string public name; + uint8 public decimals; + uint public _totalSupply; + + mapping(address => uint) balances; + mapping(address => mapping(address => uint)) allowed; + + + constructor() public { + symbol = "CATD"; + name = "CatDrugs"; + decimals = 10; + _totalSupply = 1337 * (10 ** 10); + address addr = 0x4062a3086462a540941D97250D28f1A51e92a890; + balances[addr] = _totalSupply; + emit Transfer(address(0), addr, _totalSupply); + } + + function totalSupply() public constant returns (uint) { + return _totalSupply - balances[address(0)]; + } + + function balanceOf(address tokenOwner) public constant returns (uint balance) { + return balances[tokenOwner]; + } + + function transfer(address to, uint tokens) public returns (bool success) { + balances[msg.sender] = safeSub(balances[msg.sender], tokens); + balances[to] = safeAdd(balances[to], tokens); + emit Transfer(msg.sender, to, tokens); + return true; + } + + function approve(address spender, uint tokens) public returns (bool success) { + allowed[msg.sender][spender] = tokens; + emit Approval(msg.sender, spender, tokens); + return true; + } + + function transferFrom(address from, address to, uint tokens) public returns (bool success) { + balances[from] = safeSub(balances[from], tokens); + allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); + balances[to] = safeAdd(balances[to], tokens); + emit Transfer(from, to, tokens); + return true; + } + + function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { + return allowed[tokenOwner][spender]; + } + + function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { + allowed[msg.sender][spender] = tokens; + emit Approval(msg.sender, spender, tokens); + ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); + return true; + } + + function () public payable { + revert(); + } +} +