Contract
0xd7cabef2c1fd77a31c5ba97c724b82d3e25fc83c
9
Contract Overview
Balance:
0 ETH
EtherValue:
$0.00
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Similar Match Source Code This contract matches the deployed ByteCode of the Source Code for Contract 0x1D90fDAc4DD30c3ba38d53f52A884F6e75d0989e The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
Factory
Compiler Version
v0.5.16+commit.9c3226ce
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity =0.5.16; import "./interfaces/IFactory.sol"; import "./interfaces/IBDeployer.sol"; import "./interfaces/IBorrowable.sol"; import "./interfaces/ICDeployer.sol"; import "./interfaces/ICollateral.sol"; import "./interfaces/IERC20.sol"; import "./interfaces/IUniswapV2Pair.sol"; import "./interfaces/ITarotPriceOracle.sol"; contract Factory is IFactory { address public admin; address public pendingAdmin; address public reservesAdmin; address public reservesPendingAdmin; address public reservesManager; struct LendingPool { bool initialized; uint24 lendingPoolId; address collateral; address borrowable0; address borrowable1; } mapping(address => LendingPool) public getLendingPool; // get by UniswapV2Pair address[] public allLendingPools; // address of the UniswapV2Pair function allLendingPoolsLength() external view returns (uint256) { return allLendingPools.length; } IBDeployer public bDeployer; ICDeployer public cDeployer; ITarotPriceOracle public tarotPriceOracle; event LendingPoolInitialized( address indexed uniswapV2Pair, address indexed token0, address indexed token1, address collateral, address borrowable0, address borrowable1, uint256 lendingPoolId ); event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin); event NewAdmin(address oldAdmin, address newAdmin); event NewReservesPendingAdmin( address oldReservesPendingAdmin, address newReservesPendingAdmin ); event NewReservesAdmin(address oldReservesAdmin, address newReservesAdmin); event NewReservesManager( address oldReservesManager, address newReservesManager ); constructor( address _admin, address _reservesAdmin, IBDeployer _bDeployer, ICDeployer _cDeployer, ITarotPriceOracle _tarotPriceOracle ) public { admin = _admin; reservesAdmin = _reservesAdmin; bDeployer = _bDeployer; cDeployer = _cDeployer; tarotPriceOracle = _tarotPriceOracle; emit NewAdmin(address(0), _admin); emit NewReservesAdmin(address(0), _reservesAdmin); } function _getTokens(address uniswapV2Pair) private view returns (address token0, address token1) { token0 = IUniswapV2Pair(uniswapV2Pair).token0(); token1 = IUniswapV2Pair(uniswapV2Pair).token1(); } function _createLendingPool(address uniswapV2Pair) private { if (getLendingPool[uniswapV2Pair].lendingPoolId != 0) return; allLendingPools.push(uniswapV2Pair); getLendingPool[uniswapV2Pair] = LendingPool( false, uint24(allLendingPools.length), address(0), address(0), address(0) ); } function createCollateral(address uniswapV2Pair) external returns (address collateral) { _getTokens(uniswapV2Pair); require( getLendingPool[uniswapV2Pair].collateral == address(0), "Tarot: ALREADY_EXISTS" ); collateral = cDeployer.deployCollateral(uniswapV2Pair); ICollateral(collateral)._setFactory(); _createLendingPool(uniswapV2Pair); getLendingPool[uniswapV2Pair].collateral = collateral; } function createBorrowable0(address uniswapV2Pair) external returns (address borrowable0) { _getTokens(uniswapV2Pair); require( getLendingPool[uniswapV2Pair].borrowable0 == address(0), "Tarot: ALREADY_EXISTS" ); borrowable0 = bDeployer.deployBorrowable(uniswapV2Pair, 0); IBorrowable(borrowable0)._setFactory(); _createLendingPool(uniswapV2Pair); getLendingPool[uniswapV2Pair].borrowable0 = borrowable0; } function createBorrowable1(address uniswapV2Pair) external returns (address borrowable1) { _getTokens(uniswapV2Pair); require( getLendingPool[uniswapV2Pair].borrowable1 == address(0), "Tarot: ALREADY_EXISTS" ); borrowable1 = bDeployer.deployBorrowable(uniswapV2Pair, 1); IBorrowable(borrowable1)._setFactory(); _createLendingPool(uniswapV2Pair); getLendingPool[uniswapV2Pair].borrowable1 = borrowable1; } function initializeLendingPool(address uniswapV2Pair) external { (address token0, address token1) = _getTokens(uniswapV2Pair); LendingPool memory lPool = getLendingPool[uniswapV2Pair]; require(!lPool.initialized, "Tarot: ALREADY_INITIALIZED"); require( lPool.collateral != address(0), "Tarot: COLLATERALIZABLE_NOT_CREATED" ); require( lPool.borrowable0 != address(0), "Tarot: BORROWABLE0_NOT_CREATED" ); require( lPool.borrowable1 != address(0), "Tarot: BORROWABLE1_NOT_CREATED" ); (, , , , , bool oracleInitialized) = tarotPriceOracle.getPair(uniswapV2Pair); if (!oracleInitialized) tarotPriceOracle.initialize(uniswapV2Pair); ICollateral(lPool.collateral)._initialize( "Tarot Collateral", "cTAROT", uniswapV2Pair, lPool.borrowable0, lPool.borrowable1 ); IBorrowable(lPool.borrowable0)._initialize( "Tarot Borrowable", "bTAROT", token0, lPool.collateral ); IBorrowable(lPool.borrowable1)._initialize( "Tarot Borrowable", "bTAROT", token1, lPool.collateral ); getLendingPool[uniswapV2Pair].initialized = true; emit LendingPoolInitialized( uniswapV2Pair, token0, token1, lPool.collateral, lPool.borrowable0, lPool.borrowable1, lPool.lendingPoolId ); } function _setPendingAdmin(address newPendingAdmin) external { require(msg.sender == admin, "Tarot: UNAUTHORIZED"); address oldPendingAdmin = pendingAdmin; pendingAdmin = newPendingAdmin; emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin); } function _acceptAdmin() external { require(msg.sender == pendingAdmin, "Tarot: UNAUTHORIZED"); address oldAdmin = admin; address oldPendingAdmin = pendingAdmin; admin = pendingAdmin; pendingAdmin = address(0); emit NewAdmin(oldAdmin, admin); emit NewPendingAdmin(oldPendingAdmin, address(0)); } function _setReservesPendingAdmin(address newReservesPendingAdmin) external { require(msg.sender == reservesAdmin, "Tarot: UNAUTHORIZED"); address oldReservesPendingAdmin = reservesPendingAdmin; reservesPendingAdmin = newReservesPendingAdmin; emit NewReservesPendingAdmin( oldReservesPendingAdmin, newReservesPendingAdmin ); } function _acceptReservesAdmin() external { require(msg.sender == reservesPendingAdmin, "Tarot: UNAUTHORIZED"); address oldReservesAdmin = reservesAdmin; address oldReservesPendingAdmin = reservesPendingAdmin; reservesAdmin = reservesPendingAdmin; reservesPendingAdmin = address(0); emit NewReservesAdmin(oldReservesAdmin, reservesAdmin); emit NewReservesPendingAdmin(oldReservesPendingAdmin, address(0)); } function _setReservesManager(address newReservesManager) external { require(msg.sender == reservesAdmin, "Tarot: UNAUTHORIZED"); address oldReservesManager = reservesManager; reservesManager = newReservesManager; emit NewReservesManager(oldReservesManager, newReservesManager); } }
pragma solidity >=0.5.0; interface IFactory { event LendingPoolInitialized(address indexed uniswapV2Pair, address indexed token0, address indexed token1, address collateral, address borrowable0, address borrowable1, uint lendingPoolId); event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin); event NewAdmin(address oldAdmin, address newAdmin); event NewReservesPendingAdmin(address oldReservesPendingAdmin, address newReservesPendingAdmin); event NewReservesAdmin(address oldReservesAdmin, address newReservesAdmin); event NewReservesManager(address oldReservesManager, address newReservesManager); function admin() external view returns (address); function pendingAdmin() external view returns (address); function reservesAdmin() external view returns (address); function reservesPendingAdmin() external view returns (address); function reservesManager() external view returns (address); function getLendingPool(address uniswapV2Pair) external view returns ( bool initialized, uint24 lendingPoolId, address collateral, address borrowable0, address borrowable1 ); function allLendingPools(uint) external view returns (address uniswapV2Pair); function allLendingPoolsLength() external view returns (uint); function bDeployer() external view returns (address); function cDeployer() external view returns (address); function tarotPriceOracle() external view returns (address); function createCollateral(address uniswapV2Pair) external returns (address collateral); function createBorrowable0(address uniswapV2Pair) external returns (address borrowable0); function createBorrowable1(address uniswapV2Pair) external returns (address borrowable1); function initializeLendingPool(address uniswapV2Pair) external; function _setPendingAdmin(address newPendingAdmin) external; function _acceptAdmin() external; function _setReservesPendingAdmin(address newPendingAdmin) external; function _acceptReservesAdmin() external; function _setReservesManager(address newReservesManager) external; }
pragma solidity >=0.5.0; interface IBDeployer { function deployBorrowable(address uniswapV2Pair, uint8 index) external returns (address borrowable); }
pragma solidity >=0.5.0; interface IBorrowable { /*** Tarot ERC20 ***/ event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /*** Pool Token ***/ event Mint( address indexed sender, address indexed minter, uint256 mintAmount, uint256 mintTokens ); event Redeem( address indexed sender, address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens ); event Sync(uint256 totalBalance); function underlying() external view returns (address); function factory() external view returns (address); function totalBalance() external view returns (uint256); function MINIMUM_LIQUIDITY() external pure returns (uint256); function exchangeRate() external returns (uint256); function mint(address minter) external returns (uint256 mintTokens); function redeem(address redeemer) external returns (uint256 redeemAmount); function skim(address to) external; function sync() external; function _setFactory() external; /*** Borrowable ***/ event BorrowApproval( address indexed owner, address indexed spender, uint256 value ); event Borrow( address indexed sender, address indexed borrower, address indexed receiver, uint256 borrowAmount, uint256 repayAmount, uint256 accountBorrowsPrior, uint256 accountBorrows, uint256 totalBorrows ); event Liquidate( address indexed sender, address indexed borrower, address indexed liquidator, uint256 seizeTokens, uint256 repayAmount, uint256 accountBorrowsPrior, uint256 accountBorrows, uint256 totalBorrows ); function BORROW_FEE() external pure returns (uint256); function collateral() external view returns (address); function reserveFactor() external view returns (uint256); function exchangeRateLast() external view returns (uint256); function borrowIndex() external view returns (uint256); function totalBorrows() external view returns (uint256); function borrowAllowance(address owner, address spender) external view returns (uint256); function borrowBalance(address borrower) external view returns (uint256); function borrowTracker() external view returns (address); function BORROW_PERMIT_TYPEHASH() external pure returns (bytes32); function borrowApprove(address spender, uint256 value) external returns (bool); function borrowPermit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function borrow( address borrower, address receiver, uint256 borrowAmount, bytes calldata data ) external; function liquidate(address borrower, address liquidator) external returns (uint256 seizeTokens); function trackBorrow(address borrower) external; /*** Borrowable Interest Rate Model ***/ event AccrueInterest( uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows ); event CalculateKink(uint256 kinkRate); event CalculateBorrowRate(uint256 borrowRate); function KINK_BORROW_RATE_MAX() external pure returns (uint256); function KINK_BORROW_RATE_MIN() external pure returns (uint256); function KINK_MULTIPLIER() external pure returns (uint256); function borrowRate() external view returns (uint256); function kinkBorrowRate() external view returns (uint256); function kinkUtilizationRate() external view returns (uint256); function adjustSpeed() external view returns (uint256); function rateUpdateTimestamp() external view returns (uint32); function accrualTimestamp() external view returns (uint32); function accrueInterest() external; /*** Borrowable Setter ***/ event NewReserveFactor(uint256 newReserveFactor); event NewKinkUtilizationRate(uint256 newKinkUtilizationRate); event NewAdjustSpeed(uint256 newAdjustSpeed); event NewBorrowTracker(address newBorrowTracker); function RESERVE_FACTOR_MAX() external pure returns (uint256); function KINK_UR_MIN() external pure returns (uint256); function KINK_UR_MAX() external pure returns (uint256); function ADJUST_SPEED_MIN() external pure returns (uint256); function ADJUST_SPEED_MAX() external pure returns (uint256); function _initialize( string calldata _name, string calldata _symbol, address _underlying, address _collateral ) external; function _setReserveFactor(uint256 newReserveFactor) external; function _setKinkUtilizationRate(uint256 newKinkUtilizationRate) external; function _setAdjustSpeed(uint256 newAdjustSpeed) external; function _setBorrowTracker(address newBorrowTracker) external; }
pragma solidity >=0.5.0; interface ICDeployer { function deployCollateral(address uniswapV2Pair) external returns (address collateral); }
pragma solidity >=0.5.0; interface ICollateral { /*** Tarot ERC20 ***/ event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /*** Pool Token ***/ event Mint( address indexed sender, address indexed minter, uint256 mintAmount, uint256 mintTokens ); event Redeem( address indexed sender, address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens ); event Sync(uint256 totalBalance); function underlying() external view returns (address); function factory() external view returns (address); function totalBalance() external view returns (uint256); function MINIMUM_LIQUIDITY() external pure returns (uint256); function exchangeRate() external returns (uint256); function mint(address minter) external returns (uint256 mintTokens); function redeem(address redeemer) external returns (uint256 redeemAmount); function skim(address to) external; function sync() external; function _setFactory() external; /*** Collateral ***/ function borrowable0() external view returns (address); function borrowable1() external view returns (address); function tarotPriceOracle() external view returns (address); function safetyMarginSqrt() external view returns (uint256); function liquidationIncentive() external view returns (uint256); function getPrices() external returns (uint256 price0, uint256 price1); function tokensUnlocked(address from, uint256 value) external returns (bool); function accountLiquidityAmounts( address account, uint256 amount0, uint256 amount1 ) external returns (uint256 liquidity, uint256 shortfall); function accountLiquidity(address account) external returns (uint256 liquidity, uint256 shortfall); function canBorrow( address account, address borrowable, uint256 accountBorrows ) external returns (bool); function seize( address liquidator, address borrower, uint256 repayAmount ) external returns (uint256 seizeTokens); function flashRedeem( address redeemer, uint256 redeemAmount, bytes calldata data ) external; /*** Collateral Setter ***/ event NewSafetyMargin(uint256 newSafetyMarginSqrt); event NewLiquidationIncentive(uint256 newLiquidationIncentive); function SAFETY_MARGIN_SQRT_MIN() external pure returns (uint256); function SAFETY_MARGIN_SQRT_MAX() external pure returns (uint256); function LIQUIDATION_INCENTIVE_MIN() external pure returns (uint256); function LIQUIDATION_INCENTIVE_MAX() external pure returns (uint256); function _initialize( string calldata _name, string calldata _symbol, address _underlying, address _borrowable0, address _borrowable1 ) external; function _setSafetyMarginSqrt(uint256 newSafetyMarginSqrt) external; function _setLiquidationIncentive(uint256 newLiquidationIncentive) external; }
pragma solidity >=0.5.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); }
pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); }
pragma solidity >=0.5.0; interface ITarotPriceOracle { event PriceUpdate( address indexed pair, uint256 priceCumulative, uint32 blockTimestamp, bool latestIsSlotA ); function MIN_T() external pure returns (uint32); function getPair(address uniswapV2Pair) external view returns ( uint256 priceCumulativeSlotA, uint256 priceCumulativeSlotB, uint32 lastUpdateSlotA, uint32 lastUpdateSlotB, bool latestIsSlotA, bool initialized ); function initialize(address uniswapV2Pair) external; function getResult(address uniswapV2Pair) external returns (uint224 price, uint32 T); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_reservesAdmin","type":"address"},{"internalType":"contract IBDeployer","name":"_bDeployer","type":"address"},{"internalType":"contract ICDeployer","name":"_cDeployer","type":"address"},{"internalType":"contract ITarotPriceOracle","name":"_tarotPriceOracle","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"uniswapV2Pair","type":"address"},{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"collateral","type":"address"},{"indexed":false,"internalType":"address","name":"borrowable0","type":"address"},{"indexed":false,"internalType":"address","name":"borrowable1","type":"address"},{"indexed":false,"internalType":"uint256","name":"lendingPoolId","type":"uint256"}],"name":"LendingPoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldReservesAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newReservesAdmin","type":"address"}],"name":"NewReservesAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldReservesManager","type":"address"},{"indexed":false,"internalType":"address","name":"newReservesManager","type":"address"}],"name":"NewReservesManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldReservesPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newReservesPendingAdmin","type":"address"}],"name":"NewReservesPendingAdmin","type":"event"},{"constant":false,"inputs":[],"name":"_acceptAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"_acceptReservesAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newReservesManager","type":"address"}],"name":"_setReservesManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newReservesPendingAdmin","type":"address"}],"name":"_setReservesPendingAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allLendingPools","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allLendingPoolsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bDeployer","outputs":[{"internalType":"contract IBDeployer","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cDeployer","outputs":[{"internalType":"contract ICDeployer","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"uniswapV2Pair","type":"address"}],"name":"createBorrowable0","outputs":[{"internalType":"address","name":"borrowable0","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"uniswapV2Pair","type":"address"}],"name":"createBorrowable1","outputs":[{"internalType":"address","name":"borrowable1","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"uniswapV2Pair","type":"address"}],"name":"createCollateral","outputs":[{"internalType":"address","name":"collateral","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"getLendingPool","outputs":[{"internalType":"bool","name":"initialized","type":"bool"},{"internalType":"uint24","name":"lendingPoolId","type":"uint24"},{"internalType":"address","name":"collateral","type":"address"},{"internalType":"address","name":"borrowable0","type":"address"},{"internalType":"address","name":"borrowable1","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"uniswapV2Pair","type":"address"}],"name":"initializeLendingPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservesAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservesManager","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservesPendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tarotPriceOracle","outputs":[{"internalType":"contract ITarotPriceOracle","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051611686380380611686833981810160405260a081101561003357600080fd5b5080516020808301516040808501516060860151608090960151600080546001600160a01b03199081166001600160a01b03808a169182178455600280548416828a16179055600780548416828816179055600880548416828d161790556009805490931690851617909155845191825295810195909552825195969395919490927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92918290030190a160408051600081526001600160a01b038616602082015281517fa328ba21363a99cbf330243928bb26a15acf20bf43166ef838e67ff5d84d4ae7929181900390910190a15050505050611550806101366000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80639e1348e3116100ad578063d407112711610071578063d4071127146102e8578063db5a269014610305578063e9c714f21461030d578063eb5ab75f14610315578063f851a4401461033b5761012c565b80639e1348e314610248578063b1ccc03e14610250578063b658ca7514610276578063b71d1a0c1461029c578063cbed6d71146102c25761012c565b806349a78838116100f457806349a78838146101ee578063714c0206146102145780637a4660d51461022e578063822d73b214610236578063998c077d1461023e5761012c565b80630572bf5f1461013157806323c6145d1461019457806326782247146101d6578063345ef941146101de57806334fb08a8146101e6575b600080fd5b6101576004803603602081101561014757600080fd5b50356001600160a01b0316610343565b60408051951515865262ffffff90941660208601526001600160a01b03928316858501529082166060850152166080830152519081900360a00190f35b6101ba600480360360208110156101aa57600080fd5b50356001600160a01b031661038a565b604080516001600160a01b039092168252519081900360200190f35b6101ba610524565b6101ba610533565b6101ba610542565b6101ba6004803603602081101561020457600080fd5b50356001600160a01b0316610551565b61021c6106e5565b60408051918252519081900360200190f35b6101ba6106eb565b6101ba6106fa565b610246610709565b005b6101ba610811565b6102466004803603602081101561026657600080fd5b50356001600160a01b0316610820565b6102466004803603602081101561028c57600080fd5b50356001600160a01b03166108d8565b610246600480360360208110156102b257600080fd5b50356001600160a01b0316610e6f565b6101ba600480360360208110156102d857600080fd5b50356001600160a01b0316610f27565b6101ba600480360360208110156102fe57600080fd5b50356110b9565b6101ba6110e0565b6102466110ef565b6102466004803603602081101561032b57600080fd5b50356001600160a01b03166111f7565b6101ba6112af565b60056020526000908152604090208054600182015460029092015460ff82169262ffffff610100840416926001600160a01b03640100000000909104811692918116911685565b6000610395826112be565b50506001600160a01b0382811660009081526005602052604090205464010000000090041615610404576040805162461bcd60e51b81526020600482015260156024820152745461726f743a20414c52454144595f45584953545360581b604482015290519081900360640190fd5b60085460408051637924fedd60e01b81526001600160a01b03858116600483015291519190921691637924fedd9160248083019260209291908290030181600087803b15801561045357600080fd5b505af1158015610467573d6000803e3d6000fd5b505050506040513d602081101561047d57600080fd5b5051604080516312974c5b60e21b815290519192506001600160a01b03831691634a5d316c9160048082019260009290919082900301818387803b1580156104c457600080fd5b505af11580156104d8573d6000803e3d6000fd5b505050506104e58261139e565b6001600160a01b039182166000908152600560205260409020805492821664010000000002640100000000600160c01b03199093169290921790915590565b6001546001600160a01b031681565b6004546001600160a01b031681565b6009546001600160a01b031681565b600061055c826112be565b50506001600160a01b0382811660009081526005602052604090206001015416156105c6576040805162461bcd60e51b81526020600482015260156024820152745461726f743a20414c52454144595f45584953545360581b604482015290519081900360640190fd5b600754604080516354bcd7ad60e01b81526001600160a01b03858116600483015260006024830181905292519316926354bcd7ad92604480840193602093929083900390910190829087803b15801561061e57600080fd5b505af1158015610632573d6000803e3d6000fd5b505050506040513d602081101561064857600080fd5b5051604080516312974c5b60e21b815290519192506001600160a01b03831691634a5d316c9160048082019260009290919082900301818387803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506106b08261139e565b6001600160a01b03918216600090815260056020526040902060010180546001600160a01b0319169282169290921790915590565b60065490565b6008546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b0316331461075e576040805162461bcd60e51b815260206004820152601360248201527215185c9bdd0e8815539055551213d492569151606a1b604482015290519081900360640190fd5b60028054600380546001600160a01b038082166001600160a01b031980861682179687905590921690925560408051938316808552949092166020840152815190927fa328ba21363a99cbf330243928bb26a15acf20bf43166ef838e67ff5d84d4ae792908290030190a1604080516001600160a01b03831681526000602082015281517f01d5e27ed5584d16c62ba1a14cfde0783f979d4797a3fc41342aff17d8ef5b41929181900390910190a15050565b6003546001600160a01b031681565b6002546001600160a01b03163314610875576040805162461bcd60e51b815260206004820152601360248201527215185c9bdd0e8815539055551213d492569151606a1b604482015290519081900360640190fd5b600380546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517f01d5e27ed5584d16c62ba1a14cfde0783f979d4797a3fc41342aff17d8ef5b41929181900390910190a15050565b6000806108e4836112be565b915091506108f06114ca565b506001600160a01b03808416600090815260056020908152604091829020825160a081018452815460ff8116158015835262ffffff610100830416948301949094526401000000009004851693810193909352600181015484166060840152600201549092166080820152906109ad576040805162461bcd60e51b815260206004820152601a60248201527f5461726f743a20414c52454144595f494e495449414c495a4544000000000000604482015290519081900360640190fd5b60408101516001600160a01b03166109f65760405162461bcd60e51b81526004018080602001828103825260238152602001806114f96023913960400191505060405180910390fd5b60608101516001600160a01b0316610a55576040805162461bcd60e51b815260206004820152601e60248201527f5461726f743a20424f52524f5741424c45305f4e4f545f435245415445440000604482015290519081900360640190fd5b60808101516001600160a01b0316610ab4576040805162461bcd60e51b815260206004820152601e60248201527f5461726f743a20424f52524f5741424c45315f4e4f545f435245415445440000604482015290519081900360640190fd5b60095460408051630d3c450160e11b81526001600160a01b03878116600483015291516000939290921691631a788a029160248082019260c092909190829003018186803b158015610b0557600080fd5b505afa158015610b19573d6000803e3d6000fd5b505050506040513d60c0811015610b2f57600080fd5b5060a00151905080610ba2576009546040805163189acdbd60e31b81526001600160a01b0388811660048301529151919092169163c4d66de891602480830192600092919082900301818387803b158015610b8957600080fd5b505af1158015610b9d573d6000803e3d6000fd5b505050505b60408083015160608401516080850151835163c548e3c560e01b81526001600160a01b038a811660448301529283166064820152908216608482015260a06004820152601060a48201526f15185c9bdd0810dbdb1b185d195c985b60821b60c482015260e06024820152600660e48201526518d5105493d560d21b610104820152925191169163c548e3c59161012480830192600092919082900301818387803b158015610c4f57600080fd5b505af1158015610c63573d6000803e3d6000fd5b50505060608301516040808501518151636a030c1160e01b81526001600160a01b038981166044830152918216606482015260806004820152601060848201526f5461726f7420426f72726f7761626c6560801b60a482015260c06024820152600660c4820152651895105493d560d21b60e4820152915192169250636a030c119161010480830192600092919082900301818387803b158015610d0657600080fd5b505af1158015610d1a573d6000803e3d6000fd5b505050506080828101516040808501518151636a030c1160e01b81526001600160a01b03888116604483015291821660648201526004810194909452601060848501526f5461726f7420426f72726f7761626c6560801b60a485015260c06024850152600660c4850152651895105493d560d21b60e48501529051911691636a030c119161010480830192600092919082900301818387803b158015610dbf57600080fd5b505af1158015610dd3573d6000803e3d6000fd5b5050506001600160a01b03808716600081815260056020908152604091829020805460ff19166001179055868201516060808901516080808b01518b8601518751958a168652928916958501959095529387168386015262ffffff169082015291518885169550938916937f4c3ab495dc8ebd1b2f3232d7632e54411bc7e4d111475e7fbbd5547d9a28c4959281900390910190a45050505050565b6000546001600160a01b03163314610ec4576040805162461bcd60e51b815260206004820152601360248201527215185c9bdd0e8815539055551213d492569151606a1b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9929181900390910190a15050565b6000610f32826112be565b50506001600160a01b038281166000908152600560205260409020600201541615610f9c576040805162461bcd60e51b81526020600482015260156024820152745461726f743a20414c52454144595f45584953545360581b604482015290519081900360640190fd5b600754604080516354bcd7ad60e01b81526001600160a01b03858116600483015260016024830152915191909216916354bcd7ad9160448083019260209291908290030181600087803b158015610ff257600080fd5b505af1158015611006573d6000803e3d6000fd5b505050506040513d602081101561101c57600080fd5b5051604080516312974c5b60e21b815290519192506001600160a01b03831691634a5d316c9160048082019260009290919082900301818387803b15801561106357600080fd5b505af1158015611077573d6000803e3d6000fd5b505050506110848261139e565b6001600160a01b03918216600090815260056020526040902060020180546001600160a01b0319169282169290921790915590565b600681815481106110c657fe5b6000918252602090912001546001600160a01b0316905081565b6007546001600160a01b031681565b6001546001600160a01b03163314611144576040805162461bcd60e51b815260206004820152601360248201527215185c9bdd0e8815539055551213d492569151606a1b604482015290519081900360640190fd5b60008054600180546001600160a01b038082166001600160a01b031980861682179687905590921690925560408051938316808552949092166020840152815190927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92908290030190a1604080516001600160a01b03831681526000602082015281517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9929181900390910190a15050565b6002546001600160a01b0316331461124c576040805162461bcd60e51b815260206004820152601360248201527215185c9bdd0e8815539055551213d492569151606a1b604482015290519081900360640190fd5b600480546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517f324bacfad26225895fcf55780481bec4ce49013c92500fa1c25626ff43fbf661929181900390910190a15050565b6000546001600160a01b031681565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156112fa57600080fd5b505afa15801561130e573d6000803e3d6000fd5b505050506040513d602081101561132457600080fd5b50516040805163d21220a760e01b815290519193506001600160a01b0385169163d21220a791600480820192602092909190829003018186803b15801561136a57600080fd5b505afa15801561137e573d6000803e3d6000fd5b505050506040513d602081101561139457600080fd5b5051919391925050565b6001600160a01b038116600090815260056020526040902054610100900462ffffff16156113cb576114c7565b60068054600181810183557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b038086166001600160a01b031992831681179093556040805160a0810182526000808252965462ffffff90811660208381019182528385018a8152606085018b8152608086018c8152998c526005909252949099209251835491519451861664010000000002640100000000600160c01b0319959093166101000263ffffff001991151560ff199093169290921716179290921691909117815594519385018054948216948316949094179093559051600290930180549390921692169190911790555b50565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091529056fe5461726f743a20434f4c4c41544552414c495a41424c455f4e4f545f43524541544544a265627a7a72315820e994243e5296e306aa05225e407df38ebdf8af052fff4e4a373d2d3f6e1e72be64736f6c634300051000320000000000000000000000001bb4e4fc22b4e2470a05b60c2943f88b832cea100000000000000000000000001e6bf02f5bad0a8aa93df20955feff295d97f96900000000000000000000000054b00658f247ee34e8b23055b19d73217a7d54200000000000000000000000005f90e27c07b96641a52ff2335b15158e74e46401000000000000000000000000981bd9f77c8aafc14ebc86769503f86a3cc29af5
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.