Contract Overview
Balance:
0 ETH
EtherValue:
$0.00
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 20 internal transactions
[ Download CSV Export ]
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/IBaseV1Pair.sol"; import "./interfaces/ITarotSolidlyPriceOracleV2.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; ITarotSolidlyPriceOracleV2 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, ITarotSolidlyPriceOracleV2 _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 = IBaseV1Pair(uniswapV2Pair).token0(); token1 = IBaseV1Pair(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 { require(IBaseV1Pair(uniswapV2Pair).stable(), "Tarot: STABLE"); (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" ); tarotPriceOracle.getResult(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 kinkUtilizationRateLower() external view returns (uint256); function kinkUtilizationRateUpper() 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 NewKinkUtilizationRates(uint256 newKinkUtilizationRateLower, uint256 newKinkUtilizationRateUpper); 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 _setKinkUtilizationRates(uint256 newKinkUtilizationRateLower, uint256 newKinkUtilizationRateUpper) 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 safetyMargin() external view returns (uint256); function mTolerance() external view returns (uint256); function liquidationIncentive() external view returns (uint256); function liquidationFee() external view returns (uint256); function liquidationPenalty() external view returns (uint256); function getPrices() external returns (uint256 price0, uint256 price1); function getReserves() external returns (uint112 reserve0, uint112 reserve1); 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); event NewLiquidationFee(uint256 newLiquidationFee); event NewMTolerance(uint256 mTolerance); function M_TOLERANCE_MIN() external pure returns (uint256); function M_TOLERANCE_MAX() external pure returns (uint256); function SAFETY_MARGIN_MIN() external pure returns (uint256); function SAFETY_MARGIN_MAX() external pure returns (uint256); function LIQUIDATION_INCENTIVE_MIN() external pure returns (uint256); function LIQUIDATION_INCENTIVE_MAX() external pure returns (uint256); function LIQUIDATION_FEE_MAX() external pure returns (uint256); function _initialize( string calldata _name, string calldata _symbol, address _underlying, address _borrowable0, address _borrowable1 ) external; function _setSafetyMargin(uint256 newSafetyMargin) external; function _setLiquidationIncentive(uint256 newLiquidationIncentive) external; function _setLiquidationFee(uint256 newLiquidationFee) external; function _setMTolerance(uint256 newMTolerance) external; function isUnderlyingVaultToken() external view returns (bool); }
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 IBaseV1Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function stable() external view returns (bool); 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 tokens() external view returns (address, address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function observationLength() external view returns (uint); function observations(uint) external view returns ( uint timestamp, uint reserve0Cumulative, uint reserve1Cumulative ); function currentCumulativePrices() external view returns ( uint reserve0Cumulative, uint reserve1Cumulative, uint timestamp ); function metadata() external view returns (uint, uint, uint, uint, bool, address, address); }
pragma solidity >=0.5; interface ITarotSolidlyPriceOracleV2 { function MIN_T() external pure returns (uint32); function getResult(address pair) external returns (uint112 reserve0, uint112 reserve1, 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 ITarotSolidlyPriceOracleV2","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 ITarotSolidlyPriceOracleV2","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516116b83803806116b8833981810160405260a081101561003357600080fd5b5080516020808301516040808501516060860151608090960151600080546001600160a01b03199081166001600160a01b03808a169182178455600280548416828a16179055600780548416828816179055600880548416828d161790556009805490931690851617909155845191825295810195909552825195969395919490927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92918290030190a160408051600081526001600160a01b038616602082015281517fa328ba21363a99cbf330243928bb26a15acf20bf43166ef838e67ff5d84d4ae7929181900390910190a15050505050611582806101366000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80639e1348e3116100ad578063d407112711610071578063d4071127146102e8578063db5a269014610305578063e9c714f21461030d578063eb5ab75f14610315578063f851a4401461033b5761012c565b80639e1348e314610248578063b1ccc03e14610250578063b658ca7514610276578063b71d1a0c1461029c578063cbed6d71146102c25761012c565b806349a78838116100f457806349a78838146101ee578063714c0206146102145780637a4660d51461022e578063822d73b214610236578063998c077d1461023e5761012c565b80630572bf5f1461013157806323c6145d1461019457806326782247146101d6578063345ef941146101de57806334fb08a8146101e6575b600080fd5b6101576004803603602081101561014757600080fd5b50356001600160a01b0316610343565b60408051951515865262ffffff90941660208601526001600160a01b03928316858501529082166060850152166080830152519081900360a00190f35b6101ba600480360360208110156101aa57600080fd5b50356001600160a01b031661038a565b604080516001600160a01b039092168252519081900360200190f35b6101ba610524565b6101ba610533565b6101ba610542565b6101ba6004803603602081101561020457600080fd5b50356001600160a01b0316610551565b61021c6106e5565b60408051918252519081900360200190f35b6101ba6106eb565b6101ba6106fa565b610246610709565b005b6101ba610811565b6102466004803603602081101561026657600080fd5b50356001600160a01b0316610820565b6102466004803603602081101561028c57600080fd5b50356001600160a01b03166108d8565b610246600480360360208110156102b257600080fd5b50356001600160a01b0316610ea1565b6101ba600480360360208110156102d857600080fd5b50356001600160a01b0316610f59565b6101ba600480360360208110156102fe57600080fd5b50356110eb565b6101ba611112565b610246611121565b6102466004803603602081101561032b57600080fd5b50356001600160a01b0316611229565b6101ba6112e1565b60056020526000908152604090208054600182015460029092015460ff82169262ffffff610100840416926001600160a01b03640100000000909104811692918116911685565b6000610395826112f0565b50506001600160a01b0382811660009081526005602052604090205464010000000090041615610404576040805162461bcd60e51b81526020600482015260156024820152745461726f743a20414c52454144595f45584953545360581b604482015290519081900360640190fd5b60085460408051637924fedd60e01b81526001600160a01b03858116600483015291519190921691637924fedd9160248083019260209291908290030181600087803b15801561045357600080fd5b505af1158015610467573d6000803e3d6000fd5b505050506040513d602081101561047d57600080fd5b5051604080516312974c5b60e21b815290519192506001600160a01b03831691634a5d316c9160048082019260009290919082900301818387803b1580156104c457600080fd5b505af11580156104d8573d6000803e3d6000fd5b505050506104e5826113d0565b6001600160a01b039182166000908152600560205260409020805492821664010000000002640100000000600160c01b03199093169290921790915590565b6001546001600160a01b031681565b6004546001600160a01b031681565b6009546001600160a01b031681565b600061055c826112f0565b50506001600160a01b0382811660009081526005602052604090206001015416156105c6576040805162461bcd60e51b81526020600482015260156024820152745461726f743a20414c52454144595f45584953545360581b604482015290519081900360640190fd5b600754604080516354bcd7ad60e01b81526001600160a01b03858116600483015260006024830181905292519316926354bcd7ad92604480840193602093929083900390910190829087803b15801561061e57600080fd5b505af1158015610632573d6000803e3d6000fd5b505050506040513d602081101561064857600080fd5b5051604080516312974c5b60e21b815290519192506001600160a01b03831691634a5d316c9160048082019260009290919082900301818387803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506106b0826113d0565b6001600160a01b03918216600090815260056020526040902060010180546001600160a01b0319169282169290921790915590565b60065490565b6008546001600160a01b031681565b6002546001600160a01b031681565b6003546001600160a01b0316331461075e576040805162461bcd60e51b815260206004820152601360248201527215185c9bdd0e8815539055551213d492569151606a1b604482015290519081900360640190fd5b60028054600380546001600160a01b038082166001600160a01b031980861682179687905590921690925560408051938316808552949092166020840152815190927fa328ba21363a99cbf330243928bb26a15acf20bf43166ef838e67ff5d84d4ae792908290030190a1604080516001600160a01b03831681526000602082015281517f01d5e27ed5584d16c62ba1a14cfde0783f979d4797a3fc41342aff17d8ef5b41929181900390910190a15050565b6003546001600160a01b031681565b6002546001600160a01b03163314610875576040805162461bcd60e51b815260206004820152601360248201527215185c9bdd0e8815539055551213d492569151606a1b604482015290519081900360640190fd5b600380546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517f01d5e27ed5584d16c62ba1a14cfde0783f979d4797a3fc41342aff17d8ef5b41929181900390910190a15050565b806001600160a01b03166322be3de16040518163ffffffff1660e01b815260040160206040518083038186803b15801561091157600080fd5b505afa158015610925573d6000803e3d6000fd5b505050506040513d602081101561093b57600080fd5b505161097e576040805162461bcd60e51b815260206004820152600d60248201526c5461726f743a20535441424c4560981b604482015290519081900360640190fd5b60008061098a836112f0565b915091506109966114fc565b506001600160a01b03808416600090815260056020908152604091829020825160a081018452815460ff8116158015835262ffffff61010083041694830194909452640100000000900485169381019390935260018101548416606084015260020154909216608082015290610a53576040805162461bcd60e51b815260206004820152601a60248201527f5461726f743a20414c52454144595f494e495449414c495a4544000000000000604482015290519081900360640190fd5b60408101516001600160a01b0316610a9c5760405162461bcd60e51b815260040180806020018281038252602381526020018061152b6023913960400191505060405180910390fd5b60608101516001600160a01b0316610afb576040805162461bcd60e51b815260206004820152601e60248201527f5461726f743a20424f52524f5741424c45305f4e4f545f435245415445440000604482015290519081900360640190fd5b60808101516001600160a01b0316610b5a576040805162461bcd60e51b815260206004820152601e60248201527f5461726f743a20424f52524f5741424c45315f4e4f545f435245415445440000604482015290519081900360640190fd5b6009546040805163022351bf60e51b81526001600160a01b0387811660048301529151919092169163446a37e09160248083019260609291908290030181600087803b158015610ba957600080fd5b505af1158015610bbd573d6000803e3d6000fd5b505050506040513d6060811015610bd357600080fd5b505060408181015160608301516080840151835163c548e3c560e01b81526001600160a01b0389811660448301529283166064820152908216608482015260a06004820152601060a48201526f15185c9bdd0810dbdb1b185d195c985b60821b60c482015260e06024820152600660e48201526518d5105493d560d21b610104820152925191169163c548e3c59161012480830192600092919082900301818387803b158015610c8257600080fd5b505af1158015610c96573d6000803e3d6000fd5b50505060608201516040808401518151636a030c1160e01b81526001600160a01b038881166044830152918216606482015260806004820152601060848201526f5461726f7420426f72726f7761626c6560801b60a482015260c06024820152600660c4820152651895105493d560d21b60e4820152915192169250636a030c119161010480830192600092919082900301818387803b158015610d3957600080fd5b505af1158015610d4d573d6000803e3d6000fd5b505050506080818101516040808401518151636a030c1160e01b81526001600160a01b03878116604483015291821660648201526004810194909452601060848501526f5461726f7420426f72726f7761626c6560801b60a485015260c06024850152600660c4850152651895105493d560d21b60e48501529051911691636a030c119161010480830192600092919082900301818387803b158015610df257600080fd5b505af1158015610e06573d6000803e3d6000fd5b5050506001600160a01b03808616600081815260056020908152604091829020805460ff19166001179055858201516060808801516080808a01518a8601518751958a168652928916958501959095529387168386015262ffffff169082015291518785169550938816937f4c3ab495dc8ebd1b2f3232d7632e54411bc7e4d111475e7fbbd5547d9a28c4959281900390910190a450505050565b6000546001600160a01b03163314610ef6576040805162461bcd60e51b815260206004820152601360248201527215185c9bdd0e8815539055551213d492569151606a1b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9929181900390910190a15050565b6000610f64826112f0565b50506001600160a01b038281166000908152600560205260409020600201541615610fce576040805162461bcd60e51b81526020600482015260156024820152745461726f743a20414c52454144595f45584953545360581b604482015290519081900360640190fd5b600754604080516354bcd7ad60e01b81526001600160a01b03858116600483015260016024830152915191909216916354bcd7ad9160448083019260209291908290030181600087803b15801561102457600080fd5b505af1158015611038573d6000803e3d6000fd5b505050506040513d602081101561104e57600080fd5b5051604080516312974c5b60e21b815290519192506001600160a01b03831691634a5d316c9160048082019260009290919082900301818387803b15801561109557600080fd5b505af11580156110a9573d6000803e3d6000fd5b505050506110b6826113d0565b6001600160a01b03918216600090815260056020526040902060020180546001600160a01b0319169282169290921790915590565b600681815481106110f857fe5b6000918252602090912001546001600160a01b0316905081565b6007546001600160a01b031681565b6001546001600160a01b03163314611176576040805162461bcd60e51b815260206004820152601360248201527215185c9bdd0e8815539055551213d492569151606a1b604482015290519081900360640190fd5b60008054600180546001600160a01b038082166001600160a01b031980861682179687905590921690925560408051938316808552949092166020840152815190927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92908290030190a1604080516001600160a01b03831681526000602082015281517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9929181900390910190a15050565b6002546001600160a01b0316331461127e576040805162461bcd60e51b815260206004820152601360248201527215185c9bdd0e8815539055551213d492569151606a1b604482015290519081900360640190fd5b600480546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517f324bacfad26225895fcf55780481bec4ce49013c92500fa1c25626ff43fbf661929181900390910190a15050565b6000546001600160a01b031681565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561132c57600080fd5b505afa158015611340573d6000803e3d6000fd5b505050506040513d602081101561135657600080fd5b50516040805163d21220a760e01b815290519193506001600160a01b0385169163d21220a791600480820192602092909190829003018186803b15801561139c57600080fd5b505afa1580156113b0573d6000803e3d6000fd5b505050506040513d60208110156113c657600080fd5b5051919391925050565b6001600160a01b038116600090815260056020526040902054610100900462ffffff16156113fd576114f9565b60068054600181810183557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b038086166001600160a01b031992831681179093556040805160a0810182526000808252965462ffffff90811660208381019182528385018a8152606085018b8152608086018c8152998c526005909252949099209251835491519451861664010000000002640100000000600160c01b0319959093166101000263ffffff001991151560ff199093169290921716179290921691909117815594519385018054948216948316949094179093559051600290930180549390921692169190911790555b50565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091529056fe5461726f743a20434f4c4c41544552414c495a41424c455f4e4f545f43524541544544a265627a7a72315820e81859984e600a5321c605372831941a3c99e774148db86661dba8effe9b5e7964736f6c634300051000320000000000000000000000001bb4e4fc22b4e2470a05b60c2943f88b832cea100000000000000000000000001e6bf02f5bad0a8aa93df20955feff295d97f96900000000000000000000000030406961696644e8df0ab0acb7ab4ad1b955dd2400000000000000000000000017abab9ad820ad76f45da92ef0a5c5611c0a147b0000000000000000000000000a3b938d51f1b6d7bf960a0cb6ac9f1154d0008c
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001bb4e4fc22b4e2470a05b60c2943f88b832cea100000000000000000000000001e6bf02f5bad0a8aa93df20955feff295d97f96900000000000000000000000030406961696644e8df0ab0acb7ab4ad1b955dd2400000000000000000000000017abab9ad820ad76f45da92ef0a5c5611c0a147b0000000000000000000000000a3b938d51f1b6d7bf960a0cb6ac9f1154d0008c
-----Decoded View---------------
Arg [0] : _admin (address): 0x1bb4e4Fc22B4E2470A05b60c2943f88B832cea10
Arg [1] : _reservesAdmin (address): 0x1E6bF02f5BAD0a8Aa93df20955FEfF295D97F969
Arg [2] : _bDeployer (address): 0x30406961696644E8df0aB0acb7Ab4Ad1b955Dd24
Arg [3] : _cDeployer (address): 0x17abAb9AD820Ad76F45dA92eF0A5C5611C0A147b
Arg [4] : _tarotPriceOracle (address): 0x0A3B938d51F1b6d7bf960A0Cb6Ac9f1154D0008c
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000001bb4e4fc22b4e2470a05b60c2943f88b832cea10
Arg [1] : 0000000000000000000000001e6bf02f5bad0a8aa93df20955feff295d97f969
Arg [2] : 00000000000000000000000030406961696644e8df0ab0acb7ab4ad1b955dd24
Arg [3] : 00000000000000000000000017abab9ad820ad76f45da92ef0a5c5611c0a147b
Arg [4] : 0000000000000000000000000a3b938d51f1b6d7bf960a0cb6ac9f1154d0008c
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.