Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
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
Loading...
Loading
Cross-Chain Transactions
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
Contract ABI
API[{"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
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
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.