Source Code
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| 0xe9718245eb56ad5b40502c599fa1b0f007097bb9fb6462fb1418adda2631ec19 | Public Trade Wit... | (pending) | 8 hrs ago | IN | 0.022 ETH | (Pending) | |||
| Public Fill Best... | 22006262 | 350 days ago | IN | 0.7695 ETH | 0.00040514 | ||||
| Public Fill Best... | 22006198 | 350 days ago | IN | 0.95 ETH | 0.00039231 | ||||
| Public Fill Best... | 22006111 | 350 days ago | IN | 0.45 ETH | 0.00040196 | ||||
| Public Fill Best... | 22006103 | 350 days ago | IN | 0.90912 ETH | 0.00038129 | ||||
| Public Fill Best... | 22006042 | 350 days ago | IN | 0.7 ETH | 0.00086753 | ||||
| Public Fill Best... | 21984652 | 353 days ago | IN | 0.164 ETH | 0.00048519 | ||||
| Public Fill Best... | 21984640 | 353 days ago | IN | 0.152 ETH | 0.00041817 | ||||
| Public Fill Best... | 21902673 | 365 days ago | IN | 0.025 ETH | 0.00038782 | ||||
| Public Fill Best... | 21902658 | 365 days ago | IN | 0.05 ETH | 0.0004121 | ||||
| Public Fill Best... | 21902471 | 365 days ago | IN | 0 ETH | 0.00031515 | ||||
| Public Fill Best... | 21902452 | 365 days ago | IN | 0.1056 ETH | 0.00054534 | ||||
| Public Fill Best... | 21902420 | 365 days ago | IN | 0.075 ETH | 0.00050258 | ||||
| Public Fill Best... | 21902419 | 365 days ago | IN | 0.025 ETH | 0.00061951 | ||||
| Public Fill Best... | 21902347 | 365 days ago | IN | 0.0295 ETH | 0.00093239 | ||||
| Public Fill Best... | 21902347 | 365 days ago | IN | 0.054 ETH | 0.00047178 | ||||
| Public Fill Best... | 21902292 | 365 days ago | IN | 0.06 ETH | 0.00049729 | ||||
| Public Fill Best... | 21902248 | 365 days ago | IN | 0.18 ETH | 0.00029666 | ||||
| Public Fill Best... | 21902229 | 365 days ago | IN | 0.4617 ETH | 0.00075609 | ||||
| Public Fill Best... | 21902191 | 365 days ago | IN | 0.025 ETH | 0.00046135 | ||||
| Public Fill Best... | 21902174 | 365 days ago | IN | 0.04 ETH | 0.00050365 | ||||
| Public Fill Best... | 20336475 | 583 days ago | IN | 0 ETH | 0.00984355 | ||||
| Public Fill Best... | 20336297 | 583 days ago | IN | 0 ETH | 0.00392176 | ||||
| Public Fill Best... | 12805334 | 1687 days ago | IN | 0.46 ETH | 0.00561429 | ||||
| Public Fill Best... | 12804539 | 1687 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 | 350 days ago | 0.7695 ETH | ||||
| Deposit Ether Fo... | 22006198 | 350 days ago | 0.95 ETH | ||||
| Deposit Ether Fo... | 22006111 | 350 days ago | 0.45 ETH | ||||
| Deposit Ether Fo... | 22006103 | 350 days ago | 0.90912 ETH | ||||
| Deposit Ether Fo... | 22006042 | 350 days ago | 0.7 ETH | ||||
| Deposit Ether Fo... | 21984652 | 353 days ago | 0.164 ETH | ||||
| Deposit Ether Fo... | 21984640 | 353 days ago | 0.152 ETH | ||||
| Deposit Ether Fo... | 21902673 | 365 days ago | 0.025 ETH | ||||
| Deposit Ether Fo... | 21902658 | 365 days ago | 0.05 ETH | ||||
| Deposit Ether Fo... | 21902452 | 365 days ago | 0.1056 ETH | ||||
| Deposit Ether Fo... | 21902420 | 365 days ago | 0.075 ETH | ||||
| Deposit Ether Fo... | 21902419 | 365 days ago | 0.025 ETH | ||||
| Deposit Ether Fo... | 21902347 | 365 days ago | 0.0295 ETH | ||||
| Deposit Ether Fo... | 21902347 | 365 days ago | 0.054 ETH | ||||
| Deposit Ether Fo... | 21902292 | 365 days ago | 0.06 ETH | ||||
| Deposit Ether Fo... | 21902248 | 365 days ago | 0.18 ETH | ||||
| Deposit Ether Fo... | 21902229 | 365 days ago | 0.4617 ETH | ||||
| Deposit Ether Fo... | 21902191 | 365 days ago | 0.025 ETH | ||||
| Deposit Ether Fo... | 21902174 | 365 days ago | 0.04 ETH | ||||
| - | 12805334 | 1687 days ago | 0.46 ETH | ||||
| - | 12804539 | 1687 days ago | 0.6532 ETH | ||||
| - | 12603407 | 1718 days ago | 2.983 ETH | ||||
| - | 12603391 | 1718 days ago | 0.9282 ETH | ||||
| - | 12603365 | 1718 days ago | 0.1071 ETH | ||||
| - | 12603341 | 1718 days ago | 0.0779 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
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
Net Worth in USD
$0.00
Net Worth in ETH
0
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.