Contract 0xfe4F0eb0A1Ad109185c9AaDE64C48ff8e928e54B 2

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd38d76b03b91b1662188e9045cefd970db31fdd897c4ee7cb10c9c7c8b8ec2c7Close With Swap195460872021-09-26 19:29:2617 mins ago0x687db56d0b6ab8cbef478a9549b0cd8b017241ad IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.025870425
0xb988c365703b5eb4450edb4ebfc1dc4ce5e4b37dd1103b24707e198d6fb527b3Close With Swap195460582021-09-26 19:27:3019 mins ago0x687db56d0b6ab8cbef478a9549b0cd8b017241ad IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.014757499
0xfc7fd8fd94b2ceb9c6224b176fdceb81c38a5a79e0e43ddf7f4cc0c8d908e912Close With Swap195460562021-09-26 19:27:2219 mins ago0x687db56d0b6ab8cbef478a9549b0cd8b017241ad IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.010377575
0x8a1a699928fed40be776dc5bf9e849e05e2311084aebdffa02daeb70745b150fWithdraw Collate...195459602021-09-26 19:21:3625 mins ago0x263ae962a0976134cd4bd0a7ea1fdf677f19bda3 IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.00034644876
0xa24da79afba5d7ec7a83d63699831cc3098d7ec0128e7ecd9cb1f0c2918ffe09Close With Depos...195437392021-09-26 17:53:341 hr 53 mins ago0x0c35728bd5c481a2b7a1ba17605483b08efa677b IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.0517915
0xd3b71fa21b2548d406c315ddc22e21ff4ab52719dded54b2b5d0125d3ec8ca5dClose With Swap195428382021-09-26 17:20:172 hrs 26 mins ago0x7ad2199a23ed03f65c9259bd028874eec81734bb IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.006643305
0x60f3570ac8096700bf32101844ff7199610c45d2ace6a8ab81cea37a43ab1850Close With Swap195424672021-09-26 17:05:452 hrs 41 mins ago0xaf67d515ee6e118a875b7421823194e3e4a8c451 IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.003157758
0x82d3c03acbadd129c509bf66c87b2415f85cef212953f3cdbb86de88e18ca11aClose With Swap195423682021-09-26 17:02:192 hrs 44 mins ago0x687db56d0b6ab8cbef478a9549b0cd8b017241ad IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.002212535242
0xda811d1bb838b09e1e2f43c994fc2c3204b2b06d0b834d1cfa0ecf205071db23Close With Swap195423172021-09-26 17:00:332 hrs 46 mins ago0x687db56d0b6ab8cbef478a9549b0cd8b017241ad IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.00308324256
0x68af0021cb437f6746cd00c89c932e4716edd29e7cb75a4615bada85ba7bccb7Close With Swap195422922021-09-26 16:59:432 hrs 47 mins ago0x687db56d0b6ab8cbef478a9549b0cd8b017241ad IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.00728648
0x53016e0b5b97d6bc98db53c65f57fccb423ebc4b3d172ae9306b88b14e705bd8Close With Swap195393262021-09-26 15:03:334 hrs 43 mins ago0xf67290c2f7f23c06cc015f7b4686b6e81277e57c IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.0029402
0xdd63f95084e70a1e57df1bf6ba309a4abac11facbfcf3c112b4878f3a62536a2Close With Swap195393262021-09-26 15:03:334 hrs 43 mins ago0xf67290c2f7f23c06cc015f7b4686b6e81277e57c IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.009031725
0xb32af561ae05b589efbd435e041fdf086ca2955c4301e5c24cb937bdbc2740c0Extend Loan Dura...195387202021-09-26 14:42:435 hrs 4 mins ago0xc324e883c7dacf1a3c291d964af050ada0ef995f IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.0009093
0x0ff754cc083d22a88470256fdad6b00da7a4f52ea5b8a292dfa6891b7ecd52deExtend Loan Dura...195386682021-09-26 14:40:555 hrs 5 mins ago0xc324e883c7dacf1a3c291d964af050ada0ef995f IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.000428364
0xe3c7487012d8793e1fde6af8eb56a01e56395cce734ea31c982bb947fe52f3f4Extend Loan Dura...195386192021-09-26 14:39:135 hrs 7 mins ago0xc324e883c7dacf1a3c291d964af050ada0ef995f IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.00075775
0xfb5b5abb5d67e706a864f44622826b01ad72a90c235362d141610f6b2a39308cExtend Loan Dura...195385202021-09-26 14:35:515 hrs 10 mins ago0xc324e883c7dacf1a3c291d964af050ada0ef995f IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.0006062
0x72f9864df0047ac1036ea8c28b1c1db6c441c69913aacaf3f45135e460ddba03Close With Swap195384642021-09-26 14:33:555 hrs 12 mins ago0x1dc1b489d1dd16402337fb1fe3c76b4c37fa651b IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.0012664323
0xbabbad5a3f093d2778f8b74f40f429a0dccbd7ee84c0b8036619fa992145426fExtend Loan Dura...195366622021-09-26 13:22:306 hrs 24 mins ago0x3acf94821436ba111441eda435e9bdd423a1f038 IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.002142
0x386f69aadb652f4ff8d0b693f092df681a0bdd74fcd62a56cc6eb6921177a582Rollover195334852021-09-26 11:15:348 hrs 31 mins ago0xa8263755f8af6277ce941b7070ac1648ae46230e IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.000701616399
0x3a9749589ef407ec72173e5109ed9bb63afedac1d9c391a5380a5cc42ff6f7d9Deposit Collater...195315652021-09-26 10:04:029 hrs 42 mins ago0x8be26907c21a3eb44f3a9b40832e6928d6e6ca82 IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.002359549
0xbd1e8b1ce1464ff9a6f8998e9e1e52853e3973c0e38dc91332ef70054755ff53Close With Swap195314482021-09-26 10:00:009 hrs 46 mins ago0xd56d169dd255f3794993d1fcfa93365926a79e81 IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.0018735
0xd9fb3f31e56974b1c20e0e649881e5e3f45ef00ba2dc5d5ef50435bb79660d6dClose With Depos...195310312021-09-26 9:45:4210 hrs 1 min ago0x0c35728bd5c481a2b7a1ba17605483b08efa677b IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.007102966398
0xa9c02d824cdb9810d271081813758d4aec99f838c12382e233d0100caece0d08Close With Swap195306882021-09-26 9:33:5610 hrs 12 mins ago0x8be26907c21a3eb44f3a9b40832e6928d6e6ca82 IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.015927485257
0xbc0c1e780737350f6329fabc2907de9dd2be91342a3265abbaea800a02e4d6f6Deposit Collater...195290082021-09-26 8:31:3111 hrs 15 mins ago0x81016b5fa82b628e7653e63f43882009f90dc2b6 IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.0026961
0x2d19cff9c24ae4cc07b3f8da111f1c14956ea6c79a405023ed62ba20059a627fDeposit Collater...195289322021-09-26 8:28:5311 hrs 17 mins ago0x81016b5fa82b628e7653e63f43882009f90dc2b6 IN  0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0 MATIC0.002679072
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x8a1a699928fed40be776dc5bf9e849e05e2311084aebdffa02daeb70745b150f195459602021-09-26 19:21:3625 mins ago 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0x263ae962a0976134cd4bd0a7ea1fdf677f19bda399.999999999999999529 MATIC
0x8a1a699928fed40be776dc5bf9e849e05e2311084aebdffa02daeb70745b150f195459602021-09-26 19:21:3625 mins ago Polygon: WMATIC Token 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b99.999999999999999529 MATIC
0xdd63f95084e70a1e57df1bf6ba309a4abac11facbfcf3c112b4878f3a62536a2195393262021-09-26 15:03:334 hrs 43 mins ago 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0xf67290c2f7f23c06cc015f7b4686b6e81277e57c8.752365911576447693 MATIC
0xdd63f95084e70a1e57df1bf6ba309a4abac11facbfcf3c112b4878f3a62536a2195393262021-09-26 15:03:334 hrs 43 mins ago Polygon: WMATIC Token 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b8.752365911576447693 MATIC
0x386f69aadb652f4ff8d0b693f092df681a0bdd74fcd62a56cc6eb6921177a582195334852021-09-26 11:15:348 hrs 31 mins ago 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0xa8263755f8af6277ce941b7070ac1648ae46230e0.001711568 MATIC
0x386f69aadb652f4ff8d0b693f092df681a0bdd74fcd62a56cc6eb6921177a582195334852021-09-26 11:15:348 hrs 31 mins ago Polygon: WMATIC Token 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0.001711568 MATIC
0x8fd493e52d553834982ccbf8ee5b96faab5137e520e2cc720d826fbb203cb070195288262021-09-26 8:25:1311 hrs 21 mins ago 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b 0x6923f8695ae1c4cfa207bfa42de45766e2ba659324.042031982888971178 MATIC
0x8fd493e52d553834982ccbf8ee5b96faab5137e520e2cc720d826fbb203cb070195288262021-09-26 8:25:1311 hrs 21 mins ago Polygon: WMATIC Token 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b24.042031982888971178 MATIC
0xb1cac4be4da476eb78d94aae6bac6f0d82358c59594a1a0bc26192d1f417c691195278632021-09-26 7:49:5911 hrs 56 mins ago 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b 0x6923f8695ae1c4cfa207bfa42de45766e2ba65933.714794799780833674 MATIC
0xb1cac4be4da476eb78d94aae6bac6f0d82358c59594a1a0bc26192d1f417c691195278632021-09-26 7:49:5911 hrs 56 mins ago Polygon: WMATIC Token 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b3.714794799780833674 MATIC
0xbbdcea290dfdc43e6568f1460b3fd0ebde3f505bf46e26d28896b89285c2ca1e195278632021-09-26 7:49:5911 hrs 56 mins ago 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b 0x560126b8bdc07f5f4fb775968be06d2f4b580c7a3.714794799780833674 MATIC
0xbbdcea290dfdc43e6568f1460b3fd0ebde3f505bf46e26d28896b89285c2ca1e195278632021-09-26 7:49:5911 hrs 56 mins ago Polygon: WMATIC Token 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b3.714794799780833674 MATIC
0xc1c9715e446e50dad7b8856453b1c2c0c5ee64b392a4e9fd38e007661ff48aa5195278632021-09-26 7:49:5911 hrs 56 mins ago 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b 0xa8a2f0eaaf6d8a309394c155a8f463c4923d7b8c3.714794799780833674 MATIC
0xc1c9715e446e50dad7b8856453b1c2c0c5ee64b392a4e9fd38e007661ff48aa5195278632021-09-26 7:49:5911 hrs 56 mins ago Polygon: WMATIC Token 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b3.714794799780833674 MATIC
0xba1fcad792a6144188b3640f15fa5cd2ce56f7d6417b2f80e6e79443e039591f195275672021-09-26 7:39:4712 hrs 7 mins ago 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b 0x6923f8695ae1c4cfa207bfa42de45766e2ba65938.785912400100966584 MATIC
0xba1fcad792a6144188b3640f15fa5cd2ce56f7d6417b2f80e6e79443e039591f195275672021-09-26 7:39:4712 hrs 7 mins ago Polygon: WMATIC Token 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b8.785912400100966584 MATIC
0x20e41b1578c5068e837dfb2acf96e39001d3c292e32a286b2d0e2cb3d1088a66195275672021-09-26 7:39:4712 hrs 7 mins ago 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b 0x560126b8bdc07f5f4fb775968be06d2f4b580c7a8.785912400100966584 MATIC
0x20e41b1578c5068e837dfb2acf96e39001d3c292e32a286b2d0e2cb3d1088a66195275672021-09-26 7:39:4712 hrs 7 mins ago Polygon: WMATIC Token 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b8.785912400100966584 MATIC
0x6a737d3bb80633801c3147735037c331322c1a093028f30a2281118be995850e195275672021-09-26 7:39:4712 hrs 7 mins ago 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b 0xa8a2f0eaaf6d8a309394c155a8f463c4923d7b8c8.785912400100966584 MATIC
0x6a737d3bb80633801c3147735037c331322c1a093028f30a2281118be995850e195275672021-09-26 7:39:4712 hrs 7 mins ago Polygon: WMATIC Token 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b8.785912400100966584 MATIC
0x1d27552d441ff179a4f93e6524cc3351ea77f0ea012b5c654cc95101a8ee84d3195256962021-09-26 6:26:3413 hrs 20 mins ago 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0x7894ae480cfd77e09e9130f26695e732c686bdb1202.257076865150188162 MATIC
0x1d27552d441ff179a4f93e6524cc3351ea77f0ea012b5c654cc95101a8ee84d3195256962021-09-26 6:26:3413 hrs 20 mins ago Polygon: WMATIC Token 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b202.257076865150188162 MATIC
0x266d0d1019010be9ee271b1ecb5ea35a68ccd7b6b50c29a478b74c326747a7d0195256292021-09-26 6:24:1213 hrs 22 mins ago 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0x7894ae480cfd77e09e9130f26695e732c686bdb11,775.568825993176165206 MATIC
0x266d0d1019010be9ee271b1ecb5ea35a68ccd7b6b50c29a478b74c326747a7d0195256292021-09-26 6:24:1213 hrs 22 mins ago Polygon: WMATIC Token 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b1,775.568825993176165206 MATIC
0x70bfd3de53047d97c9310e2cb5d04f86185763205e68d3151f5d7da49d43ee04195255692021-09-26 6:22:1213 hrs 24 mins ago 0xfe4f0eb0a1ad109185c9aade64c48ff8e928e54b0x7894ae480cfd77e09e9130f26695e732c686bdb11,437.931595622359016682 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
bZxProtocol

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-06-09
*/

/**
 * Copyright 2017-2021, bZeroX, LLC <https://bzx.network/>. All Rights Reserved.
 * Licensed under the Apache License, Version 2.0.
 */

pragma solidity 0.5.17;
pragma experimental ABIEncoderV2;


interface IWeth {
    function deposit() external payable;
    function withdraw(uint256 wad) external;
}

contract IERC20 {
    string public name;
    uint8 public decimals;
    string public symbol;
    function totalSupply() public view returns (uint256);
    function balanceOf(address _who) public view returns (uint256);
    function allowance(address _owner, address _spender) public view returns (uint256);
    function approve(address _spender, uint256 _value) public returns (bool);
    function transfer(address _to, uint256 _value) public returns (bool);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract IWethERC20 is IWeth, IERC20 {}

contract Constants {

    uint256 internal constant WEI_PRECISION = 10**18;
    uint256 internal constant WEI_PERCENT_PRECISION = 10**20;

    uint256 internal constant DAYS_IN_A_YEAR = 365;
    uint256 internal constant ONE_MONTH = 2628000; // approx. seconds in a month

    string internal constant UserRewardsID = "UserRewards";
    string internal constant LoanDepositValueID = "LoanDepositValue";

    IWethERC20 public constant wethToken = IWethERC20(0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270); // polygon (Wrapped MATIC)
    address public constant bzrxTokenAddress = address(0); // polygon
    address public constant vbzrxTokenAddress = address(0); // polygon
}

/**
 * @dev Library for managing loan sets
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * Include with `using EnumerableBytes32Set for EnumerableBytes32Set.Bytes32Set;`.
 *
 */
library EnumerableBytes32Set {

    struct Bytes32Set {
        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) index;
        bytes32[] values;
    }

    /**
     * @dev Add an address value to a set. O(1).
     * Returns false if the value was already in the set.
     */
    function addAddress(Bytes32Set storage set, address addrvalue)
        internal
        returns (bool)
    {
        bytes32 value;
        assembly {
            value := addrvalue
        }
        return addBytes32(set, value);
    }

    /**
     * @dev Add a value to a set. O(1).
     * Returns false if the value was already in the set.
     */
    function addBytes32(Bytes32Set storage set, bytes32 value)
        internal
        returns (bool)
    {
        if (!contains(set, value)){
            set.index[value] = set.values.push(value);
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes an address value from a set. O(1).
     * Returns false if the value was not present in the set.
     */
    function removeAddress(Bytes32Set storage set, address addrvalue)
        internal
        returns (bool)
    {
        bytes32 value;
        assembly {
            value := addrvalue
        }
        return removeBytes32(set, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     * Returns false if the value was not present in the set.
     */
    function removeBytes32(Bytes32Set storage set, bytes32 value)
        internal
        returns (bool)
    {
        if (contains(set, value)){
            uint256 toDeleteIndex = set.index[value] - 1;
            uint256 lastIndex = set.values.length - 1;

            // If the element we're deleting is the last one, we can just remove it without doing a swap
            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set.values[lastIndex];

                // Move the last value to the index where the deleted value is
                set.values[toDeleteIndex] = lastValue;
                // Update the index for the moved value
                set.index[lastValue] = toDeleteIndex + 1; // All indexes are 1-based
            }

            // Delete the index entry for the deleted value
            delete set.index[value];

            // Delete the old entry for the moved value
            set.values.pop();

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value)
        internal
        view
        returns (bool)
    {
        return set.index[value] != 0;
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function containsAddress(Bytes32Set storage set, address addrvalue)
        internal
        view
        returns (bool)
    {
        bytes32 value;
        assembly {
            value := addrvalue
        }
        return set.index[value] != 0;
    }

    /**
     * @dev Returns an array with all values in the set. O(N).
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.

     * WARNING: This function may run out of gas on large sets: use {length} and
     * {get} instead in these cases.
     */
    function enumerate(Bytes32Set storage set, uint256 start, uint256 count)
        internal
        view
        returns (bytes32[] memory output)
    {
        uint256 end = start + count;
        require(end >= start, "addition overflow");
        end = set.values.length < end ? set.values.length : end;
        if (end == 0 || start >= end) {
            return output;
        }

        output = new bytes32[](end-start);
        for (uint256 i = start; i < end; i++) {
            output[i-start] = set.values[i];
        }
        return output;
    }

    /**
     * @dev Returns the number of elements on the set. O(1).
     */
    function length(Bytes32Set storage set)
        internal
        view
        returns (uint256)
    {
        return set.values.length;
    }

   /** @dev Returns the element stored at position `index` in the set. O(1).
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function get(Bytes32Set storage set, uint256 index)
        internal
        view
        returns (bytes32)
    {
        return set.values[index];
    }

   /** @dev Returns the element stored at position `index` in the set. O(1).
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function getAddress(Bytes32Set storage set, uint256 index)
        internal
        view
        returns (address)
    {
        bytes32 value = set.values[index];
        address addrvalue;
        assembly {
            addrvalue := value
        }
        return addrvalue;
    }
}

/**
 * @title Helps contracts guard against reentrancy attacks.
 * @author Remco Bloemen <[email protected]π.com>, Eenae <[email protected]>
 * @dev If you mark a function `nonReentrant`, you should also
 * mark it `external`.
 */
contract ReentrancyGuard {

    /// @dev Constant for unlocked guard state - non-zero to prevent extra gas costs.
    /// See: https://github.com/OpenZeppelin/openzeppelin-solidity/issues/1056
    uint256 internal constant REENTRANCY_GUARD_FREE = 1;

    /// @dev Constant for locked guard state
    uint256 internal constant REENTRANCY_GUARD_LOCKED = 2;

    /**
    * @dev We use a single lock for the whole contract.
    */
    uint256 internal reentrancyLock = REENTRANCY_GUARD_FREE;

    /**
    * @dev Prevents a contract from calling itself, directly or indirectly.
    * If you mark a function `nonReentrant`, you should also
    * mark it `external`. Calling one `nonReentrant` function from
    * another is not supported. Instead, you can implement a
    * `private` function doing the actual work, and an `external`
    * wrapper marked as `nonReentrant`.
    */
    modifier nonReentrant() {
        require(reentrancyLock == REENTRANCY_GUARD_FREE, "nonReentrant");
        reentrancyLock = REENTRANCY_GUARD_LOCKED;
        _;
        reentrancyLock = REENTRANCY_GUARD_FREE;
    }
}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot 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-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b != 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Integer division of two numbers, rounding up and truncating the quotient
    */
    function divCeil(uint256 a, uint256 b) internal pure returns (uint256) {
        return divCeil(a, b, "SafeMath: division by zero");
    }

    /**
    * @dev Integer division of two numbers, rounding up and truncating the quotient
    */
    function divCeil(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b != 0, errorMessage);

        if (a == 0) {
            return 0;
        }
        uint256 c = ((a - 1) / b) + 1;

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function min256(uint256 _a, uint256 _b) internal pure returns (uint256) {
        return _a < _b ? _a : _b;
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following 
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract LoanStruct {
    struct Loan {
        bytes32 id;                 // id of the loan
        bytes32 loanParamsId;       // the linked loan params id
        bytes32 pendingTradesId;    // the linked pending trades id
        uint256 principal;          // total borrowed amount outstanding
        uint256 collateral;         // total collateral escrowed for the loan
        uint256 startTimestamp;     // loan start time
        uint256 endTimestamp;       // for active loans, this is the expected loan end time, for in-active loans, is the actual (past) end time
        uint256 startMargin;        // initial margin when the loan opened
        uint256 startRate;          // reference rate when the loan opened for converting collateralToken to loanToken
        address borrower;           // borrower of this loan
        address lender;             // lender of this loan
        bool active;                // if false, the loan has been fully closed
    }
}

contract LoanParamsStruct {
    struct LoanParams {
        bytes32 id;                 // id of loan params object
        bool active;                // if false, this object has been disabled by the owner and can't be used for future loans
        address owner;              // owner of this object
        address loanToken;          // the token being loaned
        address collateralToken;    // the required collateral token
        uint256 minInitialMargin;   // the minimum allowed initial margin
        uint256 maintenanceMargin;  // an unhealthy loan when current margin is at or below this value
        uint256 maxLoanTerm;        // the maximum term for new loans (0 means there's no max term)
    }
}

contract OrderStruct {
    struct Order {
        uint256 lockedAmount;           // escrowed amount waiting for a counterparty
        uint256 interestRate;           // interest rate defined by the creator of this order
        uint256 minLoanTerm;            // minimum loan term allowed
        uint256 maxLoanTerm;            // maximum loan term allowed
        uint256 createdTimestamp;       // timestamp when this order was created
        uint256 expirationTimestamp;    // timestamp when this order expires
    }
}

contract LenderInterestStruct {
    struct LenderInterest {
        uint256 principalTotal;     // total borrowed amount outstanding of asset
        uint256 owedPerDay;         // interest owed per day for all loans of asset
        uint256 owedTotal;          // total interest owed for all loans of asset (assuming they go to full term)
        uint256 paidTotal;          // total interest paid so far for asset
        uint256 updatedTimestamp;   // last update
    }
}

contract LoanInterestStruct {
    struct LoanInterest {
        uint256 owedPerDay;         // interest owed per day for loan
        uint256 depositTotal;       // total escrowed interest for loan
        uint256 updatedTimestamp;   // last update
    }
}

contract Objects is
    LoanStruct,
    LoanParamsStruct,
    OrderStruct,
    LenderInterestStruct,
    LoanInterestStruct
{}

contract State is Constants, Objects, ReentrancyGuard, Ownable {
    using SafeMath for uint256;
    using EnumerableBytes32Set for EnumerableBytes32Set.Bytes32Set;

    address public priceFeeds;                                                              // handles asset reference price lookups
    address public swapsImpl;                                                               // handles asset swaps using dex liquidity

    mapping (bytes4 => address) public logicTargets;                                        // implementations of protocol functions

    mapping (bytes32 => Loan) public loans;                                                 // loanId => Loan
    mapping (bytes32 => LoanParams) public loanParams;                                      // loanParamsId => LoanParams

    mapping (address => mapping (bytes32 => Order)) public lenderOrders;                    // lender => orderParamsId => Order
    mapping (address => mapping (bytes32 => Order)) public borrowerOrders;                  // borrower => orderParamsId => Order

    mapping (bytes32 => mapping (address => bool)) public delegatedManagers;                // loanId => delegated => approved

    // Interest
    mapping (address => mapping (address => LenderInterest)) public lenderInterest;         // lender => loanToken => LenderInterest object
    mapping (bytes32 => LoanInterest) public loanInterest;                                  // loanId => LoanInterest object

    // Internals
    EnumerableBytes32Set.Bytes32Set internal logicTargetsSet;                               // implementations set
    EnumerableBytes32Set.Bytes32Set internal activeLoansSet;                                // active loans set

    mapping (address => EnumerableBytes32Set.Bytes32Set) internal lenderLoanSets;           // lender loans set
    mapping (address => EnumerableBytes32Set.Bytes32Set) internal borrowerLoanSets;         // borrow loans set
    mapping (address => EnumerableBytes32Set.Bytes32Set) internal userLoanParamSets;        // user loan params set

    address public feesController;                                                          // address controlling fee withdrawals

    uint256 public lendingFeePercent = 10 ether; // 10% fee                                 // fee taken from lender interest payments
    mapping (address => uint256) public lendingFeeTokensHeld;                               // total interest fees received and not withdrawn per asset
    mapping (address => uint256) public lendingFeeTokensPaid;                               // total interest fees withdraw per asset (lifetime fees = lendingFeeTokensHeld + lendingFeeTokensPaid)

    uint256 public tradingFeePercent = 0.15 ether; // 0.15% fee                             // fee paid for each trade
    mapping (address => uint256) public tradingFeeTokensHeld;                               // total trading fees received and not withdrawn per asset
    mapping (address => uint256) public tradingFeeTokensPaid;                               // total trading fees withdraw per asset (lifetime fees = tradingFeeTokensHeld + tradingFeeTokensPaid)

    uint256 public borrowingFeePercent = 0.09 ether; // 0.09% fee                           // origination fee paid for each loan
    mapping (address => uint256) public borrowingFeeTokensHeld;                             // total borrowing fees received and not withdrawn per asset
    mapping (address => uint256) public borrowingFeeTokensPaid;                             // total borrowing fees withdraw per asset (lifetime fees = borrowingFeeTokensHeld + borrowingFeeTokensPaid)

    uint256 public protocolTokenHeld;                                                       // current protocol token deposit balance
    uint256 public protocolTokenPaid;                                                       // lifetime total payout of protocol token

    uint256 public affiliateFeePercent = 30 ether; // 30% fee share                         // fee share for affiliate program

    mapping (address => mapping (address => uint256)) public liquidationIncentivePercent;   // percent discount on collateral for liquidators per loanToken and collateralToken

    mapping (address => address) public loanPoolToUnderlying;                               // loanPool => underlying
    mapping (address => address) public underlyingToLoanPool;                               // underlying => loanPool
    EnumerableBytes32Set.Bytes32Set internal loanPoolsSet;                                  // loan pools set

    mapping (address => bool) public supportedTokens;                                       // supported tokens for swaps

    uint256 public maxDisagreement = 5 ether;                                               // % disagreement between swap rate and reference rate

    uint256 public sourceBufferPercent = 5 ether;                                           // used to estimate kyber swap source amount

    uint256 public maxSwapSize = 1500 ether;                                                // maximum supported swap size in ETH


    function _setTarget(
        bytes4 sig,
        address target)
        internal
    {
        logicTargets[sig] = target;

        if (target != address(0)) {
            logicTargetsSet.addBytes32(bytes32(sig));
        } else {
            logicTargetsSet.removeBytes32(bytes32(sig));
        }
    }
}

contract bZxProtocol is State {

    function()
        external
        payable
    {
        if (gasleft() <= 2300) {
            return;
        }

        address target = logicTargets[msg.sig];
        require(target != address(0), "target not active");

        bytes memory data = msg.data;
        assembly {
            let result := delegatecall(gas, target, add(data, 0x20), mload(data), 0, 0)
            let size := returndatasize
            let ptr := mload(0x40)
            returndatacopy(ptr, 0, size)
            switch result
            case 0 { revert(ptr, size) }
            default { return(ptr, size) }
        }
    }

    function replaceContract(
        address target)
        external
        onlyOwner
    {
        (bool success,) = target.delegatecall(abi.encodeWithSignature("initialize(address)", target));
        require(success, "setup failed");
    }

    function setTargets(
        string[] calldata sigsArr,
        address[] calldata targetsArr)
        external
        onlyOwner
    {
        require(sigsArr.length == targetsArr.length, "count mismatch");

        for (uint256 i = 0; i < sigsArr.length; i++) {
            _setTarget(bytes4(keccak256(abi.encodePacked(sigsArr[i]))), targetsArr[i]);
        }
    }

    function getTarget(
        string calldata sig)
        external
        view
        returns (address)
    {
        return logicTargets[bytes4(keccak256(abi.encodePacked(sig)))];
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"affiliateFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"borrowerOrders","outputs":[{"internalType":"uint256","name":"lockedAmount","type":"uint256"},{"internalType":"uint256","name":"interestRate","type":"uint256"},{"internalType":"uint256","name":"minLoanTerm","type":"uint256"},{"internalType":"uint256","name":"maxLoanTerm","type":"uint256"},{"internalType":"uint256","name":"createdTimestamp","type":"uint256"},{"internalType":"uint256","name":"expirationTimestamp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"borrowingFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"borrowingFeeTokensHeld","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"borrowingFeeTokensPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bzrxTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"delegatedManagers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feesController","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"sig","type":"string"}],"name":"getTarget","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"lenderInterest","outputs":[{"internalType":"uint256","name":"principalTotal","type":"uint256"},{"internalType":"uint256","name":"owedPerDay","type":"uint256"},{"internalType":"uint256","name":"owedTotal","type":"uint256"},{"internalType":"uint256","name":"paidTotal","type":"uint256"},{"internalType":"uint256","name":"updatedTimestamp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"lenderOrders","outputs":[{"internalType":"uint256","name":"lockedAmount","type":"uint256"},{"internalType":"uint256","name":"interestRate","type":"uint256"},{"internalType":"uint256","name":"minLoanTerm","type":"uint256"},{"internalType":"uint256","name":"maxLoanTerm","type":"uint256"},{"internalType":"uint256","name":"createdTimestamp","type":"uint256"},{"internalType":"uint256","name":"expirationTimestamp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lendingFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lendingFeeTokensHeld","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lendingFeeTokensPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidationIncentivePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"loanInterest","outputs":[{"internalType":"uint256","name":"owedPerDay","type":"uint256"},{"internalType":"uint256","name":"depositTotal","type":"uint256"},{"internalType":"uint256","name":"updatedTimestamp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"loanParams","outputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"loanToken","type":"address"},{"internalType":"address","name":"collateralToken","type":"address"},{"internalType":"uint256","name":"minInitialMargin","type":"uint256"},{"internalType":"uint256","name":"maintenanceMargin","type":"uint256"},{"internalType":"uint256","name":"maxLoanTerm","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"loanPoolToUnderlying","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"loans","outputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"bytes32","name":"loanParamsId","type":"bytes32"},{"internalType":"bytes32","name":"pendingTradesId","type":"bytes32"},{"internalType":"uint256","name":"principal","type":"uint256"},{"internalType":"uint256","name":"collateral","type":"uint256"},{"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"internalType":"uint256","name":"endTimestamp","type":"uint256"},{"internalType":"uint256","name":"startMargin","type":"uint256"},{"internalType":"uint256","name":"startRate","type":"uint256"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"address","name":"lender","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"logicTargets","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxDisagreement","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxSwapSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"priceFeeds","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"protocolTokenHeld","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"protocolTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"replaceContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string[]","name":"sigsArr","type":"string[]"},{"internalType":"address[]","name":"targetsArr","type":"address[]"}],"name":"setTargets","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sourceBufferPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supportedTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"swapsImpl","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tradingFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tradingFeeTokensHeld","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tradingFeeTokensPaid","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"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"underlyingToLoanPool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vbzrxTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wethToken","outputs":[{"internalType":"contract IWethERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040526001600055678ac7230489e80000601455670214e8348c4f000060175567013fbe85edc90000601a556801a055690d9db80000601f55674563918244f40000602655674563918244f40000602755685150ae84a8cdf00000602855600061006f6100c260201b60201c565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100c6565b3390565b6116c2806100d56000396000f3fe6080604052600436106102305760003560e01c80637a8faeb81161012e578063c4a90815116100ab578063e8f627641161006f578063e8f627641461070a578063edab119f1461071f578063f27451ac14610734578063f2fde38b14610754578063fb08fdaa1461077457610230565b8063c4a9081514610649578063cb6eacd114610681578063d473c2da146106b5578063d485045e146106ca578063da1b620b146106ea57610230565b8063a012d827116100f2578063a012d827146105d4578063ab2c9d75146103e8578063ae0a8530146105f4578063b30643d914610609578063b7e152411461062957610230565b80637a8faeb8146105555780638da5cb5b1461056a5780638dc48ba51461057f5780638f32d59b1461059f57806392d894f8146105b457610230565b80634203e395116101bc57806362fff3f61161018057806362fff3f6146104c557806368c4ac26146104f6578063691bfee8146105165780637420ca3e1461052b57806378d849ed1461054057610230565b80634203e3951461042a5780634699f8461461044a5780634b57b0be1461045f5780634f28cac214610481578063569fc1fb1461049657610230565b80632f470764116102035780632f470764146103935780633432423c146103a85780633452d2d4146103c857806339cd381e146103e85780634115a2b6146103fd57610230565b8063065d810f146102e957806317548b7914610324578063218b39c6146103515780632a32402714610371575b6108fc5a1161023e576102e7565b600080356001600160e01b0319168152600460205260409020546001600160a01b0316806102875760405162461bcd60e51b815260040161027e906114a8565b60405180910390fd5b60606000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525084519495509384935091505060208401855af43d604051816000823e8280156102e3578282f35b8282fd5b005b3480156102f557600080fd5b50610309610304366004611090565b610794565b60405161031b9695949392919061157a565b60405180910390f35b34801561033057600080fd5b5061034461033f36600461116d565b6107d4565b60405161031b9190611354565b34801561035d57600080fd5b5061034461036c366004611030565b6107ef565b34801561037d57600080fd5b5061038661080a565b60405161031b91906114f8565b34801561039f57600080fd5b50610386610810565b3480156103b457600080fd5b506103096103c3366004611090565b610816565b3480156103d457600080fd5b506103866103e3366004611030565b610856565b3480156103f457600080fd5b50610344610868565b34801561040957600080fd5b5061041d61041836600461114e565b61086d565b60405161031b9190611362565b34801561043657600080fd5b50610386610445366004611030565b61088d565b34801561045657600080fd5b5061038661089f565b34801561046b57600080fd5b506104746108a5565b60405161031b919061149a565b34801561048d57600080fd5b506103866108bd565b3480156104a257600080fd5b506104b66104b1366004611130565b6108c3565b60405161031b93929190611506565b3480156104d157600080fd5b506104e56104e0366004611056565b6108e4565b60405161031b95949392919061152e565b34801561050257600080fd5b5061041d610511366004611030565b61091e565b34801561052257600080fd5b50610386610933565b34801561053757600080fd5b50610344610939565b34801561054c57600080fd5b50610344610948565b34801561056157600080fd5b50610386610957565b34801561057657600080fd5b5061034461095d565b34801561058b57600080fd5b5061034461059a366004611030565b61096c565b3480156105ab57600080fd5b5061041d610987565b3480156105c057600080fd5b506103866105cf366004611030565b6109ad565b3480156105e057600080fd5b506102e76105ef3660046110c0565b6109bf565b34801561060057600080fd5b50610386610ac3565b34801561061557600080fd5b50610386610624366004611030565b610ac9565b34801561063557600080fd5b50610386610644366004611030565b610adb565b34801561065557600080fd5b50610669610664366004611130565b610aed565b60405161031b9c9b9a999897969594939291906113e7565b34801561068d57600080fd5b506106a161069c366004611130565b610b60565b60405161031b989796959493929190611370565b3480156106c157600080fd5b50610386610bb7565b3480156106d657600080fd5b506103866106e5366004611030565b610bbd565b3480156106f657600080fd5b5061034461070536600461118b565b610bcf565b34801561071657600080fd5b50610344610c2a565b34801561072b57600080fd5b50610386610c39565b34801561074057600080fd5b5061038661074f366004611056565b610c3f565b34801561076057600080fd5b506102e761076f366004611030565b610c5a565b34801561078057600080fd5b506102e761078f366004611030565b610c8a565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b6004602052600090815260409020546001600160a01b031681565b6022602052600090815260409020546001600160a01b031681565b60175481565b601e5481565b6007602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b60196020526000908152604090205481565b600081565b600960209081526000928352604080842090915290825290205460ff1681565b60156020526000908152604090205481565b60145481565b730d500b1d8e8ef31e21c99d1db9a6444d3adf127081565b60285481565b600b6020526000908152604090208054600182015460029092015490919083565b600a602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b60256020526000908152604090205460ff1681565b60275481565b6003546001600160a01b031681565b6002546001600160a01b031681565b601d5481565b6001546001600160a01b031690565b6021602052600090815260409020546001600160a01b031681565b6001546000906001600160a01b031661099e610d65565b6001600160a01b031614905090565b60166020526000908152604090205481565b6109c7610987565b6109e35760405162461bcd60e51b815260040161027e906114d8565b828114610a025760405162461bcd60e51b815260040161027e906114c8565b60005b83811015610abc57610ab4858583818110610a1c57fe5b602002820190508035601e1936849003018112610a3857600080fd5b9091016020810191503567ffffffffffffffff811115610a5757600080fd5b36819003821315610a6757600080fd5b604051602001610a78929190611347565b60405160208183030381529060405280519060200120848484818110610a9a57fe5b9050602002016020610aaf9190810190611030565b610d69565b600101610a05565b5050505050565b601f5481565b601c6020526000908152604090205481565b601b6020526000908152604090205481565b600560208190526000918252604090912080546001820154600283015460038401546004850154958501546006860154600787015460088801546009890154600a9099015497999698959794969593949293919290916001600160a01b039081169190811690600160a01b900460ff168c565b60066020819052600091825260409091208054600182015460028301546003840154600485015460058601549590960154939560ff8416956101009094046001600160a01b03908116959381169492169290919088565b60265481565b60186020526000908152604090205481565b6000600460008484604051602001610be8929190611347565b60408051601f1981840301815291815281516020928301206001600160e01b03191683529082019290925201600020546001600160a01b031690505b92915050565b6013546001600160a01b031681565b601a5481565b60208080526000928352604080842090915290825290205481565b610c62610987565b610c7e5760405162461bcd60e51b815260040161027e906114d8565b610c8781610de4565b50565b610c92610987565b610cae5760405162461bcd60e51b815260040161027e906114d8565b6000816001600160a01b031682604051602401610ccb9190611354565b60408051601f198184030181529181526020820180516001600160e01b031663189acdbd60e31b17905251610d009190611334565b600060405180830381855af49150503d8060008114610d3b576040519150601f19603f3d011682016040523d82523d6000602084013e610d40565b606091505b5050905080610d615760405162461bcd60e51b815260040161027e906114e8565b5050565b3390565b6001600160e01b03198216600090815260046020526040902080546001600160a01b0319166001600160a01b03831690811790915515610dc457610dbe600c6001600160e01b0319841663ffffffff610e6616565b50610d61565b610ddf600c6001600160e01b0319841663ffffffff610eae16565b505050565b6001600160a01b038116610e0a5760405162461bcd60e51b815260040161027e906114b8565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e728383610f6f565b610ea65750600180830180548083018083556000928352602080842090920185905584835290859052604090912055610c24565b506000610c24565b6000610eba8383610f6f565b15610ea65760008281526020849052604090205460018401546000199182019101808214610f32576000856001018281548110610ef357fe5b9060005260206000200154905080866001018481548110610f1057fe5b6000918252602080832090910192909255918252869052604090206001830190555b60008481526020869052604081205560018501805480610f4e57fe5b60019003818190600052602060002001600090559055600192505050610c24565b60009081526020919091526040902054151590565b8035610c2481611659565b60008083601f840112610fa157600080fd5b50813567ffffffffffffffff811115610fb957600080fd5b602083019150836020820283011115610fd157600080fd5b9250929050565b8035610c248161166d565b8035610c2481611676565b60008083601f84011261100057600080fd5b50813567ffffffffffffffff81111561101857600080fd5b602083019150836001820283011115610fd157600080fd5b60006020828403121561104257600080fd5b600061104e8484610f84565b949350505050565b6000806040838503121561106957600080fd5b60006110758585610f84565b925050602061108685828601610f84565b9150509250929050565b600080604083850312156110a357600080fd5b60006110af8585610f84565b925050602061108685828601610fd8565b600080600080604085870312156110d657600080fd5b843567ffffffffffffffff8111156110ed57600080fd5b6110f987828801610f8f565b9450945050602085013567ffffffffffffffff81111561111857600080fd5b61112487828801610f8f565b95989497509550505050565b60006020828403121561114257600080fd5b600061104e8484610fd8565b6000806040838503121561116157600080fd5b60006110758585610fd8565b60006020828403121561117f57600080fd5b600061104e8484610fe3565b6000806020838503121561119e57600080fd5b823567ffffffffffffffff8111156111b557600080fd5b6111c185828601610fee565b92509250509250929050565b6111d6816115e6565b82525050565b6111d6816115f1565b6111d6816115f6565b60006111f9826115d4565b61120381856115d8565b9350611213818560208601611629565b9290920192915050565b6111d681611612565b600061123283856115d8565b935061123f83858461161d565b50500190565b60006112526011836115dd565b70746172676574206e6f742061637469766560781b815260200192915050565b600061127f6026836115dd565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006112c7600e836115dd565b6d0c6deeadce840dad2e6dac2e8c6d60931b815260200192915050565b60006112f1600c836115dd565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b6000611319600c836115dd565b6b1cd95d1d5c0819985a5b195960a21b815260200192915050565b600061134082846111ee565b9392505050565b600061104e828486611226565b60208101610c2482846111cd565b60208101610c2482846111dc565b610100810161137f828b6111e5565b61138c602083018a6111dc565b61139960408301896111cd565b6113a660608301886111cd565b6113b360808301876111cd565b6113c060a08301866111e5565b6113cd60c08301856111e5565b6113da60e08301846111e5565b9998505050505050505050565b61018081016113f6828f6111e5565b611403602083018e6111e5565b611410604083018d6111e5565b61141d606083018c6111e5565b61142a608083018b6111e5565b61143760a083018a6111e5565b61144460c08301896111e5565b61145160e08301886111e5565b61145f6101008301876111e5565b61146d6101208301866111cd565b61147b6101408301856111cd565b6114896101608301846111dc565b9d9c50505050505050505050505050565b60208101610c24828461121d565b60208082528101610c2481611245565b60208082528101610c2481611272565b60208082528101610c24816112ba565b60208082528101610c24816112e4565b60208082528101610c248161130c565b60208101610c2482846111e5565b6060810161151482866111e5565b61152160208301856111e5565b61104e60408301846111e5565b60a0810161153c82886111e5565b61154960208301876111e5565b61155660408301866111e5565b61156360608301856111e5565b61157060808301846111e5565b9695505050505050565b60c0810161158882896111e5565b61159560208301886111e5565b6115a260408301876111e5565b6115af60608301866111e5565b6115bc60808301856111e5565b6115c960a08301846111e5565b979650505050505050565b5190565b919050565b90815260200190565b6000610c2482611606565b151590565b90565b6001600160e01b03191690565b6001600160a01b031690565b6000610c24826115e6565b82818337506000910152565b60005b8381101561164457818101518382015260200161162c565b83811115611653576000848401525b50505050565b611662816115e6565b8114610c8757600080fd5b611662816115f6565b611662816115f956fea365627a7a72315820ffe20b9320e9c52c43e919efe769a58782f23b6b683ef6092a2ec7676dd873d86c6578706572696d656e74616cf564736f6c63430005110040

Deployed ByteCode Sourcemap

33662:1514:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33780:4;33767:9;:17;33763:56;;33801:7;;33763:56;33831:14;33861:7;;-1:-1:-1;;;;;;33861:7:0;33848:21;;:12;:21;;;;;;-1:-1:-1;;;;;33848:21:0;;33880:50;;;;-1:-1:-1;;;33880:50:0;;;;;;;;;;;;;;;;;33943:17;33963:8;;33943:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;34063:11:0;;33943:28;;-1:-1:-1;99:1;;;-1:-1;34063:11:0;-1:-1:-1;;34056:4:0;34046:15;;34038:6;34033:3;34020:61;34107:14;34152:4;34146:11;34194:4;34191:1;34186:3;34171:28;34220:6;34240:28;;;;34304:4;34299:3;34292:17;34240:28;34261:4;34256:3;34249:17;33991:331;33662:1514;29132:69;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29132:69:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28631:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28631:47:0;;;;;;;;:::i;:::-;;;;;;;;32557:56;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32557:56:0;;;;;;;;:::i;30897:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30897:45:0;;;:::i;:::-;;;;;;;;31991:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31991:32:0;;;:::i;29003:67::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29003:67:0;;;;;;;;:::i;31169:56::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31169:56:0;;;;;;;;:::i;1713:54::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1713:54:0;;;:::i;29265:71::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29265:71:0;;;;;;;;:::i;:::-;;;;;;;;30545:56;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30545:56:0;;;;;;;;:::i;30409:43::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30409:43:0;;;:::i;1515:93::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1515:93:0;;;:::i;:::-;;;;;;;;33204:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33204:39:0;;;:::i;29553:53::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29553:53:0;;;;;;;;:::i;:::-;;;;;;;;;;29412:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29412:78:0;;;;;;;;:::i;:::-;;;;;;;;;;;;32789:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32789:48:0;;;;;;;;:::i;33064:44::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33064:44:0;;;:::i;28493:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28493:24:0;;;:::i;28359:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28359:25:0;;;:::i;31856:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31856:32:0;;;:::i;11026:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11026:79:0;;;:::i;32438:56::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32438:56:0;;;;;;;;:::i;11372:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11372:94:0;;;:::i;30698:56::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30698:56:0;;;;;;;;:::i;34593:378::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;34593:378:0;;;;;;;;:::i;32129:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32129:45:0;;;:::i;31652:58::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31652:58:0;;;;;;;;:::i;31498:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31498:58:0;;;;;;;;:::i;28767:38::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28767:38:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28878:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28878:49:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;32914:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32914:40:0;;;:::i;31017:56::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31017:56:0;;;;;;;;:::i;34979:194::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;34979:194:0;;;;;;;;:::i;30275:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30275:29:0;;;:::i;31367:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31367:47:0;;;:::i;32259:84::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32259:84:0;;;;;;;;:::i;11621:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11621:109:0;;;;;;;;:::i;34337:248::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;34337:248:0;;;;;;;;:::i;29132:69::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28631:47::-;;;;;;;;;;;;-1:-1:-1;;;;;28631:47:0;;:::o;32557:56::-;;;;;;;;;;;;-1:-1:-1;;;;;32557:56:0;;:::o;30897:45::-;;;;:::o;31991:32::-;;;;:::o;29003:67::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31169:56::-;;;;;;;;;;;;;:::o;1713:54::-;1765:1;1713:54;:::o;29265:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30545:56::-;;;;;;;;;;;;;:::o;30409:43::-;;;;:::o;1515:93::-;1565:42;1515:93;:::o;33204:39::-;;;;:::o;29553:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29412:78::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32789:48::-;;;;;;;;;;;;;;;:::o;33064:44::-;;;;:::o;28493:24::-;;;-1:-1:-1;;;;;28493:24:0;;:::o;28359:25::-;;;-1:-1:-1;;;;;28359:25:0;;:::o;31856:32::-;;;;:::o;11026:79::-;11091:6;;-1:-1:-1;;;;;11091:6:0;11026:79;:::o;32438:56::-;;;;;;;;;;;;-1:-1:-1;;;;;32438:56:0;;:::o;11372:94::-;11452:6;;11412:4;;-1:-1:-1;;;;;11452:6:0;11436:12;:10;:12::i;:::-;-1:-1:-1;;;;;11436:22:0;;11429:29;;11372:94;:::o;30698:56::-;;;;;;;;;;;;;:::o;34593:378::-;11238:9;:7;:9::i;:::-;11230:34;;;;-1:-1:-1;;;11230:34:0;;;;;;;;;34751:35;;;34743:62;;;;-1:-1:-1;;;34743:62:0;;;;;;;;;34823:9;34818:146;34838:18;;;34818:146;;;34878:74;34923:7;;34931:1;34923:10;;;;;;;;;;;;-1:-1:-1;30:25;;-1:-1;;100:14;96:29;;;92:48;68:73;;58:2;;155:1;152;145:12;58:2;174:33;;;69:4;55:19;;;-1:-1;16:22;93:18;82:30;;79:2;;;125:1;122;115:12;79:2;155:14;151:38;;;137:53;;134:2;;;203:1;200;193:12;134:2;34906:28:0;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;34906:28:0;;;34896:39;;;;;;34938:10;;34949:1;34938:13;;;;;;;;;;;;;;;;;;;;;;34878:10;:74::i;:::-;34858:3;;34818:146;;;;34593:378;;;;:::o;32129:45::-;;;;:::o;31652:58::-;;;;;;;;;;;;;:::o;31498:::-;;;;;;;;;;;;;:::o;28767:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28767:38:0;;;;;;;;-1:-1:-1;;;28767:38:0;;;;;:::o;28878:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28878:49:0;;;;;;;;;;;;;;;:::o;32914:40::-;;;;:::o;31017:56::-;;;;;;;;;;;;;:::o;34979:194::-;35079:7;35111:12;:54;35158:3;;35141:21;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;35141:21:0;;;35131:32;;49:4:-1;35131:32:0;;;;-1:-1:-1;;;;;;35111:54:0;;;;;;;;;;;-1:-1:-1;35111:54:0;;-1:-1:-1;;;;;35111:54:0;;-1:-1:-1;34979:194:0;;;;;:::o;30275:29::-;;;-1:-1:-1;;;;;30275:29:0;;:::o;31367:47::-;;;;:::o;32259:84::-;;;;;;;;;;;;;;;;;;;;;;;:::o;11621:109::-;11238:9;:7;:9::i;:::-;11230:34;;;;-1:-1:-1;;;11230:34:0;;;;;;;;;11694:28;11713:8;11694:18;:28::i;:::-;11621:109;:::o;34337:248::-;11238:9;:7;:9::i;:::-;11230:34;;;;-1:-1:-1;;;11230:34:0;;;;;;;;;34442:12;34459:6;-1:-1:-1;;;;;34459:19:0;34526:6;34479:54;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;34479:54:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;34459:75:0;;;34479:54;34459:75;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;34441:93:0;;;34553:7;34545:32;;;;-1:-1:-1;;;34545:32:0;;;;;;;;;11275:1;34337:248;:::o;9817:98::-;9897:10;9817:98;:::o;33339:316::-;-1:-1:-1;;;;;;33440:17:0;;;;;;:12;:17;;;;;:26;;-1:-1:-1;;;;;;33440:26:0;-1:-1:-1;;;;;33440:26:0;;;;;;;;33483:20;33479:169;;33520:40;:15;-1:-1:-1;;;;;;33547:12:0;;33520:40;:26;:40;:::i;:::-;;33479:169;;;33593:43;:15;-1:-1:-1;;;;;;33623:12:0;;33593:43;:29;:43;:::i;:::-;;33339:316;;:::o;11836:229::-;-1:-1:-1;;;;;11910:22:0;;11902:73;;;;-1:-1:-1;;;11902:73:0;;;;;;;;;12012:6;;11991:38;;-1:-1:-1;;;;;11991:38:0;;;;12012:6;;11991:38;;12012:6;;11991:38;12040:6;:17;;-1:-1:-1;;;;;;12040:17:0;-1:-1:-1;;;;;12040:17:0;;;;;;;;;;11836:229::o;2912:289::-;3007:4;3034:20;3043:3;3048:5;3034:8;:20::i;:::-;3029:165;;-1:-1:-1;3089:10:0;;;;27::-1;;23:18;;;45:23;;;-1:-1;3089:22:0;;;;;;;;;;;;;3070:16;;;;;;;;;;;:41;3126:11;;3029:165;-1:-1:-1;3177:5:0;3170:12;;3733:1054;3831:4;3857:20;3866:3;3871:5;3857:8;:20::i;:::-;3853:927;;;3893:21;3917:16;;;;;;;;;;;3936:1;3972:10;;:17;-1:-1:-1;;3917:20:0;;;;3972:21;4120:26;;;4116:389;;4167:17;4187:3;:10;;4198:9;4187:21;;;;;;;;;;;;;;;;4167:41;;4337:9;4309:3;:10;;4320:13;4309:25;;;;;;;;;;;;;;;;;;;:37;;;;4422:20;;;;;;;;;4461:1;4445:17;;4422:40;;4116:389;4589:9;:16;;;;;;;;;;4582:23;4679:10;;;:16;;;;;;;;;;;;;;;;;;;;;;;;4719:4;4712:11;;;;;;4873:165;4980:4;5009:16;;;;;;;;;;;;:21;;;4873:165::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;160:352;;;290:3;283:4;275:6;271:17;267:27;257:2;;308:1;305;298:12;257:2;-1:-1;328:20;;368:18;357:30;;354:2;;;400:1;397;390:12;354:2;434:4;426:6;422:17;410:29;;485:3;477:4;469:6;465:17;455:8;451:32;448:41;445:2;;;502:1;499;492:12;445:2;250:262;;;;;;905:130;972:20;;997:33;972:20;997:33;;1042:128;1108:20;;1133:32;1108:20;1133:32;;1192:337;;;1307:3;1300:4;1292:6;1288:17;1284:27;1274:2;;1325:1;1322;1315:12;1274:2;-1:-1;1345:20;;1385:18;1374:30;;1371:2;;;1417:1;1414;1407:12;1371:2;1451:4;1443:6;1439:17;1427:29;;1502:3;1494:4;1486:6;1482:17;1472:8;1468:32;1465:41;1462:2;;;1519:1;1516;1509:12;1537:241;;1641:2;1629:9;1620:7;1616:23;1612:32;1609:2;;;1657:1;1654;1647:12;1609:2;1692:1;1709:53;1754:7;1734:9;1709:53;;;1699:63;1603:175;-1:-1;;;;1603:175;1785:366;;;1906:2;1894:9;1885:7;1881:23;1877:32;1874:2;;;1922:1;1919;1912:12;1874:2;1957:1;1974:53;2019:7;1999:9;1974:53;;;1964:63;;1936:97;2064:2;2082:53;2127:7;2118:6;2107:9;2103:22;2082:53;;;2072:63;;2043:98;1868:283;;;;;;2158:366;;;2279:2;2267:9;2258:7;2254:23;2250:32;2247:2;;;2295:1;2292;2285:12;2247:2;2330:1;2347:53;2392:7;2372:9;2347:53;;;2337:63;;2309:97;2437:2;2455:53;2500:7;2491:6;2480:9;2476:22;2455:53;;2531:694;;;;;2730:2;2718:9;2709:7;2705:23;2701:32;2698:2;;;2746:1;2743;2736:12;2698:2;2781:31;;2832:18;2821:30;;2818:2;;;2864:1;2861;2854:12;2818:2;2892:88;2972:7;2963:6;2952:9;2948:22;2892:88;;;2882:98;;;;2760:226;3045:2;3034:9;3030:18;3017:32;3069:18;3061:6;3058:30;3055:2;;;3101:1;3098;3091:12;3055:2;3129:80;3201:7;3192:6;3181:9;3177:22;3129:80;;;2692:533;;;;-1:-1;3119:90;-1:-1;;;;2692:533;3232:241;;3336:2;3324:9;3315:7;3311:23;3307:32;3304:2;;;3352:1;3349;3342:12;3304:2;3387:1;3404:53;3449:7;3429:9;3404:53;;3480:366;;;3601:2;3589:9;3580:7;3576:23;3572:32;3569:2;;;3617:1;3614;3607:12;3569:2;3652:1;3669:53;3714:7;3694:9;3669:53;;3853:239;;3956:2;3944:9;3935:7;3931:23;3927:32;3924:2;;;3972:1;3969;3962:12;3924:2;4007:1;4024:52;4068:7;4048:9;4024:52;;4099:367;;;4223:2;4211:9;4202:7;4198:23;4194:32;4191:2;;;4239:1;4236;4229:12;4191:2;4274:31;;4325:18;4314:30;;4311:2;;;4357:1;4354;4347:12;4311:2;4385:65;4442:7;4433:6;4422:9;4418:22;4385:65;;;4375:75;;;;4253:203;4185:281;;;;;;4473:113;4556:24;4574:5;4556:24;;;4551:3;4544:37;4538:48;;;4593:104;4670:21;4685:5;4670:21;;4704:113;4787:24;4805:5;4787:24;;4824:356;;4952:38;4984:5;4952:38;;;5002:88;5083:6;5078:3;5002:88;;;4995:95;;5095:52;5140:6;5135:3;5128:4;5121:5;5117:16;5095:52;;;5159:16;;;;;4932:248;-1:-1;;4932:248;5187:160;5287:54;5335:5;5287:54;;5379:313;;5513:89;5595:6;5590:3;5513:89;;;5506:96;;5614:43;5650:6;5645:3;5638:5;5614:43;;;-1:-1;;5670:16;;5499:193;6043:317;;6203:67;6267:2;6262:3;6203:67;;;-1:-1;;;6283:40;;6351:2;6342:12;;6189:171;-1:-1;;6189:171;6369:375;;6529:67;6593:2;6588:3;6529:67;;;6629:34;6609:55;;-1:-1;;;6693:2;6684:12;;6677:30;6735:2;6726:12;;6515:229;-1:-1;;6515:229;6753:314;;6913:67;6977:2;6972:3;6913:67;;;-1:-1;;;6993:37;;7058:2;7049:12;;6899:168;-1:-1;;6899:168;7076:312;;7236:67;7300:2;7295:3;7236:67;;;-1:-1;;;7316:35;;7379:2;7370:12;;7222:166;-1:-1;;7222:166;7397:312;;7557:67;7621:2;7616:3;7557:67;;;-1:-1;;;7637:35;;7700:2;7691:12;;7543:166;-1:-1;;7543:166;7837:262;;7981:93;8070:3;8061:6;7981:93;;;7974:100;7962:137;-1:-1;;;7962:137;8106:278;;8258:101;8355:3;8346:6;8338;8258:101;;8684:213;8802:2;8787:18;;8816:71;8791:9;8860:6;8816:71;;8904:201;9016:2;9001:18;;9030:65;9005:9;9068:6;9030:65;;9112:983;9420:3;9405:19;;9435:71;9409:9;9479:6;9435:71;;;9517:66;9579:2;9568:9;9564:18;9555:6;9517:66;;;9594:72;9662:2;9651:9;9647:18;9638:6;9594:72;;;9677;9745:2;9734:9;9730:18;9721:6;9677:72;;;9760:73;9828:3;9817:9;9813:19;9804:6;9760:73;;;9844;9912:3;9901:9;9897:19;9888:6;9844:73;;;9928;9996:3;9985:9;9981:19;9972:6;9928:73;;;10012;10080:3;10069:9;10065:19;10056:6;10012:73;;;9391:704;;;;;;;;;;;;10102:1435;10524:3;10509:19;;10539:71;10513:9;10583:6;10539:71;;;10621:72;10689:2;10678:9;10674:18;10665:6;10621:72;;;10704;10772:2;10761:9;10757:18;10748:6;10704:72;;;10787;10855:2;10844:9;10840:18;10831:6;10787:72;;;10870:73;10938:3;10927:9;10923:19;10914:6;10870:73;;;10954;11022:3;11011:9;11007:19;10998:6;10954:73;;;11038;11106:3;11095:9;11091:19;11082:6;11038:73;;;11122;11190:3;11179:9;11175:19;11166:6;11122:73;;;11206;11274:3;11263:9;11259:19;11250:6;11206:73;;;11290;11358:3;11347:9;11343:19;11334:6;11290:73;;;11374:74;11443:3;11432:9;11428:19;11418:7;11374:74;;;11459:68;11522:3;11511:9;11507:19;11497:7;11459:68;;;10495:1042;;;;;;;;;;;;;;;;11544:247;11679:2;11664:18;;11693:88;11668:9;11754:6;11693:88;;11798:407;11989:2;12003:47;;;11974:18;;12064:131;11974:18;12064:131;;12212:407;12403:2;12417:47;;;12388:18;;12478:131;12388:18;12478:131;;12626:407;12817:2;12831:47;;;12802:18;;12892:131;12802:18;12892:131;;13040:407;13231:2;13245:47;;;13216:18;;13306:131;13216:18;13306:131;;13454:407;13645:2;13659:47;;;13630:18;;13720:131;13630:18;13720:131;;13868:213;13986:2;13971:18;;14000:71;13975:9;14044:6;14000:71;;14088:435;14262:2;14247:18;;14276:71;14251:9;14320:6;14276:71;;;14358:72;14426:2;14415:9;14411:18;14402:6;14358:72;;;14441;14509:2;14498:9;14494:18;14485:6;14441:72;;14530:659;14760:3;14745:19;;14775:71;14749:9;14819:6;14775:71;;;14857:72;14925:2;14914:9;14910:18;14901:6;14857:72;;;14940;15008:2;14997:9;14993:18;14984:6;14940:72;;;15023;15091:2;15080:9;15076:18;15067:6;15023:72;;;15106:73;15174:3;15163:9;15159:19;15150:6;15106:73;;;14731:458;;;;;;;;;15196:771;15454:3;15439:19;;15469:71;15443:9;15513:6;15469:71;;;15551:72;15619:2;15608:9;15604:18;15595:6;15551:72;;;15634;15702:2;15691:9;15687:18;15678:6;15634:72;;;15717;15785:2;15774:9;15770:18;15761:6;15717:72;;;15800:73;15868:3;15857:9;15853:19;15844:6;15800:73;;;15884;15952:3;15941:9;15937:19;15928:6;15884:73;;;15425:542;;;;;;;;;;15974:121;16061:12;;16032:63;16103:144;16238:3;16216:31;-1:-1;16216:31;16256:163;16359:19;;;16408:4;16399:14;;16352:67;16581:91;;16643:24;16661:5;16643:24;;16679:85;16745:13;16738:21;;16721:43;16771:72;16833:5;16816:27;16850:144;-1:-1;;;;;;16911:78;;16894:100;17001:121;-1:-1;;;;;17063:54;;17046:76;17208:155;;17304:54;17352:5;17304:54;;17503:145;17584:6;17579:3;17574;17561:30;-1:-1;17640:1;17622:16;;17615:27;17554:94;17657:268;17722:1;17729:101;17743:6;17740:1;17737:13;17729:101;;;17810:11;;;17804:18;17791:11;;;17784:39;17765:2;17758:10;17729:101;;;17845:6;17842:1;17839:13;17836:2;;;17910:1;17901:6;17896:3;17892:16;17885:27;17836:2;17706:219;;;;;17933:117;18002:24;18020:5;18002:24;;;17995:5;17992:35;17982:2;;18041:1;18038;18031:12;18057:117;18126:24;18144:5;18126:24;;18181:115;18249:23;18266:5;18249:23;

Swarm Source

bzzr://ffe20b9320e9c52c43e919efe769a58782f23b6b683ef6092a2ec7676dd873d8
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.