【智能合约审计】————14、EPPCOIN (EPP)

编程入门 行业动态 更新时间:2024-10-28 08:16:24

【智能<a href=https://www.elefans.com/category/jswz/34/1770939.html style=合约审计】————14、EPPCOIN (EPP)"/>

【智能合约审计】————14、EPPCOIN (EPP)

合约地址:

pragma solidity ^0.4.16;contract owned {address public owner;function owned() public {owner = msg.sender;}modifier onlyOwner {require(msg.sender == owner);_;}function transferOwnership(address newOwner) onlyOwner public {owner = newOwner;}
}interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; }contract TokenERC20 {// Public variables of the tokenstring public name;string public symbol;uint8 public decimals = 0;// 18 decimals is the strongly suggested default, avoid changing ituint256 public totalSupply;// This creates an array with all balancesmapping (address => uint256) public balanceOf;mapping (address => mapping (address => uint256)) public allowance;// This generates a public event on the blockchain that will notify clientsevent Transfer(address indexed from, address indexed to, uint256 value);// This notifies clients about the amount burntevent Burn(address indexed from, uint256 value);/*** Constrctor function** Initializes contract with initial supply tokens to the creator of the contract*/function TokenERC20 () public {totalSupply = 42000000;  // Update total supply with the decimal amountbalanceOf[msg.sender] = totalSupply;                // Give the creator all initial tokensname = "EPPCOIN";                                   // Set the name for display purposessymbol = "EPP";                               // Set the symbol for display purposes}/*** 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() insteadrequire(_to != 0x0);// Check if the sender has enoughrequire(balanceOf[_from] >= _value);// Check for overflowsrequire(balanceOf[_to] + _value > balanceOf[_to]);// Save this for an assertion in the futureuint previousBalances = balanceOf[_from] + balanceOf[_to];// Subtract from the senderbalanceOf[_from] -= _value;// Add the same to the recipientbalanceOf[_to] += _value;Transfer(_from, _to, _value);// Asserts are used to use static analysis to find bugs in your code. They should never failassert(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 {_transfer(msg.sender, _to, _value);}/*** 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 allowanceallowance[_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) publicreturns (bool success) {allowance[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 _extraData)publicreturns (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 enoughbalanceOf[msg.sender] -= _value;            // Subtract from the sendertotalSupply -= _value;                      // Updates totalSupplyBurn(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 enoughrequire(_value <= allowance[_from][msg.sender]);    // Check allowancebalanceOf[_from] -= _value;                         // Subtract from the targeted balanceallowance[_from][msg.sender] -= _value;             // Subtract from the sender's allowancetotalSupply -= _value;                              // Update totalSupplyBurn(_from, _value);return true;}
}/******************************************/
/*       ADVANCED TOKEN STARTS HERE       */
/******************************************/contract MyEPPToken is owned, TokenERC20 {uint256 public sellPrice;uint256 public buyPrice;mapping (address => bool) public frozenAccount;/* This generates a public event on the blockchain that will notify clients */event FrozenFunds(address target, bool frozen);/* Initializes contract with initial supply tokens to the creator of the contract */function MyEPPToken() TokenERC20() public {}/* Internal transfer, only can be called by this contract */function _transfer(address _from, address _to, uint _value) internal {require (_to != 0x0);                               // Prevent transfer to 0x0 address. Use burn() insteadrequire (balanceOf[_from] >= _value);               // Check if the sender has enoughrequire (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflowsrequire(!frozenAccount[_from]);                     // Check if sender is frozenrequire(!frozenAccount[_to]);                       // Check if recipient is frozenbalanceOf[_from] -= _value;                         // Subtract from the senderbalanceOf[_to] += _value;                           // Add the same to the recipientTransfer(_from, _to, _value);}/// @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 {balanceOf[target] += mintedAmount;totalSupply += mintedAmount;Transfer(0, this, mintedAmount);Transfer(this, target, mintedAmount);}/// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens/// @param target Address to be frozen/// @param freeze either to freeze it or notfunction freezeAccount(address target, bool freeze) onlyOwner public {frozenAccount[target] = freeze;FrozenFunds(target, freeze);}/// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth/// @param newSellPrice Price the users can sell to the contract/// @param newBuyPrice Price users can buy from the contractfunction setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public {sellPrice = newSellPrice;buyPrice = newBuyPrice;}/// @notice Buy tokens from contract by sending etherfunction buy() payable public {uint amount = msg.value / buyPrice;               // calculates the amount_transfer(this, msg.sender, amount);              // makes the transfers}/// @notice Sell `amount` tokens to contract/// @param amount amount of tokens to be sold//存在整数溢出,可以导致“高价低卖”function sell(uint256 amount) public {require(this.balance >= amount * sellPrice);      // checks if the contract has enough ether to buy_transfer(msg.sender, this, amount);              // makes the transfersmsg.sender.transfer(amount * sellPrice);          // sends ether to the seller. It's important to do this last to avoid recursion attacks}
}

 

更多推荐

【智能合约审计】————14、EPPCOIN (EPP)

本文发布于:2024-03-06 08:05:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1714798.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:合约   智能   EPPCOIN   EPP

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!