More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0xe9718245eb56ad5b40502c599fa1b0f007097bb9fb6462fb1418adda2631ec19 | Public Trade Wit... | (pending) | 4 days ago | IN | 0.022 ETH | (Pending) | |||
Public Fill Best... | 22006262 | 39 days ago | IN | 0.7695 ETH | 0.00040514 | ||||
Public Fill Best... | 22006198 | 39 days ago | IN | 0.95 ETH | 0.00039231 | ||||
Public Fill Best... | 22006111 | 39 days ago | IN | 0.45 ETH | 0.00040196 | ||||
Public Fill Best... | 22006103 | 39 days ago | IN | 0.90912 ETH | 0.00038129 | ||||
Public Fill Best... | 22006042 | 39 days ago | IN | 0.7 ETH | 0.00086753 | ||||
Public Fill Best... | 21984652 | 42 days ago | IN | 0.164 ETH | 0.00048519 | ||||
Public Fill Best... | 21984640 | 42 days ago | IN | 0.152 ETH | 0.00041817 | ||||
Public Fill Best... | 21902673 | 53 days ago | IN | 0.025 ETH | 0.00038782 | ||||
Public Fill Best... | 21902658 | 53 days ago | IN | 0.05 ETH | 0.0004121 | ||||
Public Fill Best... | 21902471 | 53 days ago | IN | 0 ETH | 0.00031515 | ||||
Public Fill Best... | 21902452 | 53 days ago | IN | 0.1056 ETH | 0.00054534 | ||||
Public Fill Best... | 21902420 | 53 days ago | IN | 0.075 ETH | 0.00050258 | ||||
Public Fill Best... | 21902419 | 53 days ago | IN | 0.025 ETH | 0.00061951 | ||||
Public Fill Best... | 21902347 | 53 days ago | IN | 0.0295 ETH | 0.00093239 | ||||
Public Fill Best... | 21902347 | 53 days ago | IN | 0.054 ETH | 0.00047178 | ||||
Public Fill Best... | 21902292 | 53 days ago | IN | 0.06 ETH | 0.00049729 | ||||
Public Fill Best... | 21902248 | 53 days ago | IN | 0.18 ETH | 0.00029666 | ||||
Public Fill Best... | 21902229 | 53 days ago | IN | 0.4617 ETH | 0.00075609 | ||||
Public Fill Best... | 21902191 | 53 days ago | IN | 0.025 ETH | 0.00046135 | ||||
Public Fill Best... | 21902174 | 53 days ago | IN | 0.04 ETH | 0.00050365 | ||||
Public Fill Best... | 20336475 | 272 days ago | IN | 0 ETH | 0.00984355 | ||||
Public Fill Best... | 20336297 | 272 days ago | IN | 0 ETH | 0.00392176 | ||||
Public Fill Best... | 12805334 | 1376 days ago | IN | 0.46 ETH | 0.00561429 | ||||
Public Fill Best... | 12804539 | 1376 days ago | IN | 0.6532 ETH | 0.00224265 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Deposit Ether Fo... | 22006262 | 39 days ago | 0.7695 ETH | ||||
Deposit Ether Fo... | 22006198 | 39 days ago | 0.95 ETH | ||||
Deposit Ether Fo... | 22006111 | 39 days ago | 0.45 ETH | ||||
Deposit Ether Fo... | 22006103 | 39 days ago | 0.90912 ETH | ||||
Deposit Ether Fo... | 22006042 | 39 days ago | 0.7 ETH | ||||
Deposit Ether Fo... | 21984652 | 42 days ago | 0.164 ETH | ||||
Deposit Ether Fo... | 21984640 | 42 days ago | 0.152 ETH | ||||
Deposit Ether Fo... | 21902673 | 53 days ago | 0.025 ETH | ||||
Deposit Ether Fo... | 21902658 | 53 days ago | 0.05 ETH | ||||
Deposit Ether Fo... | 21902452 | 53 days ago | 0.1056 ETH | ||||
Deposit Ether Fo... | 21902420 | 53 days ago | 0.075 ETH | ||||
Deposit Ether Fo... | 21902419 | 53 days ago | 0.025 ETH | ||||
Deposit Ether Fo... | 21902347 | 53 days ago | 0.0295 ETH | ||||
Deposit Ether Fo... | 21902347 | 53 days ago | 0.054 ETH | ||||
Deposit Ether Fo... | 21902292 | 53 days ago | 0.06 ETH | ||||
Deposit Ether Fo... | 21902248 | 53 days ago | 0.18 ETH | ||||
Deposit Ether Fo... | 21902229 | 53 days ago | 0.4617 ETH | ||||
Deposit Ether Fo... | 21902191 | 53 days ago | 0.025 ETH | ||||
Deposit Ether Fo... | 21902174 | 53 days ago | 0.04 ETH | ||||
- | 12805334 | 1376 days ago | 0.46 ETH | ||||
- | 12804539 | 1376 days ago | 0.6532 ETH | ||||
- | 12603407 | 1407 days ago | 2.983 ETH | ||||
- | 12603391 | 1407 days ago | 0.9282 ETH | ||||
- | 12603365 | 1407 days ago | 0.1071 ETH | ||||
- | 12603341 | 1407 days ago | 0.0779 ETH |
Loading...
Loading
Contract Name:
Trade
Compiler Version
v0.4.20+commit.3155dd80
Optimization Enabled:
Yes with 500 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-07-08 */ pragma solidity 0.4.20; contract IAugur { function createChildUniverse(bytes32 _parentPayoutDistributionHash, uint256[] _parentPayoutNumerators, bool _parentInvalid) public returns (IUniverse); function isKnownUniverse(IUniverse _universe) public view returns (bool); function trustedTransfer(ERC20 _token, address _from, address _to, uint256 _amount) public returns (bool); function logMarketCreated(bytes32 _topic, string _description, string _extraInfo, IUniverse _universe, address _market, address _marketCreator, bytes32[] _outcomes, int256 _minPrice, int256 _maxPrice, IMarket.MarketType _marketType) public returns (bool); function logMarketCreated(bytes32 _topic, string _description, string _extraInfo, IUniverse _universe, address _market, address _marketCreator, int256 _minPrice, int256 _maxPrice, IMarket.MarketType _marketType) public returns (bool); function logInitialReportSubmitted(IUniverse _universe, address _reporter, address _market, uint256 _amountStaked, bool _isDesignatedReporter, uint256[] _payoutNumerators, bool _invalid) public returns (bool); function disputeCrowdsourcerCreated(IUniverse _universe, address _market, address _disputeCrowdsourcer, uint256[] _payoutNumerators, uint256 _size, bool _invalid) public returns (bool); function logDisputeCrowdsourcerContribution(IUniverse _universe, address _reporter, address _market, address _disputeCrowdsourcer, uint256 _amountStaked) public returns (bool); function logDisputeCrowdsourcerCompleted(IUniverse _universe, address _market, address _disputeCrowdsourcer) public returns (bool); function logInitialReporterRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256 _reportingFeesReceived, uint256[] _payoutNumerators) public returns (bool); function logDisputeCrowdsourcerRedeemed(IUniverse _universe, address _reporter, address _market, uint256 _amountRedeemed, uint256 _repReceived, uint256 _reportingFeesReceived, uint256[] _payoutNumerators) public returns (bool); function logFeeWindowRedeemed(IUniverse _universe, address _reporter, uint256 _amountRedeemed, uint256 _reportingFeesReceived) public returns (bool); function logMarketFinalized(IUniverse _universe) public returns (bool); function logMarketMigrated(IMarket _market, IUniverse _originalUniverse) public returns (bool); function logReportingParticipantDisavowed(IUniverse _universe, IMarket _market) public returns (bool); function logMarketParticipantsDisavowed(IUniverse _universe) public returns (bool); function logOrderCanceled(IUniverse _universe, address _shareToken, address _sender, bytes32 _orderId, Order.Types _orderType, uint256 _tokenRefund, uint256 _sharesRefund) public returns (bool); function logOrderCreated(Order.Types _orderType, uint256 _amount, uint256 _price, address _creator, uint256 _moneyEscrowed, uint256 _sharesEscrowed, bytes32 _tradeGroupId, bytes32 _orderId, IUniverse _universe, address _shareToken) public returns (bool); function logOrderFilled(IUniverse _universe, address _shareToken, address _filler, bytes32 _orderId, uint256 _numCreatorShares, uint256 _numCreatorTokens, uint256 _numFillerShares, uint256 _numFillerTokens, uint256 _marketCreatorFees, uint256 _reporterFees, uint256 _amountFilled, bytes32 _tradeGroupId) public returns (bool); function logCompleteSetsPurchased(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets) public returns (bool); function logCompleteSetsSold(IUniverse _universe, IMarket _market, address _account, uint256 _numCompleteSets) public returns (bool); function logTradingProceedsClaimed(IUniverse _universe, address _shareToken, address _sender, address _market, uint256 _numShares, uint256 _numPayoutTokens, uint256 _finalTokenBalance) public returns (bool); function logUniverseForked() public returns (bool); function logFeeWindowTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool); function logReputationTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool); function logDisputeCrowdsourcerTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool); function logShareTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool); function logReputationTokenBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool); function logReputationTokenMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool); function logShareTokenBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool); function logShareTokenMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool); function logFeeWindowBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool); function logFeeWindowMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool); function logDisputeCrowdsourcerTokensBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool); function logDisputeCrowdsourcerTokensMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool); function logFeeWindowCreated(IFeeWindow _feeWindow, uint256 _id) public returns (bool); function logFeeTokenTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool); function logFeeTokenBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool); function logFeeTokenMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool); function logTimestampSet(uint256 _newTimestamp) public returns (bool); function logInitialReporterTransferred(IUniverse _universe, IMarket _market, address _from, address _to) public returns (bool); function logMarketTransferred(IUniverse _universe, address _from, address _to) public returns (bool); function logMarketMailboxTransferred(IUniverse _universe, IMarket _market, address _from, address _to) public returns (bool); function logEscapeHatchChanged(bool _isOn) public returns (bool); } contract IControlled { function getController() public view returns (IController); function setController(IController _controller) public returns(bool); } contract Controlled is IControlled { IController internal controller; modifier onlyWhitelistedCallers { require(controller.assertIsWhitelisted(msg.sender)); _; } modifier onlyCaller(bytes32 _key) { require(msg.sender == controller.lookup(_key)); _; } modifier onlyControllerCaller { require(IController(msg.sender) == controller); _; } modifier onlyInGoodTimes { require(controller.stopInEmergency()); _; } modifier onlyInBadTimes { require(controller.onlyInEmergency()); _; } function Controlled() public { controller = IController(msg.sender); } function getController() public view returns(IController) { return controller; } function setController(IController _controller) public onlyControllerCaller returns(bool) { controller = _controller; return true; } } contract IController { function assertIsWhitelisted(address _target) public view returns(bool); function lookup(bytes32 _key) public view returns(address); function stopInEmergency() public view returns(bool); function onlyInEmergency() public view returns(bool); function getAugur() public view returns (IAugur); function getTimestamp() public view returns (uint256); } contract CashAutoConverter is Controlled { /** * @dev Convert any ETH provided in the transaction into Cash before the function executes and convert any remaining Cash balance into ETH after the function completes */ modifier convertToAndFromCash() { ethToCash(); _; cashToEth(); } function ethToCash() private returns (bool) { if (msg.value > 0) { ICash(controller.lookup("Cash")).depositEtherFor.value(msg.value)(msg.sender); } return true; } function cashToEth() private returns (bool) { ICash _cash = ICash(controller.lookup("Cash")); uint256 _tokenBalance = _cash.balanceOf(msg.sender); if (_tokenBalance > 0) { IAugur augur = controller.getAugur(); augur.trustedTransfer(_cash, msg.sender, this, _tokenBalance); _cash.withdrawEtherTo(msg.sender, _tokenBalance); } return true; } } contract IOwnable { function getOwner() public view returns (address); function transferOwnership(address newOwner) public returns (bool); } contract ITyped { function getTypeName() public view returns (bytes32); } contract Initializable { bool private initialized = false; modifier afterInitialized { require(initialized); _; } modifier beforeInitialized { require(!initialized); _; } function endInitialization() internal beforeInitialized returns (bool) { initialized = true; return true; } function getInitialized() public view returns (bool) { return initialized; } } contract MarketValidator is Controlled { modifier marketIsLegit(IMarket _market) { IUniverse _universe = _market.getUniverse(); require(controller.getAugur().isKnownUniverse(_universe)); require(_universe.isContainerForMarket(_market)); _; } } contract ReentrancyGuard { /** * @dev We use a single lock for the whole contract. */ bool private rentrancyLock = false; /** * @dev Prevents a contract from calling itself, directly or indirectly. * @notice If you mark a function `nonReentrant`, you should also mark it `external`. Calling one nonReentrant function from another is not supported. Instead, you can implement a `private` function doing the actual work, and a `external` wrapper marked as `nonReentrant`. */ modifier nonReentrant() { require(!rentrancyLock); rentrancyLock = true; _; rentrancyLock = false; } } library SafeMathUint256 { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; require(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } function min(uint256 a, uint256 b) internal pure returns (uint256) { if (a <= b) { return a; } else { return b; } } function max(uint256 a, uint256 b) internal pure returns (uint256) { if (a >= b) { return a; } else { return b; } } function getUint256Min() internal pure returns (uint256) { return 0; } function getUint256Max() internal pure returns (uint256) { return 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; } function isMultipleOf(uint256 a, uint256 b) internal pure returns (bool) { return a % b == 0; } // Float [fixed point] Operations function fxpMul(uint256 a, uint256 b, uint256 base) internal pure returns (uint256) { return div(mul(a, b), base); } function fxpDiv(uint256 a, uint256 b, uint256 base) internal pure returns (uint256) { return div(mul(a, base), b); } } contract ERC20Basic { event Transfer(address indexed from, address indexed to, uint256 value); function balanceOf(address _who) public view returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); function totalSupply() public view returns (uint256); } contract ERC20 is ERC20Basic { event Approval(address indexed owner, address indexed spender, uint256 value); function allowance(address _owner, address _spender) public view returns (uint256); function transferFrom(address _from, address _to, uint256 _value) public returns (bool); function approve(address _spender, uint256 _value) public returns (bool); } contract IFeeToken is ERC20, Initializable { function initialize(IFeeWindow _feeWindow) public returns (bool); function getFeeWindow() public view returns (IFeeWindow); function feeWindowBurn(address _target, uint256 _amount) public returns (bool); function mintForReportingParticipant(address _target, uint256 _amount) public returns (bool); } contract IFeeWindow is ITyped, ERC20 { function initialize(IUniverse _universe, uint256 _feeWindowId) public returns (bool); function getUniverse() public view returns (IUniverse); function getReputationToken() public view returns (IReputationToken); function getStartTime() public view returns (uint256); function getEndTime() public view returns (uint256); function getNumMarkets() public view returns (uint256); function getNumInvalidMarkets() public view returns (uint256); function getNumIncorrectDesignatedReportMarkets() public view returns (uint256); function getNumDesignatedReportNoShows() public view returns (uint256); function getFeeToken() public view returns (IFeeToken); function isActive() public view returns (bool); function isOver() public view returns (bool); function onMarketFinalized() public returns (bool); function buy(uint256 _attotokens) public returns (bool); function redeem(address _sender) public returns (bool); function redeemForReportingParticipant() public returns (bool); function mintFeeTokens(uint256 _amount) public returns (bool); function trustedUniverseBuy(address _buyer, uint256 _attotokens) public returns (bool); } contract IMailbox { function initialize(address _owner, IMarket _market) public returns (bool); function depositEther() public payable returns (bool); } contract IMarket is ITyped, IOwnable { enum MarketType { YES_NO, CATEGORICAL, SCALAR } function initialize(IUniverse _universe, uint256 _endTime, uint256 _feePerEthInAttoeth, ICash _cash, address _designatedReporterAddress, address _creator, uint256 _numOutcomes, uint256 _numTicks) public payable returns (bool _success); function derivePayoutDistributionHash(uint256[] _payoutNumerators, bool _invalid) public view returns (bytes32); function getUniverse() public view returns (IUniverse); function getFeeWindow() public view returns (IFeeWindow); function getNumberOfOutcomes() public view returns (uint256); function getNumTicks() public view returns (uint256); function getDenominationToken() public view returns (ICash); function getShareToken(uint256 _outcome) public view returns (IShareToken); function getMarketCreatorSettlementFeeDivisor() public view returns (uint256); function getForkingMarket() public view returns (IMarket _market); function getEndTime() public view returns (uint256); function getMarketCreatorMailbox() public view returns (IMailbox); function getWinningPayoutDistributionHash() public view returns (bytes32); function getWinningPayoutNumerator(uint256 _outcome) public view returns (uint256); function getReputationToken() public view returns (IReputationToken); function getFinalizationTime() public view returns (uint256); function getInitialReporterAddress() public view returns (address); function deriveMarketCreatorFeeAmount(uint256 _amount) public view returns (uint256); function isContainerForShareToken(IShareToken _shadyTarget) public view returns (bool); function isContainerForReportingParticipant(IReportingParticipant _reportingParticipant) public view returns (bool); function isInvalid() public view returns (bool); function finalize() public returns (bool); function designatedReporterWasCorrect() public view returns (bool); function designatedReporterShowed() public view returns (bool); function isFinalized() public view returns (bool); function finalizeFork() public returns (bool); function assertBalances() public view returns (bool); } contract IReportingParticipant { function getStake() public view returns (uint256); function getPayoutDistributionHash() public view returns (bytes32); function liquidateLosing() public returns (bool); function redeem(address _redeemer) public returns (bool); function isInvalid() public view returns (bool); function isDisavowed() public view returns (bool); function migrate() public returns (bool); function getPayoutNumerator(uint256 _outcome) public view returns (uint256); function getMarket() public view returns (IMarket); function getSize() public view returns (uint256); } contract IDisputeCrowdsourcer is IReportingParticipant, ERC20 { function initialize(IMarket market, uint256 _size, bytes32 _payoutDistributionHash, uint256[] _payoutNumerators, bool _invalid) public returns (bool); function contribute(address _participant, uint256 _amount) public returns (uint256); } contract IReputationToken is ITyped, ERC20 { function initialize(IUniverse _universe) public returns (bool); function migrateOut(IReputationToken _destination, uint256 _attotokens) public returns (bool); function migrateIn(address _reporter, uint256 _attotokens) public returns (bool); function trustedReportingParticipantTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool); function trustedMarketTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool); function trustedFeeWindowTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool); function trustedUniverseTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool); function getUniverse() public view returns (IUniverse); function getTotalMigrated() public view returns (uint256); function getTotalTheoreticalSupply() public view returns (uint256); function mintForReportingParticipant(uint256 _amountMigrated) public returns (bool); } contract IUniverse is ITyped { function initialize(IUniverse _parentUniverse, bytes32 _parentPayoutDistributionHash) external returns (bool); function fork() public returns (bool); function getParentUniverse() public view returns (IUniverse); function createChildUniverse(uint256[] _parentPayoutNumerators, bool _invalid) public returns (IUniverse); function getChildUniverse(bytes32 _parentPayoutDistributionHash) public view returns (IUniverse); function getReputationToken() public view returns (IReputationToken); function getForkingMarket() public view returns (IMarket); function getForkEndTime() public view returns (uint256); function getForkReputationGoal() public view returns (uint256); function getParentPayoutDistributionHash() public view returns (bytes32); function getDisputeRoundDurationInSeconds() public view returns (uint256); function getOrCreateFeeWindowByTimestamp(uint256 _timestamp) public returns (IFeeWindow); function getOrCreateCurrentFeeWindow() public returns (IFeeWindow); function getOrCreateNextFeeWindow() public returns (IFeeWindow); function getOpenInterestInAttoEth() public view returns (uint256); function getRepMarketCapInAttoeth() public view returns (uint256); function getTargetRepMarketCapInAttoeth() public view returns (uint256); function getOrCacheValidityBond() public returns (uint256); function getOrCacheDesignatedReportStake() public returns (uint256); function getOrCacheDesignatedReportNoShowBond() public returns (uint256); function getOrCacheReportingFeeDivisor() public returns (uint256); function getDisputeThresholdForFork() public view returns (uint256); function getInitialReportMinValue() public view returns (uint256); function calculateFloatingValue(uint256 _badMarkets, uint256 _totalMarkets, uint256 _targetDivisor, uint256 _previousValue, uint256 _defaultValue, uint256 _floor) public pure returns (uint256 _newValue); function getOrCacheMarketCreationCost() public returns (uint256); function getCurrentFeeWindow() public view returns (IFeeWindow); function getOrCreateFeeWindowBefore(IFeeWindow _feeWindow) public returns (IFeeWindow); function isParentOf(IUniverse _shadyChild) public view returns (bool); function updateTentativeWinningChildUniverse(bytes32 _parentPayoutDistributionHash) public returns (bool); function isContainerForFeeWindow(IFeeWindow _shadyTarget) public view returns (bool); function isContainerForMarket(IMarket _shadyTarget) public view returns (bool); function isContainerForReportingParticipant(IReportingParticipant _reportingParticipant) public view returns (bool); function isContainerForShareToken(IShareToken _shadyTarget) public view returns (bool); function isContainerForFeeToken(IFeeToken _shadyTarget) public view returns (bool); function addMarketTo() public returns (bool); function removeMarketFrom() public returns (bool); function decrementOpenInterest(uint256 _amount) public returns (bool); function decrementOpenInterestFromMarket(uint256 _amount) public returns (bool); function incrementOpenInterest(uint256 _amount) public returns (bool); function incrementOpenInterestFromMarket(uint256 _amount) public returns (bool); function getWinningChildUniverse() public view returns (IUniverse); function isForking() public view returns (bool); } contract ICash is ERC20 { function depositEther() external payable returns(bool); function depositEtherFor(address _to) external payable returns(bool); function withdrawEther(uint256 _amount) external returns(bool); function withdrawEtherTo(address _to, uint256 _amount) external returns(bool); function withdrawEtherToIfPossible(address _to, uint256 _amount) external returns (bool); } contract ICreateOrder { function publicCreateOrder(Order.Types, uint256, uint256, IMarket, uint256, bytes32, bytes32, bytes32) external payable returns (bytes32); function createOrder(address, Order.Types, uint256, uint256, IMarket, uint256, bytes32, bytes32, bytes32) external returns (bytes32); } contract IFillOrder { function publicFillOrder(bytes32 _orderId, uint256 _amountFillerWants, bytes32 _tradeGroupId) external payable returns (uint256); function fillOrder(address _filler, bytes32 _orderId, uint256 _amountFillerWants, bytes32 tradeGroupId) external returns (uint256); } contract IOrders { function saveOrder(Order.Types _type, IMarket _market, uint256 _fxpAmount, uint256 _price, address _sender, uint256 _outcome, uint256 _moneyEscrowed, uint256 _sharesEscrowed, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId) public returns (bytes32 _orderId); function removeOrder(bytes32 _orderId) public returns (bool); function getMarket(bytes32 _orderId) public view returns (IMarket); function getOrderType(bytes32 _orderId) public view returns (Order.Types); function getOutcome(bytes32 _orderId) public view returns (uint256); function getAmount(bytes32 _orderId) public view returns (uint256); function getPrice(bytes32 _orderId) public view returns (uint256); function getOrderCreator(bytes32 _orderId) public view returns (address); function getOrderSharesEscrowed(bytes32 _orderId) public view returns (uint256); function getOrderMoneyEscrowed(bytes32 _orderId) public view returns (uint256); function getBetterOrderId(bytes32 _orderId) public view returns (bytes32); function getWorseOrderId(bytes32 _orderId) public view returns (bytes32); function getBestOrderId(Order.Types _type, IMarket _market, uint256 _outcome) public view returns (bytes32); function getWorstOrderId(Order.Types _type, IMarket _market, uint256 _outcome) public view returns (bytes32); function getLastOutcomePrice(IMarket _market, uint256 _outcome) public view returns (uint256); function getOrderId(Order.Types _type, IMarket _market, uint256 _fxpAmount, uint256 _price, address _sender, uint256 _blockNumber, uint256 _outcome, uint256 _moneyEscrowed, uint256 _sharesEscrowed) public pure returns (bytes32); function getTotalEscrowed(IMarket _market) public view returns (uint256); function isBetterPrice(Order.Types _type, uint256 _price, bytes32 _orderId) public view returns (bool); function isWorsePrice(Order.Types _type, uint256 _price, bytes32 _orderId) public view returns (bool); function assertIsNotBetterPrice(Order.Types _type, uint256 _price, bytes32 _betterOrderId) public view returns (bool); function assertIsNotWorsePrice(Order.Types _type, uint256 _price, bytes32 _worseOrderId) public returns (bool); function recordFillOrder(bytes32 _orderId, uint256 _sharesFilled, uint256 _tokensFilled) public returns (bool); function setPrice(IMarket _market, uint256 _outcome, uint256 _price) external returns (bool); function incrementTotalEscrowed(IMarket _market, uint256 _amount) external returns (bool); function decrementTotalEscrowed(IMarket _market, uint256 _amount) external returns (bool); } contract IShareToken is ITyped, ERC20 { function initialize(IMarket _market, uint256 _outcome) external returns (bool); function createShares(address _owner, uint256 _amount) external returns (bool); function destroyShares(address, uint256 balance) external returns (bool); function getMarket() external view returns (IMarket); function getOutcome() external view returns (uint256); function trustedOrderTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool); function trustedFillOrderTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool); function trustedCancelOrderTransfer(address _source, address _destination, uint256 _attotokens) public returns (bool); } library Order { using SafeMathUint256 for uint256; enum Types { Bid, Ask } enum TradeDirections { Long, Short } struct Data { // Contracts IOrders orders; IMarket market; IAugur augur; // Order bytes32 id; address creator; uint256 outcome; Order.Types orderType; uint256 amount; uint256 price; uint256 sharesEscrowed; uint256 moneyEscrowed; bytes32 betterOrderId; bytes32 worseOrderId; } // // Constructor // // No validation is needed here as it is simply a librarty function for organizing data function create(IController _controller, address _creator, uint256 _outcome, Order.Types _type, uint256 _attoshares, uint256 _price, IMarket _market, bytes32 _betterOrderId, bytes32 _worseOrderId) internal view returns (Data) { require(_outcome < _market.getNumberOfOutcomes()); require(_price < _market.getNumTicks()); IOrders _orders = IOrders(_controller.lookup("Orders")); IAugur _augur = _controller.getAugur(); return Data({ orders: _orders, market: _market, augur: _augur, id: 0, creator: _creator, outcome: _outcome, orderType: _type, amount: _attoshares, price: _price, sharesEscrowed: 0, moneyEscrowed: 0, betterOrderId: _betterOrderId, worseOrderId: _worseOrderId }); } // // "public" functions // function getOrderId(Order.Data _orderData) internal view returns (bytes32) { if (_orderData.id == bytes32(0)) { bytes32 _orderId = _orderData.orders.getOrderId(_orderData.orderType, _orderData.market, _orderData.amount, _orderData.price, _orderData.creator, block.number, _orderData.outcome, _orderData.moneyEscrowed, _orderData.sharesEscrowed); require(_orderData.orders.getAmount(_orderId) == 0); _orderData.id = _orderId; } return _orderData.id; } function getOrderTradingTypeFromMakerDirection(Order.TradeDirections _creatorDirection) internal pure returns (Order.Types) { return (_creatorDirection == Order.TradeDirections.Long) ? Order.Types.Bid : Order.Types.Ask; } function getOrderTradingTypeFromFillerDirection(Order.TradeDirections _fillerDirection) internal pure returns (Order.Types) { return (_fillerDirection == Order.TradeDirections.Long) ? Order.Types.Ask : Order.Types.Bid; } function escrowFunds(Order.Data _orderData) internal returns (bool) { if (_orderData.orderType == Order.Types.Ask) { return escrowFundsForAsk(_orderData); } else if (_orderData.orderType == Order.Types.Bid) { return escrowFundsForBid(_orderData); } } function saveOrder(Order.Data _orderData, bytes32 _tradeGroupId) internal returns (bytes32) { return _orderData.orders.saveOrder(_orderData.orderType, _orderData.market, _orderData.amount, _orderData.price, _orderData.creator, _orderData.outcome, _orderData.moneyEscrowed, _orderData.sharesEscrowed, _orderData.betterOrderId, _orderData.worseOrderId, _tradeGroupId); } // // Private functions // function escrowFundsForBid(Order.Data _orderData) private returns (bool) { require(_orderData.moneyEscrowed == 0); require(_orderData.sharesEscrowed == 0); uint256 _attosharesToCover = _orderData.amount; uint256 _numberOfOutcomes = _orderData.market.getNumberOfOutcomes(); // Figure out how many almost-complete-sets (just missing `outcome` share) the creator has uint256 _attosharesHeld = 2**254; for (uint256 _i = 0; _i < _numberOfOutcomes; _i++) { if (_i != _orderData.outcome) { uint256 _creatorShareTokenBalance = _orderData.market.getShareToken(_i).balanceOf(_orderData.creator); _attosharesHeld = SafeMathUint256.min(_creatorShareTokenBalance, _attosharesHeld); } } // Take shares into escrow if they have any almost-complete-sets if (_attosharesHeld > 0) { _orderData.sharesEscrowed = SafeMathUint256.min(_attosharesHeld, _attosharesToCover); _attosharesToCover -= _orderData.sharesEscrowed; for (_i = 0; _i < _numberOfOutcomes; _i++) { if (_i != _orderData.outcome) { _orderData.market.getShareToken(_i).trustedOrderTransfer(_orderData.creator, _orderData.market, _orderData.sharesEscrowed); } } } // If not able to cover entire order with shares alone, then cover remaining with tokens if (_attosharesToCover > 0) { _orderData.moneyEscrowed = _attosharesToCover.mul(_orderData.price); require(_orderData.augur.trustedTransfer(_orderData.market.getDenominationToken(), _orderData.creator, _orderData.market, _orderData.moneyEscrowed)); } return true; } function escrowFundsForAsk(Order.Data _orderData) private returns (bool) { require(_orderData.moneyEscrowed == 0); require(_orderData.sharesEscrowed == 0); IShareToken _shareToken = _orderData.market.getShareToken(_orderData.outcome); uint256 _attosharesToCover = _orderData.amount; // Figure out how many shares of the outcome the creator has uint256 _attosharesHeld = _shareToken.balanceOf(_orderData.creator); // Take shares in escrow if user has shares if (_attosharesHeld > 0) { _orderData.sharesEscrowed = SafeMathUint256.min(_attosharesHeld, _attosharesToCover); _attosharesToCover -= _orderData.sharesEscrowed; _shareToken.trustedOrderTransfer(_orderData.creator, _orderData.market, _orderData.sharesEscrowed); } // If not able to cover entire order with shares alone, then cover remaining with tokens if (_attosharesToCover > 0) { _orderData.moneyEscrowed = _orderData.market.getNumTicks().sub(_orderData.price).mul(_attosharesToCover); require(_orderData.augur.trustedTransfer(_orderData.market.getDenominationToken(), _orderData.creator, _orderData.market, _orderData.moneyEscrowed)); } return true; } } contract Trade is CashAutoConverter, ReentrancyGuard, MarketValidator { uint256 internal constant FILL_ORDER_MINIMUM_GAS_NEEDED = 2000000; uint256 internal constant CREATE_ORDER_MINIMUM_GAS_NEEDED = 700000; function publicBuy(IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) { bytes32 _result = trade(msg.sender, Order.TradeDirections.Long, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId); _market.assertBalances(); return _result; } function publicSell(IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) { bytes32 _result = trade(msg.sender, Order.TradeDirections.Short, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId); _market.assertBalances(); return _result; } function publicTrade(Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) { bytes32 _result = trade(msg.sender, _direction, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId); _market.assertBalances(); return _result; } function publicFillBestOrder(Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _tradeGroupId) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (uint256) { uint256 _result = fillBestOrder(msg.sender, _direction, _market, _outcome, _fxpAmount, _price, _tradeGroupId); _market.assertBalances(); return _result; } function trade(address _sender, Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId) internal returns (bytes32) { uint256 _bestFxpAmount = fillBestOrder(_sender, _direction, _market, _outcome, _fxpAmount, _price, _tradeGroupId); if (_bestFxpAmount == 0) { return bytes32(1); } if (msg.gas < getCreateOrderMinGasNeeded()) { return bytes32(1); } Order.Types _type = Order.getOrderTradingTypeFromMakerDirection(_direction); return ICreateOrder(controller.lookup("CreateOrder")).createOrder(_sender, _type, _bestFxpAmount, _price, _market, _outcome, _betterOrderId, _worseOrderId, _tradeGroupId); } function fillBestOrder(address _sender, Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _tradeGroupId) internal nonReentrant returns (uint256 _bestFxpAmount) { // we need to fill a BID if we want to SELL and we need to fill an ASK if we want to BUY Order.Types _type = Order.getOrderTradingTypeFromFillerDirection(_direction); IOrders _orders = IOrders(controller.lookup("Orders")); bytes32 _orderId = _orders.getBestOrderId(_type, _market, _outcome); _bestFxpAmount = _fxpAmount; while (_orderId != 0 && _bestFxpAmount > 0 && msg.gas >= getFillOrderMinGasNeeded()) { uint256 _orderPrice = _orders.getPrice(_orderId); // If the price is acceptable relative to the trade type if (_type == Order.Types.Bid ? _orderPrice >= _price : _orderPrice <= _price) { bytes32 _nextOrderId = _orders.getWorseOrderId(_orderId); _orders.setPrice(_market, _outcome, _orderPrice); _bestFxpAmount = IFillOrder(controller.lookup("FillOrder")).fillOrder(_sender, _orderId, _bestFxpAmount, _tradeGroupId); _orderId = _nextOrderId; } else { _orderId = bytes32(0); } } if (_orderId != 0) { return 0; } return _bestFxpAmount; } function publicBuyWithLimit(IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId, uint256 _loopLimit) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) { bytes32 _result = tradeWithLimit(msg.sender, Order.TradeDirections.Long, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId, _loopLimit); _market.assertBalances(); return _result; } function publicSellWithLimit(IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId, uint256 _loopLimit) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) { bytes32 _result = tradeWithLimit(msg.sender, Order.TradeDirections.Short, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId, _loopLimit); _market.assertBalances(); return _result; } function publicTradeWithLimit(Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId, uint256 _loopLimit) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (bytes32) { bytes32 _result = tradeWithLimit(msg.sender, _direction, _market, _outcome, _fxpAmount, _price, _betterOrderId, _worseOrderId, _tradeGroupId, _loopLimit); _market.assertBalances(); return _result; } function publicFillBestOrderWithLimit(Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _tradeGroupId, uint256 _loopLimit) external payable marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes returns (uint256) { uint256 _result = fillBestOrderWithLimit(msg.sender, _direction, _market, _outcome, _fxpAmount, _price, _tradeGroupId, _loopLimit); _market.assertBalances(); return _result; } function tradeWithLimit(address _sender, Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _betterOrderId, bytes32 _worseOrderId, bytes32 _tradeGroupId, uint256 _loopLimit) internal returns (bytes32) { uint256 _bestFxpAmount = fillBestOrderWithLimit(_sender, _direction, _market, _outcome, _fxpAmount, _price, _tradeGroupId, _loopLimit); if (_bestFxpAmount == 0) { return bytes32(1); } return ICreateOrder(controller.lookup("CreateOrder")).createOrder(_sender, Order.getOrderTradingTypeFromMakerDirection(_direction), _bestFxpAmount, _price, _market, _outcome, _betterOrderId, _worseOrderId, _tradeGroupId); } function fillBestOrderWithLimit(address _sender, Order.TradeDirections _direction, IMarket _market, uint256 _outcome, uint256 _fxpAmount, uint256 _price, bytes32 _tradeGroupId, uint256 _loopLimit) internal nonReentrant returns (uint256 _bestFxpAmount) { // we need to fill a BID if we want to SELL and we need to fill an ASK if we want to BUY Order.Types _type = Order.getOrderTradingTypeFromFillerDirection(_direction); IOrders _orders = IOrders(controller.lookup("Orders")); bytes32 _orderId = _orders.getBestOrderId(_type, _market, _outcome); _bestFxpAmount = _fxpAmount; while (_orderId != 0 && _bestFxpAmount > 0 && _loopLimit > 0) { uint256 _orderPrice = _orders.getPrice(_orderId); // If the price is acceptable relative to the trade type if (_type == Order.Types.Bid ? _orderPrice >= _price : _orderPrice <= _price) { bytes32 _nextOrderId = _orders.getWorseOrderId(_orderId); _orders.setPrice(_market, _outcome, _orderPrice); _bestFxpAmount = IFillOrder(controller.lookup("FillOrder")).fillOrder(_sender, _orderId, _bestFxpAmount, _tradeGroupId); _orderId = _nextOrderId; } else { _orderId = bytes32(0); } _loopLimit -= 1; } if (_orderId != 0) { return 0; } return _bestFxpAmount; } // COVERAGE: This is not covered and cannot be. We need to use a different minimum gas while running coverage since the additional logging make the cost rise a great deal function getFillOrderMinGasNeeded() internal pure returns (uint256) { return FILL_ORDER_MINIMUM_GAS_NEEDED; } function getCreateOrderMinGasNeeded() internal pure returns (uint256) { return CREATE_ORDER_MINIMUM_GAS_NEEDED; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"},{"name":"_loopLimit","type":"uint256"}],"name":"publicSellWithLimit","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_direction","type":"uint8"},{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"}],"name":"publicTrade","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getController","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_direction","type":"uint8"},{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"},{"name":"_loopLimit","type":"uint256"}],"name":"publicTradeWithLimit","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_direction","type":"uint8"},{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_tradeGroupId","type":"bytes32"},{"name":"_loopLimit","type":"uint256"}],"name":"publicFillBestOrderWithLimit","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"}],"name":"publicSell","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_direction","type":"uint8"},{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_tradeGroupId","type":"bytes32"}],"name":"publicFillBestOrder","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"},{"name":"_loopLimit","type":"uint256"}],"name":"publicBuyWithLimit","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_market","type":"address"},{"name":"_outcome","type":"uint256"},{"name":"_fxpAmount","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_betterOrderId","type":"bytes32"},{"name":"_worseOrderId","type":"bytes32"},{"name":"_tradeGroupId","type":"bytes32"}],"name":"publicBuy","outputs":[{"name":"","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"}]
Contract Creation Code
606060405260008054600160a060020a033316600160a860020a0319909116179055612854806100306000396000f30060606040526004361061008a5763ffffffff60e060020a6000350416630a9a877b811461008f57806315c64b61146100ca5780633018205f146100f6578063554de08c1461012557806392eefe9b14610155578063a127d74e14610188578063b1b12ef6146101b1578063ef01e5a3146101d7578063f0697887146101fd578063f2beaf5914610226575b600080fd5b6100b8600160a060020a036004351660243560443560643560843560a43560c43560e43561024c565b60405190815260200160405180910390f35b6100b860ff60043516600160a060020a036024351660443560643560843560a43560c43560e43561051e565b341561010157600080fd5b6101096107b7565b604051600160a060020a03909116815260200160405180910390f35b6100b860ff60043516600160a060020a036024351660443560643560843560a43560c43560e435610104356107c6565b341561016057600080fd5b610174600160a060020a0360043516610a98565b604051901515815260200160405180910390f35b6100b860ff60043516600160a060020a036024351660443560643560843560a43560c435610ae6565b6100b8600160a060020a036004351660243560443560643560843560a43560c435610db4565b6100b860ff60043516600160a060020a036024351660443560643560843560a43561104e565b6100b8600160a060020a036004351660243560443560643560843560a43560c43560e43561131a565b6100b8600160a060020a036004351660243560443560643560843560a43560c43561156d565b60008089600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561029857600080fd5b6102c65a03f115156102a957600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561030057600080fd5b6102c65a03f1151561031157600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561037157600080fd5b6102c65a03f1151561038257600080fd5b50505060405180519050151561039757600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156103ee57600080fd5b6102c65a03f115156103ff57600080fd5b50505060405180519050151561041457600080fd5b61041c6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561046657600080fd5b6102c65a03f1151561047757600080fd5b50505060405180519050151561048c57600080fd5b61049f3360018e8e8e8e8e8e8e8e6118cc565b92508b600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104e757600080fd5b6102c65a03f115156104f857600080fd5b505050604051805190505082935061050e611a69565b5050505098975050505050505050565b60008088600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561056a57600080fd5b6102c65a03f1151561057b57600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156105d257600080fd5b6102c65a03f115156105e357600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561064357600080fd5b6102c65a03f1151561065457600080fd5b50505060405180519050151561066957600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156106c057600080fd5b6102c65a03f115156106d157600080fd5b5050506040518051905015156106e657600080fd5b6106ee6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561073857600080fd5b6102c65a03f1151561074957600080fd5b50505060405180519050151561075e57600080fd5b61076f338d8d8d8d8d8d8d8d611ce9565b92508a600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104e757600080fd5b600054600160a060020a031690565b60008089600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561081257600080fd5b6102c65a03f1151561082357600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561087a57600080fd5b6102c65a03f1151561088b57600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156108eb57600080fd5b6102c65a03f115156108fc57600080fd5b50505060405180519050151561091157600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561096857600080fd5b6102c65a03f1151561097957600080fd5b50505060405180519050151561098e57600080fd5b6109966117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156109e057600080fd5b6102c65a03f115156109f157600080fd5b505050604051805190501515610a0657600080fd5b610a18338e8e8e8e8e8e8e8e8e6118cc565b92508b600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610a6057600080fd5b6102c65a03f11515610a7157600080fd5b5050506040518051905050829350610a87611a69565b505050509998505050505050505050565b6000805433600160a060020a03908116911614610ab457600080fd5b5060008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b60008087600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b3257600080fd5b6102c65a03f11515610b4357600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b9a57600080fd5b6102c65a03f11515610bab57600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610c0b57600080fd5b6102c65a03f11515610c1c57600080fd5b505050604051805190501515610c3157600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610c8857600080fd5b6102c65a03f11515610c9957600080fd5b505050604051805190501515610cae57600080fd5b610cb66117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d0057600080fd5b6102c65a03f11515610d1157600080fd5b505050604051805190501515610d2657600080fd5b610d36338c8c8c8c8c8c8c611ea5565b925089600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d7e57600080fd5b6102c65a03f11515610d8f57600080fd5b5050506040518051905050829350610da5611a69565b50505050979650505050505050565b60008088600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610e0057600080fd5b6102c65a03f11515610e1157600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610e6857600080fd5b6102c65a03f11515610e7957600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ed957600080fd5b6102c65a03f11515610eea57600080fd5b505050604051805190501515610eff57600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f5657600080fd5b6102c65a03f11515610f6757600080fd5b505050604051805190501515610f7c57600080fd5b610f846117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610fce57600080fd5b6102c65a03f11515610fdf57600080fd5b505050604051805190501515610ff457600080fd5b6110063360018d8d8d8d8d8d8d611ce9565b92508a600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d7e57600080fd5b60008086600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561109a57600080fd5b6102c65a03f115156110ab57600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561110257600080fd5b6102c65a03f1151561111357600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561117357600080fd5b6102c65a03f1151561118457600080fd5b50505060405180519050151561119957600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111f057600080fd5b6102c65a03f1151561120157600080fd5b50505060405180519050151561121657600080fd5b61121e6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561126857600080fd5b6102c65a03f1151561127957600080fd5b50505060405180519050151561128e57600080fd5b61129d338b8b8b8b8b8b61233c565b925088600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156112e557600080fd5b6102c65a03f115156112f657600080fd5b505050604051805190505082935061130c611a69565b505050509695505050505050565b60008089600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561136657600080fd5b6102c65a03f1151561137757600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113ce57600080fd5b6102c65a03f115156113df57600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561143f57600080fd5b6102c65a03f1151561145057600080fd5b50505060405180519050151561146557600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156114bc57600080fd5b6102c65a03f115156114cd57600080fd5b5050506040518051905015156114e257600080fd5b6114ea6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561153457600080fd5b6102c65a03f1151561154557600080fd5b50505060405180519050151561155a57600080fd5b61049f3360008e8e8e8e8e8e8e8e6118cc565b60008088600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156115b957600080fd5b6102c65a03f115156115ca57600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561162157600080fd5b6102c65a03f1151561163257600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561169257600080fd5b6102c65a03f115156116a357600080fd5b5050506040518051905015156116b857600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561170f57600080fd5b6102c65a03f1151561172057600080fd5b50505060405180519050151561173557600080fd5b61173d6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561178757600080fd5b6102c65a03f1151561179857600080fd5b5050506040518051905015156117ad57600080fd5b6110063360008d8d8d8d8d8d8d611ce9565b6000803411156118c65760008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f43617368000000000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561183857600080fd5b6102c65a03f1151561184957600080fd5b50505060405180519050600160a060020a0316634faa8a26343360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156118a957600080fd5b6125ee5a03f115156118ba57600080fd5b50505050604051805150505b50600190565b6000806118df8c8c8c8c8c8c8a8a611ea5565b90508015156118f15760019150611a5a565b60008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4372656174654f726465720000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561196057600080fd5b6102c65a03f1151561197157600080fd5b50505060405180519050600160a060020a031663f79383288d6119938e6127d3565b848b8f8f8d8d8d6000604051602001526040518a63ffffffff1660e060020a028152600401808a600160a060020a0316600160a060020a031681526020018960018111156119dd57fe5b60ff168152602080820199909952604080820198909852600160a060020a03909616606087015250608085019390935260a084019190915260c083015260e08201526101000193509091505180830381600087803b1515611a3d57600080fd5b6102c65a03f11515611a4e57600080fd5b50505060405180519250505b509a9950505050505050505050565b60008054819081908190600160a060020a031663f39ec1f7826040516020015260405160e060020a63ffffffff83160281527f43617368000000000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b1515611add57600080fd5b6102c65a03f11515611aee57600080fd5b5050506040518051935050600160a060020a0383166370a082313360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611b5057600080fd5b6102c65a03f11515611b6157600080fd5b50505060405180519250506000821115611cdf5760008054600160a060020a031690634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611bbe57600080fd5b6102c65a03f11515611bcf57600080fd5b5050506040518051915050600160a060020a03811663ec2389948433308660006040516020015260405160e060020a63ffffffff8716028152600160a060020a0394851660048201529284166024840152921660448201526064810191909152608401602060405180830381600087803b1515611c4b57600080fd5b6102c65a03f11515611c5c57600080fd5b50505060405180515050600160a060020a038316631baffe38338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611cc357600080fd5b6102c65a03f11515611cd457600080fd5b505050604051805150505b6001935050505090565b6000806000611cfd8c8c8c8c8c8c8a61233c565b9150811515611d0f5760019250611e96565b611d176127f7565b5a1015611d275760019250611e96565b611d308b6127d3565b60008054919250600160a060020a039091169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4372656174654f726465720000000000000000000000000000000000000000006004820152602401602060405180830381600087803b1515611da457600080fd5b6102c65a03f11515611db557600080fd5b50505060405180519050600160a060020a031663f79383288d83858b8f8f8d8d8d6000604051602001526040518a63ffffffff1660e060020a028152600401808a600160a060020a0316600160a060020a03168152602001896001811115611e1957fe5b60ff168152602080820199909952604080820198909852600160a060020a03909616606087015250608085019390935260a084019190915260c083015260e08201526101000193509091505180830381600087803b1515611e7957600080fd5b6102c65a03f11515611e8a57600080fd5b50505060405180519350505b50509998505050505050505050565b600080600080600080600060149054906101000a900460ff16151515611eca57600080fd5b6000805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055611f088d6127fe565b60008054919650600160a060020a039091169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4f726465727300000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b1515611f7c57600080fd5b6102c65a03f11515611f8d57600080fd5b5050506040518051945050600160a060020a038416637b6eaa65868e8e6000604051602001526040518463ffffffff1660e060020a02815260040180846001811115611fd557fe5b60ff16815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050602060405180830381600087803b151561201957600080fd5b6102c65a03f1151561202a57600080fd5b50505060405180518b97509350505b82158015906120485750600086115b80156120545750600087115b156123015783600160a060020a03166331d98b3f8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156120a857600080fd5b6102c65a03f115156120b957600080fd5b50505060405180519250600090508560018111156120d357fe5b146120e157888211156120e6565b888210155b156122f15783600160a060020a0316638925f9e98460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561213a57600080fd5b6102c65a03f1151561214b57600080fd5b5050506040518051915050600160a060020a038416633011e16a8d8d8560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156121bc57600080fd5b6102c65a03f115156121cd57600080fd5b5050506040518051505060008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f46696c6c4f7264657200000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561224657600080fd5b6102c65a03f1151561225757600080fd5b50505060405180519050600160a060020a0316631faf89958f85898c60006040516020015260405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401602060405180830381600087803b15156122cc57600080fd5b6102c65a03f115156122dd57600080fd5b5050506040518051905095508092506122f6565b600092505b600187039650612039565b821561230c57600095505b50506000805474ff00000000000000000000000000000000000000001916905550919a9950505050505050505050565b600080600080600080600060149054906101000a900460ff1615151561236157600080fd5b6000805474ff000000000000000000000000000000000000000019167401000000000000000000000000000000000000000017905561239f8c6127fe565b60008054919650600160a060020a039091169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4f726465727300000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561241357600080fd5b6102c65a03f1151561242457600080fd5b5050506040518051945050600160a060020a038416637b6eaa65868d8d6000604051602001526040518463ffffffff1660e060020a0281526004018084600181111561246c57fe5b60ff16815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050602060405180830381600087803b15156124b057600080fd5b6102c65a03f115156124c157600080fd5b50505060405180518a97509350505b82158015906124df5750600086115b80156124f257506124ee612821565b5a10155b156127995783600160a060020a03166331d98b3f8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561254657600080fd5b6102c65a03f1151561255757600080fd5b505050604051805192506000905085600181111561257157fe5b1461257f5787821115612584565b878210155b1561278f5783600160a060020a0316638925f9e98460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156125d857600080fd5b6102c65a03f115156125e957600080fd5b5050506040518051915050600160a060020a038416633011e16a8c8c8560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561265a57600080fd5b6102c65a03f1151561266b57600080fd5b5050506040518051505060008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f46696c6c4f7264657200000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b15156126e457600080fd5b6102c65a03f115156126f557600080fd5b50505060405180519050600160a060020a0316631faf89958e85898b60006040516020015260405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401602060405180830381600087803b151561276a57600080fd5b6102c65a03f1151561277b57600080fd5b505050604051805190509550809250612794565b600092505b6124d0565b82156127a457600095505b50506000805474ff00000000000000000000000000000000000000001916905550919998505050505050505050565b6000808260018111156127e257fe5b146127ee5760016127f1565b60005b92915050565b620aae6090565b60008082600181111561280d57fe5b146128195760006127f1565b506001919050565b621e8480905600a165627a7a723058200500e1a87e08b214e06bb4855347ffacaa09452fc18bdcb06206029873f1aecf0029
Deployed Bytecode
0x60606040526004361061008a5763ffffffff60e060020a6000350416630a9a877b811461008f57806315c64b61146100ca5780633018205f146100f6578063554de08c1461012557806392eefe9b14610155578063a127d74e14610188578063b1b12ef6146101b1578063ef01e5a3146101d7578063f0697887146101fd578063f2beaf5914610226575b600080fd5b6100b8600160a060020a036004351660243560443560643560843560a43560c43560e43561024c565b60405190815260200160405180910390f35b6100b860ff60043516600160a060020a036024351660443560643560843560a43560c43560e43561051e565b341561010157600080fd5b6101096107b7565b604051600160a060020a03909116815260200160405180910390f35b6100b860ff60043516600160a060020a036024351660443560643560843560a43560c43560e435610104356107c6565b341561016057600080fd5b610174600160a060020a0360043516610a98565b604051901515815260200160405180910390f35b6100b860ff60043516600160a060020a036024351660443560643560843560a43560c435610ae6565b6100b8600160a060020a036004351660243560443560643560843560a43560c435610db4565b6100b860ff60043516600160a060020a036024351660443560643560843560a43561104e565b6100b8600160a060020a036004351660243560443560643560843560a43560c43560e43561131a565b6100b8600160a060020a036004351660243560443560643560843560a43560c43561156d565b60008089600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561029857600080fd5b6102c65a03f115156102a957600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561030057600080fd5b6102c65a03f1151561031157600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561037157600080fd5b6102c65a03f1151561038257600080fd5b50505060405180519050151561039757600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156103ee57600080fd5b6102c65a03f115156103ff57600080fd5b50505060405180519050151561041457600080fd5b61041c6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561046657600080fd5b6102c65a03f1151561047757600080fd5b50505060405180519050151561048c57600080fd5b61049f3360018e8e8e8e8e8e8e8e6118cc565b92508b600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104e757600080fd5b6102c65a03f115156104f857600080fd5b505050604051805190505082935061050e611a69565b5050505098975050505050505050565b60008088600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561056a57600080fd5b6102c65a03f1151561057b57600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156105d257600080fd5b6102c65a03f115156105e357600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561064357600080fd5b6102c65a03f1151561065457600080fd5b50505060405180519050151561066957600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156106c057600080fd5b6102c65a03f115156106d157600080fd5b5050506040518051905015156106e657600080fd5b6106ee6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561073857600080fd5b6102c65a03f1151561074957600080fd5b50505060405180519050151561075e57600080fd5b61076f338d8d8d8d8d8d8d8d611ce9565b92508a600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156104e757600080fd5b600054600160a060020a031690565b60008089600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561081257600080fd5b6102c65a03f1151561082357600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561087a57600080fd5b6102c65a03f1151561088b57600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156108eb57600080fd5b6102c65a03f115156108fc57600080fd5b50505060405180519050151561091157600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561096857600080fd5b6102c65a03f1151561097957600080fd5b50505060405180519050151561098e57600080fd5b6109966117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156109e057600080fd5b6102c65a03f115156109f157600080fd5b505050604051805190501515610a0657600080fd5b610a18338e8e8e8e8e8e8e8e8e6118cc565b92508b600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610a6057600080fd5b6102c65a03f11515610a7157600080fd5b5050506040518051905050829350610a87611a69565b505050509998505050505050505050565b6000805433600160a060020a03908116911614610ab457600080fd5b5060008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b60008087600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b3257600080fd5b6102c65a03f11515610b4357600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b9a57600080fd5b6102c65a03f11515610bab57600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610c0b57600080fd5b6102c65a03f11515610c1c57600080fd5b505050604051805190501515610c3157600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610c8857600080fd5b6102c65a03f11515610c9957600080fd5b505050604051805190501515610cae57600080fd5b610cb66117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d0057600080fd5b6102c65a03f11515610d1157600080fd5b505050604051805190501515610d2657600080fd5b610d36338c8c8c8c8c8c8c611ea5565b925089600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d7e57600080fd5b6102c65a03f11515610d8f57600080fd5b5050506040518051905050829350610da5611a69565b50505050979650505050505050565b60008088600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610e0057600080fd5b6102c65a03f11515610e1157600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610e6857600080fd5b6102c65a03f11515610e7957600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ed957600080fd5b6102c65a03f11515610eea57600080fd5b505050604051805190501515610eff57600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f5657600080fd5b6102c65a03f11515610f6757600080fd5b505050604051805190501515610f7c57600080fd5b610f846117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610fce57600080fd5b6102c65a03f11515610fdf57600080fd5b505050604051805190501515610ff457600080fd5b6110063360018d8d8d8d8d8d8d611ce9565b92508a600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d7e57600080fd5b60008086600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561109a57600080fd5b6102c65a03f115156110ab57600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561110257600080fd5b6102c65a03f1151561111357600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561117357600080fd5b6102c65a03f1151561118457600080fd5b50505060405180519050151561119957600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111f057600080fd5b6102c65a03f1151561120157600080fd5b50505060405180519050151561121657600080fd5b61121e6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561126857600080fd5b6102c65a03f1151561127957600080fd5b50505060405180519050151561128e57600080fd5b61129d338b8b8b8b8b8b61233c565b925088600160a060020a031663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156112e557600080fd5b6102c65a03f115156112f657600080fd5b505050604051805190505082935061130c611a69565b505050509695505050505050565b60008089600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561136657600080fd5b6102c65a03f1151561137757600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113ce57600080fd5b6102c65a03f115156113df57600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561143f57600080fd5b6102c65a03f1151561145057600080fd5b50505060405180519050151561146557600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156114bc57600080fd5b6102c65a03f115156114cd57600080fd5b5050506040518051905015156114e257600080fd5b6114ea6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561153457600080fd5b6102c65a03f1151561154557600080fd5b50505060405180519050151561155a57600080fd5b61049f3360008e8e8e8e8e8e8e8e6118cc565b60008088600081600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156115b957600080fd5b6102c65a03f115156115ca57600080fd5b505050604051805160008054919350600160a060020a039091169150634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561162157600080fd5b6102c65a03f1151561163257600080fd5b50505060405180519050600160a060020a0316638cfb8f218260006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561169257600080fd5b6102c65a03f115156116a357600080fd5b5050506040518051905015156116b857600080fd5b80600160a060020a0316639f7e1bf68360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561170f57600080fd5b6102c65a03f1151561172057600080fd5b50505060405180519050151561173557600080fd5b61173d6117bf565b5060008054600160a060020a0316906322763ae190604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561178757600080fd5b6102c65a03f1151561179857600080fd5b5050506040518051905015156117ad57600080fd5b6110063360008d8d8d8d8d8d8d611ce9565b6000803411156118c65760008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f43617368000000000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561183857600080fd5b6102c65a03f1151561184957600080fd5b50505060405180519050600160a060020a0316634faa8a26343360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b15156118a957600080fd5b6125ee5a03f115156118ba57600080fd5b50505050604051805150505b50600190565b6000806118df8c8c8c8c8c8c8a8a611ea5565b90508015156118f15760019150611a5a565b60008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4372656174654f726465720000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561196057600080fd5b6102c65a03f1151561197157600080fd5b50505060405180519050600160a060020a031663f79383288d6119938e6127d3565b848b8f8f8d8d8d6000604051602001526040518a63ffffffff1660e060020a028152600401808a600160a060020a0316600160a060020a031681526020018960018111156119dd57fe5b60ff168152602080820199909952604080820198909852600160a060020a03909616606087015250608085019390935260a084019190915260c083015260e08201526101000193509091505180830381600087803b1515611a3d57600080fd5b6102c65a03f11515611a4e57600080fd5b50505060405180519250505b509a9950505050505050505050565b60008054819081908190600160a060020a031663f39ec1f7826040516020015260405160e060020a63ffffffff83160281527f43617368000000000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b1515611add57600080fd5b6102c65a03f11515611aee57600080fd5b5050506040518051935050600160a060020a0383166370a082313360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611b5057600080fd5b6102c65a03f11515611b6157600080fd5b50505060405180519250506000821115611cdf5760008054600160a060020a031690634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611bbe57600080fd5b6102c65a03f11515611bcf57600080fd5b5050506040518051915050600160a060020a03811663ec2389948433308660006040516020015260405160e060020a63ffffffff8716028152600160a060020a0394851660048201529284166024840152921660448201526064810191909152608401602060405180830381600087803b1515611c4b57600080fd5b6102c65a03f11515611c5c57600080fd5b50505060405180515050600160a060020a038316631baffe38338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611cc357600080fd5b6102c65a03f11515611cd457600080fd5b505050604051805150505b6001935050505090565b6000806000611cfd8c8c8c8c8c8c8a61233c565b9150811515611d0f5760019250611e96565b611d176127f7565b5a1015611d275760019250611e96565b611d308b6127d3565b60008054919250600160a060020a039091169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4372656174654f726465720000000000000000000000000000000000000000006004820152602401602060405180830381600087803b1515611da457600080fd5b6102c65a03f11515611db557600080fd5b50505060405180519050600160a060020a031663f79383288d83858b8f8f8d8d8d6000604051602001526040518a63ffffffff1660e060020a028152600401808a600160a060020a0316600160a060020a03168152602001896001811115611e1957fe5b60ff168152602080820199909952604080820198909852600160a060020a03909616606087015250608085019390935260a084019190915260c083015260e08201526101000193509091505180830381600087803b1515611e7957600080fd5b6102c65a03f11515611e8a57600080fd5b50505060405180519350505b50509998505050505050505050565b600080600080600080600060149054906101000a900460ff16151515611eca57600080fd5b6000805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055611f088d6127fe565b60008054919650600160a060020a039091169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4f726465727300000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b1515611f7c57600080fd5b6102c65a03f11515611f8d57600080fd5b5050506040518051945050600160a060020a038416637b6eaa65868e8e6000604051602001526040518463ffffffff1660e060020a02815260040180846001811115611fd557fe5b60ff16815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050602060405180830381600087803b151561201957600080fd5b6102c65a03f1151561202a57600080fd5b50505060405180518b97509350505b82158015906120485750600086115b80156120545750600087115b156123015783600160a060020a03166331d98b3f8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156120a857600080fd5b6102c65a03f115156120b957600080fd5b50505060405180519250600090508560018111156120d357fe5b146120e157888211156120e6565b888210155b156122f15783600160a060020a0316638925f9e98460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561213a57600080fd5b6102c65a03f1151561214b57600080fd5b5050506040518051915050600160a060020a038416633011e16a8d8d8560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156121bc57600080fd5b6102c65a03f115156121cd57600080fd5b5050506040518051505060008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f46696c6c4f7264657200000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561224657600080fd5b6102c65a03f1151561225757600080fd5b50505060405180519050600160a060020a0316631faf89958f85898c60006040516020015260405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401602060405180830381600087803b15156122cc57600080fd5b6102c65a03f115156122dd57600080fd5b5050506040518051905095508092506122f6565b600092505b600187039650612039565b821561230c57600095505b50506000805474ff00000000000000000000000000000000000000001916905550919a9950505050505050505050565b600080600080600080600060149054906101000a900460ff1615151561236157600080fd5b6000805474ff000000000000000000000000000000000000000019167401000000000000000000000000000000000000000017905561239f8c6127fe565b60008054919650600160a060020a039091169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4f726465727300000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561241357600080fd5b6102c65a03f1151561242457600080fd5b5050506040518051945050600160a060020a038416637b6eaa65868d8d6000604051602001526040518463ffffffff1660e060020a0281526004018084600181111561246c57fe5b60ff16815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050602060405180830381600087803b15156124b057600080fd5b6102c65a03f115156124c157600080fd5b50505060405180518a97509350505b82158015906124df5750600086115b80156124f257506124ee612821565b5a10155b156127995783600160a060020a03166331d98b3f8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561254657600080fd5b6102c65a03f1151561255757600080fd5b505050604051805192506000905085600181111561257157fe5b1461257f5787821115612584565b878210155b1561278f5783600160a060020a0316638925f9e98460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156125d857600080fd5b6102c65a03f115156125e957600080fd5b5050506040518051915050600160a060020a038416633011e16a8c8c8560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561265a57600080fd5b6102c65a03f1151561266b57600080fd5b5050506040518051505060008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f46696c6c4f7264657200000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b15156126e457600080fd5b6102c65a03f115156126f557600080fd5b50505060405180519050600160a060020a0316631faf89958e85898b60006040516020015260405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401602060405180830381600087803b151561276a57600080fd5b6102c65a03f1151561277b57600080fd5b505050604051805190509550809250612794565b600092505b6124d0565b82156127a457600095505b50506000805474ff00000000000000000000000000000000000000001916905550919998505050505050505050565b6000808260018111156127e257fe5b146127ee5760016127f1565b60005b92915050565b620aae6090565b60008082600181111561280d57fe5b146128195760006127f1565b506001919050565b621e8480905600a165627a7a723058200500e1a87e08b214e06bb4855347ffacaa09452fc18bdcb06206029873f1aecf0029
Swarm Source
bzzr://0500e1a87e08b214e06bb4855347ffacaa09452fc18bdcb06206029873f1aecf
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.