Contract 0x73b172756bd5ddf0110ba8d7b88816eb639eb21c

 

TxHash Block Age From To Value [TxFee]
0xa243423db6a1acd0a5d4f03377e4f994f8b223fe45e374b6e34f80696e8772c974053499 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00029169
0x584d0e3575e4922e79c84ee2dfab9f20f1023179b99594333b14ec5893d1ab63740519242 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00145781
0x76d58bc752e05ba3b251b3db7630ef92a6603b36ac1d7235f9c4cb0ac6cd3c1774050841 hr 4 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.000583252
0x6926749ce4a76929caded897eb5ab2ca46d3337fde57db911803cb265036232874049371 hr 37 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.000583252
0xb843f3c7c35888aac37209a25acf157a7fe9fd84757603aad6b342f24768540274048262 hrs 1 min ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00058338
0xda8d35ca5a9de6c571c8f774591f1c976f4c9153d5b37ae748b9bc88e0bce66874046592 hrs 40 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00058338
0xc9293d04618130a708d0f68d301c80eec2105b2b880dc94185f21f2a420f1a0874046122 hrs 51 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00058338
0xb35887d74c54df8be80e8cab4808ff765703f256ad4faf13df19e1cb3259e09874044663 hrs 25 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00058338
0x4d98251371cada24a80a80ad1a2e2a94cc71472fbb655f153b54c47452ddaabe74043123 hrs 57 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00058338
0x71fc77ab1f53f803a4055fe9ef7c3ab4023d8913e8083725409a68d62e8b912f74041464 hrs 30 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.000874686
0x44adb364e72e64a4654342a55a3025773dcb68a5c67007f5cb1daac7ab23c93d74040095 hrs 2 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.000291626
0x64082f1f8756e6fa70185fb89fce70027ac6e380dcf36668a6757a245339cc3974038475 hrs 37 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00058338
0x655be019242fe03dad1d1e9fa1f026f47d76db40378164d6fc03c6ee58d722bc74037026 hrs 10 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00058338
0xf991ff20d5e9d5f1eb63f0f53dbef5c960ab59648c2a6e03f9b74352f81464f174035436 hrs 42 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00058338
0xc19ade409037a821033a1fe301d5496e2700998162d9d4c5ffa391a8dcb9461b74034097 hrs 12 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.000291626
0xe1c9e8fb68f7df2cab958779b61479e96ddb3f5d8c460a78e7030f8711d5d6ca74032857 hrs 46 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.000583252
0x89bf312432b9c40423b327a433b04ef8d3ed6d226b78417bf4be2da07d51263f74031338 hrs 17 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.000583252
0x1e73c936a01118f577f9e152fce20be916d26305a519da3f12fec594260c052574030908 hrs 28 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00087507
0x24c1c22fa5d2e93ca0e0a996f51665ea34f16791518cdf105efb1f37d98bd7e474029399 hrs ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00058338
0x487dbd97e9e0be604272460cc5164d581ccb421e9849534d7473fa2b8b89459474027819 hrs 31 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00087507
0xbd4d1ed537204f9b1e5cd77e70d11aeb26b4fc2ea566c23432e07e9fbdc5e94774027469 hrs 39 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00058338
0x8639dfdad66882283188bfa345f274a59f91a825acb94bb53facce7ac83603eb740259910 hrs 8 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00058338
0xbc3d41e5aeaea361f85e6c7efb4d859b1b09984206c999a7166f6363da6bbfaa740247610 hrs 39 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00058338
0x9df4a41273aa21bf11e0d46aa01ddde85c3960c00fd198dac504a66aa64d9006740233411 hrs 13 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00058338
0xbf2f4eebeb29435fd455ac0e47b7ff32b545c1ccb546bc2cdc9a5ba701050554740220811 hrs 42 mins ago0xac1ed4fabbd5204e02950d68b6fc8c446ac95362 IN  0x73b172756bd5ddf0110ba8d7b88816eb639eb21c0 Ether0.00029169
[ Download CSV Export 

Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value

Contract Source Code Verified (Exact Match)

Contract Name:
ExchangeRates

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

/* ===============================================
* Flattened with Solidifier by Coinage
* 
* https://solidifier.coina.ge
* ===============================================
*/


pragma solidity ^0.4.24;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, reverts on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b);

    return c;
  }

  /**
  * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b > 0); // Solidity only automatically asserts 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;
  }

  /**
  * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b <= a);
    uint256 c = a - b;

    return c;
  }

  /**
  * @dev Adds two numbers, reverts on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a);

    return c;
  }

  /**
  * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
  * reverts when dividing by zero.
  */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}


/*

-----------------------------------------------------------------
FILE INFORMATION
-----------------------------------------------------------------

file:       SafeDecimalMath.sol
version:    2.0
author:     Kevin Brown
            Gavin Conway
date:       2018-10-18

-----------------------------------------------------------------
MODULE DESCRIPTION
-----------------------------------------------------------------

A library providing safe mathematical operations for division and
multiplication with the capability to round or truncate the results
to the nearest increment. Operations can return a standard precision
or high precision decimal. High precision decimals are useful for
example when attempting to calculate percentages or fractions
accurately.

-----------------------------------------------------------------
*/


/**
 * @title Safely manipulate unsigned fixed-point decimals at a given precision level.
 * @dev Functions accepting uints in this contract and derived contracts
 * are taken to be such fixed point decimals of a specified precision (either standard
 * or high).
 */
library SafeDecimalMath {

    using SafeMath for uint;

    /* Number of decimal places in the representations. */
    uint8 public constant decimals = 18;
    uint8 public constant highPrecisionDecimals = 27;

    /* The number representing 1.0. */
    uint public constant UNIT = 10 ** uint(decimals);

    /* The number representing 1.0 for higher fidelity numbers. */
    uint public constant PRECISE_UNIT = 10 ** uint(highPrecisionDecimals);
    uint private constant UNIT_TO_HIGH_PRECISION_CONVERSION_FACTOR = 10 ** uint(highPrecisionDecimals - decimals);

    /** 
     * @return Provides an interface to UNIT.
     */
    function unit()
        external
        pure
        returns (uint)
    {
        return UNIT;
    }

    /** 
     * @return Provides an interface to PRECISE_UNIT.
     */
    function preciseUnit()
        external
        pure 
        returns (uint)
    {
        return PRECISE_UNIT;
    }

    /**
     * @return The result of multiplying x and y, interpreting the operands as fixed-point
     * decimals.
     * 
     * @dev A unit factor is divided out after the product of x and y is evaluated,
     * so that product must be less than 2**256. As this is an integer division,
     * the internal division always rounds down. This helps save on gas. Rounding
     * is more expensive on gas.
     */
    function multiplyDecimal(uint x, uint y)
        internal
        pure
        returns (uint)
    {
        /* Divide by UNIT to remove the extra factor introduced by the product. */
        return x.mul(y) / UNIT;
    }

    /**
     * @return The result of safely multiplying x and y, interpreting the operands
     * as fixed-point decimals of the specified precision unit.
     *
     * @dev The operands should be in the form of a the specified unit factor which will be
     * divided out after the product of x and y is evaluated, so that product must be
     * less than 2**256.
     *
     * Unlike multiplyDecimal, this function rounds the result to the nearest increment.
     * Rounding is useful when you need to retain fidelity for small decimal numbers
     * (eg. small fractions or percentages).
     */
    function _multiplyDecimalRound(uint x, uint y, uint precisionUnit)
        private
        pure
        returns (uint)
    {
        /* Divide by UNIT to remove the extra factor introduced by the product. */
        uint quotientTimesTen = x.mul(y) / (precisionUnit / 10);

        if (quotientTimesTen % 10 >= 5) {
            quotientTimesTen += 10;
        }

        return quotientTimesTen / 10;
    }

    /**
     * @return The result of safely multiplying x and y, interpreting the operands
     * as fixed-point decimals of a precise unit.
     *
     * @dev The operands should be in the precise unit factor which will be
     * divided out after the product of x and y is evaluated, so that product must be
     * less than 2**256.
     *
     * Unlike multiplyDecimal, this function rounds the result to the nearest increment.
     * Rounding is useful when you need to retain fidelity for small decimal numbers
     * (eg. small fractions or percentages).
     */
    function multiplyDecimalRoundPrecise(uint x, uint y)
        internal
        pure
        returns (uint)
    {
        return _multiplyDecimalRound(x, y, PRECISE_UNIT);
    }

    /**
     * @return The result of safely multiplying x and y, interpreting the operands
     * as fixed-point decimals of a standard unit.
     *
     * @dev The operands should be in the standard unit factor which will be
     * divided out after the product of x and y is evaluated, so that product must be
     * less than 2**256.
     *
     * Unlike multiplyDecimal, this function rounds the result to the nearest increment.
     * Rounding is useful when you need to retain fidelity for small decimal numbers
     * (eg. small fractions or percentages).
     */
    function multiplyDecimalRound(uint x, uint y)
        internal
        pure
        returns (uint)
    {
        return _multiplyDecimalRound(x, y, UNIT);
    }

    /**
     * @return The result of safely dividing x and y. The return value is a high
     * precision decimal.
     * 
     * @dev y is divided after the product of x and the standard precision unit
     * is evaluated, so the product of x and UNIT must be less than 2**256. As
     * this is an integer division, the result is always rounded down.
     * This helps save on gas. Rounding is more expensive on gas.
     */
    function divideDecimal(uint x, uint y)
        internal
        pure
        returns (uint)
    {
        /* Reintroduce the UNIT factor that will be divided out by y. */
        return x.mul(UNIT).div(y);
    }

    /**
     * @return The result of safely dividing x and y. The return value is as a rounded
     * decimal in the precision unit specified in the parameter.
     *
     * @dev y is divided after the product of x and the specified precision unit
     * is evaluated, so the product of x and the specified precision unit must
     * be less than 2**256. The result is rounded to the nearest increment.
     */
    function _divideDecimalRound(uint x, uint y, uint precisionUnit)
        private
        pure
        returns (uint)
    {
        uint resultTimesTen = x.mul(precisionUnit * 10).div(y);

        if (resultTimesTen % 10 >= 5) {
            resultTimesTen += 10;
        }

        return resultTimesTen / 10;
    }

    /**
     * @return The result of safely dividing x and y. The return value is as a rounded
     * standard precision decimal.
     *
     * @dev y is divided after the product of x and the standard precision unit
     * is evaluated, so the product of x and the standard precision unit must
     * be less than 2**256. The result is rounded to the nearest increment.
     */
    function divideDecimalRound(uint x, uint y)
        internal
        pure
        returns (uint)
    {
        return _divideDecimalRound(x, y, UNIT);
    }

    /**
     * @return The result of safely dividing x and y. The return value is as a rounded
     * high precision decimal.
     *
     * @dev y is divided after the product of x and the high precision unit
     * is evaluated, so the product of x and the high precision unit must
     * be less than 2**256. The result is rounded to the nearest increment.
     */
    function divideDecimalRoundPrecise(uint x, uint y)
        internal
        pure
        returns (uint)
    {
        return _divideDecimalRound(x, y, PRECISE_UNIT);
    }

    /**
     * @dev Convert a standard decimal representation to a high precision one.
     */
    function decimalToPreciseDecimal(uint i)
        internal
        pure
        returns (uint)
    {
        return i.mul(UNIT_TO_HIGH_PRECISION_CONVERSION_FACTOR);
    }

    /**
     * @dev Convert a high precision decimal to a standard decimal representation.
     */
    function preciseDecimalToDecimal(uint i)
        internal
        pure
        returns (uint)
    {
        uint quotientTimesTen = i / (UNIT_TO_HIGH_PRECISION_CONVERSION_FACTOR / 10);

        if (quotientTimesTen % 10 >= 5) {
            quotientTimesTen += 10;
        }

        return quotientTimesTen / 10;
    }

}


/*
-----------------------------------------------------------------
FILE INFORMATION
-----------------------------------------------------------------

file:       Owned.sol
version:    1.1
author:     Anton Jurisevic
            Dominic Romanowski

date:       2018-2-26

-----------------------------------------------------------------
MODULE DESCRIPTION
-----------------------------------------------------------------

An Owned contract, to be inherited by other contracts.
Requires its owner to be explicitly set in the constructor.
Provides an onlyOwner access modifier.

To change owner, the current owner must nominate the next owner,
who then has to accept the nomination. The nomination can be
cancelled before it is accepted by the new owner by having the
previous owner change the nomination (setting it to 0).

-----------------------------------------------------------------
*/


/**
 * @title A contract with an owner.
 * @notice Contract ownership can be transferred by first nominating the new owner,
 * who must then accept the ownership, which prevents accidental incorrect ownership transfers.
 */
contract Owned {
    address public owner;
    address public nominatedOwner;

    /**
     * @dev Owned Constructor
     */
    constructor(address _owner)
        public
    {
        require(_owner != address(0), "Owner address cannot be 0");
        owner = _owner;
        emit OwnerChanged(address(0), _owner);
    }

    /**
     * @notice Nominate a new owner of this contract.
     * @dev Only the current owner may nominate a new owner.
     */
    function nominateNewOwner(address _owner)
        external
        onlyOwner
    {
        nominatedOwner = _owner;
        emit OwnerNominated(_owner);
    }

    /**
     * @notice Accept the nomination to be owner.
     */
    function acceptOwnership()
        external
    {
        require(msg.sender == nominatedOwner, "You must be nominated before you can accept ownership");
        emit OwnerChanged(owner, nominatedOwner);
        owner = nominatedOwner;
        nominatedOwner = address(0);
    }

    modifier onlyOwner
    {
        require(msg.sender == owner, "Only the contract owner may perform this action");
        _;
    }

    event OwnerNominated(address newOwner);
    event OwnerChanged(address oldOwner, address newOwner);
}

/*
-----------------------------------------------------------------
FILE INFORMATION
-----------------------------------------------------------------

file:       SelfDestructible.sol
version:    1.2
author:     Anton Jurisevic

date:       2018-05-29

-----------------------------------------------------------------
MODULE DESCRIPTION
-----------------------------------------------------------------

This contract allows an inheriting contract to be destroyed after
its owner indicates an intention and then waits for a period
without changing their mind. All ether contained in the contract
is forwarded to a nominated beneficiary upon destruction.

-----------------------------------------------------------------
*/


/**
 * @title A contract that can be destroyed by its owner after a delay elapses.
 */
contract SelfDestructible is Owned {
    
    uint public initiationTime;
    bool public selfDestructInitiated;
    address public selfDestructBeneficiary;
    uint public constant SELFDESTRUCT_DELAY = 4 weeks;

    /**
     * @dev Constructor
     * @param _owner The account which controls this contract.
     */
    constructor(address _owner)
        Owned(_owner)
        public
    {
        require(_owner != address(0), "Owner must not be the zero address");
        selfDestructBeneficiary = _owner;
        emit SelfDestructBeneficiaryUpdated(_owner);
    }

    /**
     * @notice Set the beneficiary address of this contract.
     * @dev Only the contract owner may call this. The provided beneficiary must be non-null.
     * @param _beneficiary The address to pay any eth contained in this contract to upon self-destruction.
     */
    function setSelfDestructBeneficiary(address _beneficiary)
        external
        onlyOwner
    {
        require(_beneficiary != address(0), "Beneficiary must not be the zero address");
        selfDestructBeneficiary = _beneficiary;
        emit SelfDestructBeneficiaryUpdated(_beneficiary);
    }

    /**
     * @notice Begin the self-destruction counter of this contract.
     * Once the delay has elapsed, the contract may be self-destructed.
     * @dev Only the contract owner may call this.
     */
    function initiateSelfDestruct()
        external
        onlyOwner
    {
        initiationTime = now;
        selfDestructInitiated = true;
        emit SelfDestructInitiated(SELFDESTRUCT_DELAY);
    }

    /**
     * @notice Terminate and reset the self-destruction timer.
     * @dev Only the contract owner may call this.
     */
    function terminateSelfDestruct()
        external
        onlyOwner
    {
        initiationTime = 0;
        selfDestructInitiated = false;
        emit SelfDestructTerminated();
    }

    /**
     * @notice If the self-destruction delay has elapsed, destroy this contract and
     * remit any ether it owns to the beneficiary address.
     * @dev Only the contract owner may call this.
     */
    function selfDestruct()
        external
        onlyOwner
    {
        require(selfDestructInitiated, "Self destruct has not yet been initiated");
        require(initiationTime + SELFDESTRUCT_DELAY < now, "Self destruct delay has not yet elapsed");
        address beneficiary = selfDestructBeneficiary;
        emit SelfDestructed(beneficiary);
        selfdestruct(beneficiary);
    }

    event SelfDestructTerminated();
    event SelfDestructed(address beneficiary);
    event SelfDestructInitiated(uint selfDestructDelay);
    event SelfDestructBeneficiaryUpdated(address newBeneficiary);
}


/*
-----------------------------------------------------------------
FILE INFORMATION
-----------------------------------------------------------------

file:       ExchangeRates.sol
version:    1.0
author:     Kevin Brown
date:       2018-09-12

-----------------------------------------------------------------
MODULE DESCRIPTION
-----------------------------------------------------------------

A contract that any other contract in the Synthetix system can query
for the current market value of various assets, including
crypto assets as well as various fiat assets.

This contract assumes that rate updates will completely update
all rates to their current values. If a rate shock happens
on a single asset, the oracle will still push updated rates
for all other assets.

-----------------------------------------------------------------
*/


/**
 * @title The repository for exchange rates
 */
contract ExchangeRates is SelfDestructible {

    using SafeMath for uint;

    // Exchange rates stored by currency code, e.g. 'SNX', or 'sUSD'
    mapping(bytes4 => uint) public rates;

    // Update times stored by currency code, e.g. 'SNX', or 'sUSD'
    mapping(bytes4 => uint) public lastRateUpdateTimes;

    // The address of the oracle which pushes rate updates to this contract
    address public oracle;

    // Do not allow the oracle to submit times any further forward into the future than this constant.
    uint constant ORACLE_FUTURE_LIMIT = 10 minutes;

    // How long will the contract assume the rate of any asset is correct
    uint public rateStalePeriod = 3 hours;

    // Each participating currency in the XDR basket is represented as a currency key with
    // equal weighting.
    // There are 5 participating currencies, so we'll declare that clearly.
    bytes4[5] public xdrParticipants;

    //
    // ========== CONSTRUCTOR ==========

    /**
     * @dev Constructor
     * @param _owner The owner of this contract.
     * @param _oracle The address which is able to update rate information.
     * @param _currencyKeys The initial currency keys to store (in order).
     * @param _newRates The initial currency amounts for each currency (in order).
     */
    constructor(
        // SelfDestructible (Ownable)
        address _owner,

        // Oracle values - Allows for rate updates
        address _oracle,
        bytes4[] _currencyKeys,
        uint[] _newRates
    )
        /* Owned is initialised in SelfDestructible */
        SelfDestructible(_owner)
        public
    {
        require(_currencyKeys.length == _newRates.length, "Currency key length and rate length must match.");

        oracle = _oracle;

        // The sUSD rate is always 1 and is never stale.
        rates["sUSD"] = SafeDecimalMath.unit();
        lastRateUpdateTimes["sUSD"] = now;

        // These are the currencies that make up the XDR basket.
        // These are hard coded because:
        //  - This way users can depend on the calculation and know it won't change for this deployment of the contract.
        //  - Adding new currencies would likely introduce some kind of weighting factor, which
        //    isn't worth preemptively adding when all of the currencies in the current basket are weighted at 1.
        //  - The expectation is if this logic needs to be updated, we'll simply deploy a new version of this contract
        //    then point the system at the new version.
        xdrParticipants = [
            bytes4("sUSD"),
            bytes4("sAUD"),
            bytes4("sCHF"),
            bytes4("sEUR"),
            bytes4("sGBP")
        ];

        internalUpdateRates(_currencyKeys, _newRates, now);
    }

    /* ========== SETTERS ========== */

    /**
     * @notice Set the rates stored in this contract
     * @param currencyKeys The currency keys you wish to update the rates for (in order)
     * @param newRates The rates for each currency (in order)
     * @param timeSent The timestamp of when the update was sent, specified in seconds since epoch (e.g. the same as the now keyword in solidity).contract
     *                 This is useful because transactions can take a while to confirm, so this way we know how old the oracle's datapoint was exactly even
     *                 if it takes a long time for the transaction to confirm.
     */
    function updateRates(bytes4[] currencyKeys, uint[] newRates, uint timeSent)
        external
        onlyOracle
        returns(bool)
    {
        return internalUpdateRates(currencyKeys, newRates, timeSent);
    }

    /**
     * @notice Internal function which sets the rates stored in this contract
     * @param currencyKeys The currency keys you wish to update the rates for (in order)
     * @param newRates The rates for each currency (in order)
     * @param timeSent The timestamp of when the update was sent, specified in seconds since epoch (e.g. the same as the now keyword in solidity).contract
     *                 This is useful because transactions can take a while to confirm, so this way we know how old the oracle's datapoint was exactly even
     *                 if it takes a long time for the transaction to confirm.
     */
    function internalUpdateRates(bytes4[] currencyKeys, uint[] newRates, uint timeSent)
        internal
        returns(bool)
    {
        require(currencyKeys.length == newRates.length, "Currency key array length must match rates array length.");
        require(timeSent < (now + ORACLE_FUTURE_LIMIT), "Time is too far into the future");

        // Loop through each key and perform update.
        for (uint i = 0; i < currencyKeys.length; i++) {
            // Should not set any rate to zero ever, as no asset will ever be
            // truely worthless and still valid. In this scenario, we should
            // delete the rate and remove it from the system.
            require(newRates[i] != 0, "Zero is not a valid rate, please call deleteRate instead.");
            require(currencyKeys[i] != "sUSD", "Rate of sUSD cannot be updated, it's always UNIT.");

            // We should only update the rate if it's at least the same age as the last rate we've got.
            if (timeSent >= lastRateUpdateTimes[currencyKeys[i]]) {
                // Ok, go ahead with the update.
                rates[currencyKeys[i]] = newRates[i];
                lastRateUpdateTimes[currencyKeys[i]] = timeSent;
            }
        }

        emit RatesUpdated(currencyKeys, newRates);

        // Now update our XDR rate.
        updateXDRRate(timeSent);

        return true;
    }

    /**
     * @notice Update the Synthetix Drawing Rights exchange rate based on other rates already updated.
     */
    function updateXDRRate(uint timeSent)
        internal
    {
        uint total = 0;

        for (uint i = 0; i < xdrParticipants.length; i++) {
            total = rates[xdrParticipants[i]].add(total);
        }

        // Set the rate
        rates["XDR"] = total;

        // Record that we updated the XDR rate.
        lastRateUpdateTimes["XDR"] = timeSent;

        // Emit our updated event separate to the others to save
        // moving data around between arrays.
        bytes4[] memory eventCurrencyCode = new bytes4[](1);
        eventCurrencyCode[0] = "XDR";

        uint[] memory eventRate = new uint[](1);
        eventRate[0] = rates["XDR"];

        emit RatesUpdated(eventCurrencyCode, eventRate);
    }

    /**
     * @notice Delete a rate stored in the contract
     * @param currencyKey The currency key you wish to delete the rate for
     */
    function deleteRate(bytes4 currencyKey)
        external
        onlyOracle
    {
        require(rates[currencyKey] > 0, "Rate is zero");

        delete rates[currencyKey];
        delete lastRateUpdateTimes[currencyKey];

        emit RateDeleted(currencyKey);
    }

    /**
     * @notice Set the Oracle that pushes the rate information to this contract
     * @param _oracle The new oracle address
     */
    function setOracle(address _oracle)
        external
        onlyOwner
    {
        oracle = _oracle;
        emit OracleUpdated(oracle);
    }

    /**
     * @notice Set the stale period on the updated rate variables
     * @param _time The new rateStalePeriod
     */
    function setRateStalePeriod(uint _time)
        external
        onlyOwner
    {
        rateStalePeriod = _time;
        emit RateStalePeriodUpdated(rateStalePeriod);
    }

    /* ========== VIEWS ========== */

    /**
     * @notice Retrieve the rate for a specific currency
     */
    function rateForCurrency(bytes4 currencyKey)
        public
        view
        returns (uint)
    {
        return rates[currencyKey];
    }

    /**
     * @notice Retrieve the rates for a list of currencies
     */
    function ratesForCurrencies(bytes4[] currencyKeys)
        public
        view
        returns (uint[])
    {
        uint[] memory _rates = new uint[](currencyKeys.length);

        for (uint8 i = 0; i < currencyKeys.length; i++) {
            _rates[i] = rates[currencyKeys[i]];
        }

        return _rates;
    }

    /**
     * @notice Retrieve a list of last update times for specific currencies
     */
    function lastRateUpdateTimeForCurrency(bytes4 currencyKey)
        public
        view
        returns (uint)
    {
        return lastRateUpdateTimes[currencyKey];
    }

    /**
     * @notice Retrieve the last update time for a specific currency
     */
    function lastRateUpdateTimesForCurrencies(bytes4[] currencyKeys)
        public
        view
        returns (uint[])
    {
        uint[] memory lastUpdateTimes = new uint[](currencyKeys.length);

        for (uint8 i = 0; i < currencyKeys.length; i++) {
            lastUpdateTimes[i] = lastRateUpdateTimes[currencyKeys[i]];
        }

        return lastUpdateTimes;
    }

    /**
     * @notice Check if a specific currency's rate hasn't been updated for longer than the stale period.
     */
    function rateIsStale(bytes4 currencyKey)
        external
        view
        returns (bool)
    {
        // sUSD is a special case and is never stale.
        if (currencyKey == "sUSD") return false;

        return lastRateUpdateTimes[currencyKey].add(rateStalePeriod) < now;
    }

    /**
     * @notice Check if any of the currency rates passed in haven't been updated for longer than the stale period.
     */
    function anyRateIsStale(bytes4[] currencyKeys)
        external
        view
        returns (bool)
    {
        // Loop through each key and check whether the data point is stale.
        uint256 i = 0;

        while (i < currencyKeys.length) {
            // sUSD is a special case and is never false
            if (currencyKeys[i] != "sUSD" && lastRateUpdateTimes[currencyKeys[i]].add(rateStalePeriod) < now) {
                return true;
            }
            i += 1;
        }

        return false;
    }

    /* ========== MODIFIERS ========== */

    modifier onlyOracle
    {
        require(msg.sender == oracle, "Only the oracle can perform this action");
        _;
    }

    /* ========== EVENTS ========== */

    event OracleUpdated(address newOracle);
    event RateStalePeriodUpdated(uint rateStalePeriod);
    event RatesUpdated(bytes4[] currencyKeys, uint[] newRates);
    event RateDeleted(bytes4 currencyKey);
}

Contract ABI

[{"constant":true,"inputs":[],"name":"rateStalePeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"initiationTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"currencyKeys","type":"bytes4[]"},{"name":"newRates","type":"uint256[]"},{"name":"timeSent","type":"uint256"}],"name":"updateRates","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"setSelfDestructBeneficiary","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"terminateSelfDestruct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"currencyKey","type":"bytes4"}],"name":"deleteRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"currencyKeys","type":"bytes4[]"}],"name":"anyRateIsStale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nominatedOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"currencyKeys","type":"bytes4[]"}],"name":"ratesForCurrencies","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_time","type":"uint256"}],"name":"setRateStalePeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_oracle","type":"address"}],"name":"setOracle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"oracle","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"currencyKeys","type":"bytes4[]"}],"name":"lastRateUpdateTimesForCurrencies","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"selfDestruct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"SELFDESTRUCT_DELAY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"xdrParticipants","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"currencyKey","type":"bytes4"}],"name":"rateForCurrency","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"selfDestructInitiated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"initiateSelfDestruct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"currencyKey","type":"bytes4"}],"name":"lastRateUpdateTimeForCurrency","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"selfDestructBeneficiary","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes4"}],"name":"rates","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes4"}],"name":"lastRateUpdateTimes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"currencyKey","type":"bytes4"}],"name":"rateIsStale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_owner","type":"address"},{"name":"_oracle","type":"address"},{"name":"_currencyKeys","type":"bytes4[]"},{"name":"_newRates","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOracle","type":"address"}],"name":"OracleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"rateStalePeriod","type":"uint256"}],"name":"RateStalePeriodUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"currencyKeys","type":"bytes4[]"},{"indexed":false,"name":"newRates","type":"uint256[]"}],"name":"RatesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"currencyKey","type":"bytes4"}],"name":"RateDeleted","type":"event"},{"anonymous":false,"inputs":[],"name":"SelfDestructTerminated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"beneficiary","type":"address"}],"name":"SelfDestructed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"selfDestructDelay","type":"uint256"}],"name":"SelfDestructInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newBeneficiary","type":"address"}],"name":"SelfDestructBeneficiaryUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"}]

Contract Creation Code

6080604052612a306007553480156200001757600080fd5b50604051620026ca380380620026ca83398101604090815281516020830151918301516060840151919390810191018380600160a060020a0381161515620000c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f776e657220616464726573732063616e6e6f74206265203000000000000000604482015290519081900360640190fd5b60008054600160a060020a031916600160a060020a038316908117825560408051928352602083019190915280517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9281900390910190a150600160a060020a0381161515620001b757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4f776e6572206d757374206e6f7420626520746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60038054600160a060020a038316610100810261010060a860020a03199092169190911790915560408051918252517fd5da63a0b864b315bc04128dedbc93888c8529ee6cf47ce664dc204339228c539181900360200190a1508051825114620002a857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f43757272656e6379206b6579206c656e67746820616e642072617465206c656e60448201527f677468206d757374206d617463682e0000000000000000000000000000000000606482015290519081900360840190fd5b60068054600160a060020a031916600160a060020a038516179055604080517f907af6c000000000000000000000000000000000000000000000000000000000815290517384d626b2bb4d0f064067e4bf80fce7055d8f3e7b9163907af6c0916004808301926020929190829003018186803b1580156200032857600080fd5b505af41580156200033d573d6000803e3d6000fd5b505050506040513d60208110156200035457600080fd5b50517f735553440000000000000000000000000000000000000000000000000000000060008190527f9fb26aab670129fe77edeb65291121f3b0b41e28b5cdcb1e5461de51bb21e3c89190915560056020818152427f74c62d09fbc50aefae0794a9a068f786a692826fbdfe63828ec23a875865823f556040805160a0810182529384527f7341554400000000000000000000000000000000000000000000000000000000918401919091527f7343484600000000000000000000000000000000000000000000000000000000908301527f734555520000000000000000000000000000000000000000000000000000000060608301527f734742500000000000000000000000000000000000000000000000000000000060808301526200047f9160089162000bf2565b5062000496828242640100000000620004a1810204565b505050505062000cd6565b600080835185511415156200053d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f43757272656e6379206b6579206172726179206c656e677468206d757374206d60448201527f61746368207261746573206172726179206c656e6774682e0000000000000000606482015290519081900360840190fd5b42610258018310620005b057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f54696d6520697320746f6f2066617220696e746f207468652066757475726500604482015290519081900360640190fd5b5060005b845181101562000851578381815181101515620005cd57fe5b6020908102909101015115156200066b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f5a65726f206973206e6f7420612076616c696420726174652c20706c6561736560448201527f2063616c6c2064656c6574655261746520696e73746561642e00000000000000606482015290519081900360840190fd5b84818151811015156200067a57fe5b90602001906020020151600160e060020a0319167f7355534400000000000000000000000000000000000000000000000000000000141515156200074557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f52617465206f6620735553442063616e6e6f7420626520757064617465642c2060448201527f6974277320616c7761797320554e49542e000000000000000000000000000000606482015290519081900360840190fd5b6005600086838151811015156200075857fe5b60209081029091018101517fffffffff0000000000000000000000000000000000000000000000000000000016825281019190915260400160002054831062000848578381815181101515620007aa57fe5b90602001906020020151600460008784815181101515620007c757fe5b90602001906020020151600160e060020a031916600160e060020a031916815260200190815260200160002081905550826005600087848151811015156200080b57fe5b60209081029091018101517fffffffff00000000000000000000000000000000000000000000000000000000168252810191909152604001600020555b600101620005b4565b6000805160206200268a8339815191528585604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015620008a95781810151838201526020016200088f565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015620008ea578181015183820152602001620008d0565b5050505090500194505050505060405180910390a162000913836401000000006200091e810204565b506001949350505050565b6000806060805b6005831015620009c957620009bb8460046000600887600581106200094657fe5b600891828204019190066004029054906101000a90047c010000000000000000000000000000000000000000000000000000000002600160e060020a031916600160e060020a03191681526020019081526020016000205462000bd8640100000000026200167c179091906401000000009004565b935060019092019162000925565b7f5844520000000000000000000000000000000000000000000000000000000000600052600080516020620026aa83398151915284905560056020527fc6095f8ba0c30294f3d36501e92c5966cb30d5606d2b235ecebf5abd9fffed92859055604080516001808252818301909252908160200160208202803883390190505091507f584452000000000000000000000000000000000000000000000000000000000082600081518110151562000a7c57fe5b7fffffffff000000000000000000000000000000000000000000000000000000009290921660209283029190910182015260408051600180825281830190925291828101908038833950507f584452000000000000000000000000000000000000000000000000000000000060009081526004602052600080516020620026aa83398151915254835193945092849250811062000b1557fe5b90602001906020020181815250506000805160206200268a8339815191528282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101562000b7b57818101518382015260200162000b61565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101562000bbc57818101518382015260200162000ba2565b5050505090500194505050505060405180910390a15050505050565b60008282018381101562000beb57600080fd5b9392505050565b60018301918390821562000c9d5791602002820160005b8382111562000c6957835183826101000a81548163ffffffff02191690837c010000000000000000000000000000000000000000000000000000000090040217905550926020019260040160208160030104928301926001030262000c09565b801562000c9b5782816101000a81549063ffffffff021916905560040160208160030104928301926001030262000c69565b505b5062000cab92915062000caf565b5090565b62000cd391905b8082111562000cab57805463ffffffff1916815560010162000cb6565b90565b6119a48062000ce66000396000f3006080604052600436106101455763ffffffff60e060020a6000350416630ee4951b811461014a5780631627540c1461017157806317c70de4146101945780631d2fed16146101a957806320714f88146101ec5780633278c9601461020d5780633608069414610222578063370d62ad1461024457806353a47bb7146102645780635dc2944a1461029557806379ba50971461033a57806379cb657a1461034f5780637adbf973146103675780637dc0d1d01461038857806389f8ab941461039d5780638da5cb5b146103f25780639cb8a26a14610407578063a461fc821461041c578063aa687daf14610431578063af1ff97214610466578063b8225dec14610488578063bd32aa441461049d578063c0e59e4d146104b2578063c58aaae6146104d4578063de5eb832146104e9578063e1686e721461050b578063ea3d41091461052d575b600080fd5b34801561015657600080fd5b5061015f61054f565b60408051918252519081900360200190f35b34801561017d57600080fd5b50610192600160a060020a0360043516610555565b005b3480156101a057600080fd5b5061015f61061a565b3480156101b557600080fd5b506101d86024600480358281019290820135918135918201910135604435610620565b604080519115158252519081900360200190f35b3480156101f857600080fd5b50610192600160a060020a0360043516610718565b34801561021957600080fd5b5061019261086b565b34801561022e57600080fd5b50610192600160e060020a031960043516610909565b34801561025057600080fd5b506101d86004803560248101910135610a5e565b34801561027057600080fd5b50610279610b22565b60408051600160a060020a039092168252519081900360200190f35b3480156102a157600080fd5b50604080516020600480358082013583810280860185019096528085526102ea95369593946024949385019291829185019084908082843750949750610b319650505050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561032657818101518382015260200161030e565b505050509050019250505060405180910390f35b34801561034657600080fd5b50610192610bd1565b34801561035b57600080fd5b50610192600435610cd9565b34801561037357600080fd5b50610192600160a060020a0360043516610d78565b34801561039457600080fd5b50610279610e43565b3480156103a957600080fd5b50604080516020600480358082013583810280860185019096528085526102ea95369593946024949385019291829185019084908082843750949750610e529650505050505050565b3480156103fe57600080fd5b50610279610ef2565b34801561041357600080fd5b50610192610f01565b34801561042857600080fd5b5061015f6110c6565b34801561043d57600080fd5b506104496004356110cd565b60408051600160e060020a03199092168252519081900360200190f35b34801561047257600080fd5b5061015f600160e060020a0319600435166110fa565b34801561049457600080fd5b506101d861111a565b3480156104a957600080fd5b50610192611123565b3480156104be57600080fd5b5061015f600160e060020a0319600435166111d0565b3480156104e057600080fd5b506102796111ec565b3480156104f557600080fd5b5061015f600160e060020a031960043516611200565b34801561051757600080fd5b5061015f600160e060020a031960043516611212565b34801561053957600080fd5b506101d8600160e060020a031960043516611224565b60075481565b600054600160a060020a031633146105b9576040805160e560020a62461bcd02815260206004820152602f60248201526000805160206119398339815191526044820152600080516020611959833981519152606482015290519081900360840190fd5b60018054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229181900360200190a150565b60025481565b600654600090600160a060020a031633146106ab576040805160e560020a62461bcd02815260206004820152602760248201527f4f6e6c7920746865206f7261636c652063616e20706572666f726d207468697360448201527f20616374696f6e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61070e8686808060200260200160405190810160405280939291908181526020018383602002808284375050604080516020808c0282810182019093528b82529095508b94508a9350839250850190849080828437508994506112969350505050565b9695505050505050565b600054600160a060020a0316331461077c576040805160e560020a62461bcd02815260206004820152602f60248201526000805160206119398339815191526044820152600080516020611959833981519152606482015290519081900360840190fd5b600160a060020a0381161515610802576040805160e560020a62461bcd02815260206004820152602860248201527f42656e6566696369617279206d757374206e6f7420626520746865207a65726f60448201527f2061646472657373000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60038054600160a060020a038316610100810274ffffffffffffffffffffffffffffffffffffffff00199092169190911790915560408051918252517fd5da63a0b864b315bc04128dedbc93888c8529ee6cf47ce664dc204339228c539181900360200190a150565b600054600160a060020a031633146108cf576040805160e560020a62461bcd02815260206004820152602f60248201526000805160206119398339815191526044820152600080516020611959833981519152606482015290519081900360840190fd5b600060028190556003805460ff191690556040517f6adcc7125002935e0aa31697538ebbd65cfddf20431eb6ecdcfc3e238bfd082c9190a1565b600654600160a060020a03163314610991576040805160e560020a62461bcd02815260206004820152602760248201527f4f6e6c7920746865206f7261636c652063616e20706572666f726d207468697360448201527f20616374696f6e00000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160e060020a0319811660009081526004602052604081205411610a00576040805160e560020a62461bcd02815260206004820152600c60248201527f52617465206973207a65726f0000000000000000000000000000000000000000604482015290519081900360640190fd5b600160e060020a0319811660008181526004602090815260408083208390556005825280832092909255815192835290517f2cefb058ca1556b021b67f710e3df89c564650f01fef8cd944cbb14d7358680b9281900390910190a150565b6000805b82811015610b1657838382818110610a7657fe5b90506020020135600160e060020a031916600160e060020a0319167f735553440000000000000000000000000000000000000000000000000000000014158015610b00575042610afe600754600560008888878181101515610ad457fe5b60209081029290920135600160e060020a031916835250810191909152604001600020549061167c565b105b15610b0e5760019150610b1b565b600101610a62565b600091505b5092915050565b600154600160a060020a031681565b60608060008351604051908082528060200260200182016040528015610b61578160200160208202803883390190505b509150600090505b83518160ff161015610b1b5760046000858360ff16815181101515610b8a57fe5b6020908102909101810151600160e060020a0319168252810191909152604001600020548251839060ff8416908110610bbf57fe5b60209081029091010152600101610b69565b600154600160a060020a03163314610c59576040805160e560020a62461bcd02815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527f2063616e20616363657074206f776e6572736869700000000000000000000000606482015290519081900360840190fd5b60005460015460408051600160a060020a03938416815292909116602083015280517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9281900390910190a1600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b600054600160a060020a03163314610d3d576040805160e560020a62461bcd02815260206004820152602f60248201526000805160206119398339815191526044820152600080516020611959833981519152606482015290519081900360840190fd5b60078190556040805182815290517f16529d8c407b08938da67de7fa4319199baffce4f5d1971f812cc770b0237e669181900360200190a150565b600054600160a060020a03163314610ddc576040805160e560020a62461bcd02815260206004820152602f60248201526000805160206119398339815191526044820152600080516020611959833981519152606482015290519081900360840190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091179182905560408051929091168252517f3df77beb5db05fcdd70a30fc8adf3f83f9501b68579455adbd100b8180940394916020908290030190a150565b600654600160a060020a031681565b60608060008351604051908082528060200260200182016040528015610e82578160200160208202803883390190505b509150600090505b83518160ff161015610b1b5760056000858360ff16815181101515610eab57fe5b6020908102909101810151600160e060020a0319168252810191909152604001600020548251839060ff8416908110610ee057fe5b60209081029091010152600101610e8a565b600054600160a060020a031681565b60008054600160a060020a03163314610f66576040805160e560020a62461bcd02815260206004820152602f60248201526000805160206119398339815191526044820152600080516020611959833981519152606482015290519081900360840190fd5b60035460ff161515610fe8576040805160e560020a62461bcd02815260206004820152602860248201527f53656c6620646573747275637420686173206e6f7420796574206265656e206960448201527f6e69746961746564000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b426224ea006002540110151561106e576040805160e560020a62461bcd02815260206004820152602760248201527f53656c662064657374727563742064656c617920686173206e6f74207965742060448201527f656c617073656400000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b5060035460408051600160a060020a0361010090930492909216808352905190917f8a09e1677ced846cb537dc2b172043bd05a1a81ad7e0033a7ef8ba762df990b7919081900360200190a180600160a060020a0316ff5b6224ea0081565b600881600581106110da57fe5b60089182820401919006600402915054906101000a900460e060020a0281565b600160e060020a031981166000908152600460205260409020545b919050565b60035460ff1681565b600054600160a060020a03163314611187576040805160e560020a62461bcd02815260206004820152602f60248201526000805160206119398339815191526044820152600080516020611959833981519152606482015290519081900360840190fd5b426002556003805460ff19166001179055604080516224ea00815290517fcbd94ca75b8dc45c9d80c77e851670e78843c0d75180cb81db3e2158228fa9a69181900360200190a1565b600160e060020a03191660009081526005602052604090205490565b6003546101009004600160a060020a031681565b60046020526000908152604090205481565b60056020526000908152604090205481565b60007f7355534400000000000000000000000000000000000000000000000000000000600160e060020a03198316141561126057506000611115565b600754600160e060020a03198316600090815260056020526040902054429161128f919063ffffffff61167c16565b1092915050565b6000808351855114151561131a576040805160e560020a62461bcd02815260206004820152603860248201527f43757272656e6379206b6579206172726179206c656e677468206d757374206d60448201527f61746368207261746573206172726179206c656e6774682e0000000000000000606482015290519081900360840190fd5b42610258018310611375576040805160e560020a62461bcd02815260206004820152601f60248201527f54696d6520697320746f6f2066617220696e746f207468652066757475726500604482015290519081900360640190fd5b5060005b84518110156115ad57838181518110151561139057fe5b602090810290910101511515611416576040805160e560020a62461bcd02815260206004820152603960248201527f5a65726f206973206e6f7420612076616c696420726174652c20706c6561736560448201527f2063616c6c2064656c6574655261746520696e73746561642e00000000000000606482015290519081900360840190fd5b848181518110151561142457fe5b90602001906020020151600160e060020a0319167f7355534400000000000000000000000000000000000000000000000000000000141515156114d7576040805160e560020a62461bcd02815260206004820152603160248201527f52617465206f6620735553442063616e6e6f7420626520757064617465642c2060448201527f6974277320616c7761797320554e49542e000000000000000000000000000000606482015290519081900360840190fd5b6005600086838151811015156114e957fe5b6020908102909101810151600160e060020a03191682528101919091526040016000205483106115a557838181518110151561152157fe5b9060200190602002015160046000878481518110151561153d57fe5b90602001906020020151600160e060020a031916600160e060020a0319168152602001908152602001600020819055508260056000878481518110151561158057fe5b6020908102909101810151600160e060020a0319168252810191909152604001600020555b600101611379565b7f7a72efae5f6b256f1ca71728b01f9dd7004ff3770dcaef4c44872b94d9f9e91b8585604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156116145781810151838201526020016115fc565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561165357818101518382015260200161163b565b5050505090500194505050505060405180910390a161167183611695565b506001949350505050565b60008282018381101561168e57600080fd5b9392505050565b6000806060805b6005831015611714576117078460046000600887600581106116ba57fe5b600891828204019190066004029054906101000a900460e060020a02600160e060020a031916600160e060020a03191681526020019081526020016000205461167c90919063ffffffff16565b935060019092019161169c565b7f58445200000000000000000000000000000000000000000000000000000000006000527fff1c33bb980e6507c2f1abbbb539f436519cfa198453007a4295f347e328ef6b84905560056020527fc6095f8ba0c30294f3d36501e92c5966cb30d5606d2b235ecebf5abd9fffed92859055604080516001808252818301909252908160200160208202803883390190505091507f58445200000000000000000000000000000000000000000000000000000000008260008151811015156117d757fe5b600160e060020a03199290921660209283029190910182015260408051600180825281830190925291828101908038833950507f5844520000000000000000000000000000000000000000000000000000000000600090815260046020527fff1c33bb980e6507c2f1abbbb539f436519cfa198453007a4295f347e328ef6b54835193945092849250811061186857fe5b90602001906020020181815250507f7a72efae5f6b256f1ca71728b01f9dd7004ff3770dcaef4c44872b94d9f9e91b8282604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156118dd5781810151838201526020016118c5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561191c578181015183820152602001611904565b5050505090500194505050505060405180910390a1505050505056004f6e6c792074686520636f6e7472616374206f776e6572206d617920706572666f726d207468697320616374696f6e0000000000000000000000000000000000a165627a7a723058206d2acb312f4828ef30c82a1d956131a57f4d89cff03a7d733617341f34f99cc400297a72efae5f6b256f1ca71728b01f9dd7004ff3770dcaef4c44872b94d9f9e91bff1c33bb980e6507c2f1abbbb539f436519cfa198453007a4295f347e328ef6b000000000000000000000000ea5e288b4f9d7e66da162e2af0db371783f62454000000000000000000000000ac1ed4fabbd5204e02950d68b6fc8c446ac95362000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001534e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000002c68af0bb140000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000ea5e288b4f9d7e66da162e2af0db371783f62454000000000000000000000000ac1ed4fabbd5204e02950d68b6fc8c446ac95362000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001534e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000002c68af0bb140000

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000ea5e288b4f9d7e66da162e2af0db371783f62454
Arg [1] : 000000000000000000000000ac1ed4fabbd5204e02950d68b6fc8c446ac95362
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 534e580000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [7] : 00000000000000000000000000000000000000000000000002c68af0bb140000

Library Used

SafeDecimalMath : 0x84D626B2BB4D0F064067e4BF80FCe7055d8F3E7B

Swarm Source

bzzr://6d2acb312f4828ef30c82a1d956131a57f4d89cff03a7d733617341f34f99cc4
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.