Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Multichain Info
No addresses found
Latest 5 from a total of 5 transactions
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
- | 7217111 | 2222 days ago | Contract Creation | 0 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
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.