More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 7,858 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 20451879 | 167 days ago | IN | 0 ETH | 0.00009186 | ||||
Transfer | 20408491 | 173 days ago | IN | 0 ETH | 0.00003188 | ||||
Transfer | 20408432 | 173 days ago | IN | 0 ETH | 0.00009184 | ||||
Transfer | 19654023 | 279 days ago | IN | 0 ETH | 0.00113984 | ||||
Transfer | 19122245 | 353 days ago | IN | 0 ETH | 0.00200552 | ||||
Transfer | 18292560 | 470 days ago | IN | 0 ETH | 0.00170514 | ||||
Transfer | 18042332 | 505 days ago | IN | 0 ETH | 0.00287052 | ||||
Transfer | 17189190 | 625 days ago | IN | 0 ETH | 0.00757462 | ||||
Transfer | 16677935 | 697 days ago | IN | 0 ETH | 0.00448756 | ||||
Transfer | 16271192 | 753 days ago | IN | 0 ETH | 0.00110329 | ||||
Transfer | 16097670 | 778 days ago | IN | 0 ETH | 0.00162945 | ||||
Transfer | 15791822 | 820 days ago | IN | 0 ETH | 0.00305753 | ||||
Transfer | 15210809 | 908 days ago | IN | 0 ETH | 0.0005135 | ||||
Transfer | 14989932 | 944 days ago | IN | 0 ETH | 0.00202237 | ||||
Transfer | 14622483 | 1004 days ago | IN | 0 ETH | 0.00584811 | ||||
Transfer | 14622293 | 1004 days ago | IN | 0 ETH | 0.00178143 | ||||
Transfer | 14359165 | 1045 days ago | IN | 0 ETH | 0.00312579 | ||||
Transfer | 14326493 | 1050 days ago | IN | 0 ETH | 0.0022914 | ||||
Transfer | 13802906 | 1131 days ago | IN | 0 ETH | 0.00480056 | ||||
Transfer | 13758406 | 1138 days ago | IN | 0 ETH | 0.00628868 | ||||
Transfer | 13712611 | 1145 days ago | IN | 0 ETH | 0.01044297 | ||||
Transfer | 13658593 | 1154 days ago | IN | 0 ETH | 0.00689909 | ||||
Transfer | 13656037 | 1154 days ago | IN | 0 ETH | 0.00561149 | ||||
Transfer | 13651761 | 1155 days ago | IN | 0 ETH | 0.00844783 | ||||
Transfer | 13650933 | 1155 days ago | IN | 0 ETH | 0.00849124 |
Loading...
Loading
Contract Name:
Token
Compiler Version
v0.5.9+commit.e560f70d
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-09-11 */ pragma solidity 0.5.9; 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) { // 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; } 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; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address payable public owner; mapping(address => bool) managers; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor () internal { owner = msg.sender; managers[msg.sender] = true; emit OwnershipTransferred(address(0), owner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner()); _; } modifier onlyManager() { require(isManager(msg.sender)); _; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns (bool) { return msg.sender == owner; } function isManager(address _manager) public view returns (bool) { return managers[_manager]; } function addManager(address _manager) external onlyOwner { require(_manager != address(0)); managers[_manager] = true; } function delManager(address _manager) external onlyOwner { require(managers[_manager]); managers[_manager] = false; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address payable newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 _amount, address _token, bytes calldata _data) external; } /// @dev The actual token contract, the default owner is the msg.sender contract Token is Ownable { string public name; //The Token's name: e.g. DigixDAO Tokens uint8 public decimals; //Number of decimals of the smallest unit string public symbol; //An identifier: e.g. REP /// @dev `Checkpoint` is the structure that attaches a block number to a /// given value, the block number attached is the one that last changed the /// value struct Checkpoint { // `fromBlock` is the block number that the value was generated from uint128 fromBlock; // `value` is the amount of tokens at a specific block number uint128 value; } // `parentSnapShotBlock` is the block number from the Parent Token that was // used to determine the initial distribution of the Clone Token uint public parentSnapShotBlock; // `creationBlock` is the block number that the Clone Token was created uint public creationBlock; // `balances` is the map that tracks the balance of each address, in this // contract when the balance changes the block number that the change // occurred is also included in the map mapping (address => Checkpoint[]) balances; // `allowed` tracks any extra transfer rights as in all ERC20 tokens mapping (address => mapping (address => uint256)) allowed; // Tracks the history of the `totalSupply` of the token Checkpoint[] totalSupplyHistory; //////////////// // Events //////////////// event ClaimedTokens(address indexed _token, address indexed _owner, uint _amount); event Transfer(address indexed _from, address indexed _to, uint256 _amount); event Approval(address indexed _owner, address indexed _spender, uint256 _amount); //////////////// // Constructor //////////////// /// @param _parentToken Address of the parent token, set to 0x0 if it is a /// new token /// @param _parentSnapShotBlock Block of the parent token that will /// determine the initial distribution of the clone token, set to 0 if it /// is a new token constructor () public { name = "Blockchain Partners Coin"; symbol = "BPC"; decimals = 18; parentSnapShotBlock = block.number; creationBlock = block.number; //initial emission uint _amount = 21000000 * (10 ** uint256(decimals)); updateValueAtNow(totalSupplyHistory, _amount); updateValueAtNow(balances[msg.sender], _amount); emit Transfer(address(0), msg.sender, _amount); } /// @notice The fallback function function () external {} /////////////////// // ERC20 Methods /////////////////// /// @notice Send `_amount` tokens to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _amount The amount of tokens to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _amount) external returns (bool success) { doTransfer(msg.sender, _to, _amount); return true; } /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it /// is approved by `_from` /// @param _from The address holding the tokens being transferred /// @param _to The address of the recipient /// @param _amount The amount of tokens to be transferred /// @return True if the transfer was successful function transferFrom(address _from, address _to, uint256 _amount) external returns (bool success) { // The standard ERC 20 transferFrom functionality require(allowed[_from][msg.sender] >= _amount); allowed[_from][msg.sender] -= _amount; doTransfer(_from, _to, _amount); return true; } /// @dev This is the actual transfer function in the token contract, it can /// only be called by other functions in this contract. /// @param _from The address holding the tokens being transferred /// @param _to The address of the recipient /// @param _amount The amount of tokens to be transferred /// @return True if the transfer was successful function doTransfer(address _from, address _to, uint _amount) internal { if (_amount == 0) { emit Transfer(_from, _to, _amount); // Follow the spec to louch the event when transfer 0 return; } require(parentSnapShotBlock < block.number); // Do not allow transfer to 0x0 or the token contract itself require((_to != address(0)) && (_to != address(this))); // If the amount being transfered is more than the balance of the // account the transfer throws uint previousBalanceFrom = balanceOfAt(_from, block.number); require(previousBalanceFrom >= _amount); // First update the balance array with the new value for the address // sending the tokens updateValueAtNow(balances[_from], previousBalanceFrom - _amount); // Then update the balance array with the new value for the address // receiving the tokens uint previousBalanceTo = balanceOfAt(_to, block.number); require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow updateValueAtNow(balances[_to], previousBalanceTo + _amount); // An event to make the transfer easy to find on the blockchain emit Transfer(_from, _to, _amount); } /// @param _owner The address that's balance is being requested /// @return The balance of `_owner` at the current block function balanceOf(address _owner) public view returns (uint256 balance) { return balanceOfAt(_owner, block.number); } /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on /// its behalf. This is a modified version of the ERC20 approve function /// to be a little bit safer /// @param _spender The address of the account able to transfer the tokens /// @param _amount The amount of tokens to be approved for transfer /// @return True if the approval was successful function approve(address _spender, uint256 _amount) public returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender,0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _amount; emit Approval(msg.sender, _spender, _amount); return true; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowance[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedAmount The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedAmount) external returns (bool) { require(allowed[msg.sender][_spender] + _addedAmount >= allowed[msg.sender][_spender]); // Check for overflow allowed[msg.sender][_spender] = allowed[msg.sender][_spender] + _addedAmount; emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowance[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedAmount The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedAmount) external returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedAmount >= oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue - _subtractedAmount; } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /// @dev This function makes it easy to read the `allowed[]` map /// @param _owner The address of the account that owns the token /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens of _owner that _spender is allowed /// to spend function allowance(address _owner, address _spender) external view returns (uint256 remaining) { return allowed[_owner][_spender]; } /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on /// its behalf, and then a function is triggered in the contract that is /// being approved, `_spender`. This allows users to use their tokens to /// interact with contracts in one function call instead of two /// @param _spender The address of the contract able to transfer the tokens /// @param _amount The amount of tokens to be approved for transfer /// @return True if the function call was successful function approveAndCall(address _spender, uint256 _amount, bytes calldata _extraData) external returns (bool success) { require(approve(_spender, _amount)); ApproveAndCallFallBack(_spender).receiveApproval( msg.sender, _amount, address(this), _extraData ); return true; } /// @dev This function makes it easy to get the total number of tokens /// @return The total number of tokens function totalSupply() public view returns (uint) { return totalSupplyAt(block.number); } //////////////// // Query balance and totalSupply in History //////////////// /// @dev Queries the balance of `_owner` at a specific `_blockNumber` /// @param _owner The address from which the balance will be retrieved /// @param _blockNumber The block number when the balance is queried /// @return The balance at `_blockNumber` function balanceOfAt(address _owner, uint _blockNumber) public view returns (uint) { // These next few lines are used when the balance of the token is // requested before a check point was ever created for this token, it // requires that the `parentToken.balanceOfAt` be queried at the // genesis block for that token as this contains initial balance of // this token if ((balances[_owner].length == 0) || (balances[_owner][0].fromBlock > _blockNumber)) { return 0; // This will return the expected balance during normal situations } else { return getValueAt(balances[_owner], _blockNumber); } } /// @notice Total amount of tokens at a specific `_blockNumber`. /// @param _blockNumber The block number when the totalSupply is queried /// @return The total amount of tokens at `_blockNumber` function totalSupplyAt(uint _blockNumber) public view returns(uint) { // These next few lines are used when the totalSupply of the token is // requested before a check point was ever created for this token, it // requires that the `parentToken.totalSupplyAt` be queried at the // genesis block for this token as that contains totalSupply of this // token at this block number. if ((totalSupplyHistory.length == 0) || (totalSupplyHistory[0].fromBlock > _blockNumber)) { return 0; // This will return the expected totalSupply during normal situations } else { return getValueAt(totalSupplyHistory, _blockNumber); } } //////////////// // Internal helper functions to query and set a value in a snapshot array //////////////// /// @dev `getValueAt` retrieves the number of tokens at a given block number /// @param checkpoints The history of values being queried /// @param _block The block number to retrieve the value at /// @return The number of tokens being queried function getValueAt(Checkpoint[] storage checkpoints, uint _block) view internal returns (uint) { if (checkpoints.length == 0) return 0; // Shortcut for the actual value if (_block >= checkpoints[checkpoints.length-1].fromBlock) return checkpoints[checkpoints.length-1].value; if (_block < checkpoints[0].fromBlock) return 0; // Binary search of the value in the array uint min = 0; uint max = checkpoints.length-1; while (max > min) { uint mid = (max + min + 1)/ 2; if (checkpoints[mid].fromBlock<=_block) { min = mid; } else { max = mid-1; } } return checkpoints[min].value; } /// @dev `updateValueAtNow` used to update the `balances` map and the /// `totalSupplyHistory` /// @param checkpoints The history of data being updated /// @param _value The new number of tokens function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value) internal { if ((checkpoints.length == 0) || (checkpoints[checkpoints.length -1].fromBlock < block.number)) { Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ]; newCheckPoint.fromBlock = uint128(block.number); newCheckPoint.value = uint128(_value); } else { Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1]; oldCheckPoint.value = uint128(_value); } } /// @dev Helper function to return a min betwen the two uints function min(uint a, uint b) pure internal returns (uint) { return a < b ? a : b; } /// @notice Generates `_amount` tokens that are assigned to `_owner` /// @param _owner The address that will be assigned the new tokens /// @param _amount The quantity of tokens generated /// @return True if the tokens are generated correctly function generateTokens(address _owner, uint _amount) public onlyOwner returns (bool) { uint curTotalSupply = totalSupply(); require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow uint previousBalanceTo = balanceOf(_owner); require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount); updateValueAtNow(balances[_owner], previousBalanceTo + _amount); emit Transfer(address(0), _owner, _amount); return true; } ////////// // Safety Methods ////////// /// @notice This method can be used by the owner to extract mistakenly /// sent tokens to this contract. /// @param _token The address of the token contract that you want to recover /// set to 0 in case you want to extract ether. function claimTokens(address _token) external onlyOwner { if (_token == address(0)) { owner.transfer(address(this).balance); return; } Token token = Token(_token); uint balance = token.balanceOf(address(this)); token.transfer(owner, balance); emit ClaimedTokens(_token, owner, balance); } } contract DividendManager is Ownable { using SafeMath for uint; event DividendDeposited(address indexed _depositor, uint256 _blockNumber, uint256 _amount, uint256 _totalSupply, uint256 _dividendIndex); event DividendClaimed(address indexed _claimer, uint256 _dividendIndex, uint256 _claim); event DividendRecycled(address indexed _recycler, uint256 _blockNumber, uint256 _amount, uint256 _totalSupply, uint256 _dividendIndex); Token public token; uint256 public RECYCLE_TIME = 365 days; struct Dividend { uint256 blockNumber; uint256 timestamp; uint256 amount; uint256 claimedAmount; uint256 totalSupply; bool recycled; mapping (address => bool) claimed; } Dividend[] public dividends; mapping (address => uint256) dividendsClaimed; modifier validDividendIndex(uint256 _dividendIndex) { require(_dividendIndex < dividends.length); _; } constructor(address _token) public { require(_token != address(0)); token = Token(_token); } function depositDividend() payable public { uint256 currentSupply = token.totalSupplyAt(block.number); uint256 dividendIndex = dividends.length; uint256 blockNumber = SafeMath.sub(block.number, 1); dividends.push( Dividend( blockNumber, getNow(), msg.value, 0, currentSupply, false ) ); emit DividendDeposited(msg.sender, blockNumber, msg.value, currentSupply, dividendIndex); } function claimDividend(uint256 _dividendIndex) public validDividendIndex(_dividendIndex) { Dividend storage dividend = dividends[_dividendIndex]; require(dividend.claimed[msg.sender] == false); require(dividend.recycled == false); uint256 balance = token.balanceOfAt(msg.sender, dividend.blockNumber); uint256 claim = balance.mul(dividend.amount).div(dividend.totalSupply); dividend.claimed[msg.sender] = true; dividend.claimedAmount = SafeMath.add(dividend.claimedAmount, claim); if (claim > 0) { msg.sender.transfer(claim); emit DividendClaimed(msg.sender, _dividendIndex, claim); } } function claimDividendAll() public { require(dividendsClaimed[msg.sender] < dividends.length); for (uint i = dividendsClaimed[msg.sender]; i < dividends.length; i++) { if ((dividends[i].claimed[msg.sender] == false) && (dividends[i].recycled == false)) { dividendsClaimed[msg.sender] = SafeMath.add(i, 1); claimDividend(i); } } } function recycleDividend(uint256 _dividendIndex) public onlyOwner validDividendIndex(_dividendIndex) { Dividend storage dividend = dividends[_dividendIndex]; require(dividend.recycled == false); require(dividend.timestamp < SafeMath.sub(getNow(), RECYCLE_TIME)); dividends[_dividendIndex].recycled = true; uint256 currentSupply = token.totalSupplyAt(block.number); uint256 remainingAmount = SafeMath.sub(dividend.amount, dividend.claimedAmount); uint256 dividendIndex = dividends.length; uint256 blockNumber = SafeMath.sub(block.number, 1); dividends.push( Dividend( blockNumber, getNow(), remainingAmount, 0, currentSupply, false ) ); emit DividendRecycled(msg.sender, blockNumber, remainingAmount, currentSupply, dividendIndex); } //Function is mocked for tests function getNow() internal view returns (uint256) { return now; } function dividendsCount() external view returns (uint) { return dividends.length; } /// @notice This method can be used by the owner to extract mistakenly /// sent tokens to this contract. /// @param _token The address of the token contract that you want to recover /// set to 0 in case you want to extract ether. function claimTokens(address _token) external onlyOwner { // if (_token == 0x0) { // owner.transfer(address(this).balance); // return; // } Token claimToken = Token(_token); uint balance = claimToken.balanceOf(address(this)); claimToken.transfer(owner, balance); } } /** * @title ERC20 interface * @dev see https://eips.ethereum.org/EIPS/eip-20 */ interface IERC20 { function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(IERC20 token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { require(token.transferFrom(from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } contract sellTokens is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; IERC20 public token; address payable public wallet; uint256 public rate; uint256 public minPurchase; uint256 public weiRaised; uint256 public tokenSold; event TokenPurchase(address indexed owner, uint weiAmount, uint tokens); constructor(address payable _wallet, uint256 _rate, address _token, uint256 _minPurchase) public { require(_token != address(0)); require(_wallet != address(0)); require(_rate > 0); token = IERC20(_token); wallet = _wallet; rate = _rate; minPurchase = _minPurchase; } function() payable external { buyTokens(); } function buyTokens() payable public { uint256 weiAmount = msg.value; _preValidatePurchase(weiAmount); uint256 tokens = _getTokenAmount(weiAmount); if (tokens > token.balanceOf(address(this))) { tokens = token.balanceOf(address(this)); uint price = tokens.div(rate); uint _diff = weiAmount.sub(price); if (_diff > 0) { msg.sender.transfer(_diff); weiAmount = weiAmount.sub(_diff); } } weiRaised = weiRaised.add(weiAmount); tokenSold = tokenSold.add(tokens); _processPurchase(msg.sender, tokens); emit TokenPurchase(msg.sender, weiAmount, tokens); _forwardFunds(); } function _preValidatePurchase(uint256 _weiAmount) internal view { require(token.balanceOf(address(this)) > 0); require(_weiAmount >= minPurchase); } function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { return _weiAmount.mul(rate); } function _processPurchase(address _beneficiary, uint256 _tokenAmount) internal { token.safeTransfer(_beneficiary, _tokenAmount); } function _forwardFunds() internal { wallet.transfer(msg.value); } function setRate(uint256 _rate) onlyOwner external { rate = _rate; } function setMinPurchase(uint256 _minPurchase) onlyOwner external { minPurchase = _minPurchase; } function withdrawTokens(address _t) onlyOwner external { IERC20 _token = IERC20(_t); uint balance = _token.balanceOf(address(this)); _token.safeTransfer(owner, balance); } } contract CompanyLog is Ownable { struct Log { uint time; uint id; uint price; string description; } mapping (uint => Log) public logs; uint public lastLogId; event NewLog(uint time, uint id, uint price, string description); function addLog(uint _time, uint _id, uint _price, string calldata _description) onlyManager external { uint256 _logId = lastLogId++; logs[_logId] = Log({ time : _time, id : _id, price : _price, description: _description }); emit NewLog(_time, _id, _price, _description); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"creationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"addManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_blockNumber","type":"uint256"}],"name":"balanceOfAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedAmount","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"generateTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_blockNumber","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_manager","type":"address"}],"name":"delManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"parentSnapShotBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedAmount","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_manager","type":"address"}],"name":"isManager","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_token","type":"address"},{"indexed":true,"name":"_owner","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
60806040523480156200001157600080fd5b50600080546001600160a01b0319163390811782558152600160208190526040808320805460ff1916909217909155815490516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36040805180820190915260188082527f426c6f636b636861696e20506172746e65727320436f696e00000000000000006020909201918252620000bd916002916200028d565b506040805180820190915260038082527f4250430000000000000000000000000000000000000000000000000000000000602090920191825262000104916004916200028d565b5060038054601260ff19909116179081905543600581905560065560ff16600a0a6301406f4002620001386009826200019b565b3360009081526007602052604090206200015c90826001600160e01b036200019b16565b60408051828152905133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506200035e565b81541580620001d157508154439083906000198101908110620001ba57fe5b6000918252602090912001546001600160801b0316105b15620002415781546000908390620001ed826001830162000312565b81548110620001f857fe5b600091825260209091200180546001600160801b03848116700100000000000000000000000000000000024382166001600160801b031990931692909217161790555062000289565b8154600090839060001981019081106200025757fe5b600091825260209091200180546001600160801b03808516700100000000000000000000000000000000029116179055505b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002d057805160ff191683800117855562000300565b8280016001018555821562000300579182015b8281111562000300578251825591602001919060010190620002e3565b506200030e9291506200033e565b5090565b8154818355818111156200033957600083815260209020620003399181019083016200033e565b505050565b6200035b91905b808211156200030e576000815560010162000345565b90565b6112a1806200036e6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80638f32d59b116100c3578063cae9ca511161007c578063cae9ca5114610408578063d73dd6231461048d578063dd62ed3e146104b9578063df8de3e7146104e7578063f2fde38b1461050d578063f3ae24151461053357610158565b80638f32d59b1461038157806395d89b4114610389578063981b24d014610391578063a65eacdc146103ae578063a9059cbb146103d4578063c5bcc4f11461040057610158565b8063313ce56711610115578063313ce567146102955780634ee2cd7e146102b357806366188463146102df57806370a082311461030b578063827f32c0146103315780638da5cb5b1461035d57610158565b806306fdde031461015a578063095ea7b3146101d7578063176345141461021757806318160ddd1461023157806323b872dd146102395780632d06177a1461026f575b005b610162610559565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561019c578181015183820152602001610184565b50505050905090810190601f1680156101c95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610203600480360360408110156101ed57600080fd5b506001600160a01b0381351690602001356105e4565b604080519115158252519081900360200190f35b61021f610685565b60408051918252519081900360200190f35b61021f61068b565b6102036004803603606081101561024f57600080fd5b506001600160a01b0381358116916020810135909116906040013561069c565b6101586004803603602081101561028557600080fd5b50356001600160a01b031661070b565b61029d610756565b6040805160ff9092168252519081900360200190f35b61021f600480360360408110156102c957600080fd5b506001600160a01b03813516906020013561075f565b610203600480360360408110156102f557600080fd5b506001600160a01b0381351690602001356107ef565b61021f6004803603602081101561032157600080fd5b50356001600160a01b03166108d2565b6102036004803603604081101561034757600080fd5b506001600160a01b0381351690602001356108e6565b6103656109ad565b604080516001600160a01b039092168252519081900360200190f35b6102036109bc565b6101626109cd565b61021f600480360360208110156103a757600080fd5b5035610a28565b610158600480360360208110156103c457600080fd5b50356001600160a01b0316610a7a565b610203600480360360408110156103ea57600080fd5b506001600160a01b038135169060200135610ad1565b61021f610ae7565b6102036004803603606081101561041e57600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561044e57600080fd5b82018360208201111561046057600080fd5b8035906020019184600183028401116401000000008311171561048257600080fd5b509092509050610aed565b610203600480360360408110156104a357600080fd5b506001600160a01b038135169060200135610bb6565b61021f600480360360408110156104cf57600080fd5b506001600160a01b0381358116916020013516610c54565b610158600480360360208110156104fd57600080fd5b50356001600160a01b0316610c7f565b6101586004803603602081101561052357600080fd5b50356001600160a01b0316610e29565b6102036004803603602081101561054957600080fd5b50356001600160a01b0316610ea8565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156105dc5780601f106105b1576101008083540402835291602001916105dc565b820191906000526020600020905b8154815290600101906020018083116105bf57829003601f168201915b505050505081565b600081158061061457503360009081526008602090815260408083206001600160a01b0387168452909152902054155b61061d57600080fd5b3360008181526008602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60065481565b600061069643610a28565b90505b90565b6001600160a01b03831660009081526008602090815260408083203384529091528120548211156106cc57600080fd5b6001600160a01b0384166000908152600860209081526040808320338452909152902080548390039055610701848484610ec6565b5060019392505050565b6107136109bc565b61071c57600080fd5b6001600160a01b03811661072f57600080fd5b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b60035460ff1681565b6001600160a01b03821660009081526007602052604081205415806107b957506001600160a01b038316600090815260076020526040812080548492906107a257fe5b6000918252602090912001546001600160801b0316115b156107c65750600061067f565b6001600160a01b03831660009081526007602052604090206107e89083611026565b905061067f565b3360009081526008602090815260408083206001600160a01b0386168452909152812054808310610843573360009081526008602090815260408083206001600160a01b038816845290915281205561086c565b3360009081526008602090815260408083206001600160a01b0388168452909152902083820390555b3360008181526008602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60006108de824361075f565b90505b919050565b60006108f06109bc565b6108f957600080fd5b600061090361068b565b905080838201101561091457600080fd5b600061091f856108d2565b905080848201101561093057600080fd5b61093d6009858401611156565b6001600160a01b038516600090815260076020526040902061096190828601611156565b6040805185815290516001600160a01b038716916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b6000546001600160a01b031681565b6000546001600160a01b0316331490565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105dc5780601f106105b1576101008083540402835291602001916105dc565b6009546000901580610a5b5750816009600081548110610a4457fe5b6000918252602090912001546001600160801b0316115b15610a68575060006108e1565b610a73600983611026565b90506108e1565b610a826109bc565b610a8b57600080fd5b6001600160a01b03811660009081526001602052604090205460ff16610ab057600080fd5b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000610ade338484610ec6565b50600192915050565b60055481565b6000610af985856105e4565b610b0257600080fd5b604051638f4ffcb160e01b81523360048201818152602483018790523060448401819052608060648501908152608485018790526001600160a01b038a1694638f4ffcb194938a93928a928a92919060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610b9357600080fd5b505af1158015610ba7573d6000803e3d6000fd5b50600198975050505050505050565b3360009081526008602090815260408083206001600160a01b03861684529091528120548281011015610be857600080fd5b3360008181526008602090815260408083206001600160a01b038816808552908352928190208054870190819055815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b610c876109bc565b610c9057600080fd5b6001600160a01b038116610cdf57600080546040516001600160a01b0390911691303180156108fc02929091818181858888f19350505050158015610cd9573d6000803e3d6000fd5b50610e26565b604080516370a0823160e01b8152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b158015610d2a57600080fd5b505afa158015610d3e573d6000803e3d6000fd5b505050506040513d6020811015610d5457600080fd5b5051600080546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b505050506040513d6020811015610ddb57600080fd5b50506000546040805183815290516001600160a01b03928316928616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c919081900360200190a350505b50565b610e316109bc565b610e3a57600080fd5b6001600160a01b038116610e4d57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b80610f1b57816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3611021565b4360055410610f2957600080fd5b6001600160a01b03821615801590610f4a57506001600160a01b0382163014155b610f5357600080fd5b6000610f5f844361075f565b905081811015610f6e57600080fd5b6001600160a01b0384166000908152600760205260409020610f9290838303611156565b6000610f9e844361075f565b9050808382011015610faf57600080fd5b6001600160a01b0384166000908152600760205260409020610fd390828501611156565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a350505b505050565b81546000906110375750600061067f565b82548390600019810190811061104957fe5b6000918252602090912001546001600160801b031682106110995782548390600019810190811061107657fe5b600091825260209091200154600160801b90046001600160801b0316905061067f565b826000815481106110a657fe5b6000918252602090912001546001600160801b03168210156110ca5750600061067f565b8254600090600019015b818111156111255760006002600183850101049050848682815481106110f657fe5b6000918252602090912001546001600160801b0316116111185780925061111f565b6001810391505b506110d4565b84828154811061113157fe5b600091825260209091200154600160801b90046001600160801b031695945050505050565b8154158061118a5750815443908390600019810190811061117357fe5b6000918252602090912001546001600160801b0316105b156111f157815460009083906111a3826001830161122f565b815481106111ad57fe5b600091825260209091200180546001600160801b03848116600160801b024382166fffffffffffffffffffffffffffffffff1990931692909217161790555061122b565b81546000908390600019810190811061120657fe5b600091825260209091200180546001600160801b03808516600160801b029116179055505b5050565b8154818355818111156110215760008381526020902061102191810190830161069991905b808211156112685760008155600101611254565b509056fea265627a7a72305820d809c6cd81bd7fe8220e479001532618b04671da93a326eadcfc312a84b10b4764736f6c63430005090032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c80638f32d59b116100c3578063cae9ca511161007c578063cae9ca5114610408578063d73dd6231461048d578063dd62ed3e146104b9578063df8de3e7146104e7578063f2fde38b1461050d578063f3ae24151461053357610158565b80638f32d59b1461038157806395d89b4114610389578063981b24d014610391578063a65eacdc146103ae578063a9059cbb146103d4578063c5bcc4f11461040057610158565b8063313ce56711610115578063313ce567146102955780634ee2cd7e146102b357806366188463146102df57806370a082311461030b578063827f32c0146103315780638da5cb5b1461035d57610158565b806306fdde031461015a578063095ea7b3146101d7578063176345141461021757806318160ddd1461023157806323b872dd146102395780632d06177a1461026f575b005b610162610559565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561019c578181015183820152602001610184565b50505050905090810190601f1680156101c95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610203600480360360408110156101ed57600080fd5b506001600160a01b0381351690602001356105e4565b604080519115158252519081900360200190f35b61021f610685565b60408051918252519081900360200190f35b61021f61068b565b6102036004803603606081101561024f57600080fd5b506001600160a01b0381358116916020810135909116906040013561069c565b6101586004803603602081101561028557600080fd5b50356001600160a01b031661070b565b61029d610756565b6040805160ff9092168252519081900360200190f35b61021f600480360360408110156102c957600080fd5b506001600160a01b03813516906020013561075f565b610203600480360360408110156102f557600080fd5b506001600160a01b0381351690602001356107ef565b61021f6004803603602081101561032157600080fd5b50356001600160a01b03166108d2565b6102036004803603604081101561034757600080fd5b506001600160a01b0381351690602001356108e6565b6103656109ad565b604080516001600160a01b039092168252519081900360200190f35b6102036109bc565b6101626109cd565b61021f600480360360208110156103a757600080fd5b5035610a28565b610158600480360360208110156103c457600080fd5b50356001600160a01b0316610a7a565b610203600480360360408110156103ea57600080fd5b506001600160a01b038135169060200135610ad1565b61021f610ae7565b6102036004803603606081101561041e57600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561044e57600080fd5b82018360208201111561046057600080fd5b8035906020019184600183028401116401000000008311171561048257600080fd5b509092509050610aed565b610203600480360360408110156104a357600080fd5b506001600160a01b038135169060200135610bb6565b61021f600480360360408110156104cf57600080fd5b506001600160a01b0381358116916020013516610c54565b610158600480360360208110156104fd57600080fd5b50356001600160a01b0316610c7f565b6101586004803603602081101561052357600080fd5b50356001600160a01b0316610e29565b6102036004803603602081101561054957600080fd5b50356001600160a01b0316610ea8565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156105dc5780601f106105b1576101008083540402835291602001916105dc565b820191906000526020600020905b8154815290600101906020018083116105bf57829003601f168201915b505050505081565b600081158061061457503360009081526008602090815260408083206001600160a01b0387168452909152902054155b61061d57600080fd5b3360008181526008602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60065481565b600061069643610a28565b90505b90565b6001600160a01b03831660009081526008602090815260408083203384529091528120548211156106cc57600080fd5b6001600160a01b0384166000908152600860209081526040808320338452909152902080548390039055610701848484610ec6565b5060019392505050565b6107136109bc565b61071c57600080fd5b6001600160a01b03811661072f57600080fd5b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b60035460ff1681565b6001600160a01b03821660009081526007602052604081205415806107b957506001600160a01b038316600090815260076020526040812080548492906107a257fe5b6000918252602090912001546001600160801b0316115b156107c65750600061067f565b6001600160a01b03831660009081526007602052604090206107e89083611026565b905061067f565b3360009081526008602090815260408083206001600160a01b0386168452909152812054808310610843573360009081526008602090815260408083206001600160a01b038816845290915281205561086c565b3360009081526008602090815260408083206001600160a01b0388168452909152902083820390555b3360008181526008602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60006108de824361075f565b90505b919050565b60006108f06109bc565b6108f957600080fd5b600061090361068b565b905080838201101561091457600080fd5b600061091f856108d2565b905080848201101561093057600080fd5b61093d6009858401611156565b6001600160a01b038516600090815260076020526040902061096190828601611156565b6040805185815290516001600160a01b038716916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3506001949350505050565b6000546001600160a01b031681565b6000546001600160a01b0316331490565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105dc5780601f106105b1576101008083540402835291602001916105dc565b6009546000901580610a5b5750816009600081548110610a4457fe5b6000918252602090912001546001600160801b0316115b15610a68575060006108e1565b610a73600983611026565b90506108e1565b610a826109bc565b610a8b57600080fd5b6001600160a01b03811660009081526001602052604090205460ff16610ab057600080fd5b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000610ade338484610ec6565b50600192915050565b60055481565b6000610af985856105e4565b610b0257600080fd5b604051638f4ffcb160e01b81523360048201818152602483018790523060448401819052608060648501908152608485018790526001600160a01b038a1694638f4ffcb194938a93928a928a92919060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610b9357600080fd5b505af1158015610ba7573d6000803e3d6000fd5b50600198975050505050505050565b3360009081526008602090815260408083206001600160a01b03861684529091528120548281011015610be857600080fd5b3360008181526008602090815260408083206001600160a01b038816808552908352928190208054870190819055815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b610c876109bc565b610c9057600080fd5b6001600160a01b038116610cdf57600080546040516001600160a01b0390911691303180156108fc02929091818181858888f19350505050158015610cd9573d6000803e3d6000fd5b50610e26565b604080516370a0823160e01b8152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b158015610d2a57600080fd5b505afa158015610d3e573d6000803e3d6000fd5b505050506040513d6020811015610d5457600080fd5b5051600080546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b505050506040513d6020811015610ddb57600080fd5b50506000546040805183815290516001600160a01b03928316928616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c919081900360200190a350505b50565b610e316109bc565b610e3a57600080fd5b6001600160a01b038116610e4d57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b80610f1b57816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3611021565b4360055410610f2957600080fd5b6001600160a01b03821615801590610f4a57506001600160a01b0382163014155b610f5357600080fd5b6000610f5f844361075f565b905081811015610f6e57600080fd5b6001600160a01b0384166000908152600760205260409020610f9290838303611156565b6000610f9e844361075f565b9050808382011015610faf57600080fd5b6001600160a01b0384166000908152600760205260409020610fd390828501611156565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a350505b505050565b81546000906110375750600061067f565b82548390600019810190811061104957fe5b6000918252602090912001546001600160801b031682106110995782548390600019810190811061107657fe5b600091825260209091200154600160801b90046001600160801b0316905061067f565b826000815481106110a657fe5b6000918252602090912001546001600160801b03168210156110ca5750600061067f565b8254600090600019015b818111156111255760006002600183850101049050848682815481106110f657fe5b6000918252602090912001546001600160801b0316116111185780925061111f565b6001810391505b506110d4565b84828154811061113157fe5b600091825260209091200154600160801b90046001600160801b031695945050505050565b8154158061118a5750815443908390600019810190811061117357fe5b6000918252602090912001546001600160801b0316105b156111f157815460009083906111a3826001830161122f565b815481106111ad57fe5b600091825260209091200180546001600160801b03848116600160801b024382166fffffffffffffffffffffffffffffffff1990931692909217161790555061122b565b81546000908390600019810190811061120657fe5b600091825260209091200180546001600160801b03808516600160801b029116179055505b5050565b8154818355818111156110215760008381526020902061102191810190830161069991905b808211156112685760008155600101611254565b509056fea265627a7a72305820d809c6cd81bd7fe8220e479001532618b04671da93a326eadcfc312a84b10b4764736f6c63430005090032
Deployed Bytecode Sourcemap
2985:16054:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2985:16054:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3020:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3020:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9235:600;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9235:600:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3938:25;;;:::i;:::-;;;;;;;;;;;;;;;;13182:103;;;:::i;6505:335::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6505:335:0;;;;;;;;;;;;;;;;;:::i;2086:143::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2086:143:0;-1:-1:-1;;;;;2086:143:0;;:::i;3101:21::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13662:717;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13662:717:0;;;;;;;;:::i;11228:458::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11228:458:0;;;;;;;;:::i;8696:132::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8696:132:0;-1:-1:-1;;;;;8696:132:0;;:::i;17755:589::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17755:589:0;;;;;;;;:::i;1066:28::-;;;:::i;:::-;;;;-1:-1:-1;;;;;1066:28:0;;;;;;;;;;;;;;1867:91;;;:::i;3183:20::-;;;:::i;14597:736::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14597:736:0;;:::i;2239:140::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2239:140:0;-1:-1:-1;;;;;2239:140:0;;:::i;5990:157::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5990:157:0;;;;;;;;:::i;3821:31::-;;;:::i;12686:368::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;12686:368:0;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;12686:368:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;12686:368:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;12686:368:0;;-1:-1:-1;12686:368:0;-1:-1:-1;12686:368:0;:::i;10329:400::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10329:400:0;;;;;;;;:::i;12014:146::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12014:146:0;;;;;;;;;;:::i;18661:375::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18661:375:0;-1:-1:-1;;;;;18661:375:0;;:::i;2556:200::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2556:200:0;-1:-1:-1;;;;;2556:200:0;;:::i;1968:108::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1968:108:0;-1:-1:-1;;;;;1968:108:0;;:::i;3020:18::-;;;;;;;;;;;;;;-1:-1:-1;;3020:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9235:600::-;9303:12;9644;;;9643:54;;-1:-1:-1;9670:10:0;9662:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;9662:29:0;;;;;;;;;;:34;9643:54;9635:63;;;;;;9719:10;9711:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;9711:29:0;;;;;;;;;;;;:39;;;9766;;;;;;;9711:29;;9719:10;9766:39;;;;;;;;;;;-1:-1:-1;9823:4:0;9235:600;;;;;:::o;3938:25::-;;;;:::o;13182:103::-;13226:4;13250:27;13264:12;13250:13;:27::i;:::-;13243:34;;13182:103;;:::o;6505:335::-;-1:-1:-1;;;;;6682:14:0;;6590:12;6682:14;;;:7;:14;;;;;;;;6697:10;6682:26;;;;;;;;:37;-1:-1:-1;6682:37:0;6674:46;;;;;;-1:-1:-1;;;;;6731:14:0;;;;;;:7;:14;;;;;;;;6746:10;6731:26;;;;;;;:37;;;;;;;6779:31;6739:5;6797:3;6761:7;6779:10;:31::i;:::-;-1:-1:-1;6828:4:0;6505:335;;;;;:::o;2086:143::-;1652:9;:7;:9::i;:::-;1644:18;;;;;;-1:-1:-1;;;;;2162:22:0;;2154:31;;;;;;-1:-1:-1;;;;;2196:18:0;;;;;2217:4;2196:18;;;;;;;;:25;;-1:-1:-1;;2196:25:0;;;;;;2086:143::o;3101:21::-;;;;;;:::o;13662:717::-;-1:-1:-1;;;;;14095:16:0;;13739:4;14095:16;;;:8;:16;;;;;:23;:28;;14094:80;;-1:-1:-1;;;;;;14129:16:0;;;;;;:8;:16;;;;;:19;;14161:12;;14129:16;:19;;;;;;;;;;;;;:29;-1:-1:-1;;;;;14129:29:0;:44;14094:80;14090:282;;;-1:-1:-1;14198:1:0;14191:8;;14090:282;-1:-1:-1;;;;;14329:16:0;;;;;;:8;:16;;;;;14318:42;;14347:12;14318:10;:42::i;:::-;14311:49;;;;11228:458;11360:10;11314:4;11352:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;11352:29:0;;;;;;;;;;11396;;;11392:188;;11450:10;11474:1;11442:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;11442:29:0;;;;;;;;;:33;11392:188;;;11516:10;11508:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;11508:29:0;;;;;;;;;11540:28;;;11508:60;;11392:188;11604:10;11626:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;11595:61:0;;11626:29;;;;;;;;;;;11595:61;;;;;;;;;11604:10;11595:61;;;;;;;;;;;-1:-1:-1;11674:4:0;;11228:458;-1:-1:-1;;;11228:458:0:o;8696:132::-;8752:15;8787:33;8799:6;8807:12;8787:11;:33::i;:::-;8780:40;;8696:132;;;;:::o;17755:589::-;17835:4;1652:9;:7;:9::i;:::-;1644:18;;;;;;17852:19;17874:13;:11;:13::i;:::-;17852:35;;17934:14;17923:7;17906:14;:24;:42;;17898:51;;;;;;17982:22;18007:17;18017:6;18007:9;:17::i;:::-;17982:42;;18074:17;18063:7;18043:17;:27;:48;;18035:57;;;;;;18125:62;18142:18;18179:7;18162:14;:24;18125:16;:62::i;:::-;-1:-1:-1;;;;;18215:16:0;;;;;;:8;:16;;;;;18198:63;;18233:27;;;18198:16;:63::i;:::-;18277:37;;;;;;;;-1:-1:-1;;;;;18277:37:0;;;18294:1;;18277:37;;;;;;;;;-1:-1:-1;18332:4:0;;17755:589;-1:-1:-1;;;;17755:589:0:o;1066:28::-;;;-1:-1:-1;;;;;1066:28:0;;:::o;1867:91::-;1907:4;1945:5;-1:-1:-1;;;;;1945:5:0;1931:10;:19;;1867:91::o;3183:20::-;;;;;;;;;;;;;;;-1:-1:-1;;3183:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14597:736;15039:18;:25;14659:4;;15039:30;;15038:84;;;15109:12;15075:18;15094:1;15075:21;;;;;;;;;;;;;;;;;:31;-1:-1:-1;;;;;15075:31:0;:46;15038:84;15034:292;;;-1:-1:-1;15146:1:0;15139:8;;15034:292;15270:44;15281:18;15301:12;15270:10;:44::i;:::-;15263:51;;;;2239:140;1652:9;:7;:9::i;:::-;1644:18;;;;;;-1:-1:-1;;;;;2315:18:0;;;;;;:8;:18;;;;;;;;2307:27;;;;;;-1:-1:-1;;;;;2345:18:0;2366:5;2345:18;;;:8;:18;;;;;:26;;-1:-1:-1;;2345:26:0;;;2239:140::o;5990:157::-;6056:12;6081:36;6092:10;6104:3;6109:7;6081:10;:36::i;:::-;-1:-1:-1;6135:4:0;5990:157;;;;:::o;3821:31::-;;;;:::o;12686:368::-;12790:12;12823:26;12831:8;12841:7;12823;:26::i;:::-;12815:35;;;;;;12863:159;;-1:-1:-1;;;12863:159:0;;12926:10;12863:159;;;;;;;;;;;;12981:4;12863:159;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12863:48:0;;;;;12926:10;12951:7;;12981:4;13001:10;;;;12863:159;;;;13001:10;;;;12863:159;1:33:-1;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;12863:159:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12863:159:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;13042:4:0;;12686:368;-1:-1:-1;;;;;;;;12686:368:0:o;10329:400::-;10491:10;10410:4;10483:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;10483:29:0;;;;;;;;;;10435:44;;;:77;;10427:86;;;;;;10586:10;10578:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;10578:29:0;;;;;;;;;;;;;;:44;;10546:76;;;;10638:61;;;;;;;10578:29;;10586:10;10638:61;;;;;;;;;;;-1:-1:-1;10717:4:0;10329:400;;;;:::o;12014:146::-;-1:-1:-1;;;;;12127:15:0;;;12090:17;12127:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;12014:146::o;18661:375::-;1652:9;:7;:9::i;:::-;1644:18;;;;;;-1:-1:-1;;;;;18732:20:0;;18728:111;;18769:5;;;:37;;-1:-1:-1;;;;;18769:5:0;;;;18792:4;18784:21;18769:37;;;;;18784:21;;18769:37;:5;:37;18784:21;18769:5;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18769:37:0;18821:7;;18728:111;18904:30;;;-1:-1:-1;;;18904:30:0;;18928:4;18904:30;;;;;;18871:6;;18851:11;;-1:-1:-1;;;;;18904:15:0;;;;;:30;;;;;;;;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;18904:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18904:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18904:30:0;18960:5;;;18945:30;;;-1:-1:-1;;;18945:30:0;;-1:-1:-1;;;;;18960:5:0;;;18945:30;;;;;;;;;;;;18904;;-1:-1:-1;18945:14:0;;;;;;:30;;;;;18904;;18945;;;;;;;;;;;:14;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;18945:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18945:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;19013:5:0;;18991:37;;;;;;;;-1:-1:-1;;;;;19013:5:0;;;;18991:37;;;;;;;;;18945:30;18991:37;;;1673:1;;;18661:375;:::o;2556:200::-;1652:9;:7;:9::i;:::-;1644:18;;;;;;-1:-1:-1;;;;;2645:22:0;;2637:31;;;;;;2705:5;;;2684:37;;-1:-1:-1;;;;;2684:37:0;;;;2705:5;;;2684:37;;;2732:5;:16;;-1:-1:-1;;;;;;2732:16:0;-1:-1:-1;;;;;2732:16:0;;;;;;;;;;2556:200::o;1968:108::-;-1:-1:-1;;;;;2050:18:0;2026:4;2050:18;;;:8;:18;;;;;;;;;1968:108::o;7227:1330::-;7315:12;7311:157;;7365:3;-1:-1:-1;;;;;7349:29:0;7358:5;-1:-1:-1;;;;;7349:29:0;;7370:7;7349:29;;;;;;;;;;;;;;;;;;7450:7;;7311:157;7510:12;7488:19;;:34;7480:43;;;;;;-1:-1:-1;;;;;7615:17:0;;;;;;7614:45;;-1:-1:-1;;;;;;7638:20:0;;7653:4;7638:20;;7614:45;7606:54;;;;;;7789:24;7816:32;7828:5;7835:12;7816:11;:32::i;:::-;7789:59;;7892:7;7869:19;:30;;7861:39;;;;;;-1:-1:-1;;;;;8040:15:0;;;;;;:8;:15;;;;;8023:64;;8057:29;;;8023:16;:64::i;:::-;8211:22;8236:30;8248:3;8253:12;8236:11;:30::i;:::-;8211:55;;8316:17;8305:7;8285:17;:27;:48;;8277:57;;;;;;-1:-1:-1;;;;;8384:13:0;;;;;;:8;:13;;;;;8367:60;;8399:27;;;8367:16;:60::i;:::-;8534:3;-1:-1:-1;;;;;8518:29:0;8527:5;-1:-1:-1;;;;;8518:29:0;;8539:7;8518:29;;;;;;;;;;;;;;;;;;7227:1330;;;;;;:::o;15729:776::-;15840:18;;15819:4;;15836:37;;-1:-1:-1;15872:1:0;15865:8;;15836:37;15954:18;;15942:11;;-1:-1:-1;;15954:20:0;;;15942:33;;;;;;;;;;;;;;;:43;-1:-1:-1;;;;;15942:43:0;15932:53;;15928:118;;16019:18;;16007:11;;-1:-1:-1;;16019:20:0;;;16007:33;;;;;;;;;;;;;;;:39;-1:-1:-1;;;16007:39:0;;-1:-1:-1;;;;;16007:39:0;;-1:-1:-1;16000:46:0;;15928:118;16070:11;16082:1;16070:14;;;;;;;;;;;;;;;;;:24;-1:-1:-1;;;;;16070:24:0;16061:33;;16057:47;;;-1:-1:-1;16103:1:0;16096:8;;16057:47;16203:18;;16169:8;;-1:-1:-1;;16203:20:0;16234:224;16247:3;16241;:9;16234:224;;;16267:8;16295:1;16291;16279:9;;;:13;16278:18;16267:29;;16343:6;16315:11;16327:3;16315:16;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;16315:26:0;:34;16311:136;;16376:3;16370:9;;16311:136;;;16430:1;16426:3;:5;16420:11;;16311:136;16234:224;;;;16475:11;16487:3;16475:16;;;;;;;;;;;;;;;;;:22;-1:-1:-1;;;16475:22:0;;-1:-1:-1;;;;;16475:22:0;;15729:776;-1:-1:-1;;;;;15729:776:0:o;16729:575::-;16828:18;;:23;;16827:103;;-1:-1:-1;16882:18:0;;16917:12;;16870:11;;-1:-1:-1;;16882:21:0;;;16870:34;;;;;;;;;;;;;;;:44;-1:-1:-1;;;;;16870:44:0;:59;16827:103;16823:474;;;16995:20;;16947:32;;16982:11;;16995:20;16982:11;16995:20;;;;:::i;:::-;16982:35;;;;;;;;;;;;;;;;;17032:48;;-1:-1:-1;;;;;17095:37:0;;;-1:-1:-1;;;17095:37:0;17067:12;17032:48;;-1:-1:-1;;17032:48:0;;;;;;;17095:37;;;;-1:-1:-1;16823:474:0;;;17212:18;;17165:32;;17200:11;;-1:-1:-1;;17212:20:0;;;17200:33;;;;;;;;;;;;;;;17248:37;;-1:-1:-1;;;;;17248:37:0;;;-1:-1:-1;;;17248:37:0;;;;;;-1:-1:-1;16823:474:0;16729:575;;:::o;2985:16054::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://d809c6cd81bd7fe8220e479001532618b04671da93a326eadcfc312a84b10b47
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.