2018-08-25

2018-08-25  本文已影响0人  猴子哥669

需求:

总量2亿,0转空投20%,即4000万

转0ETH,送500

,转0ETH只限一次

接受损赠

转0.1ETH 送3万,

转0.5ETH 送17万,

转1ETH 送35万

其它数额按1:30万送出

简称:CZ

全名:crazy adventure

精度:小数点后八位

空投合约带安全库的代码

pragma solidity ^0.4.24;

/**

* @title SafeMath v0.1.9

* @dev Math operations with safety checks that throw on error

* change notes:  original SafeMath library from OpenZeppelin modified by Inventor

* - added sqrt

* - added sq

* - added pwr

* - changed asserts to requires with error log outputs

* - removed div, its useless

*/

library SafeMath {

    /**

    * @dev Multiplies two numbers, throws on overflow.

    */

    function mul(uint256 a, uint256 b)

        internal

        pure

        returns (uint256 c)

    {

        if (a == 0) {

            return 0;

        }

        c = a * b;

        require(c / a == b, "SafeMath mul failed");

        return c;

    }

    /**

    * @dev Integer division of two numbers, truncating the quotient.

    */

    function div(uint256 a, uint256 b) internal pure returns (uint256) {

        // assert(b > 0); // Solidity automatically throws when dividing by 0

        uint256 c = a / b;

        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;

    }

    /**

    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).

    */

    function sub(uint256 a, uint256 b)

        internal

        pure

        returns (uint256)

    {

        require(b <= a, "SafeMath sub failed");

        return a - b;

    }

    /**

    * @dev Adds two numbers, throws on overflow.

    */

    function add(uint256 a, uint256 b)

        internal

        pure

        returns (uint256 c)

    {

        c = a + b;

        require(c >= a, "SafeMath add failed");

        return c;

    }

    /**

    * @dev gives square root of given x.

    */

    function sqrt(uint256 x)

        internal

        pure

        returns (uint256 y)

    {

        uint256 z = ((add(x,1)) / 2);

        y = x;

        while (z < y)

        {

            y = z;

            z = ((add((x / z),z)) / 2);

        }

    }

    /**

    * @dev gives square. multiplies x by x

    */

    function sq(uint256 x)

        internal

        pure

        returns (uint256)

    {

        return (mul(x,x));

    }

    /**

    * @dev x to the power of y

    */

    function pwr(uint256 x, uint256 y)

        internal

        pure

        returns (uint256)

    {

        if (x==0)

            return (0);

        else if (y==0)

            return (1);

        else

        {

            uint256 z = x;

            for (uint256 i=1; i < y; i++)

                z = mul(z,x);

            return (z);

        }

    }

}

interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; }

contract TokenERC20 {

    using SafeMath for *;

    // Public variables of the token

    string public name;

    string public symbol;

    uint8 public decimals = 18;

    // 18 decimals is the strongly suggested default, avoid changing it

    uint256 public totalSupply;

address public manager;

    // This creates an array with all balances

    mapping (address => uint256) public balanceOf;

    mapping (address => uint256) public zeroGet;

    mapping (address => mapping (address => uint256)) public allowance;

    // This generates a public event on the blockchain that will notify clients

    event Transfer(address indexed from, address indexed to, uint256 value);

    // This generates a public event on the blockchain that will notify clients

    event Approval(address indexed _owner, address indexed _spender, uint256 _value);

    // This notifies clients about the amount burnt

    event Burn(address indexed from, uint256 value);

    /**

    * Constructor function

    *

    * Initializes contract with initial supply tokens to the creator of the contract

    */

    constructor (

        uint256 initialSupply,

        string tokenName,

        string tokenSymbol

    ) public {

        totalSupply = initialSupply * 10 ** uint256(decimals);  // Update total supply with the decimal amount

        balanceOf[msg.sender] = totalSupply;                // Give the creator all initial tokens

        name = tokenName;                                  // Set the name for display purposes

        symbol = tokenSymbol;                              // Set the symbol for display purposes

manager = msg.sender;

    }

    mapping(address => bool) hasGet;

  function recMoney() payable public {

  }

  function getBalance() view public returns(uint256) {

      return address(this).balance;

  }

  function AirDrop() payable public {

        require(balanceOf[manager] >= 40000000e18);

        address user = msg.sender;

        require(!hasGet[user]);

        // 满足条件将函数调用者的地址增加500个币

        balanceOf[user] += 500e18;

        balanceOf[manager] -= 500e18;

        hasGet[user] = true;

  }

  function Transaction() payable public {

      if(msg.value == 0 ){

          if( zeroGet[msg.sender]==0){

                zeroGet[msg.sender] = 1;

                balanceOf[msg.sender] += 500e18;

        balanceOf[manager] -= 500e18;

          }

      }else if( msg.value == 0.1 ether){

            // 满足条件将函数调用者的地址增加30000个币

            balanceOf[msg.sender] += 30000e18;

            balanceOf[manager] -= 30000e18;

        }else if(msg.value == 0.5 ether){

            // 满足条件将函数调用者的地址增加170000个币

            balanceOf[msg.sender] += 170000e18;

            balanceOf[manager] -= 170000e18;

        }else if(msg.value == 1 ether){

            // 满足条件将函数调用者的地址增加350000个币

            balanceOf[msg.sender] += 350000e18;

            balanceOf[manager] -= 350000e18;

        }else{

            // 满足条件将函数调用者的地址增加msg.value的 30 bei个币

            uint money = msg.value.mul(30e4);//msg.value * 30;

            balanceOf[msg.sender] = balanceOf[msg.sender].add(money);

            balanceOf[manager] = balanceOf[manager].sub(money);// -= money;

        }

  }

    /**

    * Internal transfer, only can be called by this contract

    */

    function _transfer(address _from, address _to, uint _value) internal {

        // Prevent transfer to 0x0 address. Use burn() instead

        require(_to != 0x0);

        // Check if the sender has enough

        require(balanceOf[_from] >= _value);

        // Check for overflows

        require(balanceOf[_to] + _value >= balanceOf[_to]);

        // Save this for an assertion in the future

        uint previousBalances = balanceOf[_from] + balanceOf[_to];

        // Subtract from the sender

        balanceOf[_from] -= _value;

        // Add the same to the recipient

        balanceOf[_to] += _value;

        emit Transfer(_from, _to, _value);

        // Asserts are used to use static analysis to find bugs in your code. They should never fail

        assert(balanceOf[_from] + balanceOf[_to] == previousBalances);

    }

    /**

    * 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` on 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] -= _value;

        _transfer(_from, _to, _value);

        return true;

    }

    /**

    * Set allowance for other address

    *

    * Allows `_spender` to spend no more than `_value` tokens on 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 on 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 _extraData)

        public

        returns (bool success) {

        tokenRecipient spender = tokenRecipient(_spender);

        if (approve(_spender, _value)) {

            spender.receiveApproval(msg.sender, _value, this, _extraData);

            return true;

        }

    }

    /**

    * Destroy tokens

    *

    * Remove `_value` tokens from the system irreversibly

    *

    * @param _value the amount of money to burn

    */

    function burn(uint256 _value) public returns (bool success) {

        require(balanceOf[msg.sender] >= _value);  // Check if the sender has enough

        balanceOf[msg.sender] -= _value;            // Subtract from the sender

        totalSupply -= _value;                      // Updates totalSupply

        emit Burn(msg.sender, _value);

        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

        require(_value <= allowance[_from][msg.sender]);    // Check allowance

        balanceOf[_from] -= _value;                        // Subtract from the targeted balance

        allowance[_from][msg.sender] -= _value;            // Subtract from the sender's allowance

        totalSupply -= _value;                              // Update totalSupply

        emit Burn(_from, _value);

        return true;

    }

    //提币申请

    function withdraw() public {

        require(msg.sender == manager);

        manager.transfer(address(this).balance);

    }

}

上一篇下一篇

猜你喜欢

热点阅读