Contract 0xeA88f3132ACe8892f8Bf9DC4352C369b51553feE

 
Ad
Ad
Txn Hash Method
Block
From
To
Value
0x3afad702e17a3a1333dc1282482e31ad3bad0dff449327c7a92816bd97336d60Set Rebase Locke...120276092021-03-13 2:55:28188 days 17 hrs agoRebased: Deployer IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.00625327145
0xdf9d058fa94a4a986bb82b975af17decd10bae72c7d75f51e474237da41ff6e9Rebase120180432021-03-11 15:19:13190 days 5 hrs agoRebased: Deployer IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.04797948181
0x947d87b238b712c236f4e0317bf07ae83d3f7b7de138f50749705cc32249ddb5Rebase120161202021-03-11 8:12:27190 days 12 hrs agoRebased: Deployer IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.033135125
0x905861583d6f4c60e68a639b1f26652419bf3e64f73a17c33a6e30f963e40d5cRebase120105322021-03-10 11:30:03191 days 9 hrs agoRebased: Deployer IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.0318096120
0x41261824f9c35a44bc6dabc7c7d0b5ff9fc4a53adf62bdbad9d32aba523f82bcRebase119961462021-03-08 6:04:16193 days 14 hrs agoRebased: Deployer IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.02584215897
0x54961be35e960baf56832573c884b6fa64adeec052812bbc0b901bdf30258c4dRebase117818812021-02-03 7:14:34226 days 13 hrs ago0xd8b280b46b25d689f283a044273d6104be74301c IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.02954501110
0x1e909b77ac9184b45e549f0bb6ca2a4103010ff2c4372557cdb47ca0611c780aRebase116775392021-01-18 6:10:07242 days 14 hrs ago0x1dc6c207385be418640038f8b9ecff37f35b5dde IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.01106692541
0xfc54a4b78a156e4c62723f411d888e0b2fd6a8e1b6bf8cb0998aaaa61a80fa63Rebase115854972021-01-04 3:12:54256 days 17 hrs agoRebased: Deployer IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.034469563153138.900001021
0x7fd6dcc6000eabf5a4896b68809c02fc84a3d00b47d6227b2b458cda434c8483Rebase114857412020-12-19 19:58:51272 days 39 mins ago0xc80c0c80f815db5392a6f5a0034a4e3f0fe29f99 IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.00873232535
0xdfb40d27f5e27bbf6713489d3b6fc2034d9ed91bce2f33d529008fcaf5feb866Rebase114503422020-12-14 9:34:09277 days 11 hrs agoRebased: Deployer IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.01538572543257.000001604
0xb0d8a6482516a36d1a27a7ea314d8a02853b703fa24e02a891d2b37264812c25Rebase114451102020-12-13 14:04:47278 days 6 hrs ago0xd97c0e3cdf140ba9c269e74dd42a69fa8a7f86aa IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.01019020917137.752002116
0x0fc037c26c97537cb6dcf053081470c59ef2d5bc4a6defe021fa19c428061d66Rebase114435222020-12-13 8:23:00278 days 12 hrs ago0xe640f69288680517caaebc7e1986b78a9b5f9422 IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.0069858628
0xebbebca987d6b7d3304f4ab6c3aaba35dcbfd9700ca77ab8f33367235e26cc3cRebase114408532020-12-12 22:34:39278 days 22 hrs ago0xd97c0e3cdf140ba9c269e74dd42a69fa8a7f86aa IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.0059878824
0x41a914855e6480cfabe5e34c81ad4040cb9bf3cd33afe0543fd089bd7cf51abaRebase114397622020-12-12 18:29:48279 days 2 hrs ago0xd97c0e3cdf140ba9c269e74dd42a69fa8a7f86aa IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.0044909118
0x48ff069a0533427677a7954b6c51e8090e552bc0f916970f9127564248280368Rebase114381982020-12-12 12:48:52279 days 7 hrs ago0x25cc5677c82453ea26642f7a3f733c6006c31011 IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.00521496820.9
0x13753781867c84bc314a01ae5ef1b7253b67dca42a4a7ba28d451381d837482fRebase114339602020-12-11 21:01:21279 days 23 hrs ago0x1dc6c207385be418640038f8b9ecff37f35b5dde IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.00599431548522.500001823
0x456c2be14c08f97b12aff8e3482533ab80eb1150d8d5544803330374fcb2f898Rebase114316392020-12-11 12:30:54280 days 8 hrs ago0x137936bb17ea85a70dc9fc44c17b3cee0452883f IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.00747689948128.06496461
0x82804243770c5a6ff32afd833c1232f5e046d3fcf1ae26f9b9e10297e81f8bcaRebase114293922020-12-11 4:11:09280 days 16 hrs agoRebased: Deployer IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.01571842659
0x48b8b45c4313aca7f312fdd27f0eddb11720629ec23b116b54c239c7e7f1d00cRebase114257042020-12-10 14:30:02281 days 6 hrs agoRebased: Deployer IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.0186489870
0xede85cff0e4845efa1f2dd9761af938a0054d9a7bc2038c0d40ca7eeedbb7083Rebase114223092020-12-10 1:48:27281 days 18 hrs ago0x1dc6c207385be418640038f8b9ecff37f35b5dde IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.0111333642
0x41770174bb5dc8713c959857ab6883e12024640353a4ab74ec67ded31d6d82a7Rebase114196402020-12-09 16:00:37282 days 4 hrs agoRebased: Deployer IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.022272210483.6
0x535478a8ae2458549e88f1c75eed71de439fbd525b037ad97880330ba02a41cbRebase114185142020-12-09 11:59:01282 days 8 hrs agoRebased: Deployer IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.01918180872
0x242fa641db5dc1683ddcbd76e5b9013e6fd8ec3400ae21c2771894f343e2d480Rebase114174002020-12-09 7:45:17282 days 12 hrs ago0x116a0bd45575719711804276b6d92226017d37b9 IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.01092018444
0x2432d5eb5b2c99f048ae92bfccc7203d056d8dd2fdceef532c3d460e05150b90Rebase114153622020-12-09 0:26:25282 days 20 hrs ago0x3be0cdbf9b1cad6e6697fc153fba56dea1be4ab7 IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.02551614595
0x02a52994663ca3c94dad4eb50ad91ba3908599137f6262c15e88cb8f11f2c984Rebase114148592020-12-08 22:32:44282 days 22 hrs ago0xc05970d33a2a2715ccc96ab8a92e6229f44ba58f IN  0xea88f3132ace8892f8bf9dc4352c369b51553fee0 Ether0.00064875627
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RebasedController

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-10-03
*/

// SPDX-License-Identifier: MIT

/*
MIT License

Copyright (c) 2018 requestnetwork
Copyright (c) 2018 Fragments, Inc.
Copyright (c) 2020 Rebased

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

*/

pragma solidity 0.5.17;

/**
 * @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;
  }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b)
        internal
        pure
        returns (int256)
    {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b)
        internal
        pure
        returns (int256)
    {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b)
        internal
        pure
        returns (int256)
    {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b)
        internal
        pure
        returns (int256)
    {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a)
        internal
        pure
        returns (int256)
    {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
}

/**
 * @title Various utilities useful for uint256.
 */
library UInt256Lib {

    uint256 private constant MAX_INT256 = ~(uint256(1) << 255);

    /**
     * @dev Safely converts a uint256 to an int256.
     */
    function toInt256Safe(uint256 a)
        internal
        pure
        returns (int256)
    {
        require(a <= MAX_INT256);
        return int256(a);
    }
}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 {

  function totalSupply() external view returns (uint256);

  function balanceOf(address who) external view returns (uint256);

  function allowance(address owner, address spender)
    external view returns (uint256);

  function transfer(address to, uint256 value) external returns (bool);

  function approve(address spender, uint256 value)
    external returns (bool);

  function transferFrom(address from, address to, uint256 value)
    external returns (bool);

  event Transfer(
    address indexed from,
    address indexed to,
    uint256 value
  );

  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}

interface IRebased {
    function totalSupply() external view returns (uint256);
    function rebase(uint256 epoch, int256 supplyDelta) external returns (uint256);
}

interface IOracle {
    function getData() external view returns (uint256);
    function update() external;
}


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address private _owner;

  event OwnershipRenounced(address indexed previousOwner);
  
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    _owner = msg.sender;
  }

  /**
   * @return the address of the owner.
   */
  function owner() public view returns(address) {
    return _owner;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(isOwner());
    _;
  }

  /**
   * @return true if `msg.sender` is the owner of the contract.
   */
  function isOwner() public view returns(bool) {
    return msg.sender == _owner;
  }

  /**
   * @dev Allows the current owner to relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(_owner);
    _owner = address(0);
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    _transferOwnership(newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address newOwner) internal {
    require(newOwner != address(0));
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }
}

/**
 * @title Rebased Controller
 * @dev Controller for an elastic supply currency based on the uFragments Ideal Money protocol a.k.a. Ampleforth.
 *      uFragments operates symmetrically on expansion and contraction. It will both split and
 *      combine coins to maintain a stable unit price.
 *
 *      This component regulates the token supply of the uFragments ERC20 token in response to
 *      market oracles.
 */
contract RebasedController is Ownable {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    using UInt256Lib for uint256;

    struct Transaction {
        bool enabled;
        address destination;
        bytes data;
    }

    event TransactionFailed(address indexed destination, uint index, bytes data);

    // Stable ordering is not guaranteed.
    Transaction[] public transactions;

    event LogRebase(
        uint256 indexed epoch,
        uint256 exchangeRate,
        int256 requestedSupplyAdjustment,
        uint256 timestampSec
    );

    IRebased public rebased;

    // Market oracle provides the token/USD exchange rate as an 18 decimal fixed point number.
    IOracle public marketOracle;

    // If the current exchange rate is within this fractional distance from the target, no supply
    // update is performed. Fixed point number--same format as the rate.
    // (ie) abs(rate - targetRate) / targetRate < deviationThreshold, then no supply change.
    // DECIMALS Fixed point number.
    uint256 public deviationThreshold;

    // More than this much time must pass between rebase operations.
    uint256 public rebaseCooldown;

    // Block timestamp of last rebase operation
    uint256 public lastRebaseTimestampSec;

    // The number of rebase cycles since inception
    uint256 public epoch;

    uint256 private constant DECIMALS = 18;

    // Due to the expression in computeSupplyDelta(), MAX_RATE * MAX_SUPPLY must fit into an int256.
    // Both are 18 decimals fixed point numbers.
    uint256 private constant MAX_RATE = 10**6 * 10**DECIMALS;
    // MAX_SUPPLY = MAX_INT256 / MAX_RATE
    uint256 private constant MAX_SUPPLY = ~(uint256(1) << 255) / MAX_RATE;

    // Rebase will remain restricted to the owner until the final Oracle is deployed and battle-tested.
    // Ownership will be renounced after this inital period.
    
    bool public rebaseLocked; 

    constructor(address _rebased) public {
        deviationThreshold = 5 * 10 ** (DECIMALS-2);

        // rebaseLag = 10;
        rebaseCooldown = 4 hours;
        lastRebaseTimestampSec = 0;
        epoch = 0;
        rebaseLocked = true;
        
        rebased = IRebased(_rebased);
    }
    
    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * @notice Override to ensure that rebases aren't locked when this happens.
     */
     
    function renounceOwnership() public onlyOwner {
        require(!rebaseLocked, "Cannot renounce ownership if rebase is locked");
        super.renounceOwnership();
    }
        
    function setRebaseLocked(bool _locked) external onlyOwner {
        rebaseLocked = _locked;
    }

    /**
     * @notice Returns true if at least minRebaseTimeIntervalSec seconds have passed since last rebase.
     *
     */
     
    function canRebase() public view returns (bool) {
        return ((!rebaseLocked || isOwner()) && lastRebaseTimestampSec.add(rebaseCooldown) < now);
    }
    
    function cooldownExpiryTimestamp() public view returns (uint256) {
        return lastRebaseTimestampSec.add(rebaseCooldown);
    }

    /**
     * @notice Initiates a new rebase operation, provided the minimum time period has elapsed.
     *
     */
     
    function rebase() external {

        require(tx.origin == msg.sender);
        require(canRebase(), "Rebase not allowed");

        lastRebaseTimestampSec = now;

        epoch = epoch.add(1);
        
        (uint256 exchangeRate, uint256 targetRate, int256 supplyDelta) = getRebaseValues();
        
        uint256 supplyAfterRebase = rebased.rebase(epoch, supplyDelta);
        
        assert(supplyAfterRebase <= MAX_SUPPLY);
        
        for (uint i = 0; i < transactions.length; i++) {
            Transaction storage t = transactions[i];
            if (t.enabled) {
                bool result =
                    externalCall(t.destination, t.data);
                if (!result) {
                    emit TransactionFailed(t.destination, i, t.data);
                    revert("Transaction Failed");
                }
            }
        }
        
        marketOracle.update();
        
        emit LogRebase(epoch, exchangeRate, supplyDelta, now);
    }
    
    /**
     * @notice Calculates the supplyDelta and returns the current set of values for the rebase
     *
     * @dev The supply adjustment equals (_totalSupply * DeviationFromTargetRate) / rebaseLag
     *      Where DeviationFromTargetRate is (MarketOracleRate - targetRate) / targetRate
     * 
     */    
    
    function getRebaseValues() public view returns (uint256, uint256, int256) {

        uint256 targetRate = 10 ** DECIMALS;
        uint256 exchangeRate = marketOracle.getData();

        if (exchangeRate > MAX_RATE) {
            exchangeRate = MAX_RATE;
        }

        int256 supplyDelta = computeSupplyDelta(exchangeRate, targetRate);

        // Apply the dampening factor.
        if (supplyDelta < 0) {
            supplyDelta = supplyDelta.div(2);
        } else {
            supplyDelta = supplyDelta.div(5);                   
        }

        if (supplyDelta > 0 && rebased.totalSupply().add(uint256(supplyDelta)) > MAX_SUPPLY) {
            supplyDelta = (MAX_SUPPLY.sub(rebased.totalSupply())).toInt256Safe();
        }

        return (exchangeRate, targetRate, supplyDelta);
    }


    /**
     * @return Computes the total supply adjustment in response to the exchange rate
     *         and the targetRate.
     */
    function computeSupplyDelta(uint256 rate, uint256 targetRate)
        internal
        view
        returns (int256)
    {
        if (withinDeviationThreshold(rate, targetRate)) {
            return 0;
        }

        // supplyDelta = totalSupply * (rate - targetRate) / targetRate
        int256 targetRateSigned = targetRate.toInt256Safe();
        return rebased.totalSupply().toInt256Safe()
            .mul(rate.toInt256Safe().sub(targetRateSigned))
            .div(targetRateSigned);
    }

    /**
     * @param rate The current exchange rate, an 18 decimal fixed point number.
     * @param targetRate The target exchange rate, an 18 decimal fixed point number.
     * @return If the rate is within the deviation threshold from the target rate, returns true.
     *         Otherwise, returns false.
     */
    function withinDeviationThreshold(uint256 rate, uint256 targetRate)
        internal
        view
        returns (bool)
    {
        uint256 absoluteDeviationThreshold = targetRate.mul(deviationThreshold)
            .div(10 ** DECIMALS);

        return (rate >= targetRate && rate.sub(targetRate) < absoluteDeviationThreshold)
            || (rate < targetRate && targetRate.sub(rate) < absoluteDeviationThreshold);
    }
    
    /**
     * @notice Sets the reference to the market oracle.
     * @param marketOracle_ The address of the market oracle contract.
     */
    function setMarketOracle(IOracle marketOracle_)
        external
        onlyOwner
    {
        marketOracle = marketOracle_;
    }
    
    /**
     * @notice Adds a transaction that gets called for a downstream receiver of rebases
     * @param destination Address of contract destination
     * @param data Transaction data payload
     */
    function addTransaction(address destination, bytes calldata data)
        external
        onlyOwner
    {
        transactions.push(Transaction({
            enabled: true,
            destination: destination,
            data: data
        }));
    }

    /**
     * @param index Index of transaction to remove.
     *              Transaction ordering may have changed since adding.
     */
    function removeTransaction(uint index)
        external
        onlyOwner
    {
        require(index < transactions.length, "index out of bounds");

        if (index < transactions.length - 1) {
            transactions[index] = transactions[transactions.length - 1];
        }

        transactions.length--;
    }

    /**
     * @param index Index of transaction. Transaction ordering may have changed since adding.
     * @param enabled True for enabled, false for disabled.
     */
    function setTransactionEnabled(uint index, bool enabled)
        external
        onlyOwner
    {
        require(index < transactions.length, "index must be in range of stored tx list");
        transactions[index].enabled = enabled;
    }

    /**
     * @return Number of transactions, both enabled and disabled, in transactions list.
     */
    function transactionsSize()
        external
        view
        returns (uint256)
    {
        return transactions.length;
    }

    /**
     * @dev wrapper to call the encoded transactions on downstream consumers.
     * @param destination Address of destination contract.
     * @param data The encoded data payload.
     * @return True on success
     */
    function externalCall(address destination, bytes memory data)
        internal
        returns (bool)
    {
        bool result;
        assembly {  // solhint-disable-line no-inline-assembly
            // "Allocate" memory for output
            // (0x40 is where "free memory" pointer is stored by convention)
            let outputAddress := mload(0x40)

            // First 32 bytes are the padded length of data, so exclude that
            let dataAddress := add(data, 32)

            result := call(
                sub(gas(), 34710),
                destination,
                0, // transfer value in wei
                dataAddress,
                mload(data),  // Size of the input, in bytes. Stored in position 0 of the array.
                outputAddress,
                0  // Output is ignored, therefore the output size is zero
            )
        }
        return result;
    }    
    
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_rebased","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"exchangeRate","type":"uint256"},{"indexed":false,"internalType":"int256","name":"requestedSupplyAdjustment","type":"int256"},{"indexed":false,"internalType":"uint256","name":"timestampSec","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"destination","type":"address"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TransactionFailed","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"addTransaction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"canRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cooldownExpiryTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"deviationThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"epoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getRebaseValues","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"int256","name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastRebaseTimestampSec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"marketOracle","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"rebase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rebaseCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rebaseLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rebased","outputs":[{"internalType":"contract IRebased","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removeTransaction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IOracle","name":"marketOracle_","type":"address"}],"name":"setMarketOracle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_locked","type":"bool"}],"name":"setRebaseLocked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransactionEnabled","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"transactionsSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506040516115613803806115618339818101604052602081101561003357600080fd5b5051600080546001600160a01b03199081163317825566b1a2bc2ec5000060045561384060055560068290556007919091556008805460ff19166001179055600280546001600160a01b03909316929091169190911790556114c78061009a6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80636e9dde99116100b857806391d4ec181161007c57806391d4ec18146102ea5780639ace38c2146102f25780639e30bac5146103ab578063af14052c146103d1578063d94ad837146103d9578063f2fde38b146103e157610142565b80636e9dde99146102a5578063715018a6146102ca5780638da5cb5b146102d25780638f32d59b146102da578063900cf0cf146102e257610142565b8063329ceacd1161010a578063329ceacd1461024e5780633a93069b1461025657806346c3bd1f1461027057806356fecc8e1461028d57806360961528146102955780636412bb711461029d57610142565b806305919e7d14610147578063112045ba14610168578063126e19be1461018c57806330d6f02f1461020c5780633148235a14610228575b600080fd5b6101666004803603602081101561015d57600080fd5b50351515610407565b005b61017061042b565b604080516001600160a01b039092168252519081900360200190f35b610166600480360360408110156101a257600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156101cd57600080fd5b8201836020820111156101df57600080fd5b8035906020019184600183028401116401000000008311171561020157600080fd5b50909250905061043a565b61021461051a565b604080519115158252519081900360200190f35b610230610523565b60408051938452602084019290925282820152519081900360600190f35b610214610770565b61025e6107af565b60408051918252519081900360200190f35b6101666004803603602081101561028657600080fd5b50356107b5565b61025e6108da565b6101706108e0565b61025e6108ef565b610166600480360360408110156102bb57600080fd5b50803590602001351515610908565b61016661098a565b6101706109e7565b6102146109f6565b61025e610a07565b61025e610a0d565b61030f6004803603602081101561030857600080fd5b5035610a13565b6040518084151515158152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561036e578181015183820152602001610356565b50505050905090810190601f16801561039b5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610166600480360360208110156103c157600080fd5b50356001600160a01b0316610ad8565b610166610b0b565b61025e610eed565b610166600480360360208110156103f757600080fd5b50356001600160a01b0316610ef3565b61040f6109f6565b61041857600080fd5b6008805460ff1916911515919091179055565b6002546001600160a01b031681565b6104426109f6565b61044b57600080fd5b60016040518060600160405280600115158152602001856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250508354600181810180875595835260209283902085516002909302018054848701516001600160a01b031661010002610100600160a81b031994151560ff19909216919091179390931692909217825560408501518051929450610511939185019291019061128b565b50505050505050565b60085460ff1681565b6000806000806012600a0a90506000600360009054906101000a90046001600160a01b03166001600160a01b0316633bc5de306040518163ffffffff1660e01b815260040160206040518083038186803b15801561058057600080fd5b505afa158015610594573d6000803e3d6000fd5b505050506040513d60208110156105aa57600080fd5b5051905069d3c21bcecceda10000008111156105cd575069d3c21bcecceda10000005b60006105d98284610f10565b905060008112156105fc576105f581600263ffffffff610fef16565b9050610610565b61060d81600563ffffffff610fef16565b90505b6000811380156106bb575069d3c21bcecceda10000006001600160ff1b03046106b982600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561068157600080fd5b505afa158015610695573d6000803e3d6000fd5b505050506040513d60208110156106ab57600080fd5b50519063ffffffff61102016565b115b156107655761076261075d600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561071457600080fd5b505afa158015610728573d6000803e3d6000fd5b505050506040513d602081101561073e57600080fd5b5051759abe14cd44753b52c4926a9672793542d78c3615cf3a90611039565b61104e565b90505b909591945092509050565b60085460009060ff16158061078857506107886109f6565b80156107a95750426107a760055460065461102090919063ffffffff16565b105b90505b90565b60065481565b6107bd6109f6565b6107c657600080fd5b6001548110610812576040805162461bcd60e51b8152602060048201526013602482015272696e646578206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b600154600019018110156108c35760018054600019810190811061083257fe5b90600052602060002090600202016001828154811061084d57fe5b6000918252602090912082546002928302909101805460ff191660ff9092161515919091178082558354610100600160a81b0319909116610100918290046001600160a01b031682021782556001808501805493946108bf948387019492938116159092026000190190911604611305565b5050505b60018054906108d690600019830161137a565b5050565b60055481565b6003546001600160a01b031681565b60006107a960055460065461102090919063ffffffff16565b6109106109f6565b61091957600080fd5b60015482106109595760405162461bcd60e51b815260040180806020018281038252602881526020018061143e6028913960400191505060405180910390fd5b806001838154811061096757fe5b60009182526020909120600290910201805460ff19169115159190911790555050565b6109926109f6565b61099b57600080fd5b60085460ff16156109dd5760405162461bcd60e51b815260040180806020018281038252602d815260200180611466602d913960400191505060405180910390fd5b6109e5611068565b565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60075481565b60015490565b60018181548110610a2057fe5b6000918252602091829020600291820201805460018083018054604080516101009483161585026000190190921696909604601f810188900488028201880190965285815260ff84169750919092046001600160a01b03169492939092830182828015610ace5780601f10610aa357610100808354040283529160200191610ace565b820191906000526020600020905b815481529060010190602001808311610ab157829003601f168201915b5050505050905083565b610ae06109f6565b610ae957600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b323314610b1757600080fd5b610b1f610770565b610b65576040805162461bcd60e51b8152602060048201526012602482015271149958985cd9481b9bdd08185b1b1bddd95960721b604482015290519081900360640190fd5b42600655600754610b7d90600163ffffffff61102016565b60075560008080610b8c610523565b60025460075460408051637a43e23f60e01b8152600481019290925260248201849052519497509295509093506000926001600160a01b0390911691637a43e23f91604480830192602092919082900301818787803b158015610bee57600080fd5b505af1158015610c02573d6000803e3d6000fd5b505050506040513d6020811015610c1857600080fd5b50519050759abe14cd44753b52c4926a9672793542d78c3615cf3a811115610c3c57fe5b60005b600154811015610e3a57600060018281548110610c5857fe5b60009182526020909120600290910201805490915060ff1615610e315780546001808301805460408051602060026101009685161587026000190190941693909304601f8101849004840282018401909252818152600095610d209590046001600160a01b0316939092909190830182828015610d165780601f10610ceb57610100808354040283529160200191610d16565b820191906000526020600020905b815481529060010190602001808311610cf957829003601f168201915b50505050506110c1565b905080610e2f5781546040805185815260208101828152600180870180546002610100938216158402600019019091160494840185905294046001600160a01b0316937f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263938893919290606083019084908015610dde5780601f10610db357610100808354040283529160200191610dde565b820191906000526020600020905b815481529060010190602001808311610dc157829003601f168201915b5050935050505060405180910390a26040805162461bcd60e51b8152602060048201526012602482015271151c985b9cd858dd1a5bdb8811985a5b195960721b604482015290519081900360640190fd5b505b50600101610c3f565b50600360009054906101000a90046001600160a01b03166001600160a01b031663a2e620456040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e8b57600080fd5b505af1158015610e9f573d6000803e3d6000fd5b50506007546040805188815260208101879052428183015290519193507f7f5c8486e564c1d27c32da42b1ba6a909114d7bbea36de9a66bc0bebfba26bc3925081900360600190a250505050565b60045481565b610efb6109f6565b610f0457600080fd5b610f0d816110e4565b50565b6000610f1c8383611152565b15610f2957506000610fe9565b6000610f348361104e565b9050610fe581610fd9610f5684610f4a8961104e565b9063ffffffff6111c816565b600254604080516318160ddd60e01b81529051610fcd926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015610f9c57600080fd5b505afa158015610fb0573d6000803e3d6000fd5b505050506040513d6020811015610fc657600080fd5b505161104e565b9063ffffffff6111fb16565b9063ffffffff610fef16565b9150505b92915050565b6000816000191415806110065750600160ff1b8314155b61100f57600080fd5b81838161101857fe5b059392505050565b60008282018381101561103257600080fd5b9392505050565b60008282111561104857600080fd5b50900390565b60006001600160ff1b0382111561106457600080fd5b5090565b6110706109f6565b61107957600080fd5b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b6000806040516020840160008286518360008a6187965a03f19695505050505050565b6001600160a01b0381166110f757600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008061117e6012600a0a6111726004548661124290919063ffffffff16565b9063ffffffff61126916565b905082841015801561119e57508061119c858563ffffffff61103916565b105b80610fe557508284108015610fe55750806111bf848663ffffffff61103916565b10949350505050565b60008183038183128015906111dd5750838113155b806111f257506000831280156111f257508381135b61103257600080fd5b6000828202600160ff1b8114158061121c5750600160ff1b84811690841614155b61122557600080fd5b8215806111f257508383828161123757fe5b051461103257600080fd5b60008261125157506000610fe9565b8282028284828161125e57fe5b041461103257600080fd5b600080821161127757600080fd5b600082848161128257fe5b04949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106112cc57805160ff19168380011785556112f9565b828001600101855582156112f9579182015b828111156112f95782518255916020019190600101906112de565b506110649291506113ab565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061133e57805485556112f9565b828001600101855582156112f957600052602060002091601f016020900482015b828111156112f957825482559160010191906001019061135f565b8154818355818111156113a6576002028160020283600052602060002091820191016113a691906113c5565b505050565b6107ac91905b8082111561106457600081556001016113b1565b6107ac91905b808211156110645780546001600160a81b031916815560006113f060018301826113f9565b506002016113cb565b50805460018160011615610100020316600290046000825580601f1061141f5750610f0d565b601f016020900490600052602060002090810190610f0d91906113ab56fe696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c69737443616e6e6f742072656e6f756e6365206f776e65727368697020696620726562617365206973206c6f636b6564a265627a7a7231582009c6c697c6e57d16a9bcaf82335e79ee864d497a85de40dbf31a0bee401fa4e364736f6c6343000511003200000000000000000000000087f5f9ebe40786d49d35e1b5997b07ccaa8adbff

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

00000000000000000000000087f5f9ebe40786d49d35e1b5997b07ccaa8adbff

-----Decoded View---------------
Arg [0] : _rebased (address): 0x87f5f9ebe40786d49d35e1b5997b07ccaa8adbff

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000087f5f9ebe40786d49d35e1b5997b07ccaa8adbff


Deployed ByteCode Sourcemap

8669:10072:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8669:10072:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11333:99;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11333:99:0;;;;:::i;:::-;;9266:23;;;:::i;:::-;;;;-1:-1:-1;;;;;9266:23:0;;;;;;;;;;;;;;16137:262;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;16137:262:0;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;16137:262:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16137:262:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;16137:262:0;;-1:-1:-1;16137:262:0;-1:-1:-1;16137:262:0;:::i;10616:24::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;13364:822;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;11578:156;;;:::i;9933:37::-;;;:::i;:::-;;;;;;;;;;;;;;;;16551:328;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16551:328:0;;:::i;9846:29::-;;;:::i;9394:27::-;;;:::i;11746:133::-;;;:::i;17061:246::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17061:246:0;;;;;;;;;:::i;11145:172::-;;;:::i;6872:72::-;;;:::i;7174:85::-;;;:::i;10031:20::-;;;:::i;17422:137::-;;;:::i;9056:33::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9056:33:0;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;9056:33:0;-1:-1:-1;;;;;9056:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9056:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15777:137;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15777:137:0;-1:-1:-1;;;;;15777:137:0;;:::i;12016:1009::-;;;:::i;9734:33::-;;;:::i;7814:103::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7814:103:0;-1:-1:-1;;;;;7814:103:0;;:::i;11333:99::-;7065:9;:7;:9::i;:::-;7057:18;;;;;;11402:12;:22;;-1:-1:-1;;11402:22:0;;;;;;;;;;11333:99::o;9266:23::-;;;-1:-1:-1;;;;;9266:23:0;;:::o;16137:262::-;7065:9;:7;:9::i;:::-;7057:18;;;;;;16256:12;16274:116;;;;;;;;16310:4;16274:116;;;;;;16342:11;-1:-1:-1;;;;;16274:116:0;;;;;16374:4;;16274:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;16274:116:0;;;;-1:-1:-1;;27:10;;39:1;23:18;;;45:23;;;16256:135:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16256:135:0;;;-1:-1:-1;;;;;;16256:135:0;;;-1:-1:-1;;16256:135:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16256:135:0;;;;;;;;;;:::i;:::-;;;;;16137:262;;;:::o;10616:24::-;;;;;;:::o;13364:822::-;13412:7;13421;13430:6;13451:18;10096:2;13472;:14;13451:35;;13497:20;13520:12;;;;;;;;;-1:-1:-1;;;;;13520:12:0;-1:-1:-1;;;;;13520:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13520:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13520:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13520:22:0;;-1:-1:-1;10295:20:0;13559:23;;13555:79;;;-1:-1:-1;10295:20:0;13555:79;13646:18;13667:44;13686:12;13700:10;13667:18;:44::i;:::-;13646:65;;13782:1;13768:11;:15;13764:164;;;13814:18;:11;13830:1;13814:18;:15;:18;:::i;:::-;13800:32;;13764:164;;;13879:18;:11;13895:1;13879:18;:15;:18;:::i;:::-;13865:32;;13764:164;13958:1;13944:11;:15;:79;;;;-1:-1:-1;10295:20:0;-1:-1:-1;;;;;10403:31:0;13963:47;13997:11;13963:7;;;;;;;;;-1:-1:-1;;;;;13963:7:0;-1:-1:-1;;;;;13963:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13963:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13963:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13963:21:0;;:47;:25;:47;:::i;:::-;:60;13944:79;13940:180;;;14054:54;14055:37;14070:7;;;;;;;;;-1:-1:-1;;;;;14070:7:0;-1:-1:-1;;;;;14070:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14070:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14070:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14070:21:0;10403:31;;14055:14;:37::i;:::-;14054:52;:54::i;:::-;14040:68;;13940:180;14140:12;;14154:10;;-1:-1:-1;14140:12:0;-1:-1:-1;13364:822:0;-1:-1:-1;13364:822:0:o;11578:156::-;11647:12;;11620:4;;11647:12;;11646:13;;:26;;;11663:9;:7;:9::i;:::-;11645:80;;;;;11722:3;11677:42;11704:14;;11677:22;;:26;;:42;;;;:::i;:::-;:48;11645:80;11637:89;;11578:156;;:::o;9933:37::-;;;;:::o;16551:328::-;7065:9;:7;:9::i;:::-;7057:18;;;;;;16659:12;:19;16651:27;;16643:59;;;;;-1:-1:-1;;;16643:59:0;;;;;;;;;;;;-1:-1:-1;;;16643:59:0;;;;;;;;;;;;;;;16749:1;16727:19;-1:-1:-1;;16727:23:0;16719:31;;16715:123;;;16789:12;16802:19;;-1:-1:-1;;16802:23:0;;;16789:37;;;;;;;;;;;;;;;;16767:12;16780:5;16767:19;;;;;;;;;;;;;;;;:59;;:19;;;;;;;:59;;-1:-1:-1;;16767:59:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16767:59:0;;;;;;;;-1:-1:-1;;;;;16767:59:0;;;;;;-1:-1:-1;16767:59:0;;;;;:19;;:59;;;;;;;;;;;;;;-1:-1:-1;;16767:59:0;;;;;;:::i;:::-;-1:-1:-1;;;16715:123:0;16850:12;:21;;;;;-1:-1:-1;;16850:21:0;;;:::i;:::-;;16551:328;:::o;9846:29::-;;;;:::o;9394:27::-;;;-1:-1:-1;;;;;9394:27:0;;:::o;11746:133::-;11802:7;11829:42;11856:14;;11829:22;;:26;;:42;;;;:::i;17061:246::-;7065:9;:7;:9::i;:::-;7057:18;;;;;;17187:12;:19;17179:27;;17171:80;;;;-1:-1:-1;;;17171:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17292:7;17262:12;17275:5;17262:19;;;;;;;;;;;;;;;;;;;;;:37;;-1:-1:-1;;17262:37:0;;;;;;;;;;-1:-1:-1;;17061:246:0:o;11145:172::-;7065:9;:7;:9::i;:::-;7057:18;;;;;;11211:12;;;;11210:13;11202:71;;;;-1:-1:-1;;;11202:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11284:25;:23;:25::i;:::-;11145:172::o;6872:72::-;6909:7;6932:6;-1:-1:-1;;;;;6932:6:0;6872:72;:::o;7174:85::-;7213:4;7247:6;-1:-1:-1;;;;;7247:6:0;7233:10;:20;;7174:85::o;10031:20::-;;;;:::o;17422:137::-;17532:12;:19;17422:137;:::o;9056:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9056:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9056:33:0;;;;-1:-1:-1;;;;;9056:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15777:137::-;7065:9;:7;:9::i;:::-;7057:18;;;;;;15878:12;:28;;-1:-1:-1;;;;;;15878:28:0;-1:-1:-1;;;;;15878:28:0;;;;;;;;;;15777:137::o;12016:1009::-;12064:9;12077:10;12064:23;12056:32;;;;;;12107:11;:9;:11::i;:::-;12099:42;;;;;-1:-1:-1;;;12099:42:0;;;;;;;;;;;;-1:-1:-1;;;12099:42:0;;;;;;;;;;;;;;;12179:3;12154:22;:28;12203:5;;:12;;12213:1;12203:12;:9;:12;:::i;:::-;12195:5;:20;12237;;;12301:17;:15;:17::i;:::-;12367:7;;12382:5;;12367:34;;;-1:-1:-1;;;12367:34:0;;;;;;;;;;;;;;;;12236:82;;-1:-1:-1;12236:82:0;;-1:-1:-1;12236:82:0;;-1:-1:-1;12339:25:0;;-1:-1:-1;;;;;12367:7:0;;;;:14;;:34;;;;;;;;;;;;;;12339:25;12367:7;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;12367:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12367:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12367:34:0;;-1:-1:-1;10403:31:0;12429;;;12422:39;;;;12487:6;12482:420;12503:12;:19;12499:23;;12482:420;;;12544:21;12568:12;12581:1;12568:15;;;;;;;;;;;;;;;;;;;;;12602:9;;12568:15;;-1:-1:-1;12602:9:0;;12598:293;;;12680:13;;;12695:6;;;12667:35;;;;;;;12680:13;12667:35;;;;;;-1:-1:-1;;12667:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12667:35:0;;12680:13;;-1:-1:-1;;;;;12680:13:0;;12667:35;;12695:6;;12667:35;;;12695:6;12667:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:35::i;:::-;12632:70;;12726:6;12721:155;;12780:13;;12762:43;;;;;;;;;;;;12780:13;12798:6;;;12762:43;;;12780:13;12762:43;;;;;;-1:-1:-1;;12762:43:0;;;;;;;;;;;12780:13;;-1:-1:-1;;;;;12780:13:0;;12762:43;;;;12798:6;;12762:43;;;;;12798:6;;12762:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12828:28;;;-1:-1:-1;;;12828:28:0;;;;;;;;;;;;-1:-1:-1;;;12828:28:0;;;;;;;;;;;;;;12721:155;12598:293;;-1:-1:-1;12524:3:0;;12482:420;;;;12922:12;;;;;;;;;-1:-1:-1;;;;;12922:12:0;-1:-1:-1;;;;;12922:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12922:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;12979:5:0;;12969:48;;;;;;;;;;;;13013:3;12969:48;;;;;;12979:5;;-1:-1:-1;12969:48:0;;-1:-1:-1;12969:48:0;;;;;;;12016:1009;;;;:::o;9734:33::-;;;;:::o;7814:103::-;7065:9;:7;:9::i;:::-;7057:18;;;;;;7883:28;7902:8;7883:18;:28::i;:::-;7814:103;:::o;14336:514::-;14448:6;14476:42;14501:4;14507:10;14476:24;:42::i;:::-;14472:83;;;-1:-1:-1;14542:1:0;14535:8;;14472:83;14640:23;14666:25;:10;:23;:25::i;:::-;14640:51;;14709:133;14825:16;14709:97;14764:41;14788:16;14764:19;:4;:17;:19::i;:::-;:23;:41;:23;:41;:::i;:::-;14709:7;;:21;;;-1:-1:-1;;;14709:21:0;;;;:36;;-1:-1:-1;;;;;14709:7:0;;:19;;:21;;;;;;;;;;;;;;:7;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;14709:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14709:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14709:21:0;:34;:36::i;:::-;:54;:97;:54;:97;:::i;:::-;:115;:133;:115;:133;:::i;:::-;14702:140;;;14336:514;;;;;:::o;3586:291::-;3669:6;3761:1;-1:-1:-1;;3761:7:0;;:26;;;-1:-1:-1;;;;3772:15:0;;;3761:26;3753:35;;;;;;3868:1;3864;:5;;;;;;;3586:291;-1:-1:-1;;;3586:291:0:o;2523:136::-;2581:7;2609:5;;;2629:6;;;;2621:15;;;;;;2652:1;2523:136;-1:-1:-1;;;2523:136:0:o;2319:::-;2377:7;2406:1;2401;:6;;2393:15;;;;;;-1:-1:-1;2427:5:0;;;2319:136::o;4957:166::-;5040:6;-1:-1:-1;;;;;5072:15:0;;;5064:24;;;;;;-1:-1:-1;5113:1:0;4957:166::o;7531:116::-;7065:9;:7;:9::i;:::-;7057:18;;;;;;7608:6;;;7589:26;;-1:-1:-1;;;;;7608:6:0;;;;7589:26;;;7639:1;7622:19;;-1:-1:-1;;;;;;7622:19:0;;;7531:116::o;17802:926::-;17900:4;17922:11;18162:4;18156:11;18290:2;18284:4;18280:13;18613:1;18581:13;18489:4;18483:11;18453;18408:1;18378:11;18353:5;18346;18342:17;18319:367;18309:377;17802:926;-1:-1:-1;;;;;;17802:926:0:o;8057:173::-;-1:-1:-1;;;;;8127:22:0;;8119:31;;;;;;8183:6;;;8162:38;;-1:-1:-1;;;;;8162:38:0;;;;8183:6;;;8162:38;;;8207:6;:17;;-1:-1:-1;;;;;;8207:17:0;-1:-1:-1;;;;;8207:17:0;;;;;;;;;;8057:173::o;15183:435::-;15301:4;15323:34;15360:68;10096:2;15413;:14;15360:34;15375:18;;15360:10;:14;;:34;;;;:::i;:::-;:52;:68;:52;:68;:::i;:::-;15323:105;;15457:10;15449:4;:18;;:71;;;;-1:-1:-1;15494:26:0;15471:20;:4;15480:10;15471:20;:8;:20;:::i;:::-;:49;15449:71;15448:162;;;;15546:10;15539:4;:17;:70;;;;-1:-1:-1;15583:26:0;15560:20;:10;15575:4;15560:20;:14;:20;:::i;:::-;:49;;15183:435;-1:-1:-1;;;;15183:435:0:o;3970:208::-;4053:6;4088:5;;;4113:6;;;;;;:16;;;4128:1;4123;:6;;4113:16;4112:38;;;;4139:1;4135;:5;:14;;;;;4148:1;4144;:5;4135:14;4104:47;;;;;3156:335;3239:6;3274:5;;;-1:-1:-1;;;3364:15:0;;;;:55;;-1:-1:-1;;;;3384:14:0;;;3404;;;3383:36;;3364:55;3356:64;;;;;;3440:6;;;3439:24;;;3461:1;3456;3452;:5;;;;;;:10;3431:33;;;;;1417:393;1475:7;1703:6;1699:37;;-1:-1:-1;1727:1:0;1720:8;;1699:37;1756:5;;;1760:1;1756;:5;:1;1776:5;;;;;:10;1768:19;;;;;1925:276;1983:7;2011:1;2007;:5;1999:14;;;;;;2078:9;2094:1;2090;:5;;;;;;;1925:276;-1:-1:-1;;;;1925:276:0:o;8669:10072::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8669:10072:0;;;-1:-1:-1;8669:10072:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8669:10072:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i

Swarm Source

bzzr://09c6c697c6e57d16a9bcaf82335e79ee864d497a85de40dbf31a0bee401fa4e3
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.