pragma solidity >=0.4.22 <0.6.0;
interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes calldata _extraData) external; }
contract Owned {
address public originalOwner;
address public owner;
constructor() public {
originalOwner = msg.sender;
owner = originalOwner;
}
modifier onlyOwner {
require(msg.sender == owner);
_;
}
function transferOwnership(address newOwner) onlyOwner public {
require(newOwner != owner);
owner = newOwner;
}
}
contract TokenERC20 is Owned{
string public name;
string public symbol;
uint8 public decimals;
uint256 public totalSupply;
uint256 public unitsOneEthCanBuy;
bool public salerunning;
uint256 public bonusinpercent;
address payable fundsWallet;
uint256 public totalEthInWei;
mapping (address => uint256) public balanceOf;
mapping (address => mapping (address => uint256)) public allowance;
mapping (address => bool) public frozenAccount;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
event Burn(address indexed from, uint256 value);
event FrozenFunds(address target, bool frozen);
event Mint(address indexed _to, uint256 _value);
function() payable external{
totalEthInWei = totalEthInWei + msg.value;
fundsWallet.transfer(msg.value); // ETH from msg.sender -> fundsWallet
if(salerunning){
uint256 amount = msg.value * (unitsOneEthCanBuy + (unitsOneEthCanBuy * bonusinpercent / 100));
require(balanceOf[fundsWallet] >= amount);
balanceOf[fundsWallet] = balanceOf[fundsWallet] - amount;
balanceOf[msg.sender] = balanceOf[msg.sender] + amount;
emit Transfer(fundsWallet, msg.sender, amount);
}
}
/**
* Batch Token transfer (Airdrop) function || Every address gets unique amount
*/
function bulkDropAllUnique(address[] memory _addrs, uint256[] memory _amounts)onlyOwner public returns (uint256 sendTokensTotal){
uint256 sum = 0;
for(uint256 i = 0; i < _addrs.length; i++){
transfer(_addrs[i], _amounts[i] * 10 ** uint256(decimals));
sum += _amounts[i] * 10 ** uint256(decimals);
}
return sum;
}
/**
* Batch Token transfer (Airdrop) function || All addresses get same amount
*/
function bulkDropAllSame(address[] memory _addrs, uint256 _amount)onlyOwner public returns (uint256 sendTokensTotal){
uint256 sum = 0;
for(uint256 i = 0; i < _addrs.length; i++){
transfer(_addrs[i], _amount * 10 ** uint256(decimals));
sum += _amount * 10 ** uint256(decimals);
}
return sum;
}
/**
* Batch Token transfer (Airdrop) function || Every address gets random amount (min,max)
*/
function bulkDropAllRandom(address[] memory _addrs, uint256 minimum, uint256 maximum)onlyOwner public returns (uint256 sendTokensTotal){
uint256 sum = 0;
uint256 amount = 0;
for(uint256 i = 0; i < _addrs.length; i++){
amount = getRndInteger(minimum,maximum);
transfer(_addrs[i], amount * 10 ** uint256(decimals));
sum += amount * 10 ** uint256(decimals);
}
return sum;
}
uint nonce = 0;
// Random integer between min and max
function getRndInteger(uint256 min, uint256 max) internal returns (uint) {
nonce += 1;
uint temp = uint(keccak256(abi.encodePacked(nonce)));
while(temp<min || temp>max){
temp = temp % max;
if(temp>=min){return temp;}
temp = temp + min;
}
return temp;
}
/**
* Setter for bonus of tokens user get for 1 ETH sending to contract
*/
function setBonus(uint256 bonus)onlyOwner public returns (bool success){
bonusinpercent = bonus;
return true;
}
/**
* Setter for amount of tokens user get for 1 ETH sending to contract
*/
function setUnitsOneEthCanBuy(uint256 amount)onlyOwner public returns (bool success){
unitsOneEthCanBuy = amount;
return true;
}
/**
* Setter for unlocking the sales (Send ETH, Get Token)
*/
function salesactive(bool active)onlyOwner public returns (bool success){
salerunning = active;
return true;
}
/**
* Internal transfer, only can be called by this contract
*/
function _transfer(address _from, address _to, uint _value) internal {
require(!frozenAccount[_from]); // Check if sender is frozen
require(!frozenAccount[_to]); // Check if recipient is frozen
require (_to != address(0x0)); // Prevent transfer to 0x0 address. Use burn() instead
require (balanceOf[_from] >= _value); // Check if the sender has enough
require (balanceOf[_to] - _value >= balanceOf[_to]); // Check for overflows
uint previousBalances = balanceOf[_from] + balanceOf[_to]; // Save this for an assertion in the future
balanceOf[_from] = balanceOf[_from]- _value; // Subtract from the sender
balanceOf[_to] = balanceOf[_to]+ _value; // Add the same to the recipient
emit Transfer(_from, _to, _value);
assert(balanceOf[_from]+ balanceOf[_to] == previousBalances); // Asserts are used to use static analysis to find bugs in your code. They should never fail
}
/**
* Transfer tokens
*
* Send `_value` tokens to `_to` from your account
*
* @param _to The address of the recipient
* @param _value the amount to send
*/
function transfer(address _to, uint256 _value) public returns (bool success) {
_transfer(msg.sender, _to, _value);
return true;
}
/**
* Transfer tokens from other address
*
* Send `_value` tokens to `_to` in behalf of `_from`
*
* @param _from The address of the sender
* @param _to The address of the recipient
* @param _value the amount to send
*/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
require(_value <= allowance[_from][msg.sender]); // Check allowance
allowance[_from][msg.sender] = allowance[_from][msg.sender] - _value;
_transfer(_from, _to, _value);
return true;
}
/**
* Set allowance for other address
*
* Allows `_spender` to spend no more than `_value` tokens in your behalf
*
* @param _spender The address authorized to spend
* @param _value the max amount they can spend
*/
function approve(address _spender, uint256 _value) public returns (bool success) {
allowance[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* Set allowance for other address and notify
*
* Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it
*
* @param _spender The address authorized to spend
* @param _value the max amount they can spend
* @param _extraData some extra information to send to the approved contract
*/
function approveAndCall(address _spender, uint256 _value, bytes memory _extraData) public returns (bool success) {
tokenRecipient spender = tokenRecipient(_spender);
if (approve(_spender, _value)) {
spender.receiveApproval(msg.sender, _value, address(this), _extraData);
return true;
}
}
/// @notice Create `mintedAmount` tokens and send it to `target`
/// @param target Address to receive the tokens
/// @param mintedAmount the amount of tokens it will receive
function mintToken(address target, uint256 mintedAmount) onlyOwner public returns (bool success){
totalSupply = totalSupply + mintedAmount;
balanceOf[target] = balanceOf[target] + mintedAmount;
emit Mint(target, mintedAmount);
return true;
}
/**
* Destroy tokens
*
* Remove `burnAmount` tokens from the system irreversibly
*
* @param burnAmount the amount of money to burn
*/
function burn(uint256 burnAmount) public returns (bool success) {
require(balanceOf[msg.sender] >= burnAmount); // Check if the sender has enough
totalSupply = totalSupply- burnAmount; // Subtract from total supply
balanceOf[msg.sender] = balanceOf[msg.sender]- burnAmount; // Subtract from the sender
emit Burn(msg.sender, burnAmount);
return true;
}
/**
* Destroy tokens from other account
*
* Remove `_value` tokens from the system irreversibly on behalf of `_from`.
*
* @param _from the address of the sender
* @param _value the amount of money to burn
*/
function burnFrom(address _from, uint256 _value) public returns (bool success) {
require(balanceOf[_from] >= _value); // Check if the targeted balance is enough
totalSupply = totalSupply -_value; // Update supply
require(_value <= allowance[_from][msg.sender]); // Check allowance
balanceOf[_from] = balanceOf[_from]- _value; // Subtract from the targeted balance
allowance[_from][msg.sender] = allowance[_from][msg.sender]- _value; // Subtract from the sender's allowance
emit Burn(_from, _value);
return true;
}
/// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens
/// @param target Address to be frozen
/// @param freeze either to freeze it or not
function freezeAccount(address target, bool freeze) onlyOwner public returns (bool success) {
frozenAccount[target] = freeze; // Freeze target address
emit FrozenFunds(target, freeze);
return true;
}
/// destroy the contract and reclaim the leftover funds.
function kill() onlyOwner public returns (bool killed){
selfdestruct(msg.sender);
return true;
}
}
contract PublishedToken is TokenERC20{
uint256 tokenamount;
/**
* @dev Intialises token and all the necesary variable
*/
constructor() public{
name = "Celsius";
symbol = "CEL";
decimals = 4;
tokenamount = 695663643;
unitsOneEthCanBuy = 2950;
salerunning = true;
bonusinpercent = 0;
fundsWallet = msg.sender;
totalSupply = tokenamount * 10 ** uint256(decimals);
balanceOf[msg.sender] = totalSupply;
}
}
{
"compilationTarget": {
"PublishedToken.sol": "PublishedToken"
},
"evmVersion": "petersburg",
"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":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"frozen","type":"bool"}],"name":"FrozenFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Mint","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"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","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":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bonusinpercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_addrs","type":"address[]"},{"internalType":"uint256","name":"minimum","type":"uint256"},{"internalType":"uint256","name":"maximum","type":"uint256"}],"name":"bulkDropAllRandom","outputs":[{"internalType":"uint256","name":"sendTokensTotal","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_addrs","type":"address[]"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"bulkDropAllSame","outputs":[{"internalType":"uint256","name":"sendTokensTotal","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_addrs","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"bulkDropAllUnique","outputs":[{"internalType":"uint256","name":"sendTokensTotal","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burnFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"freeze","type":"bool"}],"name":"freezeAccount","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"frozenAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[{"internalType":"bool","name":"killed","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"mintedAmount","type":"uint256"}],"name":"mintToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"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":"originalOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"salerunning","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"salesactive","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"setBonus","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setUnitsOneEthCanBuy","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEthInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"success","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":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"unitsOneEthCanBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]