Contract 0xD8Ee69652E4e4838f2531732a46d1f7F584F0b7f

 
Ad
Ad
Txn Hash Method
Block
From
To
Value
0x2452e4d90e133ab1cf68f91fcf685646b9126f8f20398a94cbdd456cce48cca0Extend Loan Dura...(pending)2021-06-20 1:34:352 days 18 hrs ago0xd67c9d748acc98bef9502c32ec70db6159c969ac IN 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether(Pending)(Pending)
0x2938575dd7dd94d88e76efab19a177e0ea9aaa66be7054b1eb0d6afd5731977dRollover With Ga...126858372021-06-22 19:16:1136 mins ago0xa8263755f8af6277ce941b7070ac1648ae46230e IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.06148635235540.647350167
0x30a575a36d7cb53678f9f331ddb9c323c48442011ed2ae961fe8dcb217ca68fbRollover With Ga...126857862021-06-22 19:06:5946 mins ago0xa8263755f8af6277ce941b7070ac1648ae46230e IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.07750298474140.692397662
0x376af098d09305d240bcc30b931f97a1066d34226d3883d0d72ecfd3d169ddd7Withdraw Collate...126849802021-06-22 16:03:313 hrs 49 mins ago0x399abd36b9c7cef008f75d8805ee5fdf05d41773 IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.0267491106
0x6798287e07d9861440580a21dd6c83ce91e2ceb502222a99364891b24edc9eed0x3a59a772126844562021-06-22 14:08:115 hrs 44 mins ago0xb7f72028d9b502dc871c444363a7ac5a52546608 IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.007283154222
0xea43fafaf6e77b132eb22ea65ab92ebafe740513d7a48994f60ed1998aad4d86Deposit Collater...126844422021-06-22 14:05:025 hrs 48 mins ago0x3ab3f7c1ed1a0064cce101a6e5c40b3016445e48 IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0.399999999999999 Ether0.0287905464254.1
0xc30fea641856c1cb76fa08c992c07e9b642bdb7b933cdff66b5d234edaff2707Close With Depos...126842162021-06-22 13:15:076 hrs 38 mins ago0x12eccbd6e187172da6810fc5dc7ce6c60d6d4d54 IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.07054677245
0x4219d560ef264a9d32d62291d46ba9df5c2377b67480790001a635af1b1c8d90Close With Depos...126825162021-06-22 6:49:4213 hrs 3 mins ago0xa81f310cf5ad7c5541e5d1af53f46b999959d84b IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f2.402 Ether0.003449473217.9
0xb3a76563b4c618751012f043856c4441311e476158d6c59dbeb51f5b67eeecfaRollover126815192021-06-22 3:05:3216 hrs 47 mins ago0xa8263755f8af6277ce941b7070ac1648ae46230e IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.04727167446328.000001459
0x8e4b60f5f0ab881ed99c795ff7cc666e7895a1fefb416f9c7a6ea203424eb211Rollover With Ga...126810712021-06-22 1:26:2618 hrs 26 mins ago0xa8263755f8af6277ce941b7070ac1648ae46230e IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.07880804030443.878338174
0x4e51dd126a53cdcd70857da9c2d5d71ff80beef745bb38e8bddecd078f5cbfc5Close With Swap126809002021-06-22 0:50:2319 hrs 2 mins ago0xdd7c40ad9dd3ba5708e3cc6deb90fcfc37933e09 IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.07159466737
0xb1abb016783bd86c461a036f24841f48efb28b954892a217e96ad491724e34fdClose With Swap126809002021-06-22 0:50:2319 hrs 2 mins ago0xdd7c40ad9dd3ba5708e3cc6deb90fcfc37933e09 IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.05905751337
0x4f335e5f4b6722e764f8d84a6a21231754060e92a22e6e5244b5046e3b37d21fClose With Swap126809002021-06-22 0:50:2319 hrs 2 mins ago0xdd7c40ad9dd3ba5708e3cc6deb90fcfc37933e09 IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.05835917537
0x7616635faabb57c78630f2f01cdd08bf317845357db99bbf3055d703fdca9994Close With Swap126808462021-06-22 0:39:2619 hrs 13 mins ago0xf1ccfd15d0e5eb2063deff9137b6bb2607f135a3 IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.08087568363
0x8c61f853dde9b49c660df923446522bc637bf0340eaaf42fbd730b4e69956e70Extend Loan Dura...126806062021-06-21 23:42:0620 hrs 11 mins ago0x0442a79e7f06a2675189fcbe8961e44653c4651c IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.01094087555
0xdb24d3310bd22b90f3122d1fb4ba2536eeeff06abfa1d20f19705382878aa161Extend Loan Dura...126806022021-06-21 23:41:2920 hrs 11 mins ago0x0442a79e7f06a2675189fcbe8961e44653c4651c IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.011139856
0x638c85835b5a86a0eaf240a545beed23b0f920e2b73a92fa45dc96458a2f77b9Deposit Collater...126803432021-06-21 22:38:4021 hrs 14 mins ago0xc8cac7985e716aa5e87621e567e3e49c08b489a1 IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.00769262454
0x6ea92bc238654237ffbbcb4b2ca306078986c730e582089a4ac80953d01366d8Close With Swap126803372021-06-21 22:36:0221 hrs 17 mins ago0x7468da98d95cdf8b79d587df6cb2f2567ae94ffd IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.04226864433
0x24c7c5df196d43020093268ee67f38638e5cd65046aea4336f924523384348a10x3a59a772126792892021-06-21 18:32:431 day 1 hr ago0xb7f72028d9b502dc871c444363a7ac5a52546608 IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.00101701731
0x4416698b66a90d6f9ceb9348b6d051e04b91c8464d6fdf53a7170114c7ad2718Replace Contract126792012021-06-21 18:15:521 day 1 hr ago0xb7f72028d9b502dc871c444363a7ac5a52546608 IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.0066874840
0xa3b3aece08185c9ace3121b75e4de4635f654d413c3524ef680ba6ea199965a7Deposit Collater...126787272021-06-21 16:32:331 day 3 hrs ago0xbfc4fbbec37c291aed1d14f02b5221d0be0fe8f1 IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0.599999999999999 Ether0.00521198446
0xfc117f970e4fd6d7361d4b5e588b4420040bfc6fca76b618aaa9fc1a6e74d821Deposit Collater...126787222021-06-21 16:32:171 day 3 hrs ago0xbfc4fbbec37c291aed1d14f02b5221d0be0fe8f1 IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0.6 Ether0.00521143246
0x0e1eebc034e60addcbd9972c947a73ab82d169698eea6598b7adcd29288e7f100x2d7af0f4126784862021-06-21 15:42:521 day 4 hrs ago0xb7f72028d9b502dc871c444363a7ac5a52546608 IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.004057944
0x4e3d627b2fc7df287ab55013fe7000a7055b91ec97f0c7b39b39960bfdf351bfReplace Contract126784682021-06-21 15:38:231 day 4 hrs ago0xb7f72028d9b502dc871c444363a7ac5a52546608 IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.00441245244
0xff4b6bfff2480d644cbe07e4c85c5ea50b5673692d3bf85eb346321f52301dd5Rollover With Ga...126780892021-06-21 14:14:191 day 5 hrs ago0xa8263755f8af6277ce941b7070ac1648ae46230e IN  0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0 Ether0.07255704595146.037098905
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x2938575dd7dd94d88e76efab19a177e0ea9aaa66be7054b1eb0d6afd5731977d126858372021-06-22 19:16:1136 mins ago 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0xa8263755f8af6277ce941b7070ac1648ae46230e0.14260552 Ether
0x2938575dd7dd94d88e76efab19a177e0ea9aaa66be7054b1eb0d6afd5731977d126858372021-06-22 19:16:1136 mins ago Wrapped Ether 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0.14260552 Ether
0xea43fafaf6e77b132eb22ea65ab92ebafe740513d7a48994f60ed1998aad4d86126844422021-06-22 14:05:025 hrs 48 mins ago 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f Wrapped Ether0.399999999999999902 Ether
0x834bb4d876e9041777e28c6c1c2646bce7f23d9fbc15934f07c8cc1f65cffbc7126840952021-06-22 12:47:557 hrs 5 mins ago 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f 0x77a5deab12cae4a9dc0d1f0f393d2420bcb768ce4.287325345346848251 Ether
0x834bb4d876e9041777e28c6c1c2646bce7f23d9fbc15934f07c8cc1f65cffbc7126840952021-06-22 12:47:557 hrs 5 mins ago Wrapped Ether 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f4.287325345346848251 Ether
0x9ef8b03906e7176cb153ac924ea01578974f8bc2518779f05d0af6a80675abf3126840912021-06-22 12:47:217 hrs 5 mins ago 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f 0x21b3f292713ca5ecd10a57792cc770efc7f2a7e57.301688381340404062 Ether
0x9ef8b03906e7176cb153ac924ea01578974f8bc2518779f05d0af6a80675abf3126840912021-06-22 12:47:217 hrs 5 mins ago Wrapped Ether 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f7.301688381340404062 Ether
0xa7058f9204d7a9e801a669917416d0c314db63eb35be4ad41eb91a1f4b48eab8126839562021-06-22 12:17:117 hrs 35 mins ago 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f 0x77a5deab12cae4a9dc0d1f0f393d2420bcb768ce1.861220507686512889 Ether
0xa7058f9204d7a9e801a669917416d0c314db63eb35be4ad41eb91a1f4b48eab8126839562021-06-22 12:17:117 hrs 35 mins ago Wrapped Ether 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f1.861220507686512889 Ether
0x4219d560ef264a9d32d62291d46ba9df5c2377b67480790001a635af1b1c8d90126825162021-06-22 6:49:4213 hrs 3 mins ago 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0xa81f310cf5ad7c5541e5d1af53f46b999959d84b0.000683859564171372 Ether
0x4219d560ef264a9d32d62291d46ba9df5c2377b67480790001a635af1b1c8d90126825162021-06-22 6:49:4213 hrs 3 mins ago 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f Wrapped Ether2.401316140435828628 Ether
0x4f335e5f4b6722e764f8d84a6a21231754060e92a22e6e5244b5046e3b37d21f126809002021-06-22 0:50:2319 hrs 2 mins ago 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0xdd7c40ad9dd3ba5708e3cc6deb90fcfc37933e091.577412506422854156 Ether
0x4f335e5f4b6722e764f8d84a6a21231754060e92a22e6e5244b5046e3b37d21f126809002021-06-22 0:50:2319 hrs 2 mins ago Wrapped Ether 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f1.577412506422854156 Ether
0x7616635faabb57c78630f2f01cdd08bf317845357db99bbf3055d703fdca9994126808462021-06-22 0:39:2619 hrs 13 mins ago 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0xf1ccfd15d0e5eb2063deff9137b6bb2607f135a30.468495590649664893 Ether
0x7616635faabb57c78630f2f01cdd08bf317845357db99bbf3055d703fdca9994126808462021-06-22 0:39:2619 hrs 13 mins ago Wrapped Ether 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0.468495590649664893 Ether
0x6ea92bc238654237ffbbcb4b2ca306078986c730e582089a4ac80953d01366d8126803372021-06-21 22:36:0221 hrs 17 mins ago 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0x7468da98d95cdf8b79d587df6cb2f2567ae94ffd0.210124612470748646 Ether
0x6ea92bc238654237ffbbcb4b2ca306078986c730e582089a4ac80953d01366d8126803372021-06-21 22:36:0221 hrs 17 mins ago Wrapped Ether 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0.210124612470748646 Ether
0xa4a75251e66d2b1fd098804b76d4ecdbd5b21f1bd2199c07ce41d355e2ef51f6126801682021-06-21 21:59:1221 hrs 53 mins ago 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f 0x8ade2816339700fde684e11c4c578123b3a8f7652.145407638758867279 Ether
0xa4a75251e66d2b1fd098804b76d4ecdbd5b21f1bd2199c07ce41d355e2ef51f6126801682021-06-21 21:59:1221 hrs 53 mins ago Wrapped Ether 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f2.145407638758867279 Ether
0xb086d28f8ad8e0cb74e348dbb59a6f086555e75f425c0f61b3f65c1501d2254d126801622021-06-21 21:57:5321 hrs 55 mins ago 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f 0x21b3f292713ca5ecd10a57792cc770efc7f2a7e51.695205827769407659 Ether
0xb086d28f8ad8e0cb74e348dbb59a6f086555e75f425c0f61b3f65c1501d2254d126801622021-06-21 21:57:5321 hrs 55 mins ago Wrapped Ether 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f1.695205827769407659 Ether
0x833fda6e4866ca917916f4b9b8ebdaf22b1d8e3f50aa874a2799ccd769e62a4b126793362021-06-21 18:42:091 day 1 hr ago 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f 0x8ade2816339700fde684e11c4c578123b3a8f7650.449311136307999292 Ether
0x833fda6e4866ca917916f4b9b8ebdaf22b1d8e3f50aa874a2799ccd769e62a4b126793362021-06-21 18:42:091 day 1 hr ago Wrapped Ether 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0.449311136307999292 Ether
0x6d42f516f0604ac96d9ccf8950c9d47a34656bbb1b08eeaac8c1e20ca3c2be5f126791382021-06-21 18:02:451 day 1 hr ago 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f 0x77a5deab12cae4a9dc0d1f0f393d2420bcb768ce0.511474790257101863 Ether
0x6d42f516f0604ac96d9ccf8950c9d47a34656bbb1b08eeaac8c1e20ca3c2be5f126791382021-06-21 18:02:451 day 1 hr ago Wrapped Ether 0xd8ee69652e4e4838f2531732a46d1f7f584f0b7f0.511474790257101863 Ether
[ 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 Etherscan.io on 2020-09-02
*/

/**
 * Copyright 2017-2020, 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

    IWethERC20 public constant wethToken = IWethERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
    address public constant bzrxTokenAddress = 0x56d811088235F11C8920698a204A5010a788f4b3;
    address public constant vbzrxTokenAddress = 0xB72B31907C1C95F3650b64b2469e08EdACeE5e8F;
}

/**
 * @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 => uint256) public liquidationIncentivePercent;                    // percent discount on collateral for liquidators per collateral asset

    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"}],"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"}]

60806040526001600055678ac7230489e80000601455670214e8348c4f000060175567013fbe85edc90000601a556801a055690d9db80000601f55674563918244f40000602655674563918244f40000602755685150ae84a8cdf00000602855600061006f6100c260201b60201c565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100c6565b3390565b6116f8806100d56000396000f3fe6080604052600436106102305760003560e01c806378d849ed1161012e578063b7e15241116100ab578063da1b620b1161006f578063da1b620b1461071f578063e8f627641461073f578063edab119f14610754578063f2fde38b14610769578063fb08fdaa1461078957610230565b8063b7e152411461065e578063c4a908151461067e578063cb6eacd1146106b6578063d473c2da146106ea578063d485045e146106ff57610230565b806392d894f8116100f257806392d894f8146105d4578063a012d827146105f4578063ab2c9d7514610614578063ae0a853014610629578063b30643d91461063e57610230565b806378d849ed146105605780637a8faeb8146105755780638da5cb5b1461058a5780638dc48ba51461059f5780638f32d59b146105bf57610230565b80634203e395116101bc57806362fff3f61161018057806362fff3f6146104c557806368c4ac26146104f6578063691bfee8146105165780636f2709f21461052b5780637420ca3e1461054b57610230565b80634203e3951461042a5780634699f8461461044a5780634b57b0be1461045f5780634f28cac214610481578063569fc1fb1461049657610230565b80632f470764116102035780632f470764146103935780633432423c146103a85780633452d2d4146103c857806339cd381e146103e85780634115a2b6146103fd57610230565b8063065d810f146102e957806317548b7914610324578063218b39c6146103515780632a32402714610371575b6108fc5a1161023e576102e7565b600080356001600160e01b0319168152600460205260409020546001600160a01b0316806102875760405162461bcd60e51b815260040161027e906114de565b60405180910390fd5b60606000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525084519495509384935091505060208401855af43d604051816000823e8280156102e3578282f35b8282fd5b005b3480156102f557600080fd5b506103096103043660046110c6565b6107a9565b60405161031b969594939291906115b0565b60405180910390f35b34801561033057600080fd5b5061034461033f3660046111a3565b6107e9565b60405161031b919061138a565b34801561035d57600080fd5b5061034461036c366004611066565b610804565b34801561037d57600080fd5b5061038661081f565b60405161031b919061152e565b34801561039f57600080fd5b50610386610825565b3480156103b457600080fd5b506103096103c33660046110c6565b61082b565b3480156103d457600080fd5b506103866103e3366004611066565b61086b565b3480156103f457600080fd5b5061034461087d565b34801561040957600080fd5b5061041d610418366004611184565b610895565b60405161031b9190611398565b34801561043657600080fd5b50610386610445366004611066565b6108b5565b34801561045657600080fd5b506103866108c7565b34801561046b57600080fd5b506104746108cd565b60405161031b91906114d0565b34801561048d57600080fd5b506103866108e5565b3480156104a257600080fd5b506104b66104b1366004611166565b6108eb565b60405161031b9392919061153c565b3480156104d157600080fd5b506104e56104e036600461108c565b61090c565b60405161031b959493929190611564565b34801561050257600080fd5b5061041d610511366004611066565b610946565b34801561052257600080fd5b5061038661095b565b34801561053757600080fd5b50610386610546366004611066565b610961565b34801561055757600080fd5b50610344610972565b34801561056c57600080fd5b50610344610981565b34801561058157600080fd5b50610386610990565b34801561059657600080fd5b50610344610996565b3480156105ab57600080fd5b506103446105ba366004611066565b6109a5565b3480156105cb57600080fd5b5061041d6109c0565b3480156105e057600080fd5b506103866105ef366004611066565b6109e6565b34801561060057600080fd5b506102e761060f3660046110f6565b6109f8565b34801561062057600080fd5b50610344610afc565b34801561063557600080fd5b50610386610b14565b34801561064a57600080fd5b50610386610659366004611066565b610b1a565b34801561066a57600080fd5b50610386610679366004611066565b610b2c565b34801561068a57600080fd5b5061069e610699366004611166565b610b3e565b60405161031b9c9b9a9998979695949392919061141d565b3480156106c257600080fd5b506106d66106d1366004611166565b610bb1565b60405161031b9897969594939291906113a6565b3480156106f657600080fd5b50610386610c08565b34801561070b57600080fd5b5061038661071a366004611066565b610c0e565b34801561072b57600080fd5b5061034461073a3660046111c1565b610c20565b34801561074b57600080fd5b50610344610c7b565b34801561076057600080fd5b50610386610c8a565b34801561077557600080fd5b506102e7610784366004611066565b610c90565b34801561079557600080fd5b506102e76107a4366004611066565b610cc0565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b6004602052600090815260409020546001600160a01b031681565b6022602052600090815260409020546001600160a01b031681565b60175481565b601e5481565b6007602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b60196020526000908152604090205481565b73b72b31907c1c95f3650b64b2469e08edacee5e8f81565b600960209081526000928352604080842090915290825290205460ff1681565b60156020526000908152604090205481565b60145481565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60285481565b600b6020526000908152604090208054600182015460029092015490919083565b600a602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b60256020526000908152604090205460ff1681565b60275481565b602080526000908152604090205481565b6003546001600160a01b031681565b6002546001600160a01b031681565b601d5481565b6001546001600160a01b031690565b6021602052600090815260409020546001600160a01b031681565b6001546000906001600160a01b03166109d7610d9b565b6001600160a01b031614905090565b60166020526000908152604090205481565b610a006109c0565b610a1c5760405162461bcd60e51b815260040161027e9061150e565b828114610a3b5760405162461bcd60e51b815260040161027e906114fe565b60005b83811015610af557610aed858583818110610a5557fe5b602002820190508035601e1936849003018112610a7157600080fd5b9091016020810191503567ffffffffffffffff811115610a9057600080fd5b36819003821315610aa057600080fd5b604051602001610ab192919061137d565b60405160208183030381529060405280519060200120848484818110610ad357fe5b9050602002016020610ae89190810190611066565b610d9f565b600101610a3e565b5050505050565b7356d811088235f11c8920698a204a5010a788f4b381565b601f5481565b601c6020526000908152604090205481565b601b6020526000908152604090205481565b600560208190526000918252604090912080546001820154600283015460038401546004850154958501546006860154600787015460088801546009890154600a9099015497999698959794969593949293919290916001600160a01b039081169190811690600160a01b900460ff168c565b60066020819052600091825260409091208054600182015460028301546003840154600485015460058601549590960154939560ff8416956101009094046001600160a01b03908116959381169492169290919088565b60265481565b60186020526000908152604090205481565b6000600460008484604051602001610c3992919061137d565b60408051601f1981840301815291815281516020928301206001600160e01b03191683529082019290925201600020546001600160a01b031690505b92915050565b6013546001600160a01b031681565b601a5481565b610c986109c0565b610cb45760405162461bcd60e51b815260040161027e9061150e565b610cbd81610e1a565b50565b610cc86109c0565b610ce45760405162461bcd60e51b815260040161027e9061150e565b6000816001600160a01b031682604051602401610d01919061138a565b60408051601f198184030181529181526020820180516001600160e01b031663189acdbd60e31b17905251610d36919061136a565b600060405180830381855af49150503d8060008114610d71576040519150601f19603f3d011682016040523d82523d6000602084013e610d76565b606091505b5050905080610d975760405162461bcd60e51b815260040161027e9061151e565b5050565b3390565b6001600160e01b03198216600090815260046020526040902080546001600160a01b0319166001600160a01b03831690811790915515610dfa57610df4600c6001600160e01b0319841663ffffffff610e9c16565b50610d97565b610e15600c6001600160e01b0319841663ffffffff610ee416565b505050565b6001600160a01b038116610e405760405162461bcd60e51b815260040161027e906114ee565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ea88383610fa5565b610edc5750600180830180548083018083556000928352602080842090920185905584835290859052604090912055610c75565b506000610c75565b6000610ef08383610fa5565b15610edc5760008281526020849052604090205460018401546000199182019101808214610f68576000856001018281548110610f2957fe5b9060005260206000200154905080866001018481548110610f4657fe5b6000918252602080832090910192909255918252869052604090206001830190555b60008481526020869052604081205560018501805480610f8457fe5b60019003818190600052602060002001600090559055600192505050610c75565b60009081526020919091526040902054151590565b8035610c758161168f565b60008083601f840112610fd757600080fd5b50813567ffffffffffffffff811115610fef57600080fd5b60208301915083602082028301111561100757600080fd5b9250929050565b8035610c75816116a3565b8035610c75816116ac565b60008083601f84011261103657600080fd5b50813567ffffffffffffffff81111561104e57600080fd5b60208301915083600182028301111561100757600080fd5b60006020828403121561107857600080fd5b60006110848484610fba565b949350505050565b6000806040838503121561109f57600080fd5b60006110ab8585610fba565b92505060206110bc85828601610fba565b9150509250929050565b600080604083850312156110d957600080fd5b60006110e58585610fba565b92505060206110bc8582860161100e565b6000806000806040858703121561110c57600080fd5b843567ffffffffffffffff81111561112357600080fd5b61112f87828801610fc5565b9450945050602085013567ffffffffffffffff81111561114e57600080fd5b61115a87828801610fc5565b95989497509550505050565b60006020828403121561117857600080fd5b6000611084848461100e565b6000806040838503121561119757600080fd5b60006110ab858561100e565b6000602082840312156111b557600080fd5b60006110848484611019565b600080602083850312156111d457600080fd5b823567ffffffffffffffff8111156111eb57600080fd5b6111f785828601611024565b92509250509250929050565b61120c8161161c565b82525050565b61120c81611627565b61120c8161162c565b600061122f8261160a565b611239818561160e565b935061124981856020860161165f565b9290920192915050565b61120c81611648565b6000611268838561160e565b9350611275838584611653565b50500190565b6000611288601183611613565b70746172676574206e6f742061637469766560781b815260200192915050565b60006112b5602683611613565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006112fd600e83611613565b6d0c6deeadce840dad2e6dac2e8c6d60931b815260200192915050565b6000611327600c83611613565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b600061134f600c83611613565b6b1cd95d1d5c0819985a5b195960a21b815260200192915050565b60006113768284611224565b9392505050565b600061108482848661125c565b60208101610c758284611203565b60208101610c758284611212565b61010081016113b5828b61121b565b6113c2602083018a611212565b6113cf6040830189611203565b6113dc6060830188611203565b6113e96080830187611203565b6113f660a083018661121b565b61140360c083018561121b565b61141060e083018461121b565b9998505050505050505050565b610180810161142c828f61121b565b611439602083018e61121b565b611446604083018d61121b565b611453606083018c61121b565b611460608083018b61121b565b61146d60a083018a61121b565b61147a60c083018961121b565b61148760e083018861121b565b61149561010083018761121b565b6114a3610120830186611203565b6114b1610140830185611203565b6114bf610160830184611212565b9d9c50505050505050505050505050565b60208101610c758284611253565b60208082528101610c758161127b565b60208082528101610c75816112a8565b60208082528101610c75816112f0565b60208082528101610c758161131a565b60208082528101610c7581611342565b60208101610c75828461121b565b6060810161154a828661121b565b611557602083018561121b565b611084604083018461121b565b60a08101611572828861121b565b61157f602083018761121b565b61158c604083018661121b565b611599606083018561121b565b6115a6608083018461121b565b9695505050505050565b60c081016115be828961121b565b6115cb602083018861121b565b6115d8604083018761121b565b6115e5606083018661121b565b6115f2608083018561121b565b6115ff60a083018461121b565b979650505050505050565b5190565b919050565b90815260200190565b6000610c758261163c565b151590565b90565b6001600160e01b03191690565b6001600160a01b031690565b6000610c758261161c565b82818337506000910152565b60005b8381101561167a578181015183820152602001611662565b83811115611689576000848401525b50505050565b6116988161161c565b8114610cbd57600080fd5b6116988161162c565b6116988161162f56fea365627a7a723158204d1b25d6c124b89bf1cca8a506aba400fe21d6a494241821b0ffd0b12e637b726c6578706572696d656e74616cf564736f6c63430005110040

Deployed ByteCode Sourcemap

33386:1514:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33504:4;33491:9;:17;33487:56;;33525:7;;33487:56;33555:14;33585:7;;-1:-1:-1;;;;;;33585:7:0;33572:21;;:12;:21;;;;;;-1:-1:-1;;;;;33572:21:0;;33604:50;;;;-1:-1:-1;;;33604:50:0;;;;;;;;;;;;;;;;;33667:17;33687:8;;33667:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;33787:11:0;;33667:28;;-1:-1:-1;99:1;;;-1:-1;33787:11:0;-1:-1:-1;;33780:4:0;33770:15;;33762:6;33757:3;33744:61;33831:14;33876:4;33870:11;33918:4;33915:1;33910:3;33895:28;33944:6;33964:28;;;;34028:4;34023:3;34016:17;33964:28;33985:4;33980:3;33973:17;33715:331;33386:1514;28989:69;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28989:69:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28504:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28504:47:0;;;;;;;;:::i;:::-;;;;;;;;32305:56;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32305:56:0;;;;;;;;:::i;30702:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30702:45:0;;;:::i;:::-;;;;;;;;31768:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31768:32:0;;;:::i;28864:67::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28864:67:0;;;;;;;;:::i;30966:56::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30966:56:0;;;;;;;;:::i;1573:86::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1573:86:0;;;:::i;29118:71::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29118:71:0;;;;;;;;:::i;:::-;;;;;;;;30358:56;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30358:56:0;;;;;;;;:::i;30226:43::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30226:43:0;;;:::i;1381:93::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1381:93:0;;;:::i;:::-;;;;;;;;32932:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32932:39:0;;;:::i;29398:53::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29398:53:0;;;;;;;;:::i;:::-;;;;;;;;;;29261:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29261:78:0;;;;;;;;:::i;:::-;;;;;;;;;;;;32529:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32529:48:0;;;;;;;;:::i;32796:44::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32796:44:0;;;:::i;32028:63::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32028:63:0;;;;;;;;:::i;28370:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28370:24:0;;;:::i;28240:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28240:25:0;;;:::i;31637:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31637:32:0;;;:::i;10907:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10907:79:0;;;:::i;32190:56::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32190:56:0;;;;;;;;:::i;11253:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11253:94:0;;;:::i;30507:56::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30507:56:0;;;;;;;;:::i;34317:378::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;34317:378:0;;;;;;;;:::i;1481:85::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1481:85:0;;;:::i;31902:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31902:45:0;;;:::i;31437:58::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31437:58:0;;;;;;;;:::i;31287:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31287:58:0;;;;;;;;:::i;28636:38::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28636:38:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28743:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;28743:49:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;32650:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32650:40:0;;;:::i;30818:56::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30818:56:0;;;;;;;;:::i;34703:194::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;34703:194:0;;;;;;;;:::i;30096:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30096:29:0;;;:::i;31160:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31160:47:0;;;:::i;11502:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11502:109:0;;;;;;;;:::i;34061:248::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;34061:248:0;;;;;;;;:::i;28989:69::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28504:47::-;;;;;;;;;;;;-1:-1:-1;;;;;28504:47:0;;:::o;32305:56::-;;;;;;;;;;;;-1:-1:-1;;;;;32305:56:0;;:::o;30702:45::-;;;;:::o;31768:32::-;;;;:::o;28864:67::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30966:56::-;;;;;;;;;;;;;:::o;1573:86::-;1617:42;1573:86;:::o;29118:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30358:56::-;;;;;;;;;;;;;:::o;30226:43::-;;;;:::o;1381:93::-;1431:42;1381:93;:::o;32932:39::-;;;;:::o;29398:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29261:78::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32529:48::-;;;;;;;;;;;;;;;:::o;32796:44::-;;;;:::o;32028:63::-;;;;;;;;;;;;;:::o;28370:24::-;;;-1:-1:-1;;;;;28370:24:0;;:::o;28240:25::-;;;-1:-1:-1;;;;;28240:25:0;;:::o;31637:32::-;;;;:::o;10907:79::-;10972:6;;-1:-1:-1;;;;;10972:6:0;10907:79;:::o;32190:56::-;;;;;;;;;;;;-1:-1:-1;;;;;32190:56:0;;:::o;11253:94::-;11333:6;;11293:4;;-1:-1:-1;;;;;11333:6:0;11317:12;:10;:12::i;:::-;-1:-1:-1;;;;;11317:22:0;;11310:29;;11253:94;:::o;30507:56::-;;;;;;;;;;;;;:::o;34317:378::-;11119:9;:7;:9::i;:::-;11111:34;;;;-1:-1:-1;;;11111:34:0;;;;;;;;;34475:35;;;34467:62;;;;-1:-1:-1;;;34467:62:0;;;;;;;;;34547:9;34542:146;34562:18;;;34542:146;;;34602:74;34647:7;;34655:1;34647: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;34630:28:0;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;34630:28:0;;;34620:39;;;;;;34662:10;;34673:1;34662:13;;;;;;;;;;;;;;;;;;;;;;34602:10;:74::i;:::-;34582:3;;34542:146;;;;34317:378;;;;:::o;1481:85::-;1524:42;1481:85;:::o;31902:45::-;;;;:::o;31437:58::-;;;;;;;;;;;;;:::o;31287:::-;;;;;;;;;;;;;:::o;28636:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28636:38:0;;;;;;;;-1:-1:-1;;;28636:38:0;;;;;:::o;28743:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28743:49:0;;;;;;;;;;;;;;;:::o;32650:40::-;;;;:::o;30818:56::-;;;;;;;;;;;;;:::o;34703:194::-;34803:7;34835:12;:54;34882:3;;34865:21;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;34865:21:0;;;34855:32;;49:4:-1;34855:32:0;;;;-1:-1:-1;;;;;;34835:54:0;;;;;;;;;;;-1:-1:-1;34835:54:0;;-1:-1:-1;;;;;34835:54:0;;-1:-1:-1;34703:194:0;;;;;:::o;30096:29::-;;;-1:-1:-1;;;;;30096:29:0;;:::o;31160:47::-;;;;:::o;11502:109::-;11119:9;:7;:9::i;:::-;11111:34;;;;-1:-1:-1;;;11111:34:0;;;;;;;;;11575:28;11594:8;11575:18;:28::i;:::-;11502:109;:::o;34061:248::-;11119:9;:7;:9::i;:::-;11111:34;;;;-1:-1:-1;;;11111:34:0;;;;;;;;;34166:12;34183:6;-1:-1:-1;;;;;34183:19:0;34250:6;34203:54;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;34203:54:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;34183:75:0;;;34203:54;34183: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;;34165:93:0;;;34277:7;34269:32;;;;-1:-1:-1;;;34269:32:0;;;;;;;;;11156:1;34061:248;:::o;9698:98::-;9778:10;9698:98;:::o;33063:316::-;-1:-1:-1;;;;;;33164:17:0;;;;;;:12;:17;;;;;:26;;-1:-1:-1;;;;;;33164:26:0;-1:-1:-1;;;;;33164:26:0;;;;;;;;33207:20;33203:169;;33244:40;:15;-1:-1:-1;;;;;;33271:12:0;;33244:40;:26;:40;:::i;:::-;;33203:169;;;33317:43;:15;-1:-1:-1;;;;;;33347:12:0;;33317:43;:29;:43;:::i;:::-;;33063:316;;:::o;11717:229::-;-1:-1:-1;;;;;11791:22:0;;11783:73;;;;-1:-1:-1;;;11783:73:0;;;;;;;;;11893:6;;11872:38;;-1:-1:-1;;;;;11872:38:0;;;;11893:6;;11872:38;;11893:6;;11872:38;11921:6;:17;;-1:-1:-1;;;;;;11921:17:0;-1:-1:-1;;;;;11921:17:0;;;;;;;;;;11717:229::o;2793:289::-;2888:4;2915:20;2924:3;2929:5;2915:8;:20::i;:::-;2910:165;;-1:-1:-1;2970:10:0;;;;27::-1;;23:18;;;45:23;;;-1:-1;2970:22:0;;;;;;;;;;;;;2951:16;;;;;;;;;;;:41;3007:11;;2910:165;-1:-1:-1;3058:5:0;3051:12;;3614:1054;3712:4;3738:20;3747:3;3752:5;3738:8;:20::i;:::-;3734:927;;;3774:21;3798:16;;;;;;;;;;;3817:1;3853:10;;:17;-1:-1:-1;;3798:20:0;;;;3853:21;4001:26;;;3997:389;;4048:17;4068:3;:10;;4079:9;4068:21;;;;;;;;;;;;;;;;4048:41;;4218:9;4190:3;:10;;4201:13;4190:25;;;;;;;;;;;;;;;;;;;:37;;;;4303:20;;;;;;;;;4342:1;4326:17;;4303:40;;3997:389;4470:9;:16;;;;;;;;;;4463:23;4560:10;;;:16;;;;;;;;;;;;;;;;;;;;;;;;4600:4;4593:11;;;;;;4754:165;4861:4;4890:16;;;;;;;;;;;;:21;;;4754: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://4d1b25d6c124b89bf1cca8a506aba400fe21d6a494241821b0ffd0b12e637b72
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.