More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 15,737 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Cancel Order | 11548537 | 1321 days ago | IN | 0 ETH | 0.01039565 | ||||
Cancel Order | 11548537 | 1321 days ago | IN | 0 ETH | 0.01041335 | ||||
Cancel Order | 11548530 | 1321 days ago | IN | 0 ETH | 0.01249602 | ||||
Cancel Order | 11346455 | 1352 days ago | IN | 0 ETH | 0.00280401 | ||||
Cancel Order | 11346422 | 1352 days ago | IN | 0 ETH | 0.00278331 | ||||
Cancel Order | 11346422 | 1352 days ago | IN | 0 ETH | 0.00282348 | ||||
Cancel Order | 11346422 | 1352 days ago | IN | 0 ETH | 0.00282348 | ||||
Cancel Order | 11346422 | 1352 days ago | IN | 0 ETH | 0.00278331 | ||||
Cancel Order | 11346319 | 1352 days ago | IN | 0 ETH | 0.00298129 | ||||
Cancel Order | 11346317 | 1352 days ago | IN | 0 ETH | 0.00298129 | ||||
Cancel Order | 11346317 | 1352 days ago | IN | 0 ETH | 0.00296483 | ||||
Cancel Order | 11346317 | 1352 days ago | IN | 0 ETH | 0.00318992 | ||||
Cancel Order | 11346317 | 1352 days ago | IN | 0 ETH | 0.00296483 | ||||
Cancel Order | 11346317 | 1352 days ago | IN | 0 ETH | 0.00343057 | ||||
Cancel Order | 11346317 | 1352 days ago | IN | 0 ETH | 0.00382072 | ||||
Cancel Order | 11346317 | 1352 days ago | IN | 0 ETH | 0.00410152 | ||||
Cancel Order | 11303143 | 1359 days ago | IN | 0 ETH | 0.00829923 | ||||
Cancel Order | 11286319 | 1361 days ago | IN | 0 ETH | 0.00646473 | ||||
Cancel Order | 11286315 | 1361 days ago | IN | 0 ETH | 0.00623739 | ||||
Cancel Order | 11286314 | 1361 days ago | IN | 0 ETH | 0.00669675 | ||||
Cancel Order | 11286314 | 1361 days ago | IN | 0 ETH | 0.00669675 | ||||
Cancel Order | 11286292 | 1361 days ago | IN | 0 ETH | 0.00678837 | ||||
Cancel Order | 11286287 | 1361 days ago | IN | 0 ETH | 0.00637275 | ||||
Cancel Order | 11286286 | 1361 days ago | IN | 0 ETH | 0.00637275 | ||||
Cancel Order | 11286285 | 1361 days ago | IN | 0 ETH | 0.00646401 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
CancelOrder
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 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 ICancelOrder { } contract CancelOrder is CashAutoConverter, ReentrancyGuard, ICancelOrder { /** * @dev Cancellation: cancels an order, if a bid refunds money, if an ask returns shares * @return true if successful; throw on failure */ function cancelOrder(bytes32 _orderId) nonReentrant convertToAndFromCash external returns (bool) { require(_orderId != bytes32(0)); // Look up the order the sender wants to cancel IOrders _orders = IOrders(controller.lookup("Orders")); uint256 _moneyEscrowed = _orders.getOrderMoneyEscrowed(_orderId); uint256 _sharesEscrowed = _orders.getOrderSharesEscrowed(_orderId); Order.Types _type = _orders.getOrderType(_orderId); IMarket _market = _orders.getMarket(_orderId); uint256 _outcome = _orders.getOutcome(_orderId); // Check that the order ID is correct and that the sender owns the order require(msg.sender == _orders.getOrderCreator(_orderId)); // Clear the order first _orders.removeOrder(_orderId); refundOrder(msg.sender, _type, _sharesEscrowed, _moneyEscrowed, _market, _outcome); _orders.decrementTotalEscrowed(_market, _moneyEscrowed); _market.assertBalances(); controller.getAugur().logOrderCanceled(_market.getUniverse(), _market.getShareToken(_outcome), msg.sender, _orderId, _type, _moneyEscrowed, _sharesEscrowed); return true; } /** * @dev Issue refunds */ function refundOrder(address _sender, Order.Types _type, uint256 _sharesEscrowed, uint256 _moneyEscrowed, IMarket _market, uint256 _outcome) private returns (bool) { if (_sharesEscrowed > 0) { // Return to user sharesEscrowed that weren't filled yet for all outcomes except the order outcome if (_type == Order.Types.Bid) { for (uint256 _i = 0; _i < _market.getNumberOfOutcomes(); ++_i) { if (_i != _outcome) { _market.getShareToken(_i).trustedCancelOrderTransfer(_market, _sender, _sharesEscrowed); } } // Shares refund if has shares escrowed for this outcome } else { _market.getShareToken(_outcome).trustedCancelOrderTransfer(_market, _sender, _sharesEscrowed); } } // Return to user moneyEscrowed that wasn't filled yet if (_moneyEscrowed > 0) { ICash _denominationToken = _market.getDenominationToken(); require(_denominationToken.transferFrom(_market, _sender, _moneyEscrowed)); } return true; } } 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 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 Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"getController","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_orderId","type":"bytes32"}],"name":"cancelOrder","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
606060405260008054600160a060020a033316600160a860020a0319909116179055610f69806100306000396000f30060606040526004361061003d5763ffffffff60e060020a6000350416633018205f81146100425780637489ec231461007157806392eefe9b1461009b575b600080fd5b341561004d57600080fd5b6100556100ba565b604051600160a060020a03909116815260200160405180910390f35b341561007c57600080fd5b6100876004356100c9565b604051901515815260200160405180910390f35b34156100a657600080fd5b610087600160a060020a03600435166107d5565b600054600160a060020a031690565b60008060008060008060008060149054906101000a900460ff161515156100ef57600080fd5b6000805474ff000000000000000000000000000000000000000019167401000000000000000000000000000000000000000017905561012c610823565b5087151561013957600080fd5b60008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4f726465727300000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b15156101a857600080fd5b6102c65a03f115156101b957600080fd5b5050506040518051965050600160a060020a038616634a1a342b8960006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561021357600080fd5b6102c65a03f1151561022457600080fd5b5050506040518051955050600160a060020a03861663ebead05f8960006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561027e57600080fd5b6102c65a03f1151561028f57600080fd5b5050506040518051945050600160a060020a03861663cf3573648960006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156102e957600080fd5b6102c65a03f115156102fa57600080fd5b5050506040518051935050600160a060020a03861663c3c95c7b8960006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561035457600080fd5b6102c65a03f1151561036557600080fd5b5050506040518051925050600160a060020a038616635d1a3b828960006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156103bf57600080fd5b6102c65a03f115156103d057600080fd5b5050506040518051915050600160a060020a03861663e7d80c708960006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561042a57600080fd5b6102c65a03f1151561043b57600080fd5b50505060405180519050600160a060020a031633600160a060020a031614151561046457600080fd5b85600160a060020a031663fde996688960006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156104b357600080fd5b6102c65a03f115156104c457600080fd5b50505060405180519050506104dd338486888686610930565b5085600160a060020a03166395ede032838760006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561053b57600080fd5b6102c65a03f1151561054c57600080fd5b50505060405180515050600160a060020a03821663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561059c57600080fd5b6102c65a03f115156105ad57600080fd5b5050506040518051505060008054600160a060020a031690634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561060057600080fd5b6102c65a03f1151561061157600080fd5b50505060405180519050600160a060020a0316636e1636bb83600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561066f57600080fd5b6102c65a03f1151561068057600080fd5b5050506040518051905084600160a060020a03166365957bf58560006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156106d957600080fd5b6102c65a03f115156106ea57600080fd5b50505060405180519050338c888b8b60006040516020015260405160e060020a63ffffffff8a16028152600160a060020a038089166004830190815288821660248401529087166044830152606482018690529060840184600181111561074d57fe5b60ff168152602001838152602001828152602001975050505050505050602060405180830381600087803b151561078357600080fd5b6102c65a03f1151561079457600080fd5b50505060405180515060019750506107aa610cbd565b50506000805474ff000000000000000000000000000000000000000019169055509395945050505050565b6000805433600160a060020a039081169116146107f157600080fd5b5060008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b60008034111561092a5760008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f43617368000000000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561089c57600080fd5b6102c65a03f115156108ad57600080fd5b50505060405180519050600160a060020a0316634faa8a26343360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b151561090d57600080fd5b6125ee5a03f1151561091e57600080fd5b50505050604051805150505b50600190565b600080600080871115610bb357600088600181111561094b57fe5b1415610ac457600091505b84600160a060020a03166327ce5b8c6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561099c57600080fd5b6102c65a03f115156109ad57600080fd5b50505060405180519050821015610abf57818414610ab45784600160a060020a03166365957bf58360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610a1457600080fd5b6102c65a03f11515610a2557600080fd5b50505060405180519050600160a060020a0316637b30074d868b8a60006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610a9857600080fd5b6102c65a03f11515610aa957600080fd5b505050604051805150505b816001019150610956565b610bb3565b84600160a060020a03166365957bf58560006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610b1357600080fd5b6102c65a03f11515610b2457600080fd5b50505060405180519050600160a060020a0316637b30074d868b8a60006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610b9757600080fd5b6102c65a03f11515610ba857600080fd5b505050604051805150505b6000861115610cae5784600160a060020a031663df2a29da6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610c0257600080fd5b6102c65a03f11515610c1357600080fd5b5050506040518051915050600160a060020a0381166323b872dd868b8960006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c8857600080fd5b6102c65a03f11515610c9957600080fd5b505050604051805190501515610cae57600080fd5b50600198975050505050505050565b60008054819081908190600160a060020a031663f39ec1f7826040516020015260405160e060020a63ffffffff83160281527f43617368000000000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b1515610d3157600080fd5b6102c65a03f11515610d4257600080fd5b5050506040518051935050600160a060020a0383166370a082313360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610da457600080fd5b6102c65a03f11515610db557600080fd5b50505060405180519250506000821115610f335760008054600160a060020a031690634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610e1257600080fd5b6102c65a03f11515610e2357600080fd5b5050506040518051915050600160a060020a03811663ec2389948433308660006040516020015260405160e060020a63ffffffff8716028152600160a060020a0394851660048201529284166024840152921660448201526064810191909152608401602060405180830381600087803b1515610e9f57600080fd5b6102c65a03f11515610eb057600080fd5b50505060405180515050600160a060020a038316631baffe38338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610f1757600080fd5b6102c65a03f11515610f2857600080fd5b505050604051805150505b60019350505050905600a165627a7a72305820fbc3b7ca2fbd60ae80e815f9c1beb937018a9a70d918750592d774198c5138e40029
Deployed Bytecode
0x60606040526004361061003d5763ffffffff60e060020a6000350416633018205f81146100425780637489ec231461007157806392eefe9b1461009b575b600080fd5b341561004d57600080fd5b6100556100ba565b604051600160a060020a03909116815260200160405180910390f35b341561007c57600080fd5b6100876004356100c9565b604051901515815260200160405180910390f35b34156100a657600080fd5b610087600160a060020a03600435166107d5565b600054600160a060020a031690565b60008060008060008060008060149054906101000a900460ff161515156100ef57600080fd5b6000805474ff000000000000000000000000000000000000000019167401000000000000000000000000000000000000000017905561012c610823565b5087151561013957600080fd5b60008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f4f726465727300000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b15156101a857600080fd5b6102c65a03f115156101b957600080fd5b5050506040518051965050600160a060020a038616634a1a342b8960006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561021357600080fd5b6102c65a03f1151561022457600080fd5b5050506040518051955050600160a060020a03861663ebead05f8960006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561027e57600080fd5b6102c65a03f1151561028f57600080fd5b5050506040518051945050600160a060020a03861663cf3573648960006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156102e957600080fd5b6102c65a03f115156102fa57600080fd5b5050506040518051935050600160a060020a03861663c3c95c7b8960006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561035457600080fd5b6102c65a03f1151561036557600080fd5b5050506040518051925050600160a060020a038616635d1a3b828960006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156103bf57600080fd5b6102c65a03f115156103d057600080fd5b5050506040518051915050600160a060020a03861663e7d80c708960006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561042a57600080fd5b6102c65a03f1151561043b57600080fd5b50505060405180519050600160a060020a031633600160a060020a031614151561046457600080fd5b85600160a060020a031663fde996688960006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156104b357600080fd5b6102c65a03f115156104c457600080fd5b50505060405180519050506104dd338486888686610930565b5085600160a060020a03166395ede032838760006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561053b57600080fd5b6102c65a03f1151561054c57600080fd5b50505060405180515050600160a060020a03821663a0695f246000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561059c57600080fd5b6102c65a03f115156105ad57600080fd5b5050506040518051505060008054600160a060020a031690634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561060057600080fd5b6102c65a03f1151561061157600080fd5b50505060405180519050600160a060020a0316636e1636bb83600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561066f57600080fd5b6102c65a03f1151561068057600080fd5b5050506040518051905084600160a060020a03166365957bf58560006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156106d957600080fd5b6102c65a03f115156106ea57600080fd5b50505060405180519050338c888b8b60006040516020015260405160e060020a63ffffffff8a16028152600160a060020a038089166004830190815288821660248401529087166044830152606482018690529060840184600181111561074d57fe5b60ff168152602001838152602001828152602001975050505050505050602060405180830381600087803b151561078357600080fd5b6102c65a03f1151561079457600080fd5b50505060405180515060019750506107aa610cbd565b50506000805474ff000000000000000000000000000000000000000019169055509395945050505050565b6000805433600160a060020a039081169116146107f157600080fd5b5060008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b60008034111561092a5760008054600160a060020a03169063f39ec1f7906040516020015260405160e060020a63ffffffff83160281527f43617368000000000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b151561089c57600080fd5b6102c65a03f115156108ad57600080fd5b50505060405180519050600160a060020a0316634faa8a26343360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b151561090d57600080fd5b6125ee5a03f1151561091e57600080fd5b50505050604051805150505b50600190565b600080600080871115610bb357600088600181111561094b57fe5b1415610ac457600091505b84600160a060020a03166327ce5b8c6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561099c57600080fd5b6102c65a03f115156109ad57600080fd5b50505060405180519050821015610abf57818414610ab45784600160a060020a03166365957bf58360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610a1457600080fd5b6102c65a03f11515610a2557600080fd5b50505060405180519050600160a060020a0316637b30074d868b8a60006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610a9857600080fd5b6102c65a03f11515610aa957600080fd5b505050604051805150505b816001019150610956565b610bb3565b84600160a060020a03166365957bf58560006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610b1357600080fd5b6102c65a03f11515610b2457600080fd5b50505060405180519050600160a060020a0316637b30074d868b8a60006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610b9757600080fd5b6102c65a03f11515610ba857600080fd5b505050604051805150505b6000861115610cae5784600160a060020a031663df2a29da6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610c0257600080fd5b6102c65a03f11515610c1357600080fd5b5050506040518051915050600160a060020a0381166323b872dd868b8960006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610c8857600080fd5b6102c65a03f11515610c9957600080fd5b505050604051805190501515610cae57600080fd5b50600198975050505050505050565b60008054819081908190600160a060020a031663f39ec1f7826040516020015260405160e060020a63ffffffff83160281527f43617368000000000000000000000000000000000000000000000000000000006004820152602401602060405180830381600087803b1515610d3157600080fd5b6102c65a03f11515610d4257600080fd5b5050506040518051935050600160a060020a0383166370a082313360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610da457600080fd5b6102c65a03f11515610db557600080fd5b50505060405180519250506000821115610f335760008054600160a060020a031690634e94c82990604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610e1257600080fd5b6102c65a03f11515610e2357600080fd5b5050506040518051915050600160a060020a03811663ec2389948433308660006040516020015260405160e060020a63ffffffff8716028152600160a060020a0394851660048201529284166024840152921660448201526064810191909152608401602060405180830381600087803b1515610e9f57600080fd5b6102c65a03f11515610eb057600080fd5b50505060405180515050600160a060020a038316631baffe38338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610f1757600080fd5b6102c65a03f11515610f2857600080fd5b505050604051805150505b60019350505050905600a165627a7a72305820fbc3b7ca2fbd60ae80e815f9c1beb937018a9a70d918750592d774198c5138e40029
Swarm Source
bzzr://fbc3b7ca2fbd60ae80e815f9c1beb937018a9a70d918750592d774198c5138e4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.