ETH Price: $3,306.20 (+1.90%)

Token

Opacity (OPQ)
 

Overview

Max Total Supply

130,000,000 OPQ

Holders

12,068 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
491.9114 OPQ

Value
$0.00
0xa4f0b6899ca568df1595a3d12054499e5e1c9faf
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Opacity

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-11-10
*/

pragma solidity ^0.4.25;

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

contract Opacity {
  // Public variables of OPQ
  string public name;
  string public symbol;
  uint8 public decimals;
  uint256 public totalSupply;
  uint256 public funds;
  address public director;
  bool public directorLock;
  uint256 public claimAmount;
  uint256 public payAmount;
  uint256 public feeAmount;
  uint256 public epoch;
  uint256 public retentionMax;

  // Array definitions
  mapping (address => uint256) public balances;
  mapping (address => mapping (address => uint256)) public allowance;
  mapping (address => bool) public buried;
  mapping (address => uint256) public claimed;

  // ERC20 event
  event Transfer(address indexed _from, address indexed _to, uint256 _value);

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

  // This notifies clients about the amount burnt
  event Burn(address indexed _from, uint256 _value);

  // This notifies clients about an address getting buried
  event Bury(address indexed _target, uint256 _value);

  // This notifies clients about a claim being made on a buried address
  event Claim(address indexed _target, address indexed _payout, address indexed _fee);

  /**
   * Constructor function
   *
   * Initializes contract
   */
  function Opacity() public payable {
    director = msg.sender;
    name = "Opacity";
    symbol = "OPQ";
    decimals = 18;
    directorLock = false;
    funds = 0;
    totalSupply = 130000000 * 10 ** uint256(decimals);

    // Assign reserved OPQ supply to the director
    balances[director] = totalSupply;

    // Define default values for Opacity functions
    claimAmount = 5 * 10 ** (uint256(decimals) - 1);
    payAmount = 4 * 10 ** (uint256(decimals) - 1);
    feeAmount = 1 * 10 ** (uint256(decimals) - 1);

    // Seconds in a year
    epoch = 31536000;

    // Maximum time for a sector to remain stored
    retentionMax = 40 * 10 ** uint256(decimals);
  }

  /**
   * ERC20 balance function
   */
  function balanceOf(address _owner) public constant returns (uint256 balance) {
    return balances[_owner];
  }

  modifier onlyDirector {
    // Director can lock themselves out to complete decentralization of Opacity
    // An alternative is that another smart contract could become the decentralized director
    require(!directorLock);

    // Only the director is permitted
    require(msg.sender == director);
    _;
  }

  modifier onlyDirectorForce {
    // Only the director is permitted
    require(msg.sender == director);
    _;
  }

  /**
   * Transfers the director to a new address
   */
  function transferDirector(address newDirector) public onlyDirectorForce {
    director = newDirector;
  }

  /**
   * Withdraw funds from the contract
   */
  function withdrawFunds() public onlyDirectorForce {
    director.transfer(this.balance);
  }

  /**
   * Permanently lock out the director to decentralize Opacity
   * Invocation is discretionary because Opacity might be better suited to
   * transition to an artificially intelligent smart contract director
   */
  function selfLock() public payable onlyDirector {

    // Prevents accidental lockout
    require(msg.value == 10 ether);

    // Permanently lock out the director
    directorLock = true;
  }

  /**
   * Director can alter the storage-peg and broker fees
   */
  function amendClaim(uint8 claimAmountSet, uint8 payAmountSet, uint8 feeAmountSet, uint8 accuracy) public onlyDirector returns (bool success) {
    require(claimAmountSet == (payAmountSet + feeAmountSet));
    require(payAmountSet < claimAmountSet);
    require(feeAmountSet < claimAmountSet);
    require(claimAmountSet > 0);
    require(payAmountSet > 0);
    require(feeAmountSet > 0);

    claimAmount = claimAmountSet * 10 ** (uint256(decimals) - accuracy);
    payAmount = payAmountSet * 10 ** (uint256(decimals) - accuracy);
    feeAmount = feeAmountSet * 10 ** (uint256(decimals) - accuracy);
    return true;
  }

  /**
   * Director can alter the epoch time
   */
  function amendEpoch(uint256 epochSet) public onlyDirector returns (bool success) {
    // Set the epoch
    epoch = epochSet;
    return true;
  }

  /**
   * Director can alter the maximum time of storage retention
   */
  function amendRetention(uint8 retentionSet, uint8 accuracy) public onlyDirector returns (bool success) {
    // Set retentionMax
    retentionMax = retentionSet * 10 ** (uint256(decimals) - accuracy);
    return true;
  }

  /**
   * Bury an address
   *
   * When an address is buried; only claimAmount can be withdrawn once per epoch
   */
  function bury() public returns (bool success) {
    // The address must be previously unburied
    require(!buried[msg.sender]);

    // An address must have at least claimAmount to be buried
    require(balances[msg.sender] >= claimAmount);

    // Prevent addresses with large balances from getting buried
    require(balances[msg.sender] <= retentionMax);

    // Set buried state to true
    buried[msg.sender] = true;

    // Set the initial claim clock to 1
    claimed[msg.sender] = 1;

    // Execute an event reflecting the change
    emit Bury(msg.sender, balances[msg.sender]);
    return true;
  }

  /**
   * Claim OPQ from a buried address
   *
   * If a prior claim wasn't made during the current epoch, then claimAmount can be withdrawn
   *
   * @param _payout the address of the website owner
   * @param _fee the address of the broker node
   */
  function claim(address _payout, address _fee) public returns (bool success) {
    // The claimed address must have already been buried
    require(buried[msg.sender]);

    // The payout and fee addresses must be different
    require(_payout != _fee);

    // The claimed address cannot pay itself
    require(msg.sender != _payout);

    // The claimed address cannot pay itself
    require(msg.sender != _fee);

    // It must be either the first time this address is being claimed or atleast epoch in time has passed
    require(claimed[msg.sender] == 1 || (block.timestamp - claimed[msg.sender]) >= epoch);

    // Check if the buried address has enough
    require(balances[msg.sender] >= claimAmount);

    // Reset the claim clock to the current block time
    claimed[msg.sender] = block.timestamp;

    // Save this for an assertion in the future
    uint256 previousBalances = balances[msg.sender] + balances[_payout] + balances[_fee];

    // Remove claimAmount from the buried address
    balances[msg.sender] -= claimAmount;

    // Pay the website owner that invoked the web node that found the OPQ seed key
    balances[_payout] += payAmount;

    // Pay the broker node that unlocked the OPQ
    balances[_fee] += feeAmount;

    // Execute events to reflect the changes
    emit Claim(msg.sender, _payout, _fee);
    emit Transfer(msg.sender, _payout, payAmount);
    emit Transfer(msg.sender, _fee, feeAmount);

    // Failsafe logic that should never be false
    assert(balances[msg.sender] + balances[_payout] + balances[_fee] == previousBalances);
    return true;
  }

  /**
   * Internal transfer, can be called by this contract only
   */
  function _transfer(address _from, address _to, uint _value) internal {
    // Sending addresses cannot be buried
    require(!buried[_from]);

    // If the receiving address is buried, it cannot exceed retentionMax
    if (buried[_to]) {
      require(balances[_to] + _value <= retentionMax);
    }

    // Prevent transfer to 0x0 address, use burn() instead
    require(_to != 0x0);

    // Check if the sender has enough
    require(balances[_from] >= _value);

    // Check for overflows
    require(balances[_to] + _value > balances[_to]);

    // Save this for an assertion in the future
    uint256 previousBalances = balances[_from] + balances[_to];

    // Subtract from the sender
    balances[_from] -= _value;

    // Add the same to the recipient
    balances[_to] += _value;
    emit Transfer(_from, _to, _value);

    // Failsafe logic that should never be false
    assert(balances[_from] + balances[_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) {
    // Check allowance
    require(_value <= allowance[_from][msg.sender]);
    allowance[_from][msg.sender] -= _value;
    _transfer(_from, _to, _value);
    return true;
  }

  /**
   * Set allowance for other address
   *
   * Allows `_spender` to spend no more than `_value` tokens 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) {
    // Buried addresses cannot be approved
    require(!buried[msg.sender]);

    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) {
    // Buried addresses cannot be burnt
    require(!buried[msg.sender]);

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

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

    // Updates totalSupply
    totalSupply -= _value;
    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) {
    // Buried addresses cannot be burnt
    require(!buried[_from]);

    // Check if the targeted balance is enough
    require(balances[_from] >= _value);

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

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

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

    // Update totalSupply
    totalSupply -= _value;
    emit Burn(_from, _value);
    return true;
  }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_payout","type":"address"},{"name":"_fee","type":"address"}],"name":"claim","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"retentionMax","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"buried","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"epochSet","type":"uint256"}],"name":"amendEpoch","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"director","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"retentionSet","type":"uint8"},{"name":"accuracy","type":"uint8"}],"name":"amendRetention","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"bury","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":"_from","type":"address"},{"name":"_value","type":"uint256"}],"name":"burnFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"claimAmountSet","type":"uint8"},{"name":"payAmountSet","type":"uint8"},{"name":"feeAmountSet","type":"uint8"},{"name":"accuracy","type":"uint8"}],"name":"amendClaim","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"claimAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"epoch","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"payAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"claimed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"funds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"selfLock","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newDirector","type":"address"}],"name":"transferDirector","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"directorLock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":true,"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_target","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Bury","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_target","type":"address"},{"indexed":true,"name":"_payout","type":"address"},{"indexed":true,"name":"_fee","type":"address"}],"name":"Claim","type":"event"}]

60058054600160a060020a0319163317905560c0604052600760808190527f4f7061636974790000000000000000000000000000000000000000000000000060a090815262000052916000919062000122565b506040805180820190915260038082527f4f505100000000000000000000000000000000000000000000000000000000006020909201918252620000999160019162000122565b5060028054601260ff19909116178082556005805460a060020a60ff0219811682556000600481815560ff948516600a90810a6307bfa480026003819055600160a060020a039094168352600b60205260409092209290925593549092166000198101840a9182026006559181026007556008556301e13380600955810a6028029055620001c7565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200016557805160ff191683800117855562000195565b8280016001018555821562000195579182015b828111156200019557825182559160200191906001019062000178565b50620001a3929150620001a7565b5090565b620001c491905b80821115620001a35760008155600101620001ae565b90565b61120b80620001d76000396000f30060806040526004361061018a5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461018f578063095ea7b31461021957806318160ddd1461025157806321c0b3421461027857806322bb4f531461029f57806323b872dd146102b457806324600fc3146102de57806327e235e3146102f5578063313ce567146103165780633f1199e61461034157806342966c6814610362578063549215a31461037a5780635af82abf146103925780635f5f2aef146103c357806361161aae146103e457806369e15404146103f957806370a082311461040e57806379cc67901461042f5780637dbc9fba14610453578063830953ab14610480578063900cf0cf1461049557806395d89b41146104aa578063a9059cbb146104bf578063c8705544146104e3578063c884ef83146104f8578063c89f2ce414610519578063cae9ca511461052e578063d1e7e81f14610597578063dd62ed3e1461059f578063ddd41ef6146105c6578063ffe2d77e146105e7575b600080fd5b34801561019b57600080fd5b506101a46105fc565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101de5781810151838201526020016101c6565b50505050905090810190601f16801561020b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022557600080fd5b5061023d600160a060020a036004351660243561068a565b604080519115158252519081900360200190f35b34801561025d57600080fd5b5061026661070e565b60408051918252519081900360200190f35b34801561028457600080fd5b5061023d600160a060020a0360043581169060243516610714565b3480156102ab57600080fd5b50610266610926565b3480156102c057600080fd5b5061023d600160a060020a036004358116906024351660443561092c565b3480156102ea57600080fd5b506102f3610991565b005b34801561030157600080fd5b50610266600160a060020a03600435166109e5565b34801561032257600080fd5b5061032b6109f7565b6040805160ff9092168252519081900360200190f35b34801561034d57600080fd5b5061023d600160a060020a0360043516610a00565b34801561036e57600080fd5b5061023d600435610a15565b34801561038657600080fd5b5061023d600435610aaa565b34801561039e57600080fd5b506103a7610ae4565b60408051600160a060020a039092168252519081900360200190f35b3480156103cf57600080fd5b5061023d60ff60043581169060243516610af3565b3480156103f057600080fd5b5061023d610b45565b34801561040557600080fd5b50610266610c06565b34801561041a57600080fd5b50610266600160a060020a0360043516610c0c565b34801561043b57600080fd5b5061023d600160a060020a0360043516602435610c27565b34801561045f57600080fd5b5061023d60ff60043581169060243581169060443581169060643516610d1e565b34801561048c57600080fd5b50610266610de3565b3480156104a157600080fd5b50610266610de9565b3480156104b657600080fd5b506101a4610def565b3480156104cb57600080fd5b506102f3600160a060020a0360043516602435610e49565b3480156104ef57600080fd5b50610266610e58565b34801561050457600080fd5b50610266600160a060020a0360043516610e5e565b34801561052557600080fd5b50610266610e70565b34801561053a57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261023d948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610e769650505050505050565b6102f3610f8f565b3480156105ab57600080fd5b50610266600160a060020a0360043581169060243516610ff7565b3480156105d257600080fd5b506102f3600160a060020a0360043516611014565b3480156105f357600080fd5b5061023d61105a565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106825780601f1061065757610100808354040283529160200191610682565b820191906000526020600020905b81548152906001019060200180831161066557829003601f168201915b505050505081565b336000908152600d602052604081205460ff16156106a757600080fd5b336000818152600c60209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60035481565b336000908152600d6020526040812054819060ff16151561073457600080fd5b600160a060020a03848116908416141561074d57600080fd5b33600160a060020a038516141561076357600080fd5b33600160a060020a038416141561077957600080fd5b336000908152600e6020526040902054600114806107aa5750600954336000908152600e6020526040902054420310155b15156107b557600080fd5b600654336000908152600b602052604090205410156107d357600080fd5b50336000818152600e60209081526040808320429055600160a060020a03868116808552600b90935281842080549189168086528386208054888852858820805460065481039091556007548354019092556008548789528454019093559351939091019091019492939092917fcac3ed26c9dd72a2c44999857298af9c72ba2d1ca9784f5dad48c933e2224c119190a46007546040805191825251600160a060020a0386169133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a36008546040805191825251600160a060020a0385169133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3600160a060020a038084166000908152600b6020526040808220549287168252808220543383529120540101811461091c57fe5b5060019392505050565b600a5481565b600160a060020a0383166000908152600c6020908152604080832033845290915281205482111561095c57600080fd5b600160a060020a0384166000908152600c6020908152604080832033845290915290208054839003905561091c84848461106a565b600554600160a060020a031633146109a857600080fd5b600554604051600160a060020a0390911690303180156108fc02916000818181858888f193505050501580156109e2573d6000803e3d6000fd5b50565b600b6020526000908152604090205481565b60025460ff1681565b600d6020526000908152604090205460ff1681565b336000908152600d602052604081205460ff1615610a3257600080fd5b336000908152600b6020526040902054821115610a4e57600080fd5b336000818152600b602090815260409182902080548690039055600380548690039055815185815291517fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59281900390910190a2506001919050565b60055460009060a060020a900460ff1615610ac457600080fd5b600554600160a060020a03163314610adb57600080fd5b50600955600190565b600554600160a060020a031681565b60055460009060a060020a900460ff1615610b0d57600080fd5b600554600160a060020a03163314610b2457600080fd5b5060025460ff91821690821603600a90810a92909116919091029055600190565b336000908152600d602052604081205460ff1615610b6257600080fd5b600654336000908152600b60205260409020541015610b8057600080fd5b600a54336000908152600b60205260409020541115610b9e57600080fd5b336000818152600d60209081526040808320805460ff19166001908117909155600e835281842055600b82529182902054825190815291517fc96e8fee6eb65975d592ca9a340f33200433df4c42b2f623dd9fc6d22984d4959281900390910190a250600190565b60085481565b600160a060020a03166000908152600b602052604090205490565b600160a060020a0382166000908152600d602052604081205460ff1615610c4d57600080fd5b600160a060020a0383166000908152600b6020526040902054821115610c7257600080fd5b600160a060020a0383166000908152600c60209081526040808320338452909152902054821115610ca257600080fd5b600160a060020a0383166000818152600b6020908152604080832080548790039055600c825280832033845282529182902080548690039055600380548690039055815185815291517fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59281900390910190a250600192915050565b60055460009060a060020a900460ff1615610d3857600080fd5b600554600160a060020a03163314610d4f57600080fd5b82840160ff168560ff16141515610d6557600080fd5b60ff80861690851610610d7757600080fd5b60ff80861690841610610d8957600080fd5b600060ff861611610d9957600080fd5b600060ff851611610da957600080fd5b600060ff841611610db957600080fd5b5060025460ff91821690821603600a0a938116840260065591821683026007551602600855600190565b60065481565b60095481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106825780601f1061065757610100808354040283529160200191610682565b610e5433838361106a565b5050565b60075481565b600e6020526000908152604090205481565b60045481565b600083610e83818561068a565b15610f87576040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018790523060448401819052608060648501908152875160848601528751600160a060020a03871695638f4ffcb195948b94938b939192909160a490910190602085019080838360005b83811015610f1b578181015183820152602001610f03565b50505050905090810190601f168015610f485780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610f6a57600080fd5b505af1158015610f7e573d6000803e3d6000fd5b50505050600191505b509392505050565b60055460a060020a900460ff1615610fa657600080fd5b600554600160a060020a03163314610fbd57600080fd5b678ac7230489e800003414610fd157600080fd5b6005805474ff0000000000000000000000000000000000000000191660a060020a179055565b600c60209081526000928352604080842090915290825290205481565b600554600160a060020a0316331461102b57600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60055460a060020a900460ff1681565b600160a060020a0383166000908152600d602052604081205460ff161561109057600080fd5b600160a060020a0383166000908152600d602052604090205460ff16156110da57600a54600160a060020a0384166000908152600b6020526040902054830111156110da57600080fd5b600160a060020a03831615156110ef57600080fd5b600160a060020a0384166000908152600b602052604090205482111561111457600080fd5b600160a060020a0383166000908152600b60205260409020548281011161113a57600080fd5b50600160a060020a038083166000818152600b60209081526040808320805495891680855282852080548981039091559486905281548801909155815187815291519390950194927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3600160a060020a038084166000908152600b60205260408082205492871682529020540181146111d957fe5b505050505600a165627a7a72305820cfecf20d7c390211a42a13ea9c1d89c021333fd6a06220d527c063af7b5b90f40029

Deployed Bytecode

0x60806040526004361061018a5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461018f578063095ea7b31461021957806318160ddd1461025157806321c0b3421461027857806322bb4f531461029f57806323b872dd146102b457806324600fc3146102de57806327e235e3146102f5578063313ce567146103165780633f1199e61461034157806342966c6814610362578063549215a31461037a5780635af82abf146103925780635f5f2aef146103c357806361161aae146103e457806369e15404146103f957806370a082311461040e57806379cc67901461042f5780637dbc9fba14610453578063830953ab14610480578063900cf0cf1461049557806395d89b41146104aa578063a9059cbb146104bf578063c8705544146104e3578063c884ef83146104f8578063c89f2ce414610519578063cae9ca511461052e578063d1e7e81f14610597578063dd62ed3e1461059f578063ddd41ef6146105c6578063ffe2d77e146105e7575b600080fd5b34801561019b57600080fd5b506101a46105fc565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101de5781810151838201526020016101c6565b50505050905090810190601f16801561020b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022557600080fd5b5061023d600160a060020a036004351660243561068a565b604080519115158252519081900360200190f35b34801561025d57600080fd5b5061026661070e565b60408051918252519081900360200190f35b34801561028457600080fd5b5061023d600160a060020a0360043581169060243516610714565b3480156102ab57600080fd5b50610266610926565b3480156102c057600080fd5b5061023d600160a060020a036004358116906024351660443561092c565b3480156102ea57600080fd5b506102f3610991565b005b34801561030157600080fd5b50610266600160a060020a03600435166109e5565b34801561032257600080fd5b5061032b6109f7565b6040805160ff9092168252519081900360200190f35b34801561034d57600080fd5b5061023d600160a060020a0360043516610a00565b34801561036e57600080fd5b5061023d600435610a15565b34801561038657600080fd5b5061023d600435610aaa565b34801561039e57600080fd5b506103a7610ae4565b60408051600160a060020a039092168252519081900360200190f35b3480156103cf57600080fd5b5061023d60ff60043581169060243516610af3565b3480156103f057600080fd5b5061023d610b45565b34801561040557600080fd5b50610266610c06565b34801561041a57600080fd5b50610266600160a060020a0360043516610c0c565b34801561043b57600080fd5b5061023d600160a060020a0360043516602435610c27565b34801561045f57600080fd5b5061023d60ff60043581169060243581169060443581169060643516610d1e565b34801561048c57600080fd5b50610266610de3565b3480156104a157600080fd5b50610266610de9565b3480156104b657600080fd5b506101a4610def565b3480156104cb57600080fd5b506102f3600160a060020a0360043516602435610e49565b3480156104ef57600080fd5b50610266610e58565b34801561050457600080fd5b50610266600160a060020a0360043516610e5e565b34801561052557600080fd5b50610266610e70565b34801561053a57600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261023d948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610e769650505050505050565b6102f3610f8f565b3480156105ab57600080fd5b50610266600160a060020a0360043581169060243516610ff7565b3480156105d257600080fd5b506102f3600160a060020a0360043516611014565b3480156105f357600080fd5b5061023d61105a565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106825780601f1061065757610100808354040283529160200191610682565b820191906000526020600020905b81548152906001019060200180831161066557829003601f168201915b505050505081565b336000908152600d602052604081205460ff16156106a757600080fd5b336000818152600c60209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60035481565b336000908152600d6020526040812054819060ff16151561073457600080fd5b600160a060020a03848116908416141561074d57600080fd5b33600160a060020a038516141561076357600080fd5b33600160a060020a038416141561077957600080fd5b336000908152600e6020526040902054600114806107aa5750600954336000908152600e6020526040902054420310155b15156107b557600080fd5b600654336000908152600b602052604090205410156107d357600080fd5b50336000818152600e60209081526040808320429055600160a060020a03868116808552600b90935281842080549189168086528386208054888852858820805460065481039091556007548354019092556008548789528454019093559351939091019091019492939092917fcac3ed26c9dd72a2c44999857298af9c72ba2d1ca9784f5dad48c933e2224c119190a46007546040805191825251600160a060020a0386169133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a36008546040805191825251600160a060020a0385169133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3600160a060020a038084166000908152600b6020526040808220549287168252808220543383529120540101811461091c57fe5b5060019392505050565b600a5481565b600160a060020a0383166000908152600c6020908152604080832033845290915281205482111561095c57600080fd5b600160a060020a0384166000908152600c6020908152604080832033845290915290208054839003905561091c84848461106a565b600554600160a060020a031633146109a857600080fd5b600554604051600160a060020a0390911690303180156108fc02916000818181858888f193505050501580156109e2573d6000803e3d6000fd5b50565b600b6020526000908152604090205481565b60025460ff1681565b600d6020526000908152604090205460ff1681565b336000908152600d602052604081205460ff1615610a3257600080fd5b336000908152600b6020526040902054821115610a4e57600080fd5b336000818152600b602090815260409182902080548690039055600380548690039055815185815291517fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59281900390910190a2506001919050565b60055460009060a060020a900460ff1615610ac457600080fd5b600554600160a060020a03163314610adb57600080fd5b50600955600190565b600554600160a060020a031681565b60055460009060a060020a900460ff1615610b0d57600080fd5b600554600160a060020a03163314610b2457600080fd5b5060025460ff91821690821603600a90810a92909116919091029055600190565b336000908152600d602052604081205460ff1615610b6257600080fd5b600654336000908152600b60205260409020541015610b8057600080fd5b600a54336000908152600b60205260409020541115610b9e57600080fd5b336000818152600d60209081526040808320805460ff19166001908117909155600e835281842055600b82529182902054825190815291517fc96e8fee6eb65975d592ca9a340f33200433df4c42b2f623dd9fc6d22984d4959281900390910190a250600190565b60085481565b600160a060020a03166000908152600b602052604090205490565b600160a060020a0382166000908152600d602052604081205460ff1615610c4d57600080fd5b600160a060020a0383166000908152600b6020526040902054821115610c7257600080fd5b600160a060020a0383166000908152600c60209081526040808320338452909152902054821115610ca257600080fd5b600160a060020a0383166000818152600b6020908152604080832080548790039055600c825280832033845282529182902080548690039055600380548690039055815185815291517fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59281900390910190a250600192915050565b60055460009060a060020a900460ff1615610d3857600080fd5b600554600160a060020a03163314610d4f57600080fd5b82840160ff168560ff16141515610d6557600080fd5b60ff80861690851610610d7757600080fd5b60ff80861690841610610d8957600080fd5b600060ff861611610d9957600080fd5b600060ff851611610da957600080fd5b600060ff841611610db957600080fd5b5060025460ff91821690821603600a0a938116840260065591821683026007551602600855600190565b60065481565b60095481565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106825780601f1061065757610100808354040283529160200191610682565b610e5433838361106a565b5050565b60075481565b600e6020526000908152604090205481565b60045481565b600083610e83818561068a565b15610f87576040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018790523060448401819052608060648501908152875160848601528751600160a060020a03871695638f4ffcb195948b94938b939192909160a490910190602085019080838360005b83811015610f1b578181015183820152602001610f03565b50505050905090810190601f168015610f485780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015610f6a57600080fd5b505af1158015610f7e573d6000803e3d6000fd5b50505050600191505b509392505050565b60055460a060020a900460ff1615610fa657600080fd5b600554600160a060020a03163314610fbd57600080fd5b678ac7230489e800003414610fd157600080fd5b6005805474ff0000000000000000000000000000000000000000191660a060020a179055565b600c60209081526000928352604080842090915290825290205481565b600554600160a060020a0316331461102b57600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60055460a060020a900460ff1681565b600160a060020a0383166000908152600d602052604081205460ff161561109057600080fd5b600160a060020a0383166000908152600d602052604090205460ff16156110da57600a54600160a060020a0384166000908152600b6020526040902054830111156110da57600080fd5b600160a060020a03831615156110ef57600080fd5b600160a060020a0384166000908152600b602052604090205482111561111457600080fd5b600160a060020a0383166000908152600b60205260409020548281011161113a57600080fd5b50600160a060020a038083166000818152600b60209081526040808320805495891680855282852080548981039091559486905281548801909155815187815291519390950194927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3600160a060020a038084166000908152600b60205260408082205492871682529020540181146111d957fe5b505050505600a165627a7a72305820cfecf20d7c390211a42a13ea9c1d89c021333fd6a06220d527c063af7b5b90f40029

Swarm Source

bzzr://cfecf20d7c390211a42a13ea9c1d89c021333fd6a06220d527c063af7b5b90f4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.