Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ReputationToken
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-10 */ 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 DelegationTarget is Controlled { bytes32 public controllerLookupName; } 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; } } 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 BasicToken is ERC20Basic { using SafeMathUint256 for uint256; uint256 internal supply; mapping(address => uint256) internal balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns(bool) { return internalTransfer(msg.sender, _to, _value); } /** * @dev allows internal token transfers * @param _from The source address * @param _to The destination address */ function internalTransfer(address _from, address _to, uint256 _value) internal returns (bool) { balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(_from, _to, _value); onTokenTransfer(_from, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } function totalSupply() public view returns (uint256) { return supply; } // Subclasses of this token generally want to send additional logs through the centralized Augur log emitter contract function onTokenTransfer(address _from, address _to, uint256 _value) internal returns (bool); } 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 StandardToken is ERC20, BasicToken { using SafeMathUint256 for uint256; // Approvals of this amount are simply considered an everlasting approval which is not decremented when transfers occur uint256 public constant ETERNAL_APPROVAL_VALUE = 2 ** 256 - 1; mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amout of tokens to be transfered */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { uint256 _allowance = allowed[_from][msg.sender]; if (_allowance != ETERNAL_APPROVAL_VALUE) { allowed[_from][msg.sender] = _allowance.sub(_value); } internalTransfer(_from, _to, _value); return true; } /** * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { approveInternal(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifing the amount of tokens still avaible for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * Approve should be called when allowed[_spender] == 0. To increment allowed value is better to use this function to avoid 2 calls (and wait until the first transaction is mined) * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { approveInternal(msg.sender, _spender, allowed[msg.sender][_spender].add(_addedValue)); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement allowed value is better to use this function to avoid 2 calls (and wait until the first transaction is mined) * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { approveInternal(msg.sender, _spender, 0); } else { approveInternal(msg.sender, _spender, oldValue.sub(_subtractedValue)); } return true; } function approveInternal(address _owner, address _spender, uint256 _value) internal returns (bool) { allowed[_owner][_spender] = _value; Approval(_owner, _spender, _value); return true; } } contract VariableSupplyToken is StandardToken { using SafeMathUint256 for uint256; event Mint(address indexed target, uint256 value); event Burn(address indexed target, uint256 value); /** * @dev mint tokens for a specified address * @param _target The address to mint tokens for. * @param _amount The amount to be minted. */ function mint(address _target, uint256 _amount) internal returns (bool) { balances[_target] = balances[_target].add(_amount); supply = supply.add(_amount); Mint(_target, _amount); onMint(_target, _amount); return true; } /** * @dev burn tokens belonging to a specified address * @param _target The address to burn tokens for. * @param _amount The amount to be burned. */ function burn(address _target, uint256 _amount) internal returns (bool) { balances[_target] = balances[_target].sub(_amount); supply = supply.sub(_amount); Burn(_target, _amount); onBurn(_target, _amount); return true; } // Subclasses of this token may want to send additional logs through the centralized Augur log emitter contract function onMint(address, uint256) internal returns (bool); // Subclasses of this token may want to send additional logs through the centralized Augur log emitter contract function onBurn(address, uint256) internal 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); } library Reporting { uint256 private constant DESIGNATED_REPORTING_DURATION_SECONDS = 3 days; uint256 private constant DISPUTE_ROUND_DURATION_SECONDS = 7 days; uint256 private constant CLAIM_PROCEEDS_WAIT_TIME = 3 days; uint256 private constant FORK_DURATION_SECONDS = 60 days; uint256 private constant INITIAL_REP_SUPPLY = 11 * 10 ** 6 * 10 ** 18; // 11 Million REP uint256 private constant DEFAULT_VALIDITY_BOND = 1 ether / 100; uint256 private constant VALIDITY_BOND_FLOOR = 1 ether / 100; uint256 private constant DEFAULT_REPORTING_FEE_DIVISOR = 100; // 1% fees uint256 private constant MAXIMUM_REPORTING_FEE_DIVISOR = 10000; // Minimum .01% fees uint256 private constant MINIMUM_REPORTING_FEE_DIVISOR = 3; // Maximum 33.3~% fees. Note than anything less than a value of 2 here will likely result in bugs such as divide by 0 cases. uint256 private constant TARGET_INVALID_MARKETS_DIVISOR = 100; // 1% of markets are expected to be invalid uint256 private constant TARGET_INCORRECT_DESIGNATED_REPORT_MARKETS_DIVISOR = 100; // 1% of markets are expected to have an incorrect designate report uint256 private constant TARGET_DESIGNATED_REPORT_NO_SHOWS_DIVISOR = 100; // 1% of markets are expected to have an incorrect designate report uint256 private constant TARGET_REP_MARKET_CAP_MULTIPLIER = 15; // We multiply and divide by constants since we want to multiply by a fractional amount (7.5) uint256 private constant TARGET_REP_MARKET_CAP_DIVISOR = 2; uint256 private constant FORK_MIGRATION_PERCENTAGE_BONUS_DIVISOR = 20; // 5% bonus to any REP migrated during a fork function getDesignatedReportingDurationSeconds() internal pure returns (uint256) { return DESIGNATED_REPORTING_DURATION_SECONDS; } function getDisputeRoundDurationSeconds() internal pure returns (uint256) { return DISPUTE_ROUND_DURATION_SECONDS; } function getClaimTradingProceedsWaitTime() internal pure returns (uint256) { return CLAIM_PROCEEDS_WAIT_TIME; } function getForkDurationSeconds() internal pure returns (uint256) { return FORK_DURATION_SECONDS; } function getDefaultValidityBond() internal pure returns (uint256) { return DEFAULT_VALIDITY_BOND; } function getValidityBondFloor() internal pure returns (uint256) { return VALIDITY_BOND_FLOOR; } function getTargetInvalidMarketsDivisor() internal pure returns (uint256) { return TARGET_INVALID_MARKETS_DIVISOR; } function getTargetIncorrectDesignatedReportMarketsDivisor() internal pure returns (uint256) { return TARGET_INCORRECT_DESIGNATED_REPORT_MARKETS_DIVISOR; } function getTargetDesignatedReportNoShowsDivisor() internal pure returns (uint256) { return TARGET_DESIGNATED_REPORT_NO_SHOWS_DIVISOR; } function getTargetRepMarketCapMultiplier() internal pure returns (uint256) { return TARGET_REP_MARKET_CAP_MULTIPLIER; } function getTargetRepMarketCapDivisor() internal pure returns (uint256) { return TARGET_REP_MARKET_CAP_DIVISOR; } function getForkMigrationPercentageBonusDivisor() internal pure returns (uint256) { return FORK_MIGRATION_PERCENTAGE_BONUS_DIVISOR; } function getMaximumReportingFeeDivisor() internal pure returns (uint256) { return MAXIMUM_REPORTING_FEE_DIVISOR; } function getMinimumReportingFeeDivisor() internal pure returns (uint256) { return MINIMUM_REPORTING_FEE_DIVISOR; } function getDefaultReportingFeeDivisor() internal pure returns (uint256) { return DEFAULT_REPORTING_FEE_DIVISOR; } function getInitialREPSupply() internal pure returns (uint256) { return INITIAL_REP_SUPPLY; } } contract ReputationToken is DelegationTarget, ITyped, Initializable, VariableSupplyToken, IReputationToken { using SafeMathUint256 for uint256; string constant public name = "Reputation"; string constant public symbol = "REP"; uint8 constant public decimals = 18; IUniverse private universe; uint256 private totalMigrated; mapping(address => uint256) migratedToSibling; uint256 private parentTotalTheoreticalSupply; uint256 private totalTheoreticalSupply; // Auto migration related state bool private isMigratingFromLegacy; uint256 private targetSupply; /** * @dev modifier to allow actions only when the contract IS paused */ modifier whenMigratingFromLegacy() { require(isMigratingFromLegacy); _; } /** * @dev modifier to allow actions only when the contract IS paused */ modifier whenNotMigratingFromLegacy() { require(!isMigratingFromLegacy); _; } function initialize(IUniverse _universe) public onlyInGoodTimes beforeInitialized returns (bool) { endInitialization(); require(_universe != address(0)); universe = _universe; updateParentTotalTheoreticalSupply(); ERC20 _legacyRepToken = getLegacyRepToken(); // Initialize migration related state. If this is Genesis universe REP the balances from the Legacy contract must be migrated before we enable usage isMigratingFromLegacy = _universe.getParentUniverse() == IUniverse(0); targetSupply = _legacyRepToken.totalSupply(); return true; } function migrateOutByPayout(uint256[] _payoutNumerators, bool _invalid, uint256 _attotokens) public onlyInGoodTimes whenNotMigratingFromLegacy afterInitialized returns (bool) { require(_attotokens > 0); IUniverse _destinationUniverse = universe.createChildUniverse(_payoutNumerators, _invalid); IReputationToken _destination = _destinationUniverse.getReputationToken(); burn(msg.sender, _attotokens); _destination.migrateIn(msg.sender, _attotokens); return true; } function migrateOut(IReputationToken _destination, uint256 _attotokens) public onlyInGoodTimes whenNotMigratingFromLegacy afterInitialized returns (bool) { require(_attotokens > 0); assertReputationTokenIsLegitSibling(_destination); burn(msg.sender, _attotokens); _destination.migrateIn(msg.sender, _attotokens); return true; } function migrateIn(address _reporter, uint256 _attotokens) public onlyInGoodTimes whenNotMigratingFromLegacy afterInitialized returns (bool) { IUniverse _parentUniverse = universe.getParentUniverse(); require(ReputationToken(msg.sender) == _parentUniverse.getReputationToken()); mint(_reporter, _attotokens); totalMigrated += _attotokens; // Award a bonus if migration is done before the fork period is over, even if it has finalized if (controller.getTimestamp() < _parentUniverse.getForkEndTime()) { uint256 _bonus = _attotokens.div(Reporting.getForkMigrationPercentageBonusDivisor()); mint(_reporter, _bonus); totalTheoreticalSupply += _bonus; } // Update the fork tenative winner and finalize if we can if (!_parentUniverse.getForkingMarket().isFinalized()) { _parentUniverse.updateTentativeWinningChildUniverse(universe.getParentPayoutDistributionHash()); } return true; } function mintForReportingParticipant(uint256 _amountMigrated) public onlyInGoodTimes whenNotMigratingFromLegacy afterInitialized returns (bool) { IUniverse _parentUniverse = universe.getParentUniverse(); IReportingParticipant _reportingParticipant = IReportingParticipant(msg.sender); require(_parentUniverse.isContainerForReportingParticipant(_reportingParticipant)); uint256 _bonus = _amountMigrated.div(2); mint(_reportingParticipant, _bonus); totalTheoreticalSupply += _bonus; return true; } function transfer(address _to, uint _value) public whenNotMigratingFromLegacy returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) public whenNotMigratingFromLegacy returns (bool) { return super.transferFrom(_from, _to, _value); } function trustedUniverseTransfer(address _source, address _destination, uint256 _attotokens) public onlyInGoodTimes whenNotMigratingFromLegacy afterInitialized returns (bool) { require(IUniverse(msg.sender) == universe); return internalTransfer(_source, _destination, _attotokens); } function trustedMarketTransfer(address _source, address _destination, uint256 _attotokens) public onlyInGoodTimes whenNotMigratingFromLegacy afterInitialized returns (bool) { require(universe.isContainerForMarket(IMarket(msg.sender))); return internalTransfer(_source, _destination, _attotokens); } function trustedReportingParticipantTransfer(address _source, address _destination, uint256 _attotokens) public onlyInGoodTimes whenNotMigratingFromLegacy afterInitialized returns (bool) { require(universe.isContainerForReportingParticipant(IReportingParticipant(msg.sender))); return internalTransfer(_source, _destination, _attotokens); } function trustedFeeWindowTransfer(address _source, address _destination, uint256 _attotokens) public onlyInGoodTimes whenNotMigratingFromLegacy afterInitialized returns (bool) { require(universe.isContainerForFeeWindow(IFeeWindow(msg.sender))); return internalTransfer(_source, _destination, _attotokens); } function assertReputationTokenIsLegitSibling(IReputationToken _shadyReputationToken) private view returns (bool) { IUniverse _shadyUniverse = _shadyReputationToken.getUniverse(); require(universe.isParentOf(_shadyUniverse)); IUniverse _legitUniverse = _shadyUniverse; require(_legitUniverse.getReputationToken() == _shadyReputationToken); return true; } function getTypeName() public view returns (bytes32) { return "ReputationToken"; } function getUniverse() public view returns (IUniverse) { return universe; } function getTotalMigrated() public view returns (uint256) { return totalMigrated; } function getLegacyRepToken() public view returns (ERC20) { return ERC20(controller.lookup("LegacyReputationToken")); } function updateSiblingMigrationTotal(IReputationToken _token) public whenNotMigratingFromLegacy returns (bool) { require(_token != this); IUniverse _shadyUniverse = _token.getUniverse(); require(_token == universe.getParentUniverse().getChildUniverse(_shadyUniverse.getParentPayoutDistributionHash()).getReputationToken()); totalTheoreticalSupply += migratedToSibling[_token]; migratedToSibling[_token] = _token.getTotalMigrated(); totalTheoreticalSupply -= migratedToSibling[_token]; return true; } function updateParentTotalTheoreticalSupply() public whenNotMigratingFromLegacy returns (bool) { IUniverse _parentUniverse = universe.getParentUniverse(); totalTheoreticalSupply -= parentTotalTheoreticalSupply; if (_parentUniverse == IUniverse(0)) { parentTotalTheoreticalSupply = Reporting.getInitialREPSupply(); } else { parentTotalTheoreticalSupply = _parentUniverse.getReputationToken().getTotalTheoreticalSupply(); } totalTheoreticalSupply += parentTotalTheoreticalSupply; return true; } function getTotalTheoreticalSupply() public view returns (uint256) { return totalTheoreticalSupply; } function onTokenTransfer(address _from, address _to, uint256 _value) internal returns (bool) { controller.getAugur().logReputationTokensTransferred(universe, _from, _to, _value); return true; } function onMint(address _target, uint256 _amount) internal returns (bool) { controller.getAugur().logReputationTokenMinted(universe, _target, _amount); return true; } function onBurn(address _target, uint256 _amount) internal returns (bool) { controller.getAugur().logReputationTokenBurned(universe, _target, _amount); return true; } /** * @dev Copies the balance of a batch of addresses from the legacy contract * @param _holders Array of addresses to migrate balance * @return True if operation was completed */ function migrateBalancesFromLegacyRep(address[] _holders) public onlyInGoodTimes whenMigratingFromLegacy afterInitialized returns (bool) { ERC20 _legacyRepToken = getLegacyRepToken(); for (uint256 i = 0; i < _holders.length; i++) { migrateBalanceFromLegacyRep(_holders[i], _legacyRepToken); } return true; } /** * @dev Copies the balance of a single addresses from the legacy contract * @param _holder Address to migrate balance * @return True if balance was copied, false if was already copied or address had no balance */ function migrateBalanceFromLegacyRep(address _holder, ERC20 _legacyRepToken) private onlyInGoodTimes whenMigratingFromLegacy afterInitialized returns (bool) { if (balances[_holder] > 0) { return false; // Already copied, move on } uint256 amount = _legacyRepToken.balanceOf(_holder); if (amount == 0) { return false; // Has no balance in legacy contract, move on } mint(_holder, amount); if (targetSupply == supply) { isMigratingFromLegacy = false; } return true; } /** * @dev Copies the allowances of a batch of addresses from the legacy contract. This is an optional step which may only be done before the migration is complete but is not required to complete it. * @param _owners Array of owner addresses to migrate allowances * @param _spenders Array of spender addresses to migrate allowances * @return True if operation was completed */ function migrateAllowancesFromLegacyRep(address[] _owners, address[] _spenders) public onlyInGoodTimes whenMigratingFromLegacy afterInitialized returns (bool) { ERC20 _legacyRepToken = getLegacyRepToken(); for (uint256 i = 0; i < _owners.length; i++) { address _owner = _owners[i]; address _spender = _spenders[i]; uint256 _allowance = _legacyRepToken.allowance(_owner, _spender); approveInternal(_owner, _spender, _allowance); } return true; } function getIsMigratingFromLegacy() public view returns (bool) { return isMigratingFromLegacy; } function getTargetSupply() public view returns (uint256) { return targetSupply; } } 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":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalTheoreticalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getController","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_payoutNumerators","type":"uint256[]"},{"name":"_invalid","type":"bool"},{"name":"_attotokens","type":"uint256"}],"name":"migrateOutByPayout","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ETERNAL_APPROVAL_VALUE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_destination","type":"address"},{"name":"_attotokens","type":"uint256"}],"name":"migrateOut","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getLegacyRepToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getIsMigratingFromLegacy","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_holders","type":"address[]"}],"name":"migrateBalancesFromLegacyRep","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getUniverse","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_source","type":"address"},{"name":"_destination","type":"address"},{"name":"_attotokens","type":"uint256"}],"name":"trustedFeeWindowTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTotalMigrated","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_reporter","type":"address"},{"name":"_attotokens","type":"uint256"}],"name":"migrateIn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"updateParentTotalTheoreticalSupply","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_source","type":"address"},{"name":"_destination","type":"address"},{"name":"_attotokens","type":"uint256"}],"name":"trustedReportingParticipantTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controllerLookupName","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_universe","type":"address"}],"name":"initialize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"updateSiblingMigrationTotal","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amountMigrated","type":"uint256"}],"name":"mintForReportingParticipant","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTypeName","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owners","type":"address[]"},{"name":"_spenders","type":"address[]"}],"name":"migrateAllowancesFromLegacyRep","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTargetSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getInitialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_source","type":"address"},{"name":"_destination","type":"address"},{"name":"_attotokens","type":"uint256"}],"name":"trustedMarketTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_source","type":"address"},{"name":"_destination","type":"address"},{"name":"_attotokens","type":"uint256"}],"name":"trustedUniverseTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]
Contract Creation Code
60606040526002805460ff1916905560008054600160a060020a033316600160a060020a03199091161790556128a58061003a6000396000f3006060604052600436106101a85763ffffffff60e060020a60003504166306fdde0381146101ad578063095ea7b31461023757806318160ddd1461026d578063238d35901461029257806323b872dd146102a55780633018205f146102cd578063313ce567146102fc578063398c1a8914610325578063634eaff11461037d57806366188463146103905780636e7ce591146103b257806370a08231146103d457806377469275146103f35780637cf99c33146104065780637f68625914610419578063870c426d1461046857806390fbf84e1461047b57806391d76bbb146104a357806392eefe9b146104b657806395d89b41146104d5578063a0c1ca34146104e8578063a819515d1461050a578063a9059cbb1461051d578063b873e9a71461053f578063bef72fa214610567578063c4d66de81461057a578063d73dd62314610599578063d9d3e07d146105bb578063db054134146105da578063db0a087c146105f0578063dd62ed3e14610603578063de4c057414610628578063dea6aec7146106b7578063ee89dab4146106ca578063f22b258a146106dd578063fe98184d14610705575b600080fd5b34156101b857600080fd5b6101c061072d565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101fc5780820151838201526020016101e4565b50505050905090810190601f1680156102295780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561024257600080fd5b610259600160a060020a0360043516602435610764565b604051901515815260200160405180910390f35b341561027857600080fd5b61028061077b565b60405190815260200160405180910390f35b341561029d57600080fd5b610280610781565b34156102b057600080fd5b610259600160a060020a0360043581169060243516604435610787565b34156102d857600080fd5b6102e06107ad565b604051600160a060020a03909116815260200160405180910390f35b341561030757600080fd5b61030f6107bc565b60405160ff909116815260200160405180910390f35b341561033057600080fd5b610259600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965050505082351515926020013591506107c19050565b341561038857600080fd5b610280610a0c565b341561039b57600080fd5b610259600160a060020a0360043516602435610a12565b34156103bd57600080fd5b610259600160a060020a0360043516602435610a7c565b34156103df57600080fd5b610280600160a060020a0360043516610bae565b34156103fe57600080fd5b6102e0610bc9565b341561041157600080fd5b610259610c56565b341561042457600080fd5b6102596004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650610c5f95505050505050565b341561047357600080fd5b6102e0610d33565b341561048657600080fd5b610259600160a060020a0360043581169060243516604435610d42565b34156104ae57600080fd5b610280610e5b565b34156104c157600080fd5b610259600160a060020a0360043516610e61565b34156104e057600080fd5b6101c0610eaf565b34156104f357600080fd5b610259600160a060020a0360043516602435610ee6565b341561051557600080fd5b610259611306565b341561052857600080fd5b610259600160a060020a0360043516602435611483565b341561054a57600080fd5b610259600160a060020a03600435811690602435166044356114a7565b341561057257600080fd5b61028061158f565b341561058557600080fd5b610259600160a060020a0360043516611595565b34156105a457600080fd5b610259600160a060020a0360043516602435611751565b34156105c657600080fd5b610259600160a060020a0360043516611791565b34156105e557600080fd5b610259600435611a74565b34156105fb57600080fd5b610280611c1f565b341561060e57600080fd5b610280600160a060020a0360043581169060243516611c43565b341561063357600080fd5b610259600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843750949650611c6e95505050505050565b34156106c257600080fd5b610280611df1565b34156106d557600080fd5b610259611df7565b34156106e857600080fd5b610259600160a060020a0360043581169060243516604435611e00565b341561071057600080fd5b610259600160a060020a0360043581169060243516604435611ee8565b60408051908101604052600a81527f52657075746174696f6e00000000000000000000000000000000000000000000602082015281565b6000610771338484611f92565b5060019392505050565b60035490565b600a5490565b600b5460009060ff161561079a57600080fd5b6107a5848484611fff565b949350505050565b600054600160a060020a031690565b601281565b6000805481908190600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561080d57600080fd5b6102c65a03f1151561081e57600080fd5b50505060405180519050151561083357600080fd5b600b5460ff161561084357600080fd5b60025460ff16151561085457600080fd5b6000841161086157600080fd5b600654600160a060020a031663df428e3b878760006040516020015260405160e060020a63ffffffff8516028152811515602482015260406004820190815290819060440184818151815260200191508051906020019060200280838360005b838110156108d95780820151838201526020016108c1565b505050509050019350505050602060405180830381600087803b15156108fe57600080fd5b6102c65a03f1151561090f57600080fd5b5050506040518051925050600160a060020a03821663b80907f26000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561096057600080fd5b6102c65a03f1151561097157600080fd5b5050506040518051905090506109873385612080565b5080600160a060020a031663a0c1ca34338660006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156109e557600080fd5b6102c65a03f115156109f657600080fd5b5050506040518051506001979650505050505050565b60001981565b600160a060020a03338116600090815260056020908152604080832093861683529290529081205480831115610a5457610a4e33856000611f92565b50610a70565b610a6e3385610a69848763ffffffff61211f16565b611f92565b505b600191505b5092915050565b60008054600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610ac457600080fd5b6102c65a03f11515610ad557600080fd5b505050604051805190501515610aea57600080fd5b600b5460ff1615610afa57600080fd5b60025460ff161515610b0b57600080fd5b60008211610b1857600080fd5b610b2183612134565b50610b2c3383612080565b5082600160a060020a031663a0c1ca34338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610b8a57600080fd5b6102c65a03f11515610b9b57600080fd5b5050506040518051506001949350505050565b600160a060020a031660009081526004602052604090205490565b60008054600160a060020a031663f39ec1f7826040516020015260405160e060020a63ffffffff83160281527f4c656761637952657075746174696f6e546f6b656e00000000000000000000006004820152602401602060405180830381600087803b1515610c3757600080fd5b6102c65a03f11515610c4857600080fd5b505050604051805191505090565b600b5460ff1690565b6000805481908190600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610cab57600080fd5b6102c65a03f11515610cbc57600080fd5b505050604051805190501515610cd157600080fd5b600b5460ff161515610ce257600080fd5b60025460ff161515610cf357600080fd5b610cfb610bc9565b9150600090505b835181101561077157610d2a848281518110610d1a57fe5b906020019060200201518361229f565b50600101610d02565b600654600160a060020a031690565b60008054600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d8a57600080fd5b6102c65a03f11515610d9b57600080fd5b505050604051805190501515610db057600080fd5b600b5460ff1615610dc057600080fd5b60025460ff161515610dd157600080fd5b600654600160a060020a031663c7c88d703360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610e2a57600080fd5b6102c65a03f11515610e3b57600080fd5b505050604051805190501515610e5057600080fd5b6107a5848484612407565b60075490565b6000805433600160a060020a03908116911614610e7d57600080fd5b5060008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b60408051908101604052600381527f5245500000000000000000000000000000000000000000000000000000000000602082015281565b6000805481908190600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610f3257600080fd5b6102c65a03f11515610f4357600080fd5b505050604051805190501515610f5857600080fd5b600b5460ff1615610f6857600080fd5b60025460ff161515610f7957600080fd5b600654600160a060020a031663a63f13506000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610fc157600080fd5b6102c65a03f11515610fd257600080fd5b5050506040518051925050600160a060020a03821663b80907f26000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561102357600080fd5b6102c65a03f1151561103457600080fd5b50505060405180519050600160a060020a031633600160a060020a031614151561105d57600080fd5b61106785856124c7565b506007805485019055600160a060020a0382166377e71ee56000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110b657600080fd5b6102c65a03f115156110c757600080fd5b505050604051805160008054919250600160a060020a039091169063188ec35690604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561111d57600080fd5b6102c65a03f1151561112e57600080fd5b50505060405180519050101561116c57611156611149612566565b859063ffffffff61256b16565b905061116285826124c7565b50600a8054820190555b81600160a060020a031663cb1d84186000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156111b257600080fd5b6102c65a03f115156111c357600080fd5b50505060405180519050600160a060020a0316638d4e40836000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561121257600080fd5b6102c65a03f1151561122357600080fd5b5050506040518051905015156112fb57600654600160a060020a038084169163f7095d9d911663c38c0fa76000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561128557600080fd5b6102c65a03f1151561129657600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156112df57600080fd5b6102c65a03f115156112f057600080fd5b505050604051805150505b506001949350505050565b600b54600090819060ff161561131b57600080fd5b600654600160a060020a031663a63f13506000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561136357600080fd5b6102c65a03f1151561137457600080fd5b5050506040518051600954600a8054919091039055915050600160a060020a03811615156113ac576113a4612582565b600955611470565b80600160a060020a031663b80907f26000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113f257600080fd5b6102c65a03f1151561140357600080fd5b50505060405180519050600160a060020a031663238d35906000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561145257600080fd5b6102c65a03f1151561146357600080fd5b5050506040518051600955505b5050600954600a80549091019055600190565b600b5460009060ff161561149657600080fd5b6114a08383612591565b9392505050565b60008054600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156114ef57600080fd5b6102c65a03f1151561150057600080fd5b50505060405180519050151561151557600080fd5b600b5460ff161561152557600080fd5b60025460ff16151561153657600080fd5b600654600160a060020a031663f76514c73360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610e2a57600080fd5b60015481565b600080548190600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156115df57600080fd5b6102c65a03f115156115f057600080fd5b50505060405180519050151561160557600080fd5b60025460ff161561161557600080fd5b61161d61259e565b50600160a060020a038316151561163357600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038516179055611663611306565b5061166c610bc9565b90506000600160a060020a03841663a63f135082604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156116b557600080fd5b6102c65a03f115156116c657600080fd5b5050506040518051600b805460ff1916600160a060020a0392831694909414939093179092555081166318160ddd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561172b57600080fd5b6102c65a03f1151561173c57600080fd5b5050506040518051600c555060019392505050565b600160a060020a0333818116600090815260056020908152604080832094871683529390529182205461077191908590610a69908663ffffffff6125c516565b600b54600090819060ff16156117a657600080fd5b30600160a060020a031683600160a060020a0316141515156117c757600080fd5b82600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561180d57600080fd5b6102c65a03f1151561181e57600080fd5b5050506040518051600654909250600160a060020a0316905063a63f13506000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561187357600080fd5b6102c65a03f1151561188457600080fd5b50505060405180519050600160a060020a031663eceba87682600160a060020a031663c38c0fa76000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156118e257600080fd5b6102c65a03f115156118f357600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561193c57600080fd5b6102c65a03f1151561194d57600080fd5b50505060405180519050600160a060020a031663b80907f26000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561199c57600080fd5b6102c65a03f115156119ad57600080fd5b5050506040518051600160a060020a0385811691161490506119ce57600080fd5b600160a060020a03831660008181526008602052604080822054600a805490910190556391d76bbb919051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611a2b57600080fd5b6102c65a03f11515611a3c57600080fd5b5050506040518051600160a060020a0385166000908152600860205260409020819055600a8054919091039055506001915050919050565b60008054819081908190600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611ac257600080fd5b6102c65a03f11515611ad357600080fd5b505050604051805190501515611ae857600080fd5b600b5460ff1615611af857600080fd5b60025460ff161515611b0957600080fd5b600654600160a060020a031663a63f13506000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611b5157600080fd5b6102c65a03f11515611b6257600080fd5b5050506040518051935033925050600160a060020a03831663f76514c78360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611bc757600080fd5b6102c65a03f11515611bd857600080fd5b505050604051805190501515611bed57600080fd5b611bfe85600263ffffffff61256b16565b9050611c0a82826124c7565b50600a80548201905560019350505050919050565b7f52657075746174696f6e546f6b656e000000000000000000000000000000000090565b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b6000805481908190819081908190600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611cc057600080fd5b6102c65a03f11515611cd157600080fd5b505050604051805190501515611ce657600080fd5b600b5460ff161515611cf757600080fd5b60025460ff161515611d0857600080fd5b611d10610bc9565b9450600093505b8751841015611de357878481518110611d2c57fe5b906020019060200201519250868481518110611d4457fe5b90602001906020020151915084600160a060020a031663dd62ed3e848460006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515611daf57600080fd5b6102c65a03f11515611dc057600080fd5b505050604051805190509050611dd7838383611f92565b50600190930192611d17565b506001979650505050505050565b600c5490565b60025460ff1690565b60008054600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611e4857600080fd5b6102c65a03f11515611e5957600080fd5b505050604051805190501515611e6e57600080fd5b600b5460ff1615611e7e57600080fd5b60025460ff161515611e8f57600080fd5b600654600160a060020a0316639f7e1bf63360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610e2a57600080fd5b60008054600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611f3057600080fd5b6102c65a03f11515611f4157600080fd5b505050604051805190501515611f5657600080fd5b600b5460ff1615611f6657600080fd5b60025460ff161515611f7757600080fd5b60065433600160a060020a03908116911614610e5057600080fd5b600160a060020a03808416600081815260056020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060019392505050565b600160a060020a03808416600090815260056020908152604080832033909416835292905290812054600019811461206957612041818463ffffffff61211f16565b600160a060020a03808716600090815260056020908152604080832033909416835292905220555b612074858585612407565b50600195945050505050565b600160a060020a0382166000908152600460205260408120546120a9908363ffffffff61211f16565b600160a060020a0384166000908152600460205260409020556003546120d5908363ffffffff61211f16565b600355600160a060020a0383167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405190815260200160405180910390a261077183836125d7565b60008282111561212e57600080fd5b50900390565b600080600083600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561217f57600080fd5b6102c65a03f1151561219057600080fd5b5050506040518051600654909350600160a060020a03169050639517317c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156121f657600080fd5b6102c65a03f1151561220757600080fd5b50505060405180519050151561221c57600080fd5b81905083600160a060020a031681600160a060020a031663b80907f26000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561226f57600080fd5b6102c65a03f1151561228057600080fd5b50505060405180519050600160a060020a031614151561077157600080fd5b600080548190600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156122e957600080fd5b6102c65a03f115156122fa57600080fd5b50505060405180519050151561230f57600080fd5b600b5460ff16151561232057600080fd5b60025460ff16151561233157600080fd5b600160a060020a03841660009081526004602052604081205411156123595760009150610a75565b82600160a060020a03166370a082318560006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156123b057600080fd5b6102c65a03f115156123c157600080fd5b50505060405180519150508015156123dc5760009150610a75565b6123e684826124c7565b50600354600c541415610a70575050600b805460ff19169055506001919050565b600160a060020a038316600090815260046020526040812054612430908363ffffffff61211f16565b600160a060020a038086166000908152600460205260408082209390935590851681522054612465908363ffffffff6125c516565b600160a060020a03808516600081815260046020526040908190209390935591908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a36112fb8484846126a9565b600160a060020a0382166000908152600460205260408120546124f0908363ffffffff6125c516565b600160a060020a03841660009081526004602052604090205560035461251c908363ffffffff6125c516565b600355600160a060020a0383167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858360405190815260200160405180910390a261077183836127a7565b601490565b600080828481151561257957fe5b04949350505050565b6a09195731e2ce35eb00000090565b60006114a0338484612407565b60025460009060ff16156125b157600080fd5b506002805460ff1916600190811790915590565b6000828201838110156114a057600080fd5b60008054600160a060020a0316634e94c82982604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561261f57600080fd5b6102c65a03f1151561263057600080fd5b5050506040518051600654600160a060020a039182169250634405a3399116858560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610b8a57600080fd5b60008054600160a060020a0316634e94c82982604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156126f157600080fd5b6102c65a03f1151561270257600080fd5b5050506040518051600654600160a060020a03918216925063ec37a6e4911686868660006040516020015260405160e060020a63ffffffff8716028152600160a060020a0394851660048201529284166024840152921660448201526064810191909152608401602060405180830381600087803b151561278257600080fd5b6102c65a03f1151561279357600080fd5b505050604051805150600195945050505050565b60008054600160a060020a0316634e94c82982604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156127ef57600080fd5b6102c65a03f1151561280057600080fd5b5050506040518051600654600160a060020a0391821692506379fff7a99116858560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610b8a57600080fd00a165627a7a723058206b8c9121acaa7c23e01c2612902785d9a467e2f5a137769c0c31be8f554f6dd00029
Deployed Bytecode
0x6060604052600436106101a85763ffffffff60e060020a60003504166306fdde0381146101ad578063095ea7b31461023757806318160ddd1461026d578063238d35901461029257806323b872dd146102a55780633018205f146102cd578063313ce567146102fc578063398c1a8914610325578063634eaff11461037d57806366188463146103905780636e7ce591146103b257806370a08231146103d457806377469275146103f35780637cf99c33146104065780637f68625914610419578063870c426d1461046857806390fbf84e1461047b57806391d76bbb146104a357806392eefe9b146104b657806395d89b41146104d5578063a0c1ca34146104e8578063a819515d1461050a578063a9059cbb1461051d578063b873e9a71461053f578063bef72fa214610567578063c4d66de81461057a578063d73dd62314610599578063d9d3e07d146105bb578063db054134146105da578063db0a087c146105f0578063dd62ed3e14610603578063de4c057414610628578063dea6aec7146106b7578063ee89dab4146106ca578063f22b258a146106dd578063fe98184d14610705575b600080fd5b34156101b857600080fd5b6101c061072d565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101fc5780820151838201526020016101e4565b50505050905090810190601f1680156102295780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561024257600080fd5b610259600160a060020a0360043516602435610764565b604051901515815260200160405180910390f35b341561027857600080fd5b61028061077b565b60405190815260200160405180910390f35b341561029d57600080fd5b610280610781565b34156102b057600080fd5b610259600160a060020a0360043581169060243516604435610787565b34156102d857600080fd5b6102e06107ad565b604051600160a060020a03909116815260200160405180910390f35b341561030757600080fd5b61030f6107bc565b60405160ff909116815260200160405180910390f35b341561033057600080fd5b610259600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965050505082351515926020013591506107c19050565b341561038857600080fd5b610280610a0c565b341561039b57600080fd5b610259600160a060020a0360043516602435610a12565b34156103bd57600080fd5b610259600160a060020a0360043516602435610a7c565b34156103df57600080fd5b610280600160a060020a0360043516610bae565b34156103fe57600080fd5b6102e0610bc9565b341561041157600080fd5b610259610c56565b341561042457600080fd5b6102596004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650610c5f95505050505050565b341561047357600080fd5b6102e0610d33565b341561048657600080fd5b610259600160a060020a0360043581169060243516604435610d42565b34156104ae57600080fd5b610280610e5b565b34156104c157600080fd5b610259600160a060020a0360043516610e61565b34156104e057600080fd5b6101c0610eaf565b34156104f357600080fd5b610259600160a060020a0360043516602435610ee6565b341561051557600080fd5b610259611306565b341561052857600080fd5b610259600160a060020a0360043516602435611483565b341561054a57600080fd5b610259600160a060020a03600435811690602435166044356114a7565b341561057257600080fd5b61028061158f565b341561058557600080fd5b610259600160a060020a0360043516611595565b34156105a457600080fd5b610259600160a060020a0360043516602435611751565b34156105c657600080fd5b610259600160a060020a0360043516611791565b34156105e557600080fd5b610259600435611a74565b34156105fb57600080fd5b610280611c1f565b341561060e57600080fd5b610280600160a060020a0360043581169060243516611c43565b341561063357600080fd5b610259600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284378201915050505050509190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843750949650611c6e95505050505050565b34156106c257600080fd5b610280611df1565b34156106d557600080fd5b610259611df7565b34156106e857600080fd5b610259600160a060020a0360043581169060243516604435611e00565b341561071057600080fd5b610259600160a060020a0360043581169060243516604435611ee8565b60408051908101604052600a81527f52657075746174696f6e00000000000000000000000000000000000000000000602082015281565b6000610771338484611f92565b5060019392505050565b60035490565b600a5490565b600b5460009060ff161561079a57600080fd5b6107a5848484611fff565b949350505050565b600054600160a060020a031690565b601281565b6000805481908190600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561080d57600080fd5b6102c65a03f1151561081e57600080fd5b50505060405180519050151561083357600080fd5b600b5460ff161561084357600080fd5b60025460ff16151561085457600080fd5b6000841161086157600080fd5b600654600160a060020a031663df428e3b878760006040516020015260405160e060020a63ffffffff8516028152811515602482015260406004820190815290819060440184818151815260200191508051906020019060200280838360005b838110156108d95780820151838201526020016108c1565b505050509050019350505050602060405180830381600087803b15156108fe57600080fd5b6102c65a03f1151561090f57600080fd5b5050506040518051925050600160a060020a03821663b80907f26000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561096057600080fd5b6102c65a03f1151561097157600080fd5b5050506040518051905090506109873385612080565b5080600160a060020a031663a0c1ca34338660006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156109e557600080fd5b6102c65a03f115156109f657600080fd5b5050506040518051506001979650505050505050565b60001981565b600160a060020a03338116600090815260056020908152604080832093861683529290529081205480831115610a5457610a4e33856000611f92565b50610a70565b610a6e3385610a69848763ffffffff61211f16565b611f92565b505b600191505b5092915050565b60008054600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610ac457600080fd5b6102c65a03f11515610ad557600080fd5b505050604051805190501515610aea57600080fd5b600b5460ff1615610afa57600080fd5b60025460ff161515610b0b57600080fd5b60008211610b1857600080fd5b610b2183612134565b50610b2c3383612080565b5082600160a060020a031663a0c1ca34338460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610b8a57600080fd5b6102c65a03f11515610b9b57600080fd5b5050506040518051506001949350505050565b600160a060020a031660009081526004602052604090205490565b60008054600160a060020a031663f39ec1f7826040516020015260405160e060020a63ffffffff83160281527f4c656761637952657075746174696f6e546f6b656e00000000000000000000006004820152602401602060405180830381600087803b1515610c3757600080fd5b6102c65a03f11515610c4857600080fd5b505050604051805191505090565b600b5460ff1690565b6000805481908190600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610cab57600080fd5b6102c65a03f11515610cbc57600080fd5b505050604051805190501515610cd157600080fd5b600b5460ff161515610ce257600080fd5b60025460ff161515610cf357600080fd5b610cfb610bc9565b9150600090505b835181101561077157610d2a848281518110610d1a57fe5b906020019060200201518361229f565b50600101610d02565b600654600160a060020a031690565b60008054600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610d8a57600080fd5b6102c65a03f11515610d9b57600080fd5b505050604051805190501515610db057600080fd5b600b5460ff1615610dc057600080fd5b60025460ff161515610dd157600080fd5b600654600160a060020a031663c7c88d703360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610e2a57600080fd5b6102c65a03f11515610e3b57600080fd5b505050604051805190501515610e5057600080fd5b6107a5848484612407565b60075490565b6000805433600160a060020a03908116911614610e7d57600080fd5b5060008054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556001919050565b60408051908101604052600381527f5245500000000000000000000000000000000000000000000000000000000000602082015281565b6000805481908190600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610f3257600080fd5b6102c65a03f11515610f4357600080fd5b505050604051805190501515610f5857600080fd5b600b5460ff1615610f6857600080fd5b60025460ff161515610f7957600080fd5b600654600160a060020a031663a63f13506000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610fc157600080fd5b6102c65a03f11515610fd257600080fd5b5050506040518051925050600160a060020a03821663b80907f26000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561102357600080fd5b6102c65a03f1151561103457600080fd5b50505060405180519050600160a060020a031633600160a060020a031614151561105d57600080fd5b61106785856124c7565b506007805485019055600160a060020a0382166377e71ee56000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110b657600080fd5b6102c65a03f115156110c757600080fd5b505050604051805160008054919250600160a060020a039091169063188ec35690604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561111d57600080fd5b6102c65a03f1151561112e57600080fd5b50505060405180519050101561116c57611156611149612566565b859063ffffffff61256b16565b905061116285826124c7565b50600a8054820190555b81600160a060020a031663cb1d84186000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156111b257600080fd5b6102c65a03f115156111c357600080fd5b50505060405180519050600160a060020a0316638d4e40836000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561121257600080fd5b6102c65a03f1151561122357600080fd5b5050506040518051905015156112fb57600654600160a060020a038084169163f7095d9d911663c38c0fa76000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561128557600080fd5b6102c65a03f1151561129657600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156112df57600080fd5b6102c65a03f115156112f057600080fd5b505050604051805150505b506001949350505050565b600b54600090819060ff161561131b57600080fd5b600654600160a060020a031663a63f13506000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561136357600080fd5b6102c65a03f1151561137457600080fd5b5050506040518051600954600a8054919091039055915050600160a060020a03811615156113ac576113a4612582565b600955611470565b80600160a060020a031663b80907f26000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113f257600080fd5b6102c65a03f1151561140357600080fd5b50505060405180519050600160a060020a031663238d35906000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561145257600080fd5b6102c65a03f1151561146357600080fd5b5050506040518051600955505b5050600954600a80549091019055600190565b600b5460009060ff161561149657600080fd5b6114a08383612591565b9392505050565b60008054600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156114ef57600080fd5b6102c65a03f1151561150057600080fd5b50505060405180519050151561151557600080fd5b600b5460ff161561152557600080fd5b60025460ff16151561153657600080fd5b600654600160a060020a031663f76514c73360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610e2a57600080fd5b60015481565b600080548190600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156115df57600080fd5b6102c65a03f115156115f057600080fd5b50505060405180519050151561160557600080fd5b60025460ff161561161557600080fd5b61161d61259e565b50600160a060020a038316151561163357600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038516179055611663611306565b5061166c610bc9565b90506000600160a060020a03841663a63f135082604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156116b557600080fd5b6102c65a03f115156116c657600080fd5b5050506040518051600b805460ff1916600160a060020a0392831694909414939093179092555081166318160ddd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561172b57600080fd5b6102c65a03f1151561173c57600080fd5b5050506040518051600c555060019392505050565b600160a060020a0333818116600090815260056020908152604080832094871683529390529182205461077191908590610a69908663ffffffff6125c516565b600b54600090819060ff16156117a657600080fd5b30600160a060020a031683600160a060020a0316141515156117c757600080fd5b82600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561180d57600080fd5b6102c65a03f1151561181e57600080fd5b5050506040518051600654909250600160a060020a0316905063a63f13506000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561187357600080fd5b6102c65a03f1151561188457600080fd5b50505060405180519050600160a060020a031663eceba87682600160a060020a031663c38c0fa76000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156118e257600080fd5b6102c65a03f115156118f357600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561193c57600080fd5b6102c65a03f1151561194d57600080fd5b50505060405180519050600160a060020a031663b80907f26000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561199c57600080fd5b6102c65a03f115156119ad57600080fd5b5050506040518051600160a060020a0385811691161490506119ce57600080fd5b600160a060020a03831660008181526008602052604080822054600a805490910190556391d76bbb919051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611a2b57600080fd5b6102c65a03f11515611a3c57600080fd5b5050506040518051600160a060020a0385166000908152600860205260409020819055600a8054919091039055506001915050919050565b60008054819081908190600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611ac257600080fd5b6102c65a03f11515611ad357600080fd5b505050604051805190501515611ae857600080fd5b600b5460ff1615611af857600080fd5b60025460ff161515611b0957600080fd5b600654600160a060020a031663a63f13506000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611b5157600080fd5b6102c65a03f11515611b6257600080fd5b5050506040518051935033925050600160a060020a03831663f76514c78360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611bc757600080fd5b6102c65a03f11515611bd857600080fd5b505050604051805190501515611bed57600080fd5b611bfe85600263ffffffff61256b16565b9050611c0a82826124c7565b50600a80548201905560019350505050919050565b7f52657075746174696f6e546f6b656e000000000000000000000000000000000090565b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b6000805481908190819081908190600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611cc057600080fd5b6102c65a03f11515611cd157600080fd5b505050604051805190501515611ce657600080fd5b600b5460ff161515611cf757600080fd5b60025460ff161515611d0857600080fd5b611d10610bc9565b9450600093505b8751841015611de357878481518110611d2c57fe5b906020019060200201519250868481518110611d4457fe5b90602001906020020151915084600160a060020a031663dd62ed3e848460006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515611daf57600080fd5b6102c65a03f11515611dc057600080fd5b505050604051805190509050611dd7838383611f92565b50600190930192611d17565b506001979650505050505050565b600c5490565b60025460ff1690565b60008054600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611e4857600080fd5b6102c65a03f11515611e5957600080fd5b505050604051805190501515611e6e57600080fd5b600b5460ff1615611e7e57600080fd5b60025460ff161515611e8f57600080fd5b600654600160a060020a0316639f7e1bf63360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610e2a57600080fd5b60008054600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611f3057600080fd5b6102c65a03f11515611f4157600080fd5b505050604051805190501515611f5657600080fd5b600b5460ff1615611f6657600080fd5b60025460ff161515611f7757600080fd5b60065433600160a060020a03908116911614610e5057600080fd5b600160a060020a03808416600081815260056020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060019392505050565b600160a060020a03808416600090815260056020908152604080832033909416835292905290812054600019811461206957612041818463ffffffff61211f16565b600160a060020a03808716600090815260056020908152604080832033909416835292905220555b612074858585612407565b50600195945050505050565b600160a060020a0382166000908152600460205260408120546120a9908363ffffffff61211f16565b600160a060020a0384166000908152600460205260409020556003546120d5908363ffffffff61211f16565b600355600160a060020a0383167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405190815260200160405180910390a261077183836125d7565b60008282111561212e57600080fd5b50900390565b600080600083600160a060020a031663870c426d6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561217f57600080fd5b6102c65a03f1151561219057600080fd5b5050506040518051600654909350600160a060020a03169050639517317c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156121f657600080fd5b6102c65a03f1151561220757600080fd5b50505060405180519050151561221c57600080fd5b81905083600160a060020a031681600160a060020a031663b80907f26000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561226f57600080fd5b6102c65a03f1151561228057600080fd5b50505060405180519050600160a060020a031614151561077157600080fd5b600080548190600160a060020a03166322763ae182604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156122e957600080fd5b6102c65a03f115156122fa57600080fd5b50505060405180519050151561230f57600080fd5b600b5460ff16151561232057600080fd5b60025460ff16151561233157600080fd5b600160a060020a03841660009081526004602052604081205411156123595760009150610a75565b82600160a060020a03166370a082318560006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156123b057600080fd5b6102c65a03f115156123c157600080fd5b50505060405180519150508015156123dc5760009150610a75565b6123e684826124c7565b50600354600c541415610a70575050600b805460ff19169055506001919050565b600160a060020a038316600090815260046020526040812054612430908363ffffffff61211f16565b600160a060020a038086166000908152600460205260408082209390935590851681522054612465908363ffffffff6125c516565b600160a060020a03808516600081815260046020526040908190209390935591908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a36112fb8484846126a9565b600160a060020a0382166000908152600460205260408120546124f0908363ffffffff6125c516565b600160a060020a03841660009081526004602052604090205560035461251c908363ffffffff6125c516565b600355600160a060020a0383167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858360405190815260200160405180910390a261077183836127a7565b601490565b600080828481151561257957fe5b04949350505050565b6a09195731e2ce35eb00000090565b60006114a0338484612407565b60025460009060ff16156125b157600080fd5b506002805460ff1916600190811790915590565b6000828201838110156114a057600080fd5b60008054600160a060020a0316634e94c82982604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561261f57600080fd5b6102c65a03f1151561263057600080fd5b5050506040518051600654600160a060020a039182169250634405a3399116858560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610b8a57600080fd5b60008054600160a060020a0316634e94c82982604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156126f157600080fd5b6102c65a03f1151561270257600080fd5b5050506040518051600654600160a060020a03918216925063ec37a6e4911686868660006040516020015260405160e060020a63ffffffff8716028152600160a060020a0394851660048201529284166024840152921660448201526064810191909152608401602060405180830381600087803b151561278257600080fd5b6102c65a03f1151561279357600080fd5b505050604051805150600195945050505050565b60008054600160a060020a0316634e94c82982604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156127ef57600080fd5b6102c65a03f1151561280057600080fd5b5050506040518051600654600160a060020a0391821692506379fff7a99116858560006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610b8a57600080fd00a165627a7a723058206b8c9121acaa7c23e01c2612902785d9a467e2f5a137769c0c31be8f554f6dd00029
Swarm Source
bzzr://6b8c9121acaa7c23e01c2612902785d9a467e2f5a137769c0c31be8f554f6dd0
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.