15M+ users trust MoonPay. Checkout with your preferred payment method.
Ready to onboard to Ethereum? With MetaMask Portfolio, you're in control.
Collect points for eligible actions and use multipliers to win big.
Ready to simplify your web3 experience? Try the all-in-one web3 app trusted by millions worldwide.
Buy, sell, and exchange 200+ cryptocurrencies effortlessly. Get your free crypto debit card and pay with crypto anywhere.
Everyday giveaways up to 100 ETH, Lucky Spins. Deposit BONUS 300% and Cashbacks!
Play all your favorite Slots & Live Games, including Plinko, Aviator and Crash! Truly anonymous casino.
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Play 100s of games anonymously with all major cryptos. Join CryptoWins & start winning!
Anonymous play on awesome games - sign up now for 25 free jackpot spins - worth $100s!
Overview
ETH Balance
Eth Value
$0.00Token Holdings
Could not find any matches!
- ERC-20 Tokens (45)3.48121032 APEApeCoin (APE)$4.39@1.266.7 BITTOBITTO (BITTO)261,489.79328848 BZRXbZx Protocol... (BZRX)$4,790.54@0.01830.35668486 LRCLoopringCoin... (LRC)$0.09@0.2616137,897,859.677862 OOKIOoki Token (OOKI)$309,474.51@0.00220.00281855 YFIyearn.financ... (YFI)$19.79@7,021.193.27447225 AAVEAave Token (AAVE)$289.18@88.3123426.47868589 LINKChainLink To... (LINK)$6,938.81@16.270.00772647 COMPCompound (COMP)$0.44@56.9239.13043794 DAIDai Stableco... (DAI)$39.11@0.999510,416.0429517 KNCKyberNetwork (KNC)$6,217.58@0.596929.56364712 MKRMaker (MKR)$83,893.35@2,837.722,840.15658 USDTTether USD (USDT)$2,840.16@1.002.29028323 UNIUniswap (UNI)$17.20@7.51486.253987 USDCUSDC (USDC)$486.25@1.000.15960634 WBTCWrapped BTC (WBTC)$10,678.94@66,908.00130.94689572 WETHWrapped Ethe... (WETH)$405,296.07@3,095.11791.47062547 wstETHWrapped liqu... (wstETH)$5,309.96@3,610.682,500 $ Evmosia.com$ Evmosia.c... ($ Evm...)0.045 DBTCDecentralize... (DBTC)$0.27@6.07780.2 DPLDolphin Prot... (DPL)8,993.223364 iUSDTFulcrum USDT... (iUSDT)200 RAMPRAMP DEFI (RAMP)5 SWAPPSwapp Token (SWAPP)$0.00@0.000399,999 WCDS挖头矿在即,全新DeFi资管平台WcdSwap即将创世挖矿,持WCDS/WBTC的LPtokWCDS挖头矿在即,全新... (WCDS挖头...)0.00055915 METHwww.METH.co.... (METH)0.0492 YBETYBET.NETWORK (YBET)2,195,679.74640541 vBZRXbZx Vesting ... (vBZRX)1.2 TokenERC-20 TOKEN*[Suspicious]1.5 TokenERC-20 TOKEN*[Suspicious]3,999.99 TokenERC-20 TOKEN*[Suspicious]0.7 TokenERC-20 TOKEN*[Suspicious]245.44 TokenERC-20 TOKEN*[Suspicious]800 TokenERC-20 TOKEN*[Suspicious]3,999.99 TokenERC-20 TOKEN*[Suspicious]9,000 TokenERC-20 TOKEN*[Suspicious]7,000 TokenERC-20 TOKEN*[Suspicious]350 TokenERC-20 TOKEN*[Suspicious]641 TokenERC-20 TOKEN*[Unsafe]7,000 TokenERC-20 TOKEN*[Unsafe]28.901 TokenERC-20 TOKEN*[Unsafe]3,999.99 TokenERC-20 TOKEN*[Spam]856,420,144,564 TokenERC-20 TOKEN*[Spam]856,420,144,564 TokenERC-20 TOKEN*[Spam]856,420,144,564 TokenERC-20 TOKEN*[Spam]NFT Tokens (21)claim rewards on getaave.netgetaave.netERC-1155ipfseth.com Withdrawal NFTipfseth.com Withdrawal NFTERC-1155LidowstETH.comLidowstETH.comERC-1155claim rewards on loopringtoken.orgloopringtoken.orgERC-1155claim rewards on makerevent.netmakerevent.netERC-1155Official Authorize credentialWBTC: Airdrop NFT VoucherERC-1155ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]
More Info
Private Name Tags
ContractCreator
Multichain Info
1 address found via- Transactions
- Internal Transactions
- Token Transfers (ERC-20)
- NFT Transfers
- Contract
- Events
- Analytics
- Multichain Portfolio
- Info
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 25 from a total of 16,648 transactions
Transaction Hash MethodBlockFromToValue Withdraw Collate... 19859512 2024-05-13 7:09:59 4 days ago 1715584199 IN 0 ETH 0.00152079 4.48576637 Withdraw Collate... 19851715 2024-05-12 4:59:47 6 days ago 1715489987 IN 0 ETH 0.00119777 3.7206467 Withdraw Collate... 19851714 2024-05-12 4:59:35 6 days ago 1715489975 IN 0 ETH 0.00098005 3.04526749 Withdraw Collate... 19851712 2024-05-12 4:59:11 6 days ago 1715489951 IN 0 ETH 0.00104364 3.07836693 Withdraw Collate... 19851691 2024-05-12 4:54:59 6 days ago 1715489699 IN 0 ETH 0.0011156 3.29167623 Close With Depos... 19818357 2024-05-07 13:01:59 10 days ago 1715086919 IN 0 ETH 0.0052466 8.88806912 Withdraw Collate... 19414758 2024-03-11 22:13:59 67 days ago 1710195239 IN 0 ETH 0.02171625 64.15625402 Withdraw Collate... 19271174 2024-02-20 20:04:59 87 days ago 1708459499 IN 0 ETH 0.01576025 46.3500051 Close With Depos... 19248652 2024-02-17 16:05:35 90 days ago 1708185935 IN 0 ETH 0.01335201 24.58092016 Close With Depos... 19248620 2024-02-17 15:59:11 90 days ago 1708185551 IN 0 ETH 0.01406314 23.45448657 Withdraw Collate... 19188270 2024-02-09 4:43:23 99 days ago 1707453803 IN 0 ETH 0.01521231 44.95512073 Liquidate 19139246 2024-02-02 7:31:23 105 days ago 1706859083 IN 0 ETH 0.00659211 18.92468315 Withdraw Collate... 19118966 2024-01-30 11:16:23 108 days ago 1706613383 IN 0 ETH 0.00356469 25.44504662 Withdraw Collate... 19107206 2024-01-28 19:46:11 110 days ago 1706471171 IN 0 ETH 0.00188581 13.46107996 Withdraw Collate... 19107204 2024-01-28 19:45:47 110 days ago 1706471147 IN 0 ETH 0.0017147 12.2210718 Withdraw Collate... 19107203 2024-01-28 19:45:35 110 days ago 1706471135 IN 0 ETH 0.0016795 11.98839277 Withdraw Collate... 19107200 2024-01-28 19:44:59 110 days ago 1706471099 IN 0 ETH 0.00177662 12.68163447 Withdraw Collate... 19107188 2024-01-28 19:42:35 110 days ago 1706470955 IN 0 ETH 0.0020997 14.98290474 Liquidate 18700170 2023-12-02 17:19:59 167 days ago 1701537599 IN 0 ETH 0.01736393 33.27464013 Liquidate 18699996 2023-12-02 16:45:11 167 days ago 1701535511 IN 0 ETH 0.01971245 34.1028806 Liquidate 18699980 2023-12-02 16:41:47 167 days ago 1701535307 IN 38.5 ETH 0.01852257 36.09884925 Liquidate 18699942 2023-12-02 16:34:11 167 days ago 1701534851 IN 0 ETH 0.01926149 36.22112836 Liquidate 18699811 2023-12-02 16:07:59 167 days ago 1701533279 IN 0 ETH 0.01813939 33.99296978 Liquidate 18699772 2023-12-02 16:00:11 167 days ago 1701532811 IN 0 ETH 0.02124713 36.77024726 Liquidate 18699742 2023-12-02 15:54:11 167 days ago 1701532451 IN 0 ETH 0.02058661 35.92558618 Latest 25 internal transactions (View All)
Advanced mode:Parent Transaction Hash Block From To Value 18699980 2023-12-02 16:41:47 167 days ago 1701535307 0.37297178 ETH 18699980 2023-12-02 16:41:47 167 days ago 1701535307 38.12702821 ETH 18697862 2023-12-02 9:36:11 167 days ago 1701509771 2.42933811 ETH 18697862 2023-12-02 9:36:11 167 days ago 1701509771 2.42933811 ETH 18697862 2023-12-02 9:36:11 167 days ago 1701509771 20.45801826 ETH 18697862 2023-12-02 9:36:11 167 days ago 1701509771 20.45801826 ETH 18697858 2023-12-02 9:35:23 167 days ago 1701509723 8.46087904 ETH 18697858 2023-12-02 9:35:23 167 days ago 1701509723 8.46087904 ETH 18697858 2023-12-02 9:35:23 167 days ago 1701509723 80.55087752 ETH 18697858 2023-12-02 9:35:23 167 days ago 1701509723 80.55087752 ETH 18584990 2023-11-16 14:17:23 183 days ago 1700144243 1.12625058 ETH 18584990 2023-11-16 14:17:23 183 days ago 1700144243 1.12625058 ETH 18584987 2023-11-16 14:16:47 183 days ago 1700144207 1.15413824 ETH 18584987 2023-11-16 14:16:47 183 days ago 1700144207 1.15413824 ETH 17986973 2023-08-24 20:34:47 267 days ago 1692909287 79.88 ETH 17986973 2023-08-24 20:34:47 267 days ago 1692909287 79.88 ETH 17804735 2023-07-30 8:43:47 292 days ago 1690706627 61.29489777 ETH 17804735 2023-07-30 8:43:47 292 days ago 1690706627 61.29489777 ETH 17801135 2023-07-29 20:39:23 293 days ago 1690663163 33 ETH 17094845 2023-04-21 12:43:59 392 days ago 1682081039 19.97 ETH 17094845 2023-04-21 12:43:59 392 days ago 1682081039 19.97 ETH 17087017 2023-04-20 10:07:23 393 days ago 1681985243 0.9985 ETH 17087017 2023-04-20 10:07:23 393 days ago 1681985243 0.9985 ETH 17084602 2023-04-20 1:52:59 394 days ago 1681955579 0.03788623 ETH 17084602 2023-04-20 1:52:59 394 days ago 1681955579 0.03788623 ETH Loading...LoadingContract Name:bZxProtocol
Compiler Versionv0.5.17+commit.d19bba13
Contract Source Code (Solidity)
- interface IWeth
- - function deposit()
- - function withdraw(uint256 wad)
- contract IERC20
- - function totalSupply()
- - function balanceOf(address _who)
- - function allowance(address _owner, ad ...
- - function approve(address _spender, ui ...
- - function transfer(address _to, uint25 ...
- - function transferFrom(address _from, ...
- contract IWethERC20 is IWeth, IERC ...
- contract Constants
- library EnumerableBytes32Set
- - function addAddress(Bytes32Set storag ...
- - function addBytes32(Bytes32Set storag ...
- - function removeAddress(Bytes32Set sto ...
- - function removeBytes32(Bytes32Set sto ...
- - function contains(Bytes32Set storage ...
- - function containsAddress(Bytes32Set s ...
- - function enumerate(Bytes32Set storage ...
- - function length(Bytes32Set storage se ...
- - function get(Bytes32Set storage set, ...
- - function getAddress(Bytes32Set storag ...
- contract ReentrancyGuard
- contract Context
- - function _msgSender()
- - function _msgData()
- contract Ownable is Context
- - function owner()
- - function isOwner()
- - function transferOwnership(address ne ...
- - function _transferOwnership(address n ...
- library SafeMath
- - function add(uint256 a, uint256 b)
- - function sub(uint256 a, uint256 b)
- - function sub(uint256 a, uint256 b, st ...
- - function mul(uint256 a, uint256 b)
- - function div(uint256 a, uint256 b)
- - function div(uint256 a, uint256 b, st ...
- - function divCeil(uint256 a, uint256 b ...
- - function divCeil(uint256 a, uint256 b ...
- - function mod(uint256 a, uint256 b)
- - function mod(uint256 a, uint256 b, st ...
- - function min256(uint256 _a, uint256 _ ...
- library Address
- - function isContract(address account)
- - function toPayable(address account)
- - function sendValue(address recipient, ...
- library SafeERC20
- - function safeTransfer(IERC20 token, a ...
- - function safeTransferFrom(IERC20 toke ...
- - function safeApprove(IERC20 token, ad ...
- - function safeIncreaseAllowance(IERC20 ...
- - function safeDecreaseAllowance(IERC20 ...
- - function callOptionalReturn(IERC20 to ...
- contract LoanStruct
- contract LoanParamsStruct
- contract OrderStruct
- contract LenderInterestStruct
- contract LoanInterestStruct
- contract Objects is
- contract State is Constants, Objec ...
- - function _setTarget(
- contract bZxProtocol is State *
- - function replaceContract(
- - function setTargets(
- - function getTarget(
/** *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 <remco@2π.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
- No Contract Security Audit Submitted- Submit Audit Here
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"}]
Contract Creation Code
60806040526001600055678ac7230489e80000601455670214e8348c4f000060175567013fbe85edc90000601a556801a055690d9db80000601f55674563918244f40000602655674563918244f40000602755685150ae84a8cdf00000602855600061006f6100c260201b60201c565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100c6565b3390565b6116f8806100d56000396000f3fe6080604052600436106102305760003560e01c806378d849ed1161012e578063b7e15241116100ab578063da1b620b1161006f578063da1b620b1461071f578063e8f627641461073f578063edab119f14610754578063f2fde38b14610769578063fb08fdaa1461078957610230565b8063b7e152411461065e578063c4a908151461067e578063cb6eacd1146106b6578063d473c2da146106ea578063d485045e146106ff57610230565b806392d894f8116100f257806392d894f8146105d4578063a012d827146105f4578063ab2c9d7514610614578063ae0a853014610629578063b30643d91461063e57610230565b806378d849ed146105605780637a8faeb8146105755780638da5cb5b1461058a5780638dc48ba51461059f5780638f32d59b146105bf57610230565b80634203e395116101bc57806362fff3f61161018057806362fff3f6146104c557806368c4ac26146104f6578063691bfee8146105165780636f2709f21461052b5780637420ca3e1461054b57610230565b80634203e3951461042a5780634699f8461461044a5780634b57b0be1461045f5780634f28cac214610481578063569fc1fb1461049657610230565b80632f470764116102035780632f470764146103935780633432423c146103a85780633452d2d4146103c857806339cd381e146103e85780634115a2b6146103fd57610230565b8063065d810f146102e957806317548b7914610324578063218b39c6146103515780632a32402714610371575b6108fc5a1161023e576102e7565b600080356001600160e01b0319168152600460205260409020546001600160a01b0316806102875760405162461bcd60e51b815260040161027e906114de565b60405180910390fd5b60606000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525084519495509384935091505060208401855af43d604051816000823e8280156102e3578282f35b8282fd5b005b3480156102f557600080fd5b506103096103043660046110c6565b6107a9565b60405161031b969594939291906115b0565b60405180910390f35b34801561033057600080fd5b5061034461033f3660046111a3565b6107e9565b60405161031b919061138a565b34801561035d57600080fd5b5061034461036c366004611066565b610804565b34801561037d57600080fd5b5061038661081f565b60405161031b919061152e565b34801561039f57600080fd5b50610386610825565b3480156103b457600080fd5b506103096103c33660046110c6565b61082b565b3480156103d457600080fd5b506103866103e3366004611066565b61086b565b3480156103f457600080fd5b5061034461087d565b34801561040957600080fd5b5061041d610418366004611184565b610895565b60405161031b9190611398565b34801561043657600080fd5b50610386610445366004611066565b6108b5565b34801561045657600080fd5b506103866108c7565b34801561046b57600080fd5b506104746108cd565b60405161031b91906114d0565b34801561048d57600080fd5b506103866108e5565b3480156104a257600080fd5b506104b66104b1366004611166565b6108eb565b60405161031b9392919061153c565b3480156104d157600080fd5b506104e56104e036600461108c565b61090c565b60405161031b959493929190611564565b34801561050257600080fd5b5061041d610511366004611066565b610946565b34801561052257600080fd5b5061038661095b565b34801561053757600080fd5b50610386610546366004611066565b610961565b34801561055757600080fd5b50610344610972565b34801561056c57600080fd5b50610344610981565b34801561058157600080fd5b50610386610990565b34801561059657600080fd5b50610344610996565b3480156105ab57600080fd5b506103446105ba366004611066565b6109a5565b3480156105cb57600080fd5b5061041d6109c0565b3480156105e057600080fd5b506103866105ef366004611066565b6109e6565b34801561060057600080fd5b506102e761060f3660046110f6565b6109f8565b34801561062057600080fd5b50610344610afc565b34801561063557600080fd5b50610386610b14565b34801561064a57600080fd5b50610386610659366004611066565b610b1a565b34801561066a57600080fd5b50610386610679366004611066565b610b2c565b34801561068a57600080fd5b5061069e610699366004611166565b610b3e565b60405161031b9c9b9a9998979695949392919061141d565b3480156106c257600080fd5b506106d66106d1366004611166565b610bb1565b60405161031b9897969594939291906113a6565b3480156106f657600080fd5b50610386610c08565b34801561070b57600080fd5b5061038661071a366004611066565b610c0e565b34801561072b57600080fd5b5061034461073a3660046111c1565b610c20565b34801561074b57600080fd5b50610344610c7b565b34801561076057600080fd5b50610386610c8a565b34801561077557600080fd5b506102e7610784366004611066565b610c90565b34801561079557600080fd5b506102e76107a4366004611066565b610cc0565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b6004602052600090815260409020546001600160a01b031681565b6022602052600090815260409020546001600160a01b031681565b60175481565b601e5481565b6007602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b60196020526000908152604090205481565b73b72b31907c1c95f3650b64b2469e08edacee5e8f81565b600960209081526000928352604080842090915290825290205460ff1681565b60156020526000908152604090205481565b60145481565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60285481565b600b6020526000908152604090208054600182015460029092015490919083565b600a602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b60256020526000908152604090205460ff1681565b60275481565b602080526000908152604090205481565b6003546001600160a01b031681565b6002546001600160a01b031681565b601d5481565b6001546001600160a01b031690565b6021602052600090815260409020546001600160a01b031681565b6001546000906001600160a01b03166109d7610d9b565b6001600160a01b031614905090565b60166020526000908152604090205481565b610a006109c0565b610a1c5760405162461bcd60e51b815260040161027e9061150e565b828114610a3b5760405162461bcd60e51b815260040161027e906114fe565b60005b83811015610af557610aed858583818110610a5557fe5b602002820190508035601e1936849003018112610a7157600080fd5b9091016020810191503567ffffffffffffffff811115610a9057600080fd5b36819003821315610aa057600080fd5b604051602001610ab192919061137d565b60405160208183030381529060405280519060200120848484818110610ad357fe5b9050602002016020610ae89190810190611066565b610d9f565b600101610a3e565b5050505050565b7356d811088235f11c8920698a204a5010a788f4b381565b601f5481565b601c6020526000908152604090205481565b601b6020526000908152604090205481565b600560208190526000918252604090912080546001820154600283015460038401546004850154958501546006860154600787015460088801546009890154600a9099015497999698959794969593949293919290916001600160a01b039081169190811690600160a01b900460ff168c565b60066020819052600091825260409091208054600182015460028301546003840154600485015460058601549590960154939560ff8416956101009094046001600160a01b03908116959381169492169290919088565b60265481565b60186020526000908152604090205481565b6000600460008484604051602001610c3992919061137d565b60408051601f1981840301815291815281516020928301206001600160e01b03191683529082019290925201600020546001600160a01b031690505b92915050565b6013546001600160a01b031681565b601a5481565b610c986109c0565b610cb45760405162461bcd60e51b815260040161027e9061150e565b610cbd81610e1a565b50565b610cc86109c0565b610ce45760405162461bcd60e51b815260040161027e9061150e565b6000816001600160a01b031682604051602401610d01919061138a565b60408051601f198184030181529181526020820180516001600160e01b031663189acdbd60e31b17905251610d36919061136a565b600060405180830381855af49150503d8060008114610d71576040519150601f19603f3d011682016040523d82523d6000602084013e610d76565b606091505b5050905080610d975760405162461bcd60e51b815260040161027e9061151e565b5050565b3390565b6001600160e01b03198216600090815260046020526040902080546001600160a01b0319166001600160a01b03831690811790915515610dfa57610df4600c6001600160e01b0319841663ffffffff610e9c16565b50610d97565b610e15600c6001600160e01b0319841663ffffffff610ee416565b505050565b6001600160a01b038116610e405760405162461bcd60e51b815260040161027e906114ee565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ea88383610fa5565b610edc5750600180830180548083018083556000928352602080842090920185905584835290859052604090912055610c75565b506000610c75565b6000610ef08383610fa5565b15610edc5760008281526020849052604090205460018401546000199182019101808214610f68576000856001018281548110610f2957fe5b9060005260206000200154905080866001018481548110610f4657fe5b6000918252602080832090910192909255918252869052604090206001830190555b60008481526020869052604081205560018501805480610f8457fe5b60019003818190600052602060002001600090559055600192505050610c75565b60009081526020919091526040902054151590565b8035610c758161168f565b60008083601f840112610fd757600080fd5b50813567ffffffffffffffff811115610fef57600080fd5b60208301915083602082028301111561100757600080fd5b9250929050565b8035610c75816116a3565b8035610c75816116ac565b60008083601f84011261103657600080fd5b50813567ffffffffffffffff81111561104e57600080fd5b60208301915083600182028301111561100757600080fd5b60006020828403121561107857600080fd5b60006110848484610fba565b949350505050565b6000806040838503121561109f57600080fd5b60006110ab8585610fba565b92505060206110bc85828601610fba565b9150509250929050565b600080604083850312156110d957600080fd5b60006110e58585610fba565b92505060206110bc8582860161100e565b6000806000806040858703121561110c57600080fd5b843567ffffffffffffffff81111561112357600080fd5b61112f87828801610fc5565b9450945050602085013567ffffffffffffffff81111561114e57600080fd5b61115a87828801610fc5565b95989497509550505050565b60006020828403121561117857600080fd5b6000611084848461100e565b6000806040838503121561119757600080fd5b60006110ab858561100e565b6000602082840312156111b557600080fd5b60006110848484611019565b600080602083850312156111d457600080fd5b823567ffffffffffffffff8111156111eb57600080fd5b6111f785828601611024565b92509250509250929050565b61120c8161161c565b82525050565b61120c81611627565b61120c8161162c565b600061122f8261160a565b611239818561160e565b935061124981856020860161165f565b9290920192915050565b61120c81611648565b6000611268838561160e565b9350611275838584611653565b50500190565b6000611288601183611613565b70746172676574206e6f742061637469766560781b815260200192915050565b60006112b5602683611613565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006112fd600e83611613565b6d0c6deeadce840dad2e6dac2e8c6d60931b815260200192915050565b6000611327600c83611613565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b600061134f600c83611613565b6b1cd95d1d5c0819985a5b195960a21b815260200192915050565b60006113768284611224565b9392505050565b600061108482848661125c565b60208101610c758284611203565b60208101610c758284611212565b61010081016113b5828b61121b565b6113c2602083018a611212565b6113cf6040830189611203565b6113dc6060830188611203565b6113e96080830187611203565b6113f660a083018661121b565b61140360c083018561121b565b61141060e083018461121b565b9998505050505050505050565b610180810161142c828f61121b565b611439602083018e61121b565b611446604083018d61121b565b611453606083018c61121b565b611460608083018b61121b565b61146d60a083018a61121b565b61147a60c083018961121b565b61148760e083018861121b565b61149561010083018761121b565b6114a3610120830186611203565b6114b1610140830185611203565b6114bf610160830184611212565b9d9c50505050505050505050505050565b60208101610c758284611253565b60208082528101610c758161127b565b60208082528101610c75816112a8565b60208082528101610c75816112f0565b60208082528101610c758161131a565b60208082528101610c7581611342565b60208101610c75828461121b565b6060810161154a828661121b565b611557602083018561121b565b611084604083018461121b565b60a08101611572828861121b565b61157f602083018761121b565b61158c604083018661121b565b611599606083018561121b565b6115a6608083018461121b565b9695505050505050565b60c081016115be828961121b565b6115cb602083018861121b565b6115d8604083018761121b565b6115e5606083018661121b565b6115f2608083018561121b565b6115ff60a083018461121b565b979650505050505050565b5190565b919050565b90815260200190565b6000610c758261163c565b151590565b90565b6001600160e01b03191690565b6001600160a01b031690565b6000610c758261161c565b82818337506000910152565b60005b8381101561167a578181015183820152602001611662565b83811115611689576000848401525b50505050565b6116988161161c565b8114610cbd57600080fd5b6116988161162c565b6116988161162f56fea365627a7a723158204d1b25d6c124b89bf1cca8a506aba400fe21d6a494241821b0ffd0b12e637b726c6578706572696d656e74616cf564736f6c63430005110040Deployed Bytecode
0x6080604052600436106102305760003560e01c806378d849ed1161012e578063b7e15241116100ab578063da1b620b1161006f578063da1b620b1461071f578063e8f627641461073f578063edab119f14610754578063f2fde38b14610769578063fb08fdaa1461078957610230565b8063b7e152411461065e578063c4a908151461067e578063cb6eacd1146106b6578063d473c2da146106ea578063d485045e146106ff57610230565b806392d894f8116100f257806392d894f8146105d4578063a012d827146105f4578063ab2c9d7514610614578063ae0a853014610629578063b30643d91461063e57610230565b806378d849ed146105605780637a8faeb8146105755780638da5cb5b1461058a5780638dc48ba51461059f5780638f32d59b146105bf57610230565b80634203e395116101bc57806362fff3f61161018057806362fff3f6146104c557806368c4ac26146104f6578063691bfee8146105165780636f2709f21461052b5780637420ca3e1461054b57610230565b80634203e3951461042a5780634699f8461461044a5780634b57b0be1461045f5780634f28cac214610481578063569fc1fb1461049657610230565b80632f470764116102035780632f470764146103935780633432423c146103a85780633452d2d4146103c857806339cd381e146103e85780634115a2b6146103fd57610230565b8063065d810f146102e957806317548b7914610324578063218b39c6146103515780632a32402714610371575b6108fc5a1161023e576102e7565b600080356001600160e01b0319168152600460205260409020546001600160a01b0316806102875760405162461bcd60e51b815260040161027e906114de565b60405180910390fd5b60606000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525084519495509384935091505060208401855af43d604051816000823e8280156102e3578282f35b8282fd5b005b3480156102f557600080fd5b506103096103043660046110c6565b6107a9565b60405161031b969594939291906115b0565b60405180910390f35b34801561033057600080fd5b5061034461033f3660046111a3565b6107e9565b60405161031b919061138a565b34801561035d57600080fd5b5061034461036c366004611066565b610804565b34801561037d57600080fd5b5061038661081f565b60405161031b919061152e565b34801561039f57600080fd5b50610386610825565b3480156103b457600080fd5b506103096103c33660046110c6565b61082b565b3480156103d457600080fd5b506103866103e3366004611066565b61086b565b3480156103f457600080fd5b5061034461087d565b34801561040957600080fd5b5061041d610418366004611184565b610895565b60405161031b9190611398565b34801561043657600080fd5b50610386610445366004611066565b6108b5565b34801561045657600080fd5b506103866108c7565b34801561046b57600080fd5b506104746108cd565b60405161031b91906114d0565b34801561048d57600080fd5b506103866108e5565b3480156104a257600080fd5b506104b66104b1366004611166565b6108eb565b60405161031b9392919061153c565b3480156104d157600080fd5b506104e56104e036600461108c565b61090c565b60405161031b959493929190611564565b34801561050257600080fd5b5061041d610511366004611066565b610946565b34801561052257600080fd5b5061038661095b565b34801561053757600080fd5b50610386610546366004611066565b610961565b34801561055757600080fd5b50610344610972565b34801561056c57600080fd5b50610344610981565b34801561058157600080fd5b50610386610990565b34801561059657600080fd5b50610344610996565b3480156105ab57600080fd5b506103446105ba366004611066565b6109a5565b3480156105cb57600080fd5b5061041d6109c0565b3480156105e057600080fd5b506103866105ef366004611066565b6109e6565b34801561060057600080fd5b506102e761060f3660046110f6565b6109f8565b34801561062057600080fd5b50610344610afc565b34801561063557600080fd5b50610386610b14565b34801561064a57600080fd5b50610386610659366004611066565b610b1a565b34801561066a57600080fd5b50610386610679366004611066565b610b2c565b34801561068a57600080fd5b5061069e610699366004611166565b610b3e565b60405161031b9c9b9a9998979695949392919061141d565b3480156106c257600080fd5b506106d66106d1366004611166565b610bb1565b60405161031b9897969594939291906113a6565b3480156106f657600080fd5b50610386610c08565b34801561070b57600080fd5b5061038661071a366004611066565b610c0e565b34801561072b57600080fd5b5061034461073a3660046111c1565b610c20565b34801561074b57600080fd5b50610344610c7b565b34801561076057600080fd5b50610386610c8a565b34801561077557600080fd5b506102e7610784366004611066565b610c90565b34801561079557600080fd5b506102e76107a4366004611066565b610cc0565b6008602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b6004602052600090815260409020546001600160a01b031681565b6022602052600090815260409020546001600160a01b031681565b60175481565b601e5481565b6007602090815260009283526040808420909152908252902080546001820154600283015460038401546004850154600590950154939492939192909186565b60196020526000908152604090205481565b73b72b31907c1c95f3650b64b2469e08edacee5e8f81565b600960209081526000928352604080842090915290825290205460ff1681565b60156020526000908152604090205481565b60145481565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60285481565b600b6020526000908152604090208054600182015460029092015490919083565b600a602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919085565b60256020526000908152604090205460ff1681565b60275481565b602080526000908152604090205481565b6003546001600160a01b031681565b6002546001600160a01b031681565b601d5481565b6001546001600160a01b031690565b6021602052600090815260409020546001600160a01b031681565b6001546000906001600160a01b03166109d7610d9b565b6001600160a01b031614905090565b60166020526000908152604090205481565b610a006109c0565b610a1c5760405162461bcd60e51b815260040161027e9061150e565b828114610a3b5760405162461bcd60e51b815260040161027e906114fe565b60005b83811015610af557610aed858583818110610a5557fe5b602002820190508035601e1936849003018112610a7157600080fd5b9091016020810191503567ffffffffffffffff811115610a9057600080fd5b36819003821315610aa057600080fd5b604051602001610ab192919061137d565b60405160208183030381529060405280519060200120848484818110610ad357fe5b9050602002016020610ae89190810190611066565b610d9f565b600101610a3e565b5050505050565b7356d811088235f11c8920698a204a5010a788f4b381565b601f5481565b601c6020526000908152604090205481565b601b6020526000908152604090205481565b600560208190526000918252604090912080546001820154600283015460038401546004850154958501546006860154600787015460088801546009890154600a9099015497999698959794969593949293919290916001600160a01b039081169190811690600160a01b900460ff168c565b60066020819052600091825260409091208054600182015460028301546003840154600485015460058601549590960154939560ff8416956101009094046001600160a01b03908116959381169492169290919088565b60265481565b60186020526000908152604090205481565b6000600460008484604051602001610c3992919061137d565b60408051601f1981840301815291815281516020928301206001600160e01b03191683529082019290925201600020546001600160a01b031690505b92915050565b6013546001600160a01b031681565b601a5481565b610c986109c0565b610cb45760405162461bcd60e51b815260040161027e9061150e565b610cbd81610e1a565b50565b610cc86109c0565b610ce45760405162461bcd60e51b815260040161027e9061150e565b6000816001600160a01b031682604051602401610d01919061138a565b60408051601f198184030181529181526020820180516001600160e01b031663189acdbd60e31b17905251610d36919061136a565b600060405180830381855af49150503d8060008114610d71576040519150601f19603f3d011682016040523d82523d6000602084013e610d76565b606091505b5050905080610d975760405162461bcd60e51b815260040161027e9061151e565b5050565b3390565b6001600160e01b03198216600090815260046020526040902080546001600160a01b0319166001600160a01b03831690811790915515610dfa57610df4600c6001600160e01b0319841663ffffffff610e9c16565b50610d97565b610e15600c6001600160e01b0319841663ffffffff610ee416565b505050565b6001600160a01b038116610e405760405162461bcd60e51b815260040161027e906114ee565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ea88383610fa5565b610edc5750600180830180548083018083556000928352602080842090920185905584835290859052604090912055610c75565b506000610c75565b6000610ef08383610fa5565b15610edc5760008281526020849052604090205460018401546000199182019101808214610f68576000856001018281548110610f2957fe5b9060005260206000200154905080866001018481548110610f4657fe5b6000918252602080832090910192909255918252869052604090206001830190555b60008481526020869052604081205560018501805480610f8457fe5b60019003818190600052602060002001600090559055600192505050610c75565b60009081526020919091526040902054151590565b8035610c758161168f565b60008083601f840112610fd757600080fd5b50813567ffffffffffffffff811115610fef57600080fd5b60208301915083602082028301111561100757600080fd5b9250929050565b8035610c75816116a3565b8035610c75816116ac565b60008083601f84011261103657600080fd5b50813567ffffffffffffffff81111561104e57600080fd5b60208301915083600182028301111561100757600080fd5b60006020828403121561107857600080fd5b60006110848484610fba565b949350505050565b6000806040838503121561109f57600080fd5b60006110ab8585610fba565b92505060206110bc85828601610fba565b9150509250929050565b600080604083850312156110d957600080fd5b60006110e58585610fba565b92505060206110bc8582860161100e565b6000806000806040858703121561110c57600080fd5b843567ffffffffffffffff81111561112357600080fd5b61112f87828801610fc5565b9450945050602085013567ffffffffffffffff81111561114e57600080fd5b61115a87828801610fc5565b95989497509550505050565b60006020828403121561117857600080fd5b6000611084848461100e565b6000806040838503121561119757600080fd5b60006110ab858561100e565b6000602082840312156111b557600080fd5b60006110848484611019565b600080602083850312156111d457600080fd5b823567ffffffffffffffff8111156111eb57600080fd5b6111f785828601611024565b92509250509250929050565b61120c8161161c565b82525050565b61120c81611627565b61120c8161162c565b600061122f8261160a565b611239818561160e565b935061124981856020860161165f565b9290920192915050565b61120c81611648565b6000611268838561160e565b9350611275838584611653565b50500190565b6000611288601183611613565b70746172676574206e6f742061637469766560781b815260200192915050565b60006112b5602683611613565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b60006112fd600e83611613565b6d0c6deeadce840dad2e6dac2e8c6d60931b815260200192915050565b6000611327600c83611613565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b600061134f600c83611613565b6b1cd95d1d5c0819985a5b195960a21b815260200192915050565b60006113768284611224565b9392505050565b600061108482848661125c565b60208101610c758284611203565b60208101610c758284611212565b61010081016113b5828b61121b565b6113c2602083018a611212565b6113cf6040830189611203565b6113dc6060830188611203565b6113e96080830187611203565b6113f660a083018661121b565b61140360c083018561121b565b61141060e083018461121b565b9998505050505050505050565b610180810161142c828f61121b565b611439602083018e61121b565b611446604083018d61121b565b611453606083018c61121b565b611460608083018b61121b565b61146d60a083018a61121b565b61147a60c083018961121b565b61148760e083018861121b565b61149561010083018761121b565b6114a3610120830186611203565b6114b1610140830185611203565b6114bf610160830184611212565b9d9c50505050505050505050505050565b60208101610c758284611253565b60208082528101610c758161127b565b60208082528101610c75816112a8565b60208082528101610c75816112f0565b60208082528101610c758161131a565b60208082528101610c7581611342565b60208101610c75828461121b565b6060810161154a828661121b565b611557602083018561121b565b611084604083018461121b565b60a08101611572828861121b565b61157f602083018761121b565b61158c604083018661121b565b611599606083018561121b565b6115a6608083018461121b565b9695505050505050565b60c081016115be828961121b565b6115cb602083018861121b565b6115d8604083018761121b565b6115e5606083018661121b565b6115f2608083018561121b565b6115ff60a083018461121b565b979650505050505050565b5190565b919050565b90815260200190565b6000610c758261163c565b151590565b90565b6001600160e01b03191690565b6001600160a01b031690565b6000610c758261161c565b82818337506000910152565b60005b8381101561167a578181015183820152602001611662565b83811115611689576000848401525b50505050565b6116988161161c565b8114610cbd57600080fd5b6116988161162c565b6116988161162f56fea365627a7a723158204d1b25d6c124b89bf1cca8a506aba400fe21d6a494241821b0ffd0b12e637b726c6578706572696d656e74616cf564736f6c63430005110040
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
Loading...LoadingLoading...LoadingABI for the implementation contract at 0x91fcdb277e84642ef29db708ff35aa48ba20f04d, likely using a custom proxy implementation.
Previously recorded to be on 0xe7121af07d832d49a5a0adf561924c505997181e.Learn more about proxy contracts in our Knowledge Base
Loading...LoadingABI for the implementation contract at 0x91fcdb277e84642ef29db708ff35aa48ba20f04d, likely using a custom proxy implementation.
Previously recorded to be on 0xe7121af07d832d49a5a0adf561924c505997181e.Learn more about proxy contracts in our Knowledge Base
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingOVERVIEW
Contract of bZx's bZx Protocol.
Multichain Portfolio | 25 Chains
Chain Token Portfolio % Price Amount Value ETH 48.46% $3,095.12 130.9469 $405,296.07 ETH 37.01% $0.002244 137,897,859.6779 $309,474.51 ETH 10.03% $2,837.72 29.5636 $83,893.35 ETH 1.28% $66,908 0.1596 $10,678.94 ETH 0.83% $16.27 426.4787 $6,938.81 ETH 0.74% $0.596923 10,416.043 $6,217.58 ETH 0.63% $3,610.68 1.4706 $5,309.96 ETH 0.57% $0.01832 261,489.7933 $4,790.54 ETH 0.34% $1 2,840.1566 $2,840.16 ETH 0.06% $1 486.254 $486.25 ETH 0.03% $88.31 3.2745 $289.18 ETH <0.01% $0.999536 39.1304 $39.11 ETH <0.01% $7,021.19 0.00281855 $19.79 ETH <0.01% $7.51 2.2903 $17.2 ETH <0.01% $1.26 3.4812 $4.39 ETH <0.01% $56.92 0.00772647 $0.4397 ETH <0.01% $6.08 0.045 $0.2735 BSC <0.01% $0.138984 10.96 $1.52 Loading...Loading[ Download: CSV Export ][ Download: CSV Export ]A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Compiler specific version warnings:
The compiled contract might be susceptible to AbiReencodingHeadOverflowWithStaticArrayCleanup (medium-severity), DirtyBytesArrayToStorage (low-severity), NestedCalldataArrayAbiReencodingSizeValidation (very low-severity), ABIDecodeTwoDimensionalArrayMemory (very low-severity), KeccakCaching (medium-severity), EmptyByteArrayCopy (medium-severity), DynamicArrayCleanup (medium-severity), MissingEscapingInFormatting (very low-severity), ImplicitConstructorCallvalueCheck (very low-severity), TupleAssignmentMultiStackSlotComponents (very low-severity), MemoryArrayCreationOverflow (low-severity) Solidity Compiler Bugs.
Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Before You Copy
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.