ETH Price: $2,576.20 (-2.43%)
Gas: 3 Gwei

Contract

0xF16689328cEF524fb5869D5Ec7b97B8AB3af8bAa
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Contribute66827112018-11-11 5:07:112098 days ago1541912831IN
0xF1668932...AB3af8bAa
0 ETH0.000560422

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
66826742018-11-11 4:58:082098 days ago1541912288  Contract Creation0 ETH
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x2f7Aefbc...87641f70c
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Crowdsourcer

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-11-11
*/

pragma solidity 0.4.24;

// File: contracts/IAccounting.sol

interface IAccounting {
  function contribute(
    address contributor,
    uint128 amount,
    uint128 feeNumerator
  ) external returns(uint128 deposited, uint128 depositedFees);

  function withdrawContribution(address contributor) external returns(
    uint128 withdrawn,
    uint128 withdrawnFees
  );

  function finalize(uint128 amountDisputed) external;

  function getTotalContribution() external view returns(uint256);

  function getTotalFeesOffered() external view returns(uint256);

  function getProjectedFee(uint128 amountDisputed) external view returns(
    uint128 feeNumerator,
    uint128 fundsUsedFromBoundaryBucket
  );

  function getOwner() external view returns(address);

  function isFinalized() external view returns(bool);

  /**
   * Return value is how much REP and dispute tokens the contributor is entitled to.
   *
   * Does not change the state, as accounting is finalized at that moment.
   *
   * In case of partial fill, we round down, leaving some dust in the contract.
   */
  function calculateProceeds(address contributor) external view returns(
    uint128 rep,
    uint128 disputeTokens
  );

  /**
   * Calculate fee that will be split between contract admin and
   * account that triggered dispute transaction.
   *
   * In case of partial fill, we round down, leaving some dust in the contract.
   */
  function calculateFees() external view returns(uint128);

  function addFeesOnTop(
    uint128 amount,
    uint128 feeNumerator
  ) external pure returns(uint128);
}

// File: contracts/IAccountingFactory.sol

interface IAccountingFactory {
  function create(address owner) external returns(IAccounting);
}

// File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 {
  function totalSupply() external view returns (uint256);

  function balanceOf(address who) external view returns (uint256);

  function allowance(address owner, address spender)
    external view returns (uint256);

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

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

  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}

// File: contracts/IDisputer.sol

/**
 * Interface of what the disputer contract should do.
 *
 * Its main responsibility to interact with Augur. Only minimal glue methods
 * are added apart from that in order for crowdsourcer to be able to interact
 * with it.
 *
 * This contract holds the actual crowdsourced REP for dispute, so it doesn't
 * need to transfer it from elsewhere at the moment of dispute. It doesn't care
 * at all who this REP belongs to, it just spends it for dispute. Accounting
 * is done in other contracts.
 */
interface IDisputer {
  /**
   * This function should use as little gas as possible, as it will be called
   * during rush time. Unnecessary operations are postponed for later.
   *
   * Can by called by anyone, but only once.
   */
  function dispute(address feeReceiver) external;

  // intentionally can be called by anyone, as no user input is used
  function approveManagerToSpendDisputeTokens() external;

  function getOwner() external view returns(address);

  function hasDisputed() external view returns(bool);

  function feeReceiver() external view returns(address);

  function getREP() external view returns(IERC20);

  function getDisputeTokenAddress() external view returns(IERC20);
}

// File: contracts/ICrowdsourcerParent.sol

/**
 * Parent of a crowdsourcer that is passed into it on construction. Used
 * to determine destination for fees.
 */
interface ICrowdsourcerParent {
  function getContractFeeReceiver() external view returns(address);
}

// File: contracts/augur/feeWindow.sol

interface FeeWindow {
  function getStartTime() external view returns(uint256);
  function isOver() external view returns(bool);
}

// File: contracts/augur/universe.sol

interface Universe {
  function getDisputeRoundDurationInSeconds() external view returns(uint256);

  function isForking() external view returns(bool);

  function isContainerForMarket(address _shadyMarket) external view returns(
    bool
  );
}

// File: contracts/augur/reportingParticipant.sol

/**
 * This should've been an interface, but interfaces cannot inherit interfaces
 */
contract ReportingParticipant is IERC20 {
  function redeem(address _redeemer) external returns(bool);
  function getStake() external view returns(uint256);
  function getPayoutDistributionHash() external view returns(bytes32);
  function getFeeWindow() external view returns(FeeWindow);
}

// File: contracts/augur/market.sol

interface Market {
  function contribute(
    uint256[] _payoutNumerators,
    bool _invalid,
    uint256 _amount
  ) external returns(bool);

  function getReputationToken() external view returns(IERC20);

  function getUniverse() external view returns(Universe);

  function derivePayoutDistributionHash(
    uint256[] _payoutNumerators,
    bool _invalid
  ) external view returns(bytes32);

  function getCrowdsourcer(
    bytes32 _payoutDistributionHash
  ) external view returns(ReportingParticipant);

  function getNumParticipants() external view returns(uint256);

  function getReportingParticipant(uint256 _index) external view returns(
    ReportingParticipant
  );

  function isFinalized() external view returns(bool);

  function getFeeWindow() external view returns(FeeWindow);

  function getWinningReportingParticipant() external view returns(
    ReportingParticipant
  );

  function isContainerForReportingParticipant(
    ReportingParticipant _shadyReportingParticipant
  ) external view returns(bool);
}

// File: contracts/ICrowdsourcer.sol

/**
 * Crowdsourcer for specific market/outcome/round.
 */
interface ICrowdsourcer {
  event ContributionAccepted(
    address contributor,
    uint128 amount,
    uint128 feeNumerator
  );

  event ContributionWithdrawn(address contributor, uint128 amount);

  event CrowdsourcerFinalized(uint128 amountDisputeTokensAcquired);

  event ProceedsWithdrawn(
    address contributor,
    uint128 disputeTokensAmount,
    uint128 repAmount
  );

  event FeesWithdrawn(
    address contractAuthor,
    address executor,
    uint128 contractAuthorAmount,
    uint128 executorAmount
  );

  event Initialized();

  // initialization stage
  function initialize() external;

  // pre-dispute stage
  function contribute(uint128 amount, uint128 feeNumerator) external;

  function withdrawContribution() external;

  // finalization (after dispute happened)
  function finalize() external;

  // after finalization

  // intentionally anyone can call it, since they won't harm contributor
  // by helping them withdraw their proceeds
  function withdrawProceeds(address contributor) external;

  function withdrawFees() external;

  function hasDisputed() external view returns(bool);

  function isInitialized() external view returns(bool);

  function getParent() external view returns(ICrowdsourcerParent);

  function getDisputerParams() external view returns(
    Market market,
    uint256 feeWindowId,
    uint256[] payoutNumerators,
    bool invalid
  );

  function getDisputer() external view returns(IDisputer);

  function getAccounting() external view returns(IAccounting);

  function getREP() external view returns(IERC20);

  function getDisputeToken() external view returns(IERC20);

  function isFinalized() external view returns(bool);
}

// File: contracts/IDisputerFactory.sol

interface IDisputerFactory {
  event DisputerCreated(
    address _owner,
    IDisputer _address,
    Market market,
    uint256 feeWindowId,
    uint256[] payoutNumerators,
    bool invalid
  );

  function create(
    address owner,
    Market market,
    uint256 feeWindowId,
    uint256[] payoutNumerators,
    bool invalid
  ) external returns(IDisputer);
}

// File: contracts/DisputerParams.sol

library DisputerParams {
  struct Params {
    Market market;
    uint256 feeWindowId;
    uint256[] payoutNumerators;
    bool invalid;
  }
}

// File: contracts/Crowdsourcer.sol

contract Crowdsourcer is ICrowdsourcer {
  bool public m_isInitialized = false;
  DisputerParams.Params public m_disputerParams;
  IAccountingFactory public m_accountingFactory;
  IDisputerFactory public m_disputerFactory;

  IAccounting public m_accounting;
  ICrowdsourcerParent public m_parent;
  IDisputer public m_disputer;

  mapping(address => bool) public m_proceedsCollected;
  bool public m_feesCollected = false;

  constructor(
    ICrowdsourcerParent parent,
    IAccountingFactory accountingFactory,
    IDisputerFactory disputerFactory,
    Market market,
    uint256 feeWindowId,
    uint256[] payoutNumerators,
    bool invalid
  ) public {
    m_parent = parent;
    m_accountingFactory = accountingFactory;
    m_disputerFactory = disputerFactory;
    m_disputerParams = DisputerParams.Params(
      market,
      feeWindowId,
      payoutNumerators,
      invalid
    );
  }

  modifier beforeDisputeOnly() {
    require(!hasDisputed(), "Method only allowed before dispute");
    _;
  }

  modifier requiresInitialization() {
    require(isInitialized(), "Must call initialize() first");
    _;
  }

  modifier requiresFinalization() {
    if (!isFinalized()) {
      finalize();
      assert(isFinalized());
    }
    _;
  }

  function initialize() external {
    require(!m_isInitialized, "Already initialized");
    m_isInitialized = true;
    m_accounting = m_accountingFactory.create(this);
    m_disputer = m_disputerFactory.create(
      this,
      m_disputerParams.market,
      m_disputerParams.feeWindowId,
      m_disputerParams.payoutNumerators,
      m_disputerParams.invalid
    );
    emit Initialized();
  }

  function contribute(
    uint128 amount,
    uint128 feeNumerator
  ) external requiresInitialization beforeDisputeOnly {
    uint128 amountWithFees = m_accounting.addFeesOnTop(amount, feeNumerator);

    IERC20 rep = getREP();
    require(rep.balanceOf(msg.sender) >= amountWithFees, "Not enough funds");
    require(
      rep.allowance(msg.sender, this) >= amountWithFees,
      "Now enough allowance"
    );

    // record contribution in accounting (will perform validations)
    uint128 deposited;
    uint128 depositedFees;
    (deposited, depositedFees) = m_accounting.contribute(
      msg.sender,
      amount,
      feeNumerator
    );

    assert(deposited == amount);
    assert(deposited + depositedFees == amountWithFees);

    // actually transfer tokens and revert tx if any problem
    assert(rep.transferFrom(msg.sender, m_disputer, deposited));
    assert(rep.transferFrom(msg.sender, this, depositedFees));

    assertBalancesBeforeDispute();

    emit ContributionAccepted(msg.sender, amount, feeNumerator);
  }

  function withdrawContribution(

  ) external requiresInitialization beforeDisputeOnly {
    IERC20 rep = getREP();

    // record withdrawal in accounting (will perform validations)
    uint128 withdrawn;
    uint128 withdrawnFees;
    (withdrawn, withdrawnFees) = m_accounting.withdrawContribution(msg.sender);

    // actually transfer tokens and revert tx if any problem
    assert(rep.transferFrom(m_disputer, msg.sender, withdrawn));
    assert(rep.transfer(msg.sender, withdrawnFees));

    assertBalancesBeforeDispute();

    emit ContributionWithdrawn(msg.sender, withdrawn);
  }

  function withdrawProceeds(address contributor) external requiresFinalization {
    require(
      !m_proceedsCollected[contributor],
      "Can only collect proceeds once"
    );

    // record proceeds have been collected
    m_proceedsCollected[contributor] = true;

    uint128 refund;
    uint128 proceeds;

    // calculate how much this contributor is entitled to
    (refund, proceeds) = m_accounting.calculateProceeds(contributor);

    IERC20 rep = getREP();
    IERC20 disputeTokenAddress = getDisputeToken();

    // actually deliver the proceeds/refund
    assert(rep.transfer(contributor, refund));
    assert(disputeTokenAddress.transfer(contributor, proceeds));

    emit ProceedsWithdrawn(contributor, proceeds, refund);
  }

  function withdrawFees() external requiresFinalization {
    require(!m_feesCollected, "Can only collect fees once");

    m_feesCollected = true;

    uint128 feesTotal = m_accounting.calculateFees();
    // 10% of fees go to contract author
    uint128 feesForContractAuthor = feesTotal / 10;
    uint128 feesForExecutor = feesTotal - feesForContractAuthor;

    assert(feesForContractAuthor + feesForExecutor == feesTotal);

    address contractFeesRecipient = m_parent.getContractFeeReceiver();
    address executorFeesRecipient = m_disputer.feeReceiver();

    IERC20 rep = getREP();

    assert(rep.transfer(contractFeesRecipient, feesForContractAuthor));
    assert(rep.transfer(executorFeesRecipient, feesForExecutor));

    emit FeesWithdrawn(
      contractFeesRecipient,
      executorFeesRecipient,
      feesForContractAuthor,
      feesForExecutor
    );
  }

  function getParent() external view returns(ICrowdsourcerParent) {
    return m_parent;
  }

  function getDisputerParams() external view returns(
    Market market,
    uint256 feeWindowId,
    uint256[] payoutNumerators,
    bool invalid
  ) {
    return (m_disputerParams.market, m_disputerParams.feeWindowId, m_disputerParams.payoutNumerators, m_disputerParams.invalid);
  }

  function getDisputer() external view requiresInitialization returns(
    IDisputer
  ) {
    return m_disputer;
  }

  function getAccounting() external view requiresInitialization returns(
    IAccounting
  ) {
    return m_accounting;
  }

  function finalize() public requiresInitialization {
    require(hasDisputed(), "Can only finalize after dispute");
    require(!isFinalized(), "Can only finalize once");

    // now that we've disputed we must know dispute token address
    IERC20 disputeTokenAddress = getDisputeToken();
    IERC20 rep = getREP();

    m_disputer.approveManagerToSpendDisputeTokens();

    // retrieve all tokens from disputer for proceeds distribution
    // This wouldn't work extremely well if it is called from disputer's
    // dispute() method, but it should only call Augur which we trust.
    assert(rep.transferFrom(m_disputer, this, rep.balanceOf(m_disputer)));
    assert(
      disputeTokenAddress.transferFrom(
        m_disputer,
        this,
        disputeTokenAddress.balanceOf(m_disputer)
      )
    );

    uint256 amountDisputed = disputeTokenAddress.balanceOf(this);
    uint128 amountDisputed128 = uint128(amountDisputed);

    // REP has only so many tokens
    assert(amountDisputed128 == amountDisputed);

    m_accounting.finalize(amountDisputed128);

    assert(isFinalized());

    emit CrowdsourcerFinalized(amountDisputed128);
  }

  function isInitialized() public view returns(bool) {
    return m_isInitialized;
  }

  function getREP() public view requiresInitialization returns(IERC20) {
    return m_disputer.getREP();
  }

  function getDisputeToken() public view requiresInitialization returns(
    IERC20
  ) {
    return m_disputer.getDisputeTokenAddress();
  }

  function hasDisputed() public view requiresInitialization returns(bool) {
    return m_disputer.hasDisputed();
  }

  function isFinalized() public view requiresInitialization returns(bool) {
    return m_accounting.isFinalized();
  }

  function assertBalancesBeforeDispute() internal view {
    IERC20 rep = getREP();
    assert(rep.balanceOf(m_disputer) >= m_accounting.getTotalContribution());
    assert(rep.balanceOf(this) >= m_accounting.getTotalFeesOffered());
  }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"m_parent","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawContribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"m_accounting","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"m_accountingFactory","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAccounting","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isInitialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getDisputerParams","outputs":[{"name":"market","type":"address"},{"name":"feeWindowId","type":"uint256"},{"name":"payoutNumerators","type":"uint256[]"},{"name":"invalid","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"m_proceedsCollected","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"contributor","type":"address"}],"name":"withdrawProceeds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getREP","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getParent","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isFinalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"m_isInitialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint128"},{"name":"feeNumerator","type":"uint128"}],"name":"contribute","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"m_disputerFactory","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"m_disputer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"m_disputerParams","outputs":[{"name":"market","type":"address"},{"name":"feeWindowId","type":"uint256"},{"name":"invalid","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"m_feesCollected","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hasDisputed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getDisputer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getDisputeToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"parent","type":"address"},{"name":"accountingFactory","type":"address"},{"name":"disputerFactory","type":"address"},{"name":"market","type":"address"},{"name":"feeWindowId","type":"uint256"},{"name":"payoutNumerators","type":"uint256[]"},{"name":"invalid","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"contributor","type":"address"},{"indexed":false,"name":"amount","type":"uint128"},{"indexed":false,"name":"feeNumerator","type":"uint128"}],"name":"ContributionAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"contributor","type":"address"},{"indexed":false,"name":"amount","type":"uint128"}],"name":"ContributionWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amountDisputeTokensAcquired","type":"uint128"}],"name":"CrowdsourcerFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"contributor","type":"address"},{"indexed":false,"name":"disputeTokensAmount","type":"uint128"},{"indexed":false,"name":"repAmount","type":"uint128"}],"name":"ProceedsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"contractAuthor","type":"address"},{"indexed":false,"name":"executor","type":"address"},{"indexed":false,"name":"contractAuthorAmount","type":"uint128"},{"indexed":false,"name":"executorAmount","type":"uint128"}],"name":"FeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[],"name":"Initialized","type":"event"}]

Deployed Bytecode

0x6080604052600436106101245763ffffffff60e060020a6000350416630b741b4981146101295780630d616d201461015a57806323be12681461017157806334d7d5de1461018657806336cfd8ba1461019b578063392e53cd146101b0578063476343ee146101d95780634bb278f3146101ee5780634f3d57641461020357806357be2cb81461029757806362810c81146102b85780636f2c83ee146102d957806380f76021146102ee5780638129fc1c146103035780638d4e40831461031857806399b7f3691461032d5780639fe00bbf14610342578063b977405014610369578063be27fae71461037e578063c9204cf514610393578063d0d956b1146103d2578063d18959a2146103e7578063def3cb05146103fc578063fbe7870514610411575b600080fd5b34801561013557600080fd5b5061013e610426565b60408051600160a060020a039092168252519081900360200190f35b34801561016657600080fd5b5061016f610435565b005b34801561017d57600080fd5b5061013e61074d565b34801561019257600080fd5b5061013e61075c565b3480156101a757600080fd5b5061013e61076b565b3480156101bc57600080fd5b506101c56107c9565b604080519115158252519081900360200190f35b3480156101e557600080fd5b5061016f6107d2565b3480156101fa57600080fd5b5061016f610bdd565b34801561020f57600080fd5b506102186110f5565b6040518085600160a060020a0316600160a060020a031681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019060200280838360005b83811015610280578181015183820152602001610268565b505050509050019550505050505060405180910390f35b3480156102a357600080fd5b506101c5600160a060020a036004351661117d565b3480156102c457600080fd5b5061016f600160a060020a0360043516611192565b3480156102e557600080fd5b5061013e611499565b3480156102fa57600080fd5b5061013e61156b565b34801561030f57600080fd5b5061016f61157a565b34801561032457600080fd5b506101c56117f5565b34801561033957600080fd5b506101c5611896565b34801561034e57600080fd5b5061016f6001608060020a036004358116906024351661189f565b34801561037557600080fd5b5061013e611e8b565b34801561038a57600080fd5b5061013e611e9a565b34801561039f57600080fd5b506103a8611ea9565b60408051600160a060020a0390941684526020840192909252151582820152519081900360600190f35b3480156103de57600080fd5b506101c5611ec4565b3480156103f357600080fd5b506101c5611ecd565b34801561040857600080fd5b5061013e611f6e565b34801561041d57600080fd5b5061013e611fcc565b600854600160a060020a031681565b60008060006104426107c9565b1515610486576040805160e560020a62461bcd02815260206004820152601c6024820152600080516020612280833981519152604482015290519081900360640190fd5b61048e611ecd565b15610509576040805160e560020a62461bcd02815260206004820152602260248201527f4d6574686f64206f6e6c7920616c6c6f776564206265666f726520646973707560448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b610511611499565b600754604080517fa35c47090000000000000000000000000000000000000000000000000000000081523360048201528151939650600160a060020a039092169263a35c47099260248082019392918290030181600087803b15801561057657600080fd5b505af115801561058a573d6000803e3d6000fd5b505050506040513d60408110156105a057600080fd5b508051602091820151600954604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201523360248201526001608060020a038516604482015290519396509194508616926323b872dd926064808401938290030181600087803b15801561062557600080fd5b505af1158015610639573d6000803e3d6000fd5b505050506040513d602081101561064f57600080fd5b5051151561065957fe5b604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526001608060020a03831660248201529051600160a060020a0385169163a9059cbb9160448083019260209291908290030181600087803b1580156106c957600080fd5b505af11580156106dd573d6000803e3d6000fd5b505050506040513d60208110156106f357600080fd5b505115156106fd57fe5b61070561206d565b604080513381526001608060020a038416602082015281517f719726f6ad3c598acf803975f0634c207cab0a91259e732d4b84f625d8964043929181900390910190a1505050565b600754600160a060020a031681565b600554600160a060020a031681565b60006107756107c9565b15156107b9576040805160e560020a62461bcd02815260206004820152601c6024820152600080516020612280833981519152604482015290519081900360640190fd5b50600754600160a060020a031690565b60005460ff1690565b6000806000806000806107e36117f5565b1515610801576107f1610bdd565b6107f96117f5565b151561080157fe5b600b5460ff161561085c576040805160e560020a62461bcd02815260206004820152601a60248201527f43616e206f6e6c7920636f6c6c6563742066656573206f6e6365000000000000604482015290519081900360640190fd5b600b805460ff19166001179055600754604080517f5edfa1f80000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921691635edfa1f8916004808201926020929091908290030181600087803b1580156108c957600080fd5b505af11580156108dd573d6000803e3d6000fd5b505050506040513d60208110156108f357600080fd5b50519550600a6001608060020a0380881691820496508688039550858701161461091957fe5b600860009054906101000a9004600160a060020a0316600160a060020a031663d2a2fc946040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561096c57600080fd5b505af1158015610980573d6000803e3d6000fd5b505050506040513d602081101561099657600080fd5b5051600954604080517fb3f006740000000000000000000000000000000000000000000000000000000081529051929550600160a060020a039091169163b3f00674916004808201926020929091908290030181600087803b1580156109fb57600080fd5b505af1158015610a0f573d6000803e3d6000fd5b505050506040513d6020811015610a2557600080fd5b50519150610a31611499565b905080600160a060020a031663a9059cbb84876040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a03168152602001826001608060020a0316815260200192505050602060405180830381600087803b158015610a9f57600080fd5b505af1158015610ab3573d6000803e3d6000fd5b505050506040513d6020811015610ac957600080fd5b50511515610ad357fe5b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301526001608060020a038716602483015291519183169163a9059cbb916044808201926020929091908290030181600087803b158015610b4757600080fd5b505af1158015610b5b573d6000803e3d6000fd5b505050506040513d6020811015610b7157600080fd5b50511515610b7b57fe5b60408051600160a060020a038086168252841660208201526001608060020a03808816828401528616606082015290517f3cc6f29dc45640c19c0580785203f54c9b36da57c72ed7b8218249dbf15171299181900360800190a1505050505050565b600080600080610beb6107c9565b1515610c2f576040805160e560020a62461bcd02815260206004820152601c6024820152600080516020612280833981519152604482015290519081900360640190fd5b610c37611ecd565b1515610c8d576040805160e560020a62461bcd02815260206004820152601f60248201527f43616e206f6e6c792066696e616c697a65206166746572206469737075746500604482015290519081900360640190fd5b610c956117f5565b15610cea576040805160e560020a62461bcd02815260206004820152601660248201527f43616e206f6e6c792066696e616c697a65206f6e636500000000000000000000604482015290519081900360640190fd5b610cf2611fcc565b9350610cfc611499565b9250600960009054906101000a9004600160a060020a0316600160a060020a031663cadbbf636040518163ffffffff1660e060020a028152600401600060405180830381600087803b158015610d5157600080fd5b505af1158015610d65573d6000803e3d6000fd5b50506009546040805160e060020a6370a08231028152600160a060020a0392831660048201819052915192881694506323b872dd93509091309185916370a08231916024808201926020929091908290030181600087803b158015610dc957600080fd5b505af1158015610ddd573d6000803e3d6000fd5b505050506040513d6020811015610df357600080fd5b50516040805160e060020a63ffffffff8716028152600160a060020a0394851660048201529290931660248301526044820152905160648083019260209291908290030181600087803b158015610e4957600080fd5b505af1158015610e5d573d6000803e3d6000fd5b505050506040513d6020811015610e7357600080fd5b50511515610e7d57fe5b6009546040805160e060020a6370a08231028152600160a060020a03928316600482018190529151928716926323b872dd9291309185916370a082319160248083019260209291908290030181600087803b158015610edb57600080fd5b505af1158015610eef573d6000803e3d6000fd5b505050506040513d6020811015610f0557600080fd5b50516040805160e060020a63ffffffff8716028152600160a060020a0394851660048201529290931660248301526044820152905160648083019260209291908290030181600087803b158015610f5b57600080fd5b505af1158015610f6f573d6000803e3d6000fd5b505050506040513d6020811015610f8557600080fd5b50511515610f8f57fe5b6040805160e060020a6370a082310281523060048201529051600160a060020a038616916370a082319160248083019260209291908290030181600087803b158015610fda57600080fd5b505af1158015610fee573d6000803e3d6000fd5b505050506040513d602081101561100457600080fd5b505191508190506001608060020a038116811461101d57fe5b600754604080517f982665500000000000000000000000000000000000000000000000000000000081526001608060020a03841660048201529051600160a060020a039092169163982665509160248082019260009290919082900301818387803b15801561108b57600080fd5b505af115801561109f573d6000803e3d6000fd5b505050506110ab6117f5565b15156110b357fe5b604080516001608060020a038316815290517fda187b46d7434eeeb80cd3c2055bafdc345c598dbbde79d30fab10203c83497e9181900360200190a150505050565b600154600254600454600380546040805160208084028201810190925282815260009687966060968896600160a060020a03909316959194929360ff909116929091849183018282801561116857602002820191906000526020600020905b815481526020019060010190808311611154575b50505050509150935093509350935090919293565b600a6020526000908152604090205460ff1681565b6000806000806111a06117f5565b15156111be576111ae610bdd565b6111b66117f5565b15156111be57fe5b600160a060020a0385166000908152600a602052604090205460ff161561122f576040805160e560020a62461bcd02815260206004820152601e60248201527f43616e206f6e6c7920636f6c6c6563742070726f6365656473206f6e63650000604482015290519081900360640190fd5b600160a060020a038086166000818152600a6020526040808220805460ff1916600117905560075481517f28d21f92000000000000000000000000000000000000000000000000000000008152600481019490945281519416936328d21f9293602480820194918390030190829087803b1580156112ac57600080fd5b505af11580156112c0573d6000803e3d6000fd5b505050506040513d60408110156112d657600080fd5b50805160209091015190945092506112ec611499565b91506112f6611fcc565b905081600160a060020a031663a9059cbb86866040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a03168152602001826001608060020a0316815260200192505050602060405180830381600087803b15801561136457600080fd5b505af1158015611378573d6000803e3d6000fd5b505050506040513d602081101561138e57600080fd5b5051151561139857fe5b604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301526001608060020a038616602483015291519183169163a9059cbb916044808201926020929091908290030181600087803b15801561140c57600080fd5b505af1158015611420573d6000803e3d6000fd5b505050506040513d602081101561143657600080fd5b5051151561144057fe5b60408051600160a060020a03871681526001608060020a03808616602083015286168183015290517fcb905be9549b41589fc77bbb5a3b67dbf9f3b0284ae7a47f0df76c26393b27a59181900360600190a15050505050565b60006114a36107c9565b15156114e7576040805160e560020a62461bcd02815260206004820152601c6024820152600080516020612280833981519152604482015290519081900360640190fd5b600960009054906101000a9004600160a060020a0316600160a060020a0316636f2c83ee6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561153a57600080fd5b505af115801561154e573d6000803e3d6000fd5b505050506040513d602081101561156457600080fd5b5051905090565b600854600160a060020a031690565b60005460ff16156115d5576040805160e560020a62461bcd02815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b6000805460ff19166001178155600554604080517f9ed933180000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a0390921692639ed93318926024808401936020939083900390910190829087803b15801561164857600080fd5b505af115801561165c573d6000803e3d6000fd5b505050506040513d602081101561167257600080fd5b50516007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03928316179055600654600154600254600480546040517fbdb1300200000000000000000000000000000000000000000000000000000000815230928101838152948716602482018190526044820185905260ff909216801515608483015260a0606483019081526003805460a48501819052989099169863bdb130029895979496959094929360c401908590801561174e57602002820191906000526020600020905b81548152602001906001019080831161173a575b50509650505050505050602060405180830381600087803b15801561177257600080fd5b505af1158015611786573d6000803e3d6000fd5b505050506040513d602081101561179c57600080fd5b50516009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790556040517f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c890600090a1565b60006117ff6107c9565b1515611843576040805160e560020a62461bcd02815260206004820152601c6024820152600080516020612280833981519152604482015290519081900360640190fd5b600760009054906101000a9004600160a060020a0316600160a060020a0316638d4e40836040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561153a57600080fd5b60005460ff1681565b6000806000806118ad6107c9565b15156118f1576040805160e560020a62461bcd02815260206004820152601c6024820152600080516020612280833981519152604482015290519081900360640190fd5b6118f9611ecd565b15611974576040805160e560020a62461bcd02815260206004820152602260248201527f4d6574686f64206f6e6c7920616c6c6f776564206265666f726520646973707560448201527f7465000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600754604080517fe0dd81f80000000000000000000000000000000000000000000000000000000081526001608060020a03808a166004830152881660248201529051600160a060020a039092169163e0dd81f8916044808201926020929091908290030181600087803b1580156119eb57600080fd5b505af11580156119ff573d6000803e3d6000fd5b505050506040513d6020811015611a1557600080fd5b50519350611a21611499565b6040805160e060020a6370a0823102815233600482015290519194506001608060020a03861691600160a060020a038616916370a082319160248083019260209291908290030181600087803b158015611a7a57600080fd5b505af1158015611a8e573d6000803e3d6000fd5b505050506040513d6020811015611aa457600080fd5b50511015611afc576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f7420656e6f7567682066756e647300000000000000000000000000000000604482015290519081900360640190fd5b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290516001608060020a03861691600160a060020a0386169163dd62ed3e916044808201926020929091908290030181600087803b158015611b6f57600080fd5b505af1158015611b83573d6000803e3d6000fd5b505050506040513d6020811015611b9957600080fd5b50511015611bf1576040805160e560020a62461bcd02815260206004820152601460248201527f4e6f7720656e6f75676820616c6c6f77616e6365000000000000000000000000604482015290519081900360640190fd5b600754604080517f78cacd6e0000000000000000000000000000000000000000000000000000000081523360048201526001608060020a03808a166024830152881660448201528151600160a060020a03909316926378cacd6e926064808401939192918290030181600087803b158015611c6b57600080fd5b505af1158015611c7f573d6000803e3d6000fd5b505050506040513d6040811015611c9557600080fd5b50805160209091015190925090506001608060020a0380831690871614611cb857fe5b836001608060020a03168183016001608060020a0316141515611cd757fe5b600954604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a0392831660248201526001608060020a03851660448201529051918516916323b872dd916064808201926020929091908290030181600087803b158015611d5457600080fd5b505af1158015611d68573d6000803e3d6000fd5b505050506040513d6020811015611d7e57600080fd5b50511515611d8857fe5b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526001608060020a03831660448201529051600160a060020a038516916323b872dd9160648083019260209291908290030181600087803b158015611dfe57600080fd5b505af1158015611e12573d6000803e3d6000fd5b505050506040513d6020811015611e2857600080fd5b50511515611e3257fe5b611e3a61206d565b604080513381526001608060020a03808916602083015287168183015290517f13300c39d77178f4a5208422e562bf8ae2224fa8773b1b77f023f9d47171794f9181900360600190a1505050505050565b600654600160a060020a031681565b600954600160a060020a031681565b600154600254600454600160a060020a039092169160ff1683565b600b5460ff1681565b6000611ed76107c9565b1515611f1b576040805160e560020a62461bcd02815260206004820152601c6024820152600080516020612280833981519152604482015290519081900360640190fd5b600960009054906101000a9004600160a060020a0316600160a060020a031663d18959a26040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561153a57600080fd5b6000611f786107c9565b1515611fbc576040805160e560020a62461bcd02815260206004820152601c6024820152600080516020612280833981519152604482015290519081900360640190fd5b50600954600160a060020a031690565b6000611fd66107c9565b151561201a576040805160e560020a62461bcd02815260206004820152601c6024820152600080516020612280833981519152604482015290519081900360640190fd5b600960009054906101000a9004600160a060020a0316600160a060020a0316632e6027526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561153a57600080fd5b6000612077611499565b9050600760009054906101000a9004600160a060020a0316600160a060020a03166308caa9106040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156120cc57600080fd5b505af11580156120e0573d6000803e3d6000fd5b505050506040513d60208110156120f657600080fd5b50516009546040805160e060020a6370a08231028152600160a060020a0392831660048201529051918416916370a08231916024808201926020929091908290030181600087803b15801561214a57600080fd5b505af115801561215e573d6000803e3d6000fd5b505050506040513d602081101561217457600080fd5b5051101561217e57fe5b600760009054906101000a9004600160a060020a0316600160a060020a0316638f86c59c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156121d157600080fd5b505af11580156121e5573d6000803e3d6000fd5b505050506040513d60208110156121fb57600080fd5b50516040805160e060020a6370a082310281523060048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561224857600080fd5b505af115801561225c573d6000803e3d6000fd5b505050506040513d602081101561227257600080fd5b5051101561227c57fe5b5056004d7573742063616c6c20696e697469616c697a65282920666972737400000000a165627a7a72305820a47537033bdcc06c5cccc052f955683c24e8c1d6de26ff999423d923c6c4610a0029

Swarm Source

bzzr://a47537033bdcc06c5cccc052f955683c24e8c1d6de26ff999423d923c6c4610a

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.