ETH Price: $3,250.57 (+4.81%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Tokens60703152018-08-01 17:53:222373 days ago1533146002IN
0x9fE392D1...e2a042f46
0 ETH0.000053672
Add Kyc Verified...60698692018-08-01 16:02:052373 days ago1533139325IN
0x9fE392D1...e2a042f46
0 ETH0.000073131.55
Transfer60693712018-08-01 14:07:212373 days ago1533132441IN
0x9fE392D1...e2a042f46
0.0024 ETH0.000135352
Add Kyc Verified...60690642018-08-01 12:48:562374 days ago1533127736IN
0x9fE392D1...e2a042f46
0 ETH0.00003541.1
Add Kyc Verified...60569652018-07-30 11:29:362376 days ago1532950176IN
0x9fE392D1...e2a042f46
0 ETH0.000047651.01
Add Kyc Verified...60409752018-07-27 19:38:302378 days ago1532720310IN
0x9fE392D1...e2a042f46
0 ETH0.000032181
Add Kyc Verified...60387552018-07-27 10:32:512379 days ago1532687571IN
0x9fE392D1...e2a042f46
0 ETH0.000094372
Buy Tokens Via B...60212912018-07-24 11:11:592382 days ago1532430719IN
0x9fE392D1...e2a042f46
0 ETH0.00012082
Transfer60212372018-07-24 10:59:392382 days ago1532429979IN
0x9fE392D1...e2a042f46
0.001 ETH0.000058842
Transfer60211332018-07-24 10:28:582382 days ago1532428138IN
0x9fE392D1...e2a042f46
0.15 ETH0.000203033
Add Kyc Verified...60210682018-07-24 10:13:272382 days ago1532427207IN
0x9fE392D1...e2a042f46
0 ETH0.000064242
Transfer60177762018-07-23 20:27:202382 days ago1532377640IN
0x9fE392D1...e2a042f46
0.15 ETH0.000203033
Transfer60171942018-07-23 18:08:472382 days ago1532369327IN
0x9fE392D1...e2a042f46
0.154 ETH0.000203033
Transfer60171892018-07-23 18:07:502382 days ago1532369270IN
0x9fE392D1...e2a042f46
0.005 ETH0.000289373.5
Transfer60170082018-07-23 17:23:422382 days ago1532366622IN
0x9fE392D1...e2a042f46
0.01 ETH0.000390714
Add Kyc Verified...60167312018-07-23 16:18:112382 days ago1532362691IN
0x9fE392D1...e2a042f46
0 ETH0.000235925
Add Backend60119852018-07-22 20:57:532383 days ago1532293073IN
0x9fE392D1...e2a042f46
0 ETH0.0000942
Add Kyc Verified...60114402018-07-22 18:50:062383 days ago1532285406IN
0x9fE392D1...e2a042f46
0 ETH0.000096363
Add Kyc Verified...60114402018-07-22 18:50:062383 days ago1532285406IN
0x9fE392D1...e2a042f46
0 ETH0.000105993.3
Add Kyc Verified...60113972018-07-22 18:39:512383 days ago1532284791IN
0x9fE392D1...e2a042f46
0 ETH0.000155493.3
Add Backend60112492018-07-22 18:07:572383 days ago1532282877IN
0x9fE392D1...e2a042f46
0 ETH0.000093872

Latest 6 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
60693712018-08-01 14:07:212373 days ago1533132441
0x9fE392D1...e2a042f46
0.0024 ETH
60211332018-07-24 10:28:582382 days ago1532428138
0x9fE392D1...e2a042f46
0.15 ETH
60177762018-07-23 20:27:202382 days ago1532377640
0x9fE392D1...e2a042f46
0.15 ETH
60171942018-07-23 18:08:472382 days ago1532369327
0x9fE392D1...e2a042f46
0.154 ETH
60171892018-07-23 18:07:502382 days ago1532369270
0x9fE392D1...e2a042f46
0.005 ETH
60170082018-07-23 17:23:422382 days ago1532366622
0x9fE392D1...e2a042f46
0.01 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VeraCrowdsale

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-07-22
*/

pragma solidity ^0.4.24;


/**
 * @title Math
 * @dev Assorted math operations
 */
library Math {
  function max64(uint64 a, uint64 b) internal pure returns (uint64) {
    return a >= b ? a : b;
  }

  function min64(uint64 a, uint64 b) internal pure returns (uint64) {
    return a < b ? a : b;
  }

  function max256(uint256 a, uint256 b) internal pure returns (uint256) {
    return a >= b ? a : b;
  }

  function min256(uint256 a, uint256 b) internal pure returns (uint256) {
    return a < b ? a : b;
  }
}


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    // uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return a / b;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
    c = a + b;
    assert(c >= a);
    return c;
  }
}


/**
 * @title Roles
 * @author Francisco Giordano (@frangio)
 * @dev Library for managing addresses assigned to a Role.
 *      See RBAC.sol for example usage.
 */
library Roles {
  struct Role {
    mapping (address => bool) bearer;
  }

  /**
   * @dev give an address access to this role
   */
  function add(Role storage role, address addr)
    internal
  {
    role.bearer[addr] = true;
  }

  /**
   * @dev remove an address' access to this role
   */
  function remove(Role storage role, address addr)
    internal
  {
    role.bearer[addr] = false;
  }

  /**
   * @dev check if an address has this role
   * // reverts
   */
  function check(Role storage role, address addr)
    view
    internal
  {
    require(has(role, addr));
  }

  /**
   * @dev check if an address has this role
   * @return bool
   */
  function has(Role storage role, address addr)
    view
    internal
    returns (bool)
  {
    return role.bearer[addr];
  }
}


/**
 * @title RBAC (Role-Based Access Control)
 * @author Matt Condon (@Shrugs)
 * @dev Stores and provides setters and getters for roles and addresses.
 * @dev Supports unlimited numbers of roles and addresses.
 * @dev See //contracts/mocks/RBACMock.sol for an example of usage.
 * This RBAC method uses strings to key roles. It may be beneficial
 *  for you to write your own implementation of this interface using Enums or similar.
 * It's also recommended that you define constants in the contract, like ROLE_ADMIN below,
 *  to avoid typos.
 */
contract RBAC {
  using Roles for Roles.Role;

  mapping (string => Roles.Role) private roles;

  event RoleAdded(address addr, string roleName);
  event RoleRemoved(address addr, string roleName);

  /**
   * @dev reverts if addr does not have role
   * @param addr address
   * @param roleName the name of the role
   * // reverts
   */
  function checkRole(address addr, string roleName)
    view
    public
  {
    roles[roleName].check(addr);
  }

  /**
   * @dev determine if addr has role
   * @param addr address
   * @param roleName the name of the role
   * @return bool
   */
  function hasRole(address addr, string roleName)
    view
    public
    returns (bool)
  {
    return roles[roleName].has(addr);
  }

  /**
   * @dev add a role to an address
   * @param addr address
   * @param roleName the name of the role
   */
  function addRole(address addr, string roleName)
    internal
  {
    roles[roleName].add(addr);
    emit RoleAdded(addr, roleName);
  }

  /**
   * @dev remove a role from an address
   * @param addr address
   * @param roleName the name of the role
   */
  function removeRole(address addr, string roleName)
    internal
  {
    roles[roleName].remove(addr);
    emit RoleRemoved(addr, roleName);
  }

  /**
   * @dev modifier to scope access to a single role (uses msg.sender as addr)
   * @param roleName the name of the role
   * // reverts
   */
  modifier onlyRole(string roleName)
  {
    checkRole(msg.sender, roleName);
    _;
  }
}


/**
 * @title Interface of Price oracle
 * @dev Implements methods of price oracle used in the crowdsale
 * @author OnGrid Systems
 */
contract PriceOracleIface {
  uint256 public ethPriceInCents;

  function getUsdCentsFromWei(uint256 _wei) public view returns (uint256) {
  }
}


/**
 * @title Interface of ERC-20 token
 * @dev Implements transfer methods and event used throughout crowdsale
 * @author OnGrid Systems
 */
contract TransferableTokenIface {
  function transfer(address to, uint256 value) public returns (bool) {
  }

  function balanceOf(address who) public view returns (uint256) {
  }

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


/**
 * @title CrowdSale contract for Vera.jobs
 * @dev Keep the list of investors passed KYC, receive ethers to fallback,
 * calculate correspinding amount of tokens, add bonus (depending on the deposit size)
 * then transfers tokens to the investor's account
 * @author OnGrid Systems
 */
contract VeraCrowdsale is RBAC {
  using SafeMath for uint256;

  // Price of one token (1.00000...) in USD cents
  uint256 public tokenPriceInCents = 200;

  // Minimal amount of USD cents to invest. Transactions of less value will be reverted.
  uint256 public minDepositInCents = 100;

  // Amount of USD cents raised. Continuously increments on each transaction.
  // Note: may be irrelevant because the actual amount of harvested ethers depends on ETH/USD price at the moment.
  uint256 public centsRaised;

  // Amount of tokens distributed by this contract.
  // Note: doesn't include previous phases of tokensale.
  uint256 public tokensSold;

  // Address of VERA ERC-20 token contract
  TransferableTokenIface public token;

  // Address of ETH price feed
  PriceOracleIface public priceOracle;

  // Wallet address collecting received ETH
  address public wallet;

  // constants defining roles for access control
  string public constant ROLE_ADMIN = "admin";
  string public constant ROLE_BACKEND = "backend";
  string public constant ROLE_KYC_VERIFIED_INVESTOR = "kycVerified";

  // Value bonus configuration
  struct AmountBonus {

    // To understand which bonuses were applied bonus contains binary flag.
    // If several bonuses applied ids get summarized in resulting event.
    // Use values with a single 1-bit like 0x01, 0x02, 0x04, 0x08
    uint256 id;

    // amountFrom and amountTo define deposit value range.
    // Bonus percentage applies if deposit amount in cents is within the boundaries
    uint256 amountFrom;
    uint256 amountTo;
    uint256 bonusPercent;
  }

  // The list of available bonuses. Filled by the constructor on contract initialization
  AmountBonus[] public amountBonuses;

  /**
   * Event for token purchase logging
   * @param investor who received tokens
   * @param ethPriceInCents ETH price at the moment of purchase
   * @param valueInCents deposit calculated to USD cents
   * @param bonusPercent total bonus percent (sum of all bonuses)
   * @param bonusIds flags of all the bonuses applied to the purchase
   */
  event TokenPurchase(
    address indexed investor,
    uint256 ethPriceInCents,
    uint256 valueInCents,
    uint256 bonusPercent,
    uint256 bonusIds
  );

  /**
   * @dev modifier to scope access to admins
   * // reverts if called not by admin
   */
  modifier onlyAdmin()
  {
    checkRole(msg.sender, ROLE_ADMIN);
    _;
  }

  /**
   * @dev modifier to scope access of backend keys stored on
   * investor's portal
   * // reverts if called not by backend
   */
  modifier onlyBackend()
  {
    checkRole(msg.sender, ROLE_BACKEND);
    _;
  }

  /**
   * @dev modifier allowing calls from investors successfully passed KYC verification
   * // reverts if called by investor who didn't pass KYC via investor's portal
   */
  modifier onlyKYCVerifiedInvestor()
  {
    checkRole(msg.sender, ROLE_KYC_VERIFIED_INVESTOR);
    _;
  }

  /**
   * @dev Constructor initializing Crowdsale contract
   * @param _token address of the token ERC-20 contract.
   * @param _priceOracle ETH price feed
   * @param _wallet address where received ETH get forwarded
   */
  constructor(
    TransferableTokenIface _token,
    PriceOracleIface _priceOracle,
    address _wallet
  )
    public
  {
    require(_token != address(0), "Need token contract address");
    require(_priceOracle != address(0), "Need price oracle contract address");
    require(_wallet != address(0), "Need wallet address");
    addRole(msg.sender, ROLE_ADMIN);
    token = _token;
    priceOracle = _priceOracle;
    wallet = _wallet;
    // solium-disable-next-line arg-overflow
    amountBonuses.push(AmountBonus(0x1, 800000, 1999999, 20));
    // solium-disable-next-line arg-overflow
    amountBonuses.push(AmountBonus(0x2, 2000000, 2**256 - 1, 30));
  }

  /**
   * @dev Fallback function receiving ETH sent to the contract address
   * sender must be KYC (Know Your Customer) verified investor.
   */
  function ()
    external
    payable
    onlyKYCVerifiedInvestor
  {
    uint256 valueInCents = priceOracle.getUsdCentsFromWei(msg.value);
    buyTokens(msg.sender, valueInCents);
    wallet.transfer(msg.value);
  }

  /**
   * @dev Withdraws all remaining (not sold) tokens from the crowdsale contract
   * @param _to address of tokens receiver
   */
  function withdrawTokens(address _to) public onlyAdmin {
    uint256 amount = token.balanceOf(address(this));
    require(amount > 0, "no tokens on the contract");
    token.transfer(_to, amount);
  }

  /**
   * @dev Called when investor's portal (backend) receives non-ethereum payment
   * @param _investor address of investor
   * @param _cents received deposit amount in cents
   */
  function buyTokensViaBackend(address _investor, uint256 _cents)
    public
    onlyBackend
  {
    if (! RBAC.hasRole(_investor, ROLE_KYC_VERIFIED_INVESTOR)) {
      addKycVerifiedInvestor(_investor);
    }
    buyTokens(_investor, _cents);
  }

  /**
   * @dev Computes total bonuses amount by value
   * @param _cents deposit amount in USD cents
   * @return total bonus percent (sum of applied bonus percents), bonusIds (sum of applied bonus flags)
   */
  function computeBonuses(uint256 _cents)
    public
    view
    returns (uint256, uint256)
  {
    uint256 bonusTotal;
    uint256 bonusIds;
    for (uint i = 0; i < amountBonuses.length; i++) {
      if (_cents >= amountBonuses[i].amountFrom &&
      _cents <= amountBonuses[i].amountTo) {
        bonusTotal += amountBonuses[i].bonusPercent;
        bonusIds += amountBonuses[i].id;
      }
    }
    return (bonusTotal, bonusIds);
  }

  /**
   * @dev Calculates amount of tokens by cents
   * @param _cents deposit amount in USD cents
   * @return amount of tokens investor receive for the deposit
   */
  function computeTokens(uint256 _cents) public view returns (uint256) {
    uint256 tokens = _cents.mul(10 ** 18).div(tokenPriceInCents);
    (uint256 bonusPercent, ) = computeBonuses(_cents);
    uint256 bonusTokens = tokens.mul(bonusPercent).div(100);
    if (_cents >= minDepositInCents) {
      return tokens.add(bonusTokens);
    }
  }

  /**
   * @dev Add admin role to an address
   * @param addr address
   */
  function addAdmin(address addr)
    public
    onlyAdmin
  {
    addRole(addr, ROLE_ADMIN);
  }

  /**
   * @dev Revoke admin privileges from an address
   * @param addr address
   */
  function delAdmin(address addr)
    public
    onlyAdmin
  {
    removeRole(addr, ROLE_ADMIN);
  }

  /**
   * @dev Add backend privileges to an address
   * @param addr address
   */
  function addBackend(address addr)
    public
    onlyAdmin
  {
    addRole(addr, ROLE_BACKEND);
  }

  /**
   * @dev Revoke backend privileges from an address
   * @param addr address
   */
  function delBackend(address addr)
    public
    onlyAdmin
  {
    removeRole(addr, ROLE_BACKEND);
  }

  /**
   * @dev Mark investor's address as KYC-verified person
   * @param addr address
   */
  function addKycVerifiedInvestor(address addr)
    public
    onlyBackend
  {
    addRole(addr, ROLE_KYC_VERIFIED_INVESTOR);
  }

  /**
   * @dev Revoke KYC verification from the person
   * @param addr address
   */
  function delKycVerifiedInvestor(address addr)
    public
    onlyBackend
  {
    removeRole(addr, ROLE_KYC_VERIFIED_INVESTOR);
  }

  /**
   * @dev Calculates and applies bonuses and implements actual token transfer and events
   * @param _investor address of the beneficiary receiving tokens
   * @param _cents amount of deposit in cents
   */
  function buyTokens(address _investor, uint256 _cents) internal {
    (uint256 bonusPercent, uint256 bonusIds) = computeBonuses(_cents);
    uint256 tokens = computeTokens(_cents);
    require(tokens > 0, "value is not enough");
    token.transfer(_investor, tokens);
    centsRaised = centsRaised.add(_cents);
    tokensSold = tokensSold.add(tokens);
    emit TokenPurchase(
      _investor,
      priceOracle.ethPriceInCents(),
      _cents,
      bonusPercent,
      bonusIds
    );
  }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"addr","type":"address"},{"name":"roleName","type":"string"}],"name":"checkRole","outputs":[],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"},{"name":"roleName","type":"string"}],"name":"hasRole","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"priceOracle","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"addBackend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_BACKEND","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"withdrawTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"centsRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"delAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_KYC_VERIFIED_INVESTOR","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"addAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minDepositInCents","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"addKycVerifiedInvestor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"delBackend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_investor","type":"address"},{"name":"_cents","type":"uint256"}],"name":"buyTokensViaBackend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_cents","type":"uint256"}],"name":"computeTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenPriceInCents","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"amountBonuses","outputs":[{"name":"id","type":"uint256"},{"name":"amountFrom","type":"uint256"},{"name":"amountTo","type":"uint256"},{"name":"bonusPercent","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_ADMIN","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_cents","type":"uint256"}],"name":"computeBonuses","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"delKycVerifiedInvestor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"},{"name":"_priceOracle","type":"address"},{"name":"_wallet","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"investor","type":"address"},{"indexed":false,"name":"ethPriceInCents","type":"uint256"},{"indexed":false,"name":"valueInCents","type":"uint256"},{"indexed":false,"name":"bonusPercent","type":"uint256"},{"indexed":false,"name":"bonusIds","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"roleName","type":"string"}],"name":"RoleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"roleName","type":"string"}],"name":"RoleRemoved","type":"event"}]

608060405260c860015560646002553480156200001b57600080fd5b50604051606080620017df833981016040908152815160208301519190920151600160a060020a0383161515620000b357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4e65656420746f6b656e20636f6e747261637420616464726573730000000000604482015290519081900360640190fd5b600160a060020a03821615156200015157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4e656564207072696365206f7261636c6520636f6e747261637420616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0381161515620001c957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6565642077616c6c6574206164647265737300000000000000000000000000604482015290519081900360640190fd5b62000219336040805190810160405280600581526020017f61646d696e00000000000000000000000000000000000000000000000000000081525062000393640100000000026401000000009004565b60058054600160a060020a03948516600160a060020a03199182161790915560068054938516938216939093179092556007805491909316911617905560408051608081810183526001808352620c35006020808501918252621e847f858701908152601460608088019182526008805480880182556000828152995160049182027ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee38181019290925597517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4808a019190915595517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee5808a019190915594517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee6988901558b51998a018c5260028a52621e8480968a019687526000199b8a019b8c52601e938a019384528254988901835591909952965195909702958601949094559051908401559351908201559051910155620004ee565b6200040f826000836040518082805190602001908083835b60208310620003cc5780518252601f199092019160209182019101620003ab565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050640100000000620004c981026200122e1704565b7fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b70048982826040518083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015620004895781810151838201526020016200046f565b50505050905090810190601f168015620004b75780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6112e180620004fe6000396000f3006080604052600436106101325763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630988ca8c811461023c578063217fe6c6146102a55780632630c12f146103205780632ac016ad146103515780632e0025c11461037257806349df728c146103fc578063518ab2a81461041d578063521eb273146104445780635259fcb41461045957806362d918551461046e5780637025b3ac1461048f57806370480275146104a45780637488ad7c146104c55780637dabb4d6146104da57806399b22701146104fb578063a3fc81cb1461051c578063aebf1e3d14610540578063c7a1f22114610558578063d036261f1461056d578063d391014b146105ab578063e6f02bf9146105c0578063f22b683e146105f1578063fc0c546a14610612575b6000610161336040805190810160405280600b8152602001600080516020611296833981519152815250610627565b600654604080517f0c7e30b70000000000000000000000000000000000000000000000000000000081523460048201529051600160a060020a0390921691630c7e30b7916024808201926020929091908290030181600087803b1580156101c757600080fd5b505af11580156101db573d6000803e3d6000fd5b505050506040513d60208110156101f157600080fd5b505190506101ff3382610695565b600754604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015610238573d6000803e3d6000fd5b5050005b34801561024857600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526102a3958335600160a060020a03169536956044949193909101919081908401838280828437509497506106279650505050505050565b005b3480156102b157600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261030c958335600160a060020a03169536956044949193909101919081908401838280828437509497506108c39650505050505050565b604080519115158252519081900360200190f35b34801561032c57600080fd5b50610335610938565b60408051600160a060020a039092168252519081900360200190f35b34801561035d57600080fd5b506102a3600160a060020a0360043516610947565b34801561037e57600080fd5b506103876109a1565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103c15781810151838201526020016103a9565b50505050905090810190601f1680156103ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561040857600080fd5b506102a3600160a060020a03600435166109c6565b34801561042957600080fd5b50610432610b94565b60408051918252519081900360200190f35b34801561045057600080fd5b50610335610b9a565b34801561046557600080fd5b50610432610ba9565b34801561047a57600080fd5b506102a3600160a060020a0360043516610baf565b34801561049b57600080fd5b50610387610c03565b3480156104b057600080fd5b506102a3600160a060020a0360043516610c28565b3480156104d157600080fd5b50610432610c7c565b3480156104e657600080fd5b506102a3600160a060020a0360043516610c82565b34801561050757600080fd5b506102a3600160a060020a0360043516610cdc565b34801561052857600080fd5b506102a3600160a060020a0360043516602435610d33565b34801561054c57600080fd5b50610432600435610da6565b34801561056457600080fd5b50610432610e23565b34801561057957600080fd5b50610585600435610e29565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156105b757600080fd5b50610387610e61565b3480156105cc57600080fd5b506105d8600435610e83565b6040805192835260208301919091528051918290030190f35b3480156105fd57600080fd5b506102a3600160a060020a0360043516610f44565b34801561061e57600080fd5b50610335610f9e565b610691826000836040518082805190602001908083835b6020831061065d5780518252601f19909201916020918201910161063e565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050610fad565b5050565b60008060006106a384610e83565b925092506106b084610da6565b90506000811161072157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f76616c7565206973206e6f7420656e6f75676800000000000000000000000000604482015290519081900360640190fd5b600554604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038881166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561079057600080fd5b505af11580156107a4573d6000803e3d6000fd5b505050506040513d60208110156107ba57600080fd5b50506003546107cf908563ffffffff610fc216565b6003556004546107e5908263ffffffff610fc216565b6004908155600654604080517f3edfe35e0000000000000000000000000000000000000000000000000000000081529051600160a060020a03808a16947f8fd7c1cf2b9cceb829553742c07a11ee82ed91a2e2d4791328461df6aa6e8a899490911692633edfe35e92818301926020928290030181600087803b15801561086b57600080fd5b505af115801561087f573d6000803e3d6000fd5b505050506040513d602081101561089557600080fd5b5051604080519182526020820188905281810187905260608201869052519081900360800190a25050505050565b600061092f836000846040518082805190602001908083835b602083106108fb5780518252601f1990920191602091820191016108dc565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050610fcf565b90505b92915050565b600654600160a060020a031681565b6109713360408051908101604052806005815260200160d960020a6430b236b4b702815250610627565b61099e81604080519081016040528060078152602001600080516020611276833981519152815250610fee565b50565b6040805180820190915260078152600080516020611276833981519152602082015281565b60006109f23360408051908101604052806005815260200160d960020a6430b236b4b702815250610627565b600554604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b505050506040513d6020811015610a8257600080fd5b5051905060008111610af557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6e6f20746f6b656e73206f6e2074686520636f6e747261637400000000000000604482015290519081900360640190fd5b600554604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610b6457600080fd5b505af1158015610b78573d6000803e3d6000fd5b505050506040513d6020811015610b8e57600080fd5b50505050565b60045481565b600754600160a060020a031681565b60035481565b610bd93360408051908101604052806005815260200160d960020a6430b236b4b702815250610627565b61099e8160408051908101604052806005815260200160d960020a6430b236b4b70281525061110f565b60408051808201909152600b8152600080516020611296833981519152602082015281565b610c523360408051908101604052806005815260200160d960020a6430b236b4b702815250610627565b61099e8160408051908101604052806005815260200160d960020a6430b236b4b702815250610fee565b60025481565b610caf33604080519081016040528060078152602001600080516020611276833981519152815250610627565b61099e816040805190810160405280600b8152602001600080516020611296833981519152815250610fee565b610d063360408051908101604052806005815260200160d960020a6430b236b4b702815250610627565b61099e8160408051908101604052806007815260200160008051602061127683398151915281525061110f565b610d6033604080519081016040528060078152602001600080516020611276833981519152815250610627565b610d8d826040805190810160405280600b81526020016000805160206112968339815191528152506108c3565b1515610d9c57610d9c82610c82565b6106918282610695565b600080600080610dd9600154610dcd670de0b6b3a7640000886111f090919063ffffffff16565b9063ffffffff61121916565b9250610de485610e83565b509150610dfc6064610dcd858563ffffffff6111f016565b6002549091508510610e1b57610e18838263ffffffff610fc216565b93505b505050919050565b60015481565b6008805482908110610e3757fe5b60009182526020909120600490910201805460018201546002830154600390930154919350919084565b604080518082019091526005815260d960020a6430b236b4b702602082015281565b6000808080805b600854811015610f39576008805482908110610ea257fe5b9060005260206000209060040201600101548610158015610ee257506008805482908110610ecc57fe5b9060005260206000209060040201600201548611155b15610f31576008805482908110610ef557fe5b90600052602060002090600402016003015483019250600881815481101515610f1a57fe5b906000526020600020906004020160000154820191505b600101610e8a565b509094909350915050565b610f7133604080519081016040528060078152602001600080516020611276833981519152815250610627565b61099e816040805190810160405280600b815260200160008051602061129683398151915281525061110f565b600554600160a060020a031681565b610fb78282610fcf565b151561069157600080fd5b8181018281101561093257fe5b600160a060020a03166000908152602091909152604090205460ff1690565b611058826000836040518082805190602001908083835b602083106110245780518252601f199092019160209182019101611005565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209291505061122e565b7fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b70048982826040518083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156110d05781810151838201526020016110b8565b50505050905090810190601f1680156110fd5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b611179826000836040518082805190602001908083835b602083106111455780518252601f199092019160209182019101611126565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050611253565b7fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a82826040518083600160a060020a0316600160a060020a031681526020018060200182810382528381815181526020019150805190602001908083836000838110156110d05781810151838201526020016110b8565b600082151561120157506000610932565b5081810281838281151561121157fe5b041461093257fe5b6000818381151561122657fe5b049392505050565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a0316600090815260209190915260409020805460ff1916905556006261636b656e64000000000000000000000000000000000000000000000000006b79635665726966696564000000000000000000000000000000000000000000a165627a7a723058201bcb6b2e4731bfe9044fd571e371be8ea4254c0429f35f783325d8c42faa5ef40029000000000000000000000000f90f1648926005a8bb3ed8ec883164de7f7687430000000000000000000000005f243c098ca59501c153c1fa5e2a3bfd4d61bdf700000000000000000000000074610eedcf3167c267ab0b1365007f1a9f6a303f

Deployed Bytecode

0x6080604052600436106101325763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630988ca8c811461023c578063217fe6c6146102a55780632630c12f146103205780632ac016ad146103515780632e0025c11461037257806349df728c146103fc578063518ab2a81461041d578063521eb273146104445780635259fcb41461045957806362d918551461046e5780637025b3ac1461048f57806370480275146104a45780637488ad7c146104c55780637dabb4d6146104da57806399b22701146104fb578063a3fc81cb1461051c578063aebf1e3d14610540578063c7a1f22114610558578063d036261f1461056d578063d391014b146105ab578063e6f02bf9146105c0578063f22b683e146105f1578063fc0c546a14610612575b6000610161336040805190810160405280600b8152602001600080516020611296833981519152815250610627565b600654604080517f0c7e30b70000000000000000000000000000000000000000000000000000000081523460048201529051600160a060020a0390921691630c7e30b7916024808201926020929091908290030181600087803b1580156101c757600080fd5b505af11580156101db573d6000803e3d6000fd5b505050506040513d60208110156101f157600080fd5b505190506101ff3382610695565b600754604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015610238573d6000803e3d6000fd5b5050005b34801561024857600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526102a3958335600160a060020a03169536956044949193909101919081908401838280828437509497506106279650505050505050565b005b3480156102b157600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261030c958335600160a060020a03169536956044949193909101919081908401838280828437509497506108c39650505050505050565b604080519115158252519081900360200190f35b34801561032c57600080fd5b50610335610938565b60408051600160a060020a039092168252519081900360200190f35b34801561035d57600080fd5b506102a3600160a060020a0360043516610947565b34801561037e57600080fd5b506103876109a1565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103c15781810151838201526020016103a9565b50505050905090810190601f1680156103ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561040857600080fd5b506102a3600160a060020a03600435166109c6565b34801561042957600080fd5b50610432610b94565b60408051918252519081900360200190f35b34801561045057600080fd5b50610335610b9a565b34801561046557600080fd5b50610432610ba9565b34801561047a57600080fd5b506102a3600160a060020a0360043516610baf565b34801561049b57600080fd5b50610387610c03565b3480156104b057600080fd5b506102a3600160a060020a0360043516610c28565b3480156104d157600080fd5b50610432610c7c565b3480156104e657600080fd5b506102a3600160a060020a0360043516610c82565b34801561050757600080fd5b506102a3600160a060020a0360043516610cdc565b34801561052857600080fd5b506102a3600160a060020a0360043516602435610d33565b34801561054c57600080fd5b50610432600435610da6565b34801561056457600080fd5b50610432610e23565b34801561057957600080fd5b50610585600435610e29565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156105b757600080fd5b50610387610e61565b3480156105cc57600080fd5b506105d8600435610e83565b6040805192835260208301919091528051918290030190f35b3480156105fd57600080fd5b506102a3600160a060020a0360043516610f44565b34801561061e57600080fd5b50610335610f9e565b610691826000836040518082805190602001908083835b6020831061065d5780518252601f19909201916020918201910161063e565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050610fad565b5050565b60008060006106a384610e83565b925092506106b084610da6565b90506000811161072157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f76616c7565206973206e6f7420656e6f75676800000000000000000000000000604482015290519081900360640190fd5b600554604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038881166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561079057600080fd5b505af11580156107a4573d6000803e3d6000fd5b505050506040513d60208110156107ba57600080fd5b50506003546107cf908563ffffffff610fc216565b6003556004546107e5908263ffffffff610fc216565b6004908155600654604080517f3edfe35e0000000000000000000000000000000000000000000000000000000081529051600160a060020a03808a16947f8fd7c1cf2b9cceb829553742c07a11ee82ed91a2e2d4791328461df6aa6e8a899490911692633edfe35e92818301926020928290030181600087803b15801561086b57600080fd5b505af115801561087f573d6000803e3d6000fd5b505050506040513d602081101561089557600080fd5b5051604080519182526020820188905281810187905260608201869052519081900360800190a25050505050565b600061092f836000846040518082805190602001908083835b602083106108fb5780518252601f1990920191602091820191016108dc565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050610fcf565b90505b92915050565b600654600160a060020a031681565b6109713360408051908101604052806005815260200160d960020a6430b236b4b702815250610627565b61099e81604080519081016040528060078152602001600080516020611276833981519152815250610fee565b50565b6040805180820190915260078152600080516020611276833981519152602082015281565b60006109f23360408051908101604052806005815260200160d960020a6430b236b4b702815250610627565b600554604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a03909216916370a08231916024808201926020929091908290030181600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b505050506040513d6020811015610a8257600080fd5b5051905060008111610af557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6e6f20746f6b656e73206f6e2074686520636f6e747261637400000000000000604482015290519081900360640190fd5b600554604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610b6457600080fd5b505af1158015610b78573d6000803e3d6000fd5b505050506040513d6020811015610b8e57600080fd5b50505050565b60045481565b600754600160a060020a031681565b60035481565b610bd93360408051908101604052806005815260200160d960020a6430b236b4b702815250610627565b61099e8160408051908101604052806005815260200160d960020a6430b236b4b70281525061110f565b60408051808201909152600b8152600080516020611296833981519152602082015281565b610c523360408051908101604052806005815260200160d960020a6430b236b4b702815250610627565b61099e8160408051908101604052806005815260200160d960020a6430b236b4b702815250610fee565b60025481565b610caf33604080519081016040528060078152602001600080516020611276833981519152815250610627565b61099e816040805190810160405280600b8152602001600080516020611296833981519152815250610fee565b610d063360408051908101604052806005815260200160d960020a6430b236b4b702815250610627565b61099e8160408051908101604052806007815260200160008051602061127683398151915281525061110f565b610d6033604080519081016040528060078152602001600080516020611276833981519152815250610627565b610d8d826040805190810160405280600b81526020016000805160206112968339815191528152506108c3565b1515610d9c57610d9c82610c82565b6106918282610695565b600080600080610dd9600154610dcd670de0b6b3a7640000886111f090919063ffffffff16565b9063ffffffff61121916565b9250610de485610e83565b509150610dfc6064610dcd858563ffffffff6111f016565b6002549091508510610e1b57610e18838263ffffffff610fc216565b93505b505050919050565b60015481565b6008805482908110610e3757fe5b60009182526020909120600490910201805460018201546002830154600390930154919350919084565b604080518082019091526005815260d960020a6430b236b4b702602082015281565b6000808080805b600854811015610f39576008805482908110610ea257fe5b9060005260206000209060040201600101548610158015610ee257506008805482908110610ecc57fe5b9060005260206000209060040201600201548611155b15610f31576008805482908110610ef557fe5b90600052602060002090600402016003015483019250600881815481101515610f1a57fe5b906000526020600020906004020160000154820191505b600101610e8a565b509094909350915050565b610f7133604080519081016040528060078152602001600080516020611276833981519152815250610627565b61099e816040805190810160405280600b815260200160008051602061129683398151915281525061110f565b600554600160a060020a031681565b610fb78282610fcf565b151561069157600080fd5b8181018281101561093257fe5b600160a060020a03166000908152602091909152604090205460ff1690565b611058826000836040518082805190602001908083835b602083106110245780518252601f199092019160209182019101611005565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209291505061122e565b7fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b70048982826040518083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156110d05781810151838201526020016110b8565b50505050905090810190601f1680156110fd5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b611179826000836040518082805190602001908083835b602083106111455780518252601f199092019160209182019101611126565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050611253565b7fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a82826040518083600160a060020a0316600160a060020a031681526020018060200182810382528381815181526020019150805190602001908083836000838110156110d05781810151838201526020016110b8565b600082151561120157506000610932565b5081810281838281151561121157fe5b041461093257fe5b6000818381151561122657fe5b049392505050565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a0316600090815260209190915260409020805460ff1916905556006261636b656e64000000000000000000000000000000000000000000000000006b79635665726966696564000000000000000000000000000000000000000000a165627a7a723058201bcb6b2e4731bfe9044fd571e371be8ea4254c0429f35f783325d8c42faa5ef40029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000f90f1648926005a8bb3ed8ec883164de7f7687430000000000000000000000005f243c098ca59501c153c1fa5e2a3bfd4d61bdf700000000000000000000000074610eedcf3167c267ab0b1365007f1a9f6a303f

-----Decoded View---------------
Arg [0] : _token (address): 0xf90f1648926005A8bb3ed8ec883164De7F768743
Arg [1] : _priceOracle (address): 0x5f243C098cA59501c153C1fa5E2a3BFD4d61bdf7
Arg [2] : _wallet (address): 0x74610EedCF3167c267aB0b1365007f1A9F6a303f

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000f90f1648926005a8bb3ed8ec883164de7f768743
Arg [1] : 0000000000000000000000005f243c098ca59501c153c1fa5e2a3bfd4d61bdf7
Arg [2] : 00000000000000000000000074610eedcf3167c267ab0b1365007f1a9f6a303f


Swarm Source

bzzr://1bcb6b2e4731bfe9044fd571e371be8ea4254c0429f35f783325d8c42faa5ef4

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.