美文网首页
2018-08-25

2018-08-25

作者: 猴子哥669 | 来源:发表于2018-08-25 14:40 被阅读0次

    需求:

    总量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);

        }

    }

    相关文章

      网友评论

          本文标题:2018-08-25

          本文链接:https://www.haomeiwen.com/subject/nfkgiftx.html