Address Contract Partially Verified
Address
0x14094949152EDDBFcd073717200DA82fEd8dC960
Balance
0 ETH
Nonce
1
Code Size
2582 bytes
Creator
0xADfF3ada...1118 at tx 0x4f60f019...6a5f0e
Last Active
Indexed Transactions
5 (10,617,982 → 10,619,423)
Gas Used (indexed)
336,818
Contract Bytecode
2582 bytes
0x6080604052600436106101815760003560e01c80637866c6c1116100d1578063995363d31161008a578063dd62ed3e11610064578063dd62ed3e14610547578063f2fde38b14610582578063fbd9574d146105b5578063fe0563421461060157610181565b8063995363d3146104f35780639b3a54d114610508578063d84d2a471461053257610181565b80637866c6c11461043d578063797bf3851461048a578063894ca3081461049f5780638da5cb5b146104b457806395d89b41146104c957806396c7871b146104de57610181565b80632515aacd1161013e5780634780eac1116101185780634780eac11461038f57806370a08231146103c0578063736ee3d3146103f3578063776d1a011461040857610181565b80632515aacd146102f2578063313ce5671461034f578063330691ac1461037a57610181565b806306fdde03146101ed5780630c4925fd1461027757806318160ddd1461029e5780631d0806ae146102b35780631f68f20a146102c857806320f6d07c146102dd575b601c5460408051602036601f81018290048202830182019093528282526001600160a01b039093169260609260009181908401838280828437600092018290525084519495509384935091505060208401855af43d604051816000823e8280156101e9578282f35b8282fd5b3480156101f957600080fd5b5061020261062b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023c578181015183820152602001610224565b50505050905090810190601f1680156102695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028357600080fd5b5061028c6106b6565b60408051918252519081900360200190f35b3480156102aa57600080fd5b5061028c6106bc565b3480156102bf57600080fd5b5061028c6106c2565b3480156102d457600080fd5b5061028c6106c8565b3480156102e957600080fd5b5061028c6106ce565b3480156102fe57600080fd5b5061031c6004803603602081101561031557600080fd5b50356106d4565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561035b57600080fd5b50610364610709565b6040805160ff9092168252519081900360200190f35b34801561038657600080fd5b5061028c610712565b34801561039b57600080fd5b506103a4610718565b604080516001600160a01b039092168252519081900360200190f35b3480156103cc57600080fd5b5061028c600480360360208110156103e357600080fd5b50356001600160a01b0316610727565b3480156103ff57600080fd5b506103a4610742565b34801561041457600080fd5b5061043b6004803603602081101561042b57600080fd5b50356001600160a01b0316610756565b005b34801561044957600080fd5b506104676004803603602081101561046057600080fd5b5035610779565b604080516001600160a01b03909316835260208301919091528051918290030190f35b34801561049657600080fd5b506103a46107ae565b3480156104ab57600080fd5b506103a46107bd565b3480156104c057600080fd5b506103a46107cc565b3480156104d557600080fd5b506102026107db565b3480156104ea57600080fd5b506103a4610836565b3480156104ff57600080fd5b506103a4610845565b34801561051457600080fd5b5061028c6004803603602081101561052b57600080fd5b5035610859565b34801561053e57600080fd5b5061028c610877565b34801561055357600080fd5b5061028c6004803603604081101561056a57600080fd5b506001600160a01b038135811691602001351661087d565b34801561058e57600080fd5b5061043b600480360360208110156105a557600080fd5b50356001600160a01b03166108a8565b3480156105c157600080fd5b506105e8600480360360208110156105d857600080fd5b50356001600160a01b03166108c8565b6040805192835290151560208301528051918290030190f35b34801561060d57600080fd5b5061028c6004803603602081101561062457600080fd5b50356108e4565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156106ae5780601f10610683576101008083540402835291602001916106ae565b820191906000526020600020905b81548152906001019060200180831161069157829003601f168201915b505050505081565b60135481565b601b5490565b60185481565b600b5481565b60155481565b600f60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b60045460ff1681565b600c5481565b6007546001600160a01b031681565b6001600160a01b031660009081526019602052604090205490565b600a5461010090046001600160a01b031681565b6001546001600160a01b0316331461076d57600080fd5b610776816108f6565b50565b6011818154811061078657fe5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b6008546001600160a01b031681565b6005546001600160a01b031681565b6001546001600160a01b031681565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106ae5780601f10610683576101008083540402835291602001916106ae565b6006546001600160a01b031681565b60045461010090046001600160a01b031681565b6010818154811061086657fe5b600091825260209091200154905081565b600d5481565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b6001546001600160a01b031633146108bf57600080fd5b61077681610975565b6012602052600090815260409020805460019091015460ff1682565b600e6020526000908152604090205481565b6108ff816109e4565b6109535760408051600160e51b62461bcd02815260206004820152601560248201527f746172676574206e6f74206120636f6e74726163740000000000000000000000604482015290519081900360640190fd5b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811661098857600080fd5b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b3b15159056fea165627a7a723058208c31930370b9c7e30822ed6d45e4affdd3e7c4a5a7fe620cfb6ef4c9d0ca6db00029
Verified Source Code Partial Match
Compiler: v0.5.8+commit.23d335f2
EVM: petersburg
Optimization: Yes (200 runs)
LoanToken.sol 390 lines
/**
* Copyright 2017-2019, bZeroX, LLC. All Rights Reserved.
* Licensed under the Apache License, Version 2.0.
*/
pragma solidity 0.5.8;
/**
* @title ERC20Basic
* @dev Simpler version of ERC20 interface
* See https://github.com/ethereum/EIPs/issues/179
*/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address _who) public view returns (uint256);
function transfer(address _to, uint256 _value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
*/
contract ERC20 is ERC20Basic {
function allowance(address _owner, address _spender)
public view returns (uint256);
function transferFrom(address _from, address _to, uint256 _value)
public returns (bool);
function approve(address _spender, uint256 _value) public returns (bool);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
contract WETHInterface is ERC20 {
function deposit() external payable;
function withdraw(uint256 wad) external;
}
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
// Gas optimization: this is cheaper than asserting 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (_a == 0) {
return 0;
}
c = _a * _b;
assert(c / _a == _b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 _a, uint256 _b) internal pure returns (uint256) {
// assert(_b > 0); // Solidity automatically throws when dividing by 0
// uint256 c = _a / _b;
// assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold
return _a / _b;
}
/**
* @dev Integer division of two numbers, rounding up and truncating the quotient
*/
function divCeil(uint256 _a, uint256 _b) internal pure returns (uint256) {
if (_a == 0) {
return 0;
}
return ((_a - 1) / _b) + 1;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
assert(_b <= _a);
return _a - _b;
}
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
c = _a + _b;
assert(c >= _a);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
*/
contract Ownable {
address public owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender
* account.
*/
constructor() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param _newOwner The address to transfer ownership to.
*/
function transferOwnership(address _newOwner) public onlyOwner {
_transferOwnership(_newOwner);
}
/**
* @dev Transfers control of the contract to a newOwner.
* @param _newOwner The address to transfer ownership to.
*/
function _transferOwnership(address _newOwner) internal {
require(_newOwner != address(0));
emit OwnershipTransferred(owner, _newOwner);
owner = _newOwner;
}
}
/**
* @title 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;
}
}
contract LoanTokenization is ReentrancyGuard, Ownable {
uint256 internal constant MAX_UINT = 2**256 - 1;
string public name;
string public symbol;
uint8 public decimals;
address public bZxContract;
address public bZxVault;
address public bZxOracle;
address public wethContract;
address public loanTokenAddress;
// price of token at last user checkpoint
mapping (address => uint256) internal checkpointPrices_;
}
contract LoanTokenStorage is LoanTokenization {
struct ListIndex {
uint256 index;
bool isSet;
}
struct LoanData {
bytes32 loanOrderHash;
uint256 leverageAmount;
uint256 initialMarginAmount;
uint256 maintenanceMarginAmount;
uint256 maxDurationUnixTimestampSec;
uint256 index;
}
struct TokenReserves {
address lender;
uint256 amount;
}
event Borrow(
address indexed borrower,
uint256 borrowAmount,
uint256 interestRate,
address collateralTokenAddress,
address tradeTokenToFillAddress,
bool withdrawOnOpen
);
event Claim(
address indexed claimant,
uint256 tokenAmount,
uint256 assetAmount,
uint256 remainingTokenAmount,
uint256 price
);
bool internal isInitialized_ = false;
address public tokenizedRegistry;
uint256 public baseRate = 1000000000000000000; // 1.0%
uint256 public rateMultiplier = 39000000000000000000; // 39%
// "fee percentage retained by the oracle" = SafeMath.sub(10**20, spreadMultiplier);
uint256 public spreadMultiplier;
mapping (uint256 => bytes32) public loanOrderHashes; // mapping of levergeAmount to loanOrderHash
mapping (bytes32 => LoanData) public loanOrderData; // mapping of loanOrderHash to LoanOrder
uint256[] public leverageList;
TokenReserves[] public burntTokenReserveList; // array of TokenReserves
mapping (address => ListIndex) public burntTokenReserveListIndex; // mapping of lender address to ListIndex objects
uint256 public burntTokenReserved; // total outstanding burnt token amount
address internal nextOwedLender_;
uint256 public totalAssetBorrow = 0; // current amount of loan token amount tied up in loans
uint256 internal checkpointSupply_;
uint256 internal lastSettleTime_;
uint256 public initialPrice;
}
contract AdvancedTokenStorage is LoanTokenStorage {
using SafeMath for uint256;
event Transfer(
address indexed from,
address indexed to,
uint256 value
);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Mint(
address indexed minter,
uint256 tokenAmount,
uint256 assetAmount,
uint256 price
);
event Burn(
address indexed burner,
uint256 tokenAmount,
uint256 assetAmount,
uint256 price
);
mapping(address => uint256) internal balances;
mapping (address => mapping (address => uint256)) internal allowed;
uint256 internal totalSupply_;
function totalSupply()
public
view
returns (uint256)
{
return totalSupply_;
}
function balanceOf(
address _owner)
public
view
returns (uint256)
{
return balances[_owner];
}
function allowance(
address _owner,
address _spender)
public
view
returns (uint256)
{
return allowed[_owner][_spender];
}
}
contract LoanToken is AdvancedTokenStorage {
address internal target_;
constructor(
address _newTarget)
public
{
_setTarget(_newTarget);
}
function()
external
payable
{
address target = target_;
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 setTarget(
address _newTarget)
public
onlyOwner
{
_setTarget(_newTarget);
}
function _setTarget(
address _newTarget)
internal
{
require(_isContract(_newTarget), "target not a contract");
target_ = _newTarget;
}
function _isContract(
address addr)
internal
view
returns (bool)
{
uint256 size;
assembly { size := extcodesize(addr) }
return size > 0;
}
}
Read Contract
allowance 0xdd62ed3e → uint256
bZxContract 0x995363d3 → address
bZxOracle 0x96c7871b → address
bZxVault 0x894ca308 → address
balanceOf 0x70a08231 → uint256
baseRate 0x1f68f20a → uint256
burntTokenReserveList 0x7866c6c1 → address, uint256
burntTokenReserveListIndex 0xfbd9574d → uint256, bool
burntTokenReserved 0x0c4925fd → uint256
decimals 0x313ce567 → uint8
initialPrice 0x1d0806ae → uint256
leverageList 0x9b3a54d1 → uint256
loanOrderData 0x2515aacd → bytes32, uint256, uint256, uint256, uint256, uint256
loanOrderHashes 0xfe056342 → bytes32
loanTokenAddress 0x797bf385 → address
name 0x06fdde03 → string
owner 0x8da5cb5b → address
rateMultiplier 0x330691ac → uint256
spreadMultiplier 0xd84d2a47 → uint256
symbol 0x95d89b41 → string
tokenizedRegistry 0x736ee3d3 → address
totalAssetBorrow 0x20f6d07c → uint256
totalSupply 0x18160ddd → uint256
wethContract 0x4780eac1 → address
Write Contract 2 functions
These functions modify contract state and require a wallet transaction to execute.
setTarget 0x776d1a01
address _newTarget
transferOwnership 0xf2fde38b
address _newOwner
Top Interactions
| Address | Txns | Sent | Received |
|---|---|---|---|
| 0x05701555...af68 | 2 | 2 | |
| 0x5269389A...3425 | 1 | 1 | |
| 0x21F1D0dA...D00E | 1 | 1 | |
| 0x96693870...22b0 | 1 | 1 |
Recent Transactions
|
| Hash | Block | Age | From/To | Value | |
|---|---|---|---|---|---|
| 0xc2cf2419...aa0ef5 | 10,619,423 | IN | 0x05701555...af68 | 0 ETH | |
| 0x4364de27...b76014 | 10,619,364 | IN | 0x05701555...af68 | 0 ETH | |
| 0x5485fd77...da5774 | 10,617,999 | IN | 0x5269389A...3425 | 0 ETH | |
| 0x3093133f...301020 | 10,617,991 | IN | 0x21F1D0dA...D00E | 0 ETH | |
| 0x5a48cc3a...dadfd3 | 10,617,982 | IN | 0x96693870...22b0 | 0 ETH |