Contract 0xdae0b6f111c62010a8dc6a003b02053c004cffc1

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x3858139e9e257cae8b5fcb15430e80bcd101606381ae5c324a06cd1ba85264e253615222021-03-03 16:26:4034 mins ago0xa795fe41b3e5712b97f57a7068c0792bcce15049 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00471643
0xa01855c9507ff41a78915c1b6c672db42e858f33ea082686c58322e46affc84953614892021-03-03 16:25:0136 mins ago0xa795fe41b3e5712b97f57a7068c0792bcce15049 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00535243
0x5e0a613c460bb83287d1e96e53502a721ac7eb5a79db6804c80e790e3d62bd2e53572672021-03-03 12:22:274 hrs 38 mins ago0x02b6e5135ca0cd269781f39e28f43173dde7435c IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00341675
0xa3866d1745e569ec5e975f2f3a24629ce662d3bff73c703a625d53b3e66f43af53532022021-03-03 8:11:378 hrs 49 mins ago0x55d9217de695cf70a0550ac3632674a928f4c439 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00471643
0x8ca03f2296cfe3a761df65deef712e2ad8c2b5433d99a9735b9df8f4c9da02fd53462252021-03-03 2:20:1614 hrs 41 mins ago0xf55338748bebbc22c6c4c9dbc66f14e62106f3f6 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00472977
0x30650479dff2d09031354055f1b5f0480e861c12cb0741a11a7bbbb03ffa60d953436052021-03-03 0:09:1516 hrs 52 mins ago0x654794ccb564b29cca08abd1627d388984746964 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00343619
0x0f35823903b680875415e4ec8cbb94cfd6c6af43f13a3dbe45c9311715cdf97753384812021-03-02 19:52:1321 hrs 9 mins ago0xc139e62e6e382ec49fb4fa2c4ceede8219094295 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00442469
0xc4c58e247c768e97df25a8a1d5189e517eff1b2f11e126ce9f91e86d636db05553334562021-03-02 15:40:371 day 1 hr ago0x5381dd87f1440ba838471512bfd3954cf2a0f030 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00341675
0x2afe9ec7e8c997c55fc45ad984def745dadc552b85e8af777c06971308fdbfe853286472021-03-02 11:40:101 day 5 hrs ago0x55d9217de695cf70a0550ac3632674a928f4c439 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00471643
0xcdc6350fad8d9a4c6697feba47b315e5ede7440a7b26cafa058eceb4eebf121553286432021-03-02 11:39:581 day 5 hrs ago0x55d9217de695cf70a0550ac3632674a928f4c439 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00535243
0xe252a88397c8fd1fe47bb86acb5474e3661c076545fc361a406ea8ab9fcd9bdd53286202021-03-02 11:38:491 day 5 hrs ago0x05ccf21a74324542f5c68bc8f216e173382c0254 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00535243
0x3b16dad28c511fd622c0702024fca244d20a3a3d4850592c28ac7c717442c8c853238132021-03-02 7:38:281 day 9 hrs ago0x76eb884c4f93b119f331de2966bdc0ad7449fb89 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00341675
0x397d5d30fc9736269d4845fd8149eeb3a7dbe475fd17e8cde422a06788f6f83953238042021-03-02 7:38:011 day 9 hrs ago0x76eb884c4f93b119f331de2966bdc0ad7449fb89 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00373475
0xc7ea6dd392a550f340aacb0b03710887ac9b242e42f5bc1766319923214cbd7953187812021-03-02 3:26:331 day 13 hrs ago0xc139e62e6e382ec49fb4fa2c4ceede8219094295 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00492073
0x5b256805f411885ec56cf7a9ec939cc65c542a5807370e291f191b49046be78353139462021-03-01 23:24:481 day 17 hrs ago0xb235ecd36c746c99a4c983a4ecb325f69b32b3bc IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00492073
0xf422b360d6d173687394fa73fc41197a6b1bc62d4cafa383cd75e27c4d2d4add53137282021-03-01 23:13:541 day 17 hrs ago0xc61345ffc12f7c0375f470c68d414bf81d325114 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00555673
0xb4e685f05d26bf70937ae41f3b8523adb926a41120b63190ce083959330f3e8a53089042021-03-01 19:12:041 day 21 hrs ago0x32c278cce8b75216f1b1a96205f6ef3cf68bc14a IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00492073
0x28a3e5eb277f672fad9d073fc2b405fa5454e194a27224d4a70bab99570830cd53089032021-03-01 19:12:011 day 21 hrs ago0xc139e62e6e382ec49fb4fa2c4ceede8219094295 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00555673
0xa93f49466ab6e1d05ffc841fe47af53f4a91dd6b5995335da3c2d5f7a4b3560553088982021-03-01 19:11:461 day 21 hrs ago0xc139e62e6e382ec49fb4fa2c4ceede8219094295 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00555673
0x149c112bdf0a313a9bf6d858c605f5d61d469d08c24f1d9d4ba7653e6513201053040872021-03-01 15:11:132 days 1 hr ago0xc139e62e6e382ec49fb4fa2c4ceede8219094295 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00492073
0xd9900cd38e2a98f9ddebd2b1cf3c09ebf3f75958d132afe79711d94acf16975552993562021-03-01 11:11:012 days 5 hrs ago0x55d9217de695cf70a0550ac3632674a928f4c439 IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00492073
0x7a58cd1f380cd479555e95533548518f4f03de2ca2264ba830259dfd648580d152944442021-03-01 7:05:202 days 9 hrs ago0x159c5e815d4c4521cc738ef7c76e831cc5d1b47b IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00492073
0xff01c2ba0ef33a59b247aeefa68da78287c24f10f01c105e881a38595cdc92e352944142021-03-01 7:03:502 days 9 hrs ago0x159c5e815d4c4521cc738ef7c76e831cc5d1b47b IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00542817
0x14445dac7cfe2b04e32f827eb861c6702b36429a83bc69dbed9ca916089aed3c52943952021-03-01 7:02:532 days 9 hrs ago0x159c5e815d4c4521cc738ef7c76e831cc5d1b47b IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00555673
0x8a4aec92ddd6ac773cbaac8261b0d7acf838df50c2333b7b0abb38ec2d4e103d52896462021-03-01 3:02:162 days 13 hrs ago0x159c5e815d4c4521cc738ef7c76e831cc5d1b47b IN  0xdae0b6f111c62010a8dc6a003b02053c004cffc10 BNB0.00492073
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x3858139e9e257cae8b5fcb15430e80bcd101606381ae5c324a06cd1ba85264e253615222021-03-03 16:26:4034 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0x2df19009b4a48636699d4dbf00e1d7f923c6fa470 BNB
0x3858139e9e257cae8b5fcb15430e80bcd101606381ae5c324a06cd1ba85264e253615222021-03-03 16:26:4034 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0x99ce2ec80940d03a30898421654a038e75ab54a80 BNB
0x3858139e9e257cae8b5fcb15430e80bcd101606381ae5c324a06cd1ba85264e253615222021-03-03 16:26:4034 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0xce9f2e4208673719d605c9ca756be13bccd57e340 BNB
0x3858139e9e257cae8b5fcb15430e80bcd101606381ae5c324a06cd1ba85264e253615222021-03-03 16:26:4034 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 Ditto: DITTO Token0 BNB
0x3858139e9e257cae8b5fcb15430e80bcd101606381ae5c324a06cd1ba85264e253615222021-03-03 16:26:4034 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0x2df19009b4a48636699d4dbf00e1d7f923c6fa470 BNB
0xa01855c9507ff41a78915c1b6c672db42e858f33ea082686c58322e46affc84953614892021-03-03 16:25:0136 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0x2df19009b4a48636699d4dbf00e1d7f923c6fa470 BNB
0xa01855c9507ff41a78915c1b6c672db42e858f33ea082686c58322e46affc84953614892021-03-03 16:25:0136 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0x99ce2ec80940d03a30898421654a038e75ab54a80 BNB
0xa01855c9507ff41a78915c1b6c672db42e858f33ea082686c58322e46affc84953614892021-03-03 16:25:0136 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0xce9f2e4208673719d605c9ca756be13bccd57e340 BNB
0xa01855c9507ff41a78915c1b6c672db42e858f33ea082686c58322e46affc84953614892021-03-03 16:25:0136 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 Ditto: DITTO Token0 BNB
0xa01855c9507ff41a78915c1b6c672db42e858f33ea082686c58322e46affc84953614892021-03-03 16:25:0136 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0x2df19009b4a48636699d4dbf00e1d7f923c6fa470 BNB
0x5e0a613c460bb83287d1e96e53502a721ac7eb5a79db6804c80e790e3d62bd2e53572672021-03-03 12:22:274 hrs 38 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0x2df19009b4a48636699d4dbf00e1d7f923c6fa470 BNB
0x5e0a613c460bb83287d1e96e53502a721ac7eb5a79db6804c80e790e3d62bd2e53572672021-03-03 12:22:274 hrs 38 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0x99ce2ec80940d03a30898421654a038e75ab54a80 BNB
0x5e0a613c460bb83287d1e96e53502a721ac7eb5a79db6804c80e790e3d62bd2e53572672021-03-03 12:22:274 hrs 38 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0xce9f2e4208673719d605c9ca756be13bccd57e340 BNB
0x5e0a613c460bb83287d1e96e53502a721ac7eb5a79db6804c80e790e3d62bd2e53572672021-03-03 12:22:274 hrs 38 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 Ditto: DITTO Token0 BNB
0x5e0a613c460bb83287d1e96e53502a721ac7eb5a79db6804c80e790e3d62bd2e53572672021-03-03 12:22:274 hrs 38 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0x2df19009b4a48636699d4dbf00e1d7f923c6fa470 BNB
0xa3866d1745e569ec5e975f2f3a24629ce662d3bff73c703a625d53b3e66f43af53532022021-03-03 8:11:378 hrs 49 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0x2df19009b4a48636699d4dbf00e1d7f923c6fa470 BNB
0xa3866d1745e569ec5e975f2f3a24629ce662d3bff73c703a625d53b3e66f43af53532022021-03-03 8:11:378 hrs 49 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0x99ce2ec80940d03a30898421654a038e75ab54a80 BNB
0xa3866d1745e569ec5e975f2f3a24629ce662d3bff73c703a625d53b3e66f43af53532022021-03-03 8:11:378 hrs 49 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0xce9f2e4208673719d605c9ca756be13bccd57e340 BNB
0xa3866d1745e569ec5e975f2f3a24629ce662d3bff73c703a625d53b3e66f43af53532022021-03-03 8:11:378 hrs 49 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 Ditto: DITTO Token0 BNB
0xa3866d1745e569ec5e975f2f3a24629ce662d3bff73c703a625d53b3e66f43af53532022021-03-03 8:11:378 hrs 49 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0x2df19009b4a48636699d4dbf00e1d7f923c6fa470 BNB
0x8ca03f2296cfe3a761df65deef712e2ad8c2b5433d99a9735b9df8f4c9da02fd53462252021-03-03 2:20:1614 hrs 41 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0x2df19009b4a48636699d4dbf00e1d7f923c6fa470 BNB
0x8ca03f2296cfe3a761df65deef712e2ad8c2b5433d99a9735b9df8f4c9da02fd53462252021-03-03 2:20:1614 hrs 41 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0x99ce2ec80940d03a30898421654a038e75ab54a80 BNB
0x8ca03f2296cfe3a761df65deef712e2ad8c2b5433d99a9735b9df8f4c9da02fd53462252021-03-03 2:20:1614 hrs 41 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0xce9f2e4208673719d605c9ca756be13bccd57e340 BNB
0x8ca03f2296cfe3a761df65deef712e2ad8c2b5433d99a9735b9df8f4c9da02fd53462252021-03-03 2:20:1614 hrs 41 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 Ditto: DITTO Token0 BNB
0x8ca03f2296cfe3a761df65deef712e2ad8c2b5433d99a9735b9df8f4c9da02fd53462252021-03-03 2:20:1614 hrs 41 mins ago 0xdae0b6f111c62010a8dc6a003b02053c004cffc1 0x2df19009b4a48636699d4dbf00e1d7f923c6fa470 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Master

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 BscScan.com on 2020-12-19
*/

// SPDX-License-Identifier: MIT

/*
MIT License

Copyright (c) 2018 requestnetwork
Copyright (c) 2018 Fragments, Inc.
Copyright (c) 2020 Ditto Money

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 IDitto {
    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 Ditto's Master
 * @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 Master 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
    );

    IDitto public ditto;

    // 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 _ditto) public {
        deviationThreshold = 5 * 10 ** (DECIMALS-2);

        rebaseCooldown = 4 hours;
        lastRebaseTimestampSec = 0;
        epoch = 0;
        rebaseLocked = true;
        
        ditto = IDitto(_ditto);
    }
    
    /**
     * @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 the cooldown timer has expired since the 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 = ditto.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 && ditto.totalSupply().add(uint256(supplyDelta)) > MAX_SUPPLY) {
            supplyDelta = (MAX_SUPPLY.sub(ditto.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 ditto.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 ABI

[{"inputs":[{"internalType":"address","name":"_ditto","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":"ditto","outputs":[{"internalType":"contract IDitto","name":"","type":"address"}],"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":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"}]

608060405234801561001057600080fd5b506040516115613803806115618339818101604052602081101561003357600080fd5b5051600080546001600160a01b03199081163317825566b1a2bc2ec5000060045561384060055560068290556007919091556008805460ff19166001179055600280546001600160a01b03909316929091169190911790556114c78061009a6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063715018a6116100b85780639ace38c21161007c5780639ace38c2146102ea5780639e30bac5146103a3578063af14052c146103c9578063d94ad837146103d1578063d98beb80146103d9578063f2fde38b146103e157610142565b8063715018a6146102c25780638da5cb5b146102ca5780638f32d59b146102d2578063900cf0cf146102da57806391d4ec18146102e257610142565b80633a93069b1161010a5780633a93069b1461023257806346c3bd1f1461024c57806356fecc8e1461026957806360961528146102715780636412bb71146102955780636e9dde991461029d57610142565b806305919e7d14610147578063126e19be1461016857806330d6f02f146101e85780633148235a14610204578063329ceacd1461022a575b600080fd5b6101666004803603602081101561015d57600080fd5b50351515610407565b005b6101666004803603604081101561017e57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156101a957600080fd5b8201836020820111156101bb57600080fd5b803590602001918460018302840111640100000000831117156101dd57600080fd5b50909250905061042b565b6101f061050b565b604080519115158252519081900360200190f35b61020c610514565b60408051938452602084019290925282820152519081900360600190f35b6101f0610761565b61023a6107a0565b60408051918252519081900360200190f35b6101666004803603602081101561026257600080fd5b50356107a6565b61023a6108cb565b6102796108d1565b604080516001600160a01b039092168252519081900360200190f35b61023a6108e0565b610166600480360360408110156102b357600080fd5b508035906020013515156108f9565b61016661097b565b6102796109d8565b6101f06109e7565b61023a6109f8565b61023a6109fe565b6103076004803603602081101561030057600080fd5b5035610a04565b6040518084151515158152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561036657818101518382015260200161034e565b50505050905090810190601f1680156103935780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610166600480360360208110156103b957600080fd5b50356001600160a01b0316610ac9565b610166610afc565b61023a610ede565b610279610ee4565b610166600480360360208110156103f757600080fd5b50356001600160a01b0316610ef3565b61040f6109e7565b61041857600080fd5b6008805460ff1916911515919091179055565b6104336109e7565b61043c57600080fd5b60016040518060600160405280600115158152602001856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250508354600181810180875595835260209283902085516002909302018054848701516001600160a01b031661010002610100600160a81b031994151560ff19909216919091179390931692909217825560408501518051929450610502939185019291019061128b565b50505050505050565b60085460ff1681565b6000806000806012600a0a90506000600360009054906101000a90046001600160a01b03166001600160a01b0316633bc5de306040518163ffffffff1660e01b815260040160206040518083038186803b15801561057157600080fd5b505afa158015610585573d6000803e3d6000fd5b505050506040513d602081101561059b57600080fd5b5051905069d3c21bcecceda10000008111156105be575069d3c21bcecceda10000005b60006105ca8284610f10565b905060008112156105ed576105e681600263ffffffff610fef16565b9050610601565b6105fe81600563ffffffff610fef16565b90505b6000811380156106ac575069d3c21bcecceda10000006001600160ff1b03046106aa82600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561067257600080fd5b505afa158015610686573d6000803e3d6000fd5b505050506040513d602081101561069c57600080fd5b50519063ffffffff61102016565b115b156107565761075361074e600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561070557600080fd5b505afa158015610719573d6000803e3d6000fd5b505050506040513d602081101561072f57600080fd5b5051759abe14cd44753b52c4926a9672793542d78c3615cf3a90611039565b61104e565b90505b909591945092509050565b60085460009060ff16158061077957506107796109e7565b801561079a57504261079860055460065461102090919063ffffffff16565b105b90505b90565b60065481565b6107ae6109e7565b6107b757600080fd5b6001548110610803576040805162461bcd60e51b8152602060048201526013602482015272696e646578206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b600154600019018110156108b45760018054600019810190811061082357fe5b90600052602060002090600202016001828154811061083e57fe5b6000918252602090912082546002928302909101805460ff191660ff9092161515919091178082558354610100600160a81b0319909116610100918290046001600160a01b031682021782556001808501805493946108b0948387019492938116159092026000190190911604611305565b5050505b60018054906108c790600019830161137a565b5050565b60055481565b6003546001600160a01b031681565b600061079a60055460065461102090919063ffffffff16565b6109016109e7565b61090a57600080fd5b600154821061094a5760405162461bcd60e51b815260040180806020018281038252602881526020018061143e6028913960400191505060405180910390fd5b806001838154811061095857fe5b60009182526020909120600290910201805460ff19169115159190911790555050565b6109836109e7565b61098c57600080fd5b60085460ff16156109ce5760405162461bcd60e51b815260040180806020018281038252602d815260200180611466602d913960400191505060405180910390fd5b6109d6611068565b565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b60075481565b60015490565b60018181548110610a1157fe5b6000918252602091829020600291820201805460018083018054604080516101009483161585026000190190921696909604601f810188900488028201880190965285815260ff84169750919092046001600160a01b03169492939092830182828015610abf5780601f10610a9457610100808354040283529160200191610abf565b820191906000526020600020905b815481529060010190602001808311610aa257829003601f168201915b5050505050905083565b610ad16109e7565b610ada57600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b323314610b0857600080fd5b610b10610761565b610b56576040805162461bcd60e51b8152602060048201526012602482015271149958985cd9481b9bdd08185b1b1bddd95960721b604482015290519081900360640190fd5b42600655600754610b6e90600163ffffffff61102016565b60075560008080610b7d610514565b60025460075460408051637a43e23f60e01b8152600481019290925260248201849052519497509295509093506000926001600160a01b0390911691637a43e23f91604480830192602092919082900301818787803b158015610bdf57600080fd5b505af1158015610bf3573d6000803e3d6000fd5b505050506040513d6020811015610c0957600080fd5b50519050759abe14cd44753b52c4926a9672793542d78c3615cf3a811115610c2d57fe5b60005b600154811015610e2b57600060018281548110610c4957fe5b60009182526020909120600290910201805490915060ff1615610e225780546001808301805460408051602060026101009685161587026000190190941693909304601f8101849004840282018401909252818152600095610d119590046001600160a01b0316939092909190830182828015610d075780601f10610cdc57610100808354040283529160200191610d07565b820191906000526020600020905b815481529060010190602001808311610cea57829003601f168201915b50505050506110c1565b905080610e205781546040805185815260208101828152600180870180546002610100938216158402600019019091160494840185905294046001600160a01b0316937f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263938893919290606083019084908015610dcf5780601f10610da457610100808354040283529160200191610dcf565b820191906000526020600020905b815481529060010190602001808311610db257829003601f168201915b5050935050505060405180910390a26040805162461bcd60e51b8152602060048201526012602482015271151c985b9cd858dd1a5bdb8811985a5b195960721b604482015290519081900360640190fd5b505b50600101610c30565b50600360009054906101000a90046001600160a01b03166001600160a01b031663a2e620456040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e7c57600080fd5b505af1158015610e90573d6000803e3d6000fd5b50506007546040805188815260208101879052428183015290519193507f7f5c8486e564c1d27c32da42b1ba6a909114d7bbea36de9a66bc0bebfba26bc3925081900360600190a250505050565b60045481565b6002546001600160a01b031681565b610efb6109e7565b610f0457600080fd5b610f0d816110e4565b50565b6000610f1c8383611152565b15610f2957506000610fe9565b6000610f348361104e565b9050610fe581610fd9610f5684610f4a8961104e565b9063ffffffff6111c816565b600254604080516318160ddd60e01b81529051610fcd926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015610f9c57600080fd5b505afa158015610fb0573d6000803e3d6000fd5b505050506040513d6020811015610fc657600080fd5b505161104e565b9063ffffffff6111fb16565b9063ffffffff610fef16565b9150505b92915050565b6000816000191415806110065750600160ff1b8314155b61100f57600080fd5b81838161101857fe5b059392505050565b60008282018381101561103257600080fd5b9392505050565b60008282111561104857600080fd5b50900390565b60006001600160ff1b0382111561106457600080fd5b5090565b6110706109e7565b61107957600080fd5b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b6000806040516020840160008286518360008a6187965a03f19695505050505050565b6001600160a01b0381166110f757600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008061117e6012600a0a6111726004548661124290919063ffffffff16565b9063ffffffff61126916565b905082841015801561119e57508061119c858563ffffffff61103916565b105b80610fe557508284108015610fe55750806111bf848663ffffffff61103916565b10949350505050565b60008183038183128015906111dd5750838113155b806111f257506000831280156111f257508381135b61103257600080fd5b6000828202600160ff1b8114158061121c5750600160ff1b84811690841614155b61122557600080fd5b8215806111f257508383828161123757fe5b051461103257600080fd5b60008261125157506000610fe9565b8282028284828161125e57fe5b041461103257600080fd5b600080821161127757600080fd5b600082848161128257fe5b04949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106112cc57805160ff19168380011785556112f9565b828001600101855582156112f9579182015b828111156112f95782518255916020019190600101906112de565b506110649291506113ab565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061133e57805485556112f9565b828001600101855582156112f957600052602060002091601f016020900482015b828111156112f957825482559160010191906001019061135f565b8154818355818111156113a6576002028160020283600052602060002091820191016113a691906113c5565b505050565b61079d91905b8082111561106457600081556001016113b1565b61079d91905b808211156110645780546001600160a81b031916815560006113f060018301826113f9565b506002016113cb565b50805460018160011615610100020316600290046000825580601f1061141f5750610f0d565b601f016020900490600052602060002090810190610f0d91906113ab56fe696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c69737443616e6e6f742072656e6f756e6365206f776e65727368697020696620726562617365206973206c6f636b6564a265627a7a72315820f8d7255a285991914d688e3fffafb80d50e7e350d2c4e53eb405a4d365b2681864736f6c63430005110032000000000000000000000000233d91a0713155003fc4dce0afa871b508b3b715

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

000000000000000000000000233d91a0713155003fc4dce0afa871b508b3b715

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000233d91a0713155003fc4dce0afa871b508b3b715


Deployed ByteCode Sourcemap

8667:9995:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8667:9995:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11281:99;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11281:99:0;;;;:::i;:::-;;16058:262;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;16058:262:0;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;16058:262:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16058: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;16058:262:0;;-1:-1:-1;16058:262:0;-1:-1:-1;16058:262:0;:::i;10600:24::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;13291:818;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;11507:156;;;:::i;9916:37::-;;;:::i;:::-;;;;;;;;;;;;;;;;16472:328;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16472:328:0;;:::i;9829:29::-;;;:::i;9377:27::-;;;:::i;:::-;;;;-1:-1:-1;;;;;9377:27:0;;;;;;;;;;;;;;11675:133;;;:::i;16982:246::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16982:246:0;;;;;;;;;:::i;11093:172::-;;;:::i;6874:72::-;;;:::i;7176:85::-;;;:::i;10014:20::-;;;:::i;17343:137::-;;;:::i;9043:33::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9043:33:0;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;9043:33:0;-1:-1:-1;;;;;9043: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;9043:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15698:137;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15698:137:0;-1:-1:-1;;;;;15698:137:0;;:::i;11945:1007::-;;;:::i;9717:33::-;;;:::i;9253:19::-;;;:::i;7816:103::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7816:103:0;-1:-1:-1;;;;;7816:103:0;;:::i;11281:99::-;7067:9;:7;:9::i;:::-;7059:18;;;;;;11350:12;:22;;-1:-1:-1;;11350:22:0;;;;;;;;;;11281:99::o;16058:262::-;7067:9;:7;:9::i;:::-;7059:18;;;;;;16177:12;16195:116;;;;;;;;16231:4;16195:116;;;;;;16263:11;-1:-1:-1;;;;;16195:116:0;;;;;16295:4;;16195:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;16195:116:0;;;;-1:-1:-1;;27:10;;39:1;23:18;;;45:23;;;16177:135:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16177:135:0;;;-1:-1:-1;;;;;;16177:135:0;;;-1:-1:-1;;16177:135:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16177:135:0;;;;;;;;;;:::i;:::-;;;;;16058:262;;;:::o;10600:24::-;;;;;;:::o;13291:818::-;13339:7;13348;13357:6;13378:18;10079:2;13399;:14;13378:35;;13424:20;13447:12;;;;;;;;;-1:-1:-1;;;;;13447:12:0;-1:-1:-1;;;;;13447:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13447:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13447:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13447:22:0;;-1:-1:-1;10278:20:0;13486:23;;13482:79;;;-1:-1:-1;10278:20:0;13482:79;13573:18;13594:44;13613:12;13627:10;13594:18;:44::i;:::-;13573:65;;13709:1;13695:11;:15;13691:164;;;13741:18;:11;13757:1;13741:18;:15;:18;:::i;:::-;13727:32;;13691:164;;;13806:18;:11;13822:1;13806:18;:15;:18;:::i;:::-;13792:32;;13691:164;13885:1;13871:11;:15;:77;;;;-1:-1:-1;10278:20:0;-1:-1:-1;;;;;10386:31:0;13890:45;13922:11;13890:5;;;;;;;;;-1:-1:-1;;;;;13890:5:0;-1:-1:-1;;;;;13890:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13890:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13890:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13890:19:0;;:45;:23;:45;:::i;:::-;:58;13871:77;13867:176;;;13979:52;13980:35;13995:5;;;;;;;;;-1:-1:-1;;;;;13995:5:0;-1:-1:-1;;;;;13995:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13995:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13995:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13995:19:0;10386:31;;13980:14;:35::i;:::-;13979:50;:52::i;:::-;13965:66;;13867:176;14063:12;;14077:10;;-1:-1:-1;14063:12:0;-1:-1:-1;13291:818:0;-1:-1:-1;13291:818:0:o;11507:156::-;11576:12;;11549:4;;11576:12;;11575:13;;:26;;;11592:9;:7;:9::i;:::-;11574:80;;;;;11651:3;11606:42;11633:14;;11606:22;;:26;;:42;;;;:::i;:::-;:48;11574:80;11566:89;;11507:156;;:::o;9916:37::-;;;;:::o;16472:328::-;7067:9;:7;:9::i;:::-;7059:18;;;;;;16580:12;:19;16572:27;;16564:59;;;;;-1:-1:-1;;;16564:59:0;;;;;;;;;;;;-1:-1:-1;;;16564:59:0;;;;;;;;;;;;;;;16670:1;16648:19;-1:-1:-1;;16648:23:0;16640:31;;16636:123;;;16710:12;16723:19;;-1:-1:-1;;16723:23:0;;;16710:37;;;;;;;;;;;;;;;;16688:12;16701:5;16688:19;;;;;;;;;;;;;;;;:59;;:19;;;;;;;:59;;-1:-1:-1;;16688:59:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16688:59:0;;;;;;;;-1:-1:-1;;;;;16688:59:0;;;;;;-1:-1:-1;16688:59:0;;;;;:19;;:59;;;;;;;;;;;;;;-1:-1:-1;;16688:59:0;;;;;;:::i;:::-;-1:-1:-1;;;16636:123:0;16771:12;:21;;;;;-1:-1:-1;;16771:21:0;;;:::i;:::-;;16472:328;:::o;9829:29::-;;;;:::o;9377:27::-;;;-1:-1:-1;;;;;9377:27:0;;:::o;11675:133::-;11731:7;11758:42;11785:14;;11758:22;;:26;;:42;;;;:::i;16982:246::-;7067:9;:7;:9::i;:::-;7059:18;;;;;;17108:12;:19;17100:27;;17092:80;;;;-1:-1:-1;;;17092:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17213:7;17183:12;17196:5;17183:19;;;;;;;;;;;;;;;;;;;;;:37;;-1:-1:-1;;17183:37:0;;;;;;;;;;-1:-1:-1;;16982:246:0:o;11093:172::-;7067:9;:7;:9::i;:::-;7059:18;;;;;;11159:12;;;;11158:13;11150:71;;;;-1:-1:-1;;;11150:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11232:25;:23;:25::i;:::-;11093:172::o;6874:72::-;6911:7;6934:6;-1:-1:-1;;;;;6934:6:0;6874:72;:::o;7176:85::-;7215:4;7249:6;-1:-1:-1;;;;;7249:6:0;7235:10;:20;;7176:85::o;10014:20::-;;;;:::o;17343:137::-;17453:12;:19;17343:137;:::o;9043:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9043:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9043:33:0;;;;-1:-1:-1;;;;;9043:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15698:137::-;7067:9;:7;:9::i;:::-;7059:18;;;;;;15799:12;:28;;-1:-1:-1;;;;;;15799:28:0;-1:-1:-1;;;;;15799:28:0;;;;;;;;;;15698:137::o;11945:1007::-;11993:9;12006:10;11993:23;11985:32;;;;;;12036:11;:9;:11::i;:::-;12028:42;;;;;-1:-1:-1;;;12028:42:0;;;;;;;;;;;;-1:-1:-1;;;12028:42:0;;;;;;;;;;;;;;;12108:3;12083:22;:28;12132:5;;:12;;12142:1;12132:12;:9;:12;:::i;:::-;12124:5;:20;12166;;;12230:17;:15;:17::i;:::-;12296:5;;12309;;12296:32;;;-1:-1:-1;;;12296:32:0;;;;;;;;;;;;;;;;12165:82;;-1:-1:-1;12165:82:0;;-1:-1:-1;12165:82:0;;-1:-1:-1;12268:25:0;;-1:-1:-1;;;;;12296:5:0;;;;:12;;:32;;;;;;;;;;;;;;12268:25;12296:5;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;12296:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12296:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12296:32:0;;-1:-1:-1;10386:31:0;12356;;;12349:39;;;;12414:6;12409:420;12430:12;:19;12426:23;;12409:420;;;12471:21;12495:12;12508:1;12495:15;;;;;;;;;;;;;;;;;;;;;12529:9;;12495:15;;-1:-1:-1;12529:9:0;;12525:293;;;12607:13;;;12622:6;;;12594:35;;;;;;;12607:13;12594:35;;;;;;-1:-1:-1;;12594:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12594:35:0;;12607:13;;-1:-1:-1;;;;;12607:13:0;;12594:35;;12622:6;;12594:35;;;12622:6;12594:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:35::i;:::-;12559:70;;12653:6;12648:155;;12707:13;;12689:43;;;;;;;;;;;;12707:13;12725:6;;;12689:43;;;12707:13;12689:43;;;;;;-1:-1:-1;;12689:43:0;;;;;;;;;;;12707:13;;-1:-1:-1;;;;;12707:13:0;;12689:43;;;;12725:6;;12689:43;;;;;12725:6;;12689:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12755:28;;;-1:-1:-1;;;12755:28:0;;;;;;;;;;;;-1:-1:-1;;;12755:28:0;;;;;;;;;;;;;;12648:155;12525:293;;-1:-1:-1;12451:3:0;;12409:420;;;;12849:12;;;;;;;;;-1:-1:-1;;;;;12849:12:0;-1:-1:-1;;;;;12849:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12849:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;12906:5:0;;12896:48;;;;;;;;;;;;12940:3;12896:48;;;;;;12906:5;;-1:-1:-1;12896:48:0;;-1:-1:-1;12896:48:0;;;;;;;11945:1007;;;;:::o;9717:33::-;;;;:::o;9253:19::-;;;-1:-1:-1;;;;;9253:19:0;;:::o;7816:103::-;7067:9;:7;:9::i;:::-;7059:18;;;;;;7885:28;7904:8;7885:18;:28::i;:::-;7816:103;:::o;14259:512::-;14371:6;14399:42;14424:4;14430:10;14399:24;:42::i;:::-;14395:83;;;-1:-1:-1;14465:1:0;14458:8;;14395:83;14563:23;14589:25;:10;:23;:25::i;:::-;14563:51;;14632:131;14746:16;14632:95;14685:41;14709:16;14685:19;:4;:17;:19::i;:::-;:23;:41;:23;:41;:::i;:::-;14632:5;;:19;;;-1:-1:-1;;;14632:19:0;;;;:34;;-1:-1:-1;;;;;14632:5:0;;:17;;:19;;;;;;;;;;;;;;:5;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;14632:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14632:19:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14632:19:0;:32;:34::i;:::-;:52;:95;:52;:95;:::i;:::-;:113;:131;:113;:131;:::i;:::-;14625:138;;;14259:512;;;;;:::o;3590:291::-;3673:6;3765:1;-1:-1:-1;;3765:7:0;;:26;;;-1:-1:-1;;;;3776:15:0;;;3765:26;3757:35;;;;;;3872:1;3868;:5;;;;;;;3590:291;-1:-1:-1;;;3590:291:0:o;2527:136::-;2585:7;2613:5;;;2633:6;;;;2625:15;;;;;;2656:1;2527:136;-1:-1:-1;;;2527:136:0:o;2323:::-;2381:7;2410:1;2405;:6;;2397:15;;;;;;-1:-1:-1;2431:5:0;;;2323:136::o;4961:166::-;5044:6;-1:-1:-1;;;;;5076:15:0;;;5068:24;;;;;;-1:-1:-1;5117:1:0;4961:166::o;7533:116::-;7067:9;:7;:9::i;:::-;7059:18;;;;;;7610:6;;;7591:26;;-1:-1:-1;;;;;7610:6:0;;;;7591:26;;;7641:1;7624:19;;-1:-1:-1;;;;;;7624:19:0;;;7533:116::o;17723:926::-;17821:4;17843:11;18083:4;18077:11;18211:2;18205:4;18201:13;18534:1;18502:13;18410:4;18404:11;18374;18329:1;18299:11;18274:5;18267;18263:17;18240:367;18230:377;17723:926;-1:-1:-1;;;;;;17723:926:0:o;8059:173::-;-1:-1:-1;;;;;8129:22:0;;8121:31;;;;;;8185:6;;;8164:38;;-1:-1:-1;;;;;8164:38:0;;;;8185:6;;;8164:38;;;8209:6;:17;;-1:-1:-1;;;;;;8209:17:0;-1:-1:-1;;;;;8209:17:0;;;;;;;;;;8059:173::o;15104:435::-;15222:4;15244:34;15281:68;10079:2;15334;:14;15281:34;15296:18;;15281:10;:14;;:34;;;;:::i;:::-;:52;:68;:52;:68;:::i;:::-;15244:105;;15378:10;15370:4;:18;;:71;;;;-1:-1:-1;15415:26:0;15392:20;:4;15401:10;15392:20;:8;:20;:::i;:::-;:49;15370:71;15369:162;;;;15467:10;15460:4;:17;:70;;;;-1:-1:-1;15504:26:0;15481:20;:10;15496:4;15481:20;:14;:20;:::i;:::-;:49;;15104:435;-1:-1:-1;;;;15104:435:0:o;3974:208::-;4057:6;4092:5;;;4117:6;;;;;;:16;;;4132:1;4127;:6;;4117:16;4116:38;;;;4143:1;4139;:5;:14;;;;;4152:1;4148;:5;4139:14;4108:47;;;;;3160:335;3243:6;3278:5;;;-1:-1:-1;;;3368:15:0;;;;:55;;-1:-1:-1;;;;3388:14:0;;;3408;;;3387:36;;3368:55;3360:64;;;;;;3444:6;;;3443:24;;;3465:1;3460;3456;:5;;;;;;:10;3435:33;;;;;1421:393;1479:7;1707:6;1703:37;;-1:-1:-1;1731:1:0;1724:8;;1703:37;1760:5;;;1764:1;1760;:5;:1;1780:5;;;;;:10;1772:19;;;;;1929:276;1987:7;2015:1;2011;:5;2003:14;;;;;;2082:9;2098:1;2094;:5;;;;;;;1929:276;-1:-1:-1;;;;1929:276:0:o;8667:9995::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8667:9995:0;;;-1:-1:-1;8667:9995:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8667:9995:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i

Swarm Source

bzzr://f8d7255a285991914d688e3fffafb80d50e7e350d2c4e53eb405a4d365b26818
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.