Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Pool
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
import {Util} from "./Util.sol";
import {ERC20} from "./ERC20.sol";
import {IERC20} from "./interfaces/IERC20.sol";
import {IOracle} from "./interfaces/IOracle.sol";
import {IRateModel} from "./interfaces/IRateModel.sol";
contract Pool is Util, ERC20 {
error CapReached();
error BorrowTooSmall();
error NotInEmergency();
error UtilizationTooHigh();
IERC20 public immutable asset;
IRateModel public rateModel;
IOracle public oracle;
bool public emergencyActive;
uint256 public borrowMin;
uint256 public liquidationFactor;
uint256 public amountCap;
uint256 public lastUpdate;
uint256 public index = 1e18;
uint256 public totalBorrow;
event FileInt(bytes32 indexed what, uint256 data);
event FileAddress(bytes32 indexed what, address data);
event Deposit(address indexed who, address indexed usr, uint256 amt, uint256 sha);
event Withdraw(address indexed who, address indexed usr, uint256 amt, uint256 sha);
event Borrow(address indexed who, uint256 amt, uint256 bor);
event Repay(address indexed who, uint256 amt, uint256 bor);
event Loss(address indexed who, uint256 amt, uint256 amttre, uint256 amtava);
constructor(
address _asset,
address _rateModel,
address _oracle,
uint256 _borrowMin,
uint256 _liquidationFactor,
uint256 _amountCap
)
ERC20(
string(abi.encodePacked("Rodeo Interest Bearing ", IERC20(_asset).name())),
string(abi.encodePacked("rib", IERC20(_asset).symbol())),
IERC20(_asset).decimals()
)
{
asset = IERC20(_asset);
rateModel = IRateModel(_rateModel);
oracle = IOracle(_oracle);
borrowMin = _borrowMin;
liquidationFactor = _liquidationFactor;
amountCap = _amountCap;
lastUpdate = block.timestamp;
exec[msg.sender] = true;
}
function file(bytes32 what, uint256 data) external auth {
if (what == "paused") paused = data == 1;
if (what == "emergency") emergencyActive = data == 1;
if (what == "borrowMin") borrowMin = data;
if (what == "liquidationFactor") liquidationFactor = data;
if (what == "amountCap") amountCap = data;
emit FileInt(what, data);
}
function file(bytes32 what, address data) external auth {
if (what == "exec") exec[data] = !exec[data];
if (what == "rateModel") rateModel = IRateModel(data);
if (what == "oracle") oracle = IOracle(data);
emit FileAddress(what, data);
}
// Supply asset for lending
function mint(uint256 amt, address usr) external loop live {
update();
uint256 totalLiquidity = getTotalLiquidity();
if (totalLiquidity + amt > amountCap) revert CapReached();
uint256 sha = amt;
if (totalLiquidity > 0) {
sha = amt * totalSupply / totalLiquidity;
} else {
sha -= 1e6;
_mint(0x000000000000000000000000000000000000dEaD, 1e6);
}
pull(asset, msg.sender, amt);
_mint(usr, sha);
emit Deposit(msg.sender, usr, amt, sha);
}
// Withdraw supplied asset
function burn(uint256 sha, address usr) external loop live {
update();
uint256 amt = sha * getTotalLiquidity() / totalSupply;
if (balanceOf[msg.sender] < sha) revert InsufficientBalance();
if (asset.balanceOf(address(this)) < amt) revert UtilizationTooHigh();
_burn(msg.sender, sha);
push(asset, usr, amt);
emit Withdraw(msg.sender, usr, amt, sha);
}
// Borrow from pool (called by Investor)
function borrow(uint256 amt) external live auth returns (uint256) {
update();
if (amt < borrowMin) revert BorrowTooSmall();
if (asset.balanceOf(address(this)) < amt) revert UtilizationTooHigh();
uint256 bor = amt * 1e18 / index;
totalBorrow += bor;
push(asset, msg.sender, amt);
emit Borrow(msg.sender, amt, bor);
return bor;
}
// Repay pool (called by Investor)
function repay(uint256 bor) external live auth returns (uint256) {
update();
uint256 amt = bor * index / 1e18;
totalBorrow -= bor;
pull(asset, msg.sender, amt);
emit Repay(msg.sender, amt, bor);
return amt;
}
// Levy allows an admin to collect some of the protocol reserves
function levy(uint256 sha) external live auth {
update();
uint256 amt = sha * getTotalLiquidity() / totalSupply;
_burn(address(0), sha);
push(asset, msg.sender, amt);
emit Withdraw(msg.sender, address(0), amt, sha);
}
// A minimal `burn()` to be used by users in case of emergency / frontend not working
function emergency() external loop {
if (!emergencyActive) revert NotInEmergency();
uint256 sha = balanceOf[msg.sender];
uint256 amt = sha * getTotalLiquidity() / totalSupply;
if (asset.balanceOf(address(this)) < amt) revert UtilizationTooHigh();
_burn(msg.sender, sha);
push(asset, msg.sender, amt);
emit Withdraw(msg.sender, msg.sender, amt, sha);
}
// Accrue interest to index
function update() public {
uint256 time = block.timestamp - lastUpdate;
if (time > 0) {
uint256 utilization = getUtilization();
index += (index * rateModel.rate(utilization) * time) / 1e18;
lastUpdate = block.timestamp;
}
}
function getUtilization() public view returns (uint256) {
uint256 totalLiquidity = getTotalLiquidity();
if (totalLiquidity == 0) return 0;
return getTotalBorrow() * 1e18 / totalLiquidity;
}
function getTotalLiquidity() public view returns (uint256) {
return asset.balanceOf(address(this)) + getTotalBorrow();
}
function getTotalBorrow() public view returns (uint256) {
return totalBorrow * index / 1e18;
}
function getUpdatedIndex() public view returns (uint256) {
uint256 time = block.timestamp - lastUpdate;
uint256 utilization = getUtilization();
return index + ((index * rateModel.rate(utilization) * time) / 1e18);
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
import {IERC20} from "./interfaces/IERC20.sol";
contract Util {
error Paused();
error NoReentering();
error Unauthorized();
error TransferFailed();
bool internal entered;
bool public paused;
mapping(address => bool) public exec;
modifier loop() {
if (entered) revert NoReentering();
entered = true;
_;
entered = false;
}
modifier live() {
if (paused) revert Paused();
_;
}
modifier auth() {
if (!exec[msg.sender]) revert Unauthorized();
_;
}
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
// from OZ SignedMath
function abs(int256 n) internal pure returns (uint256) {
unchecked {
return uint256(n >= 0 ? n : -n);
}
}
// from OZ Math
function sqrt(uint256 a) internal pure returns (uint256) {
if (a == 0) return 0;
uint256 result = 1 << (log2(a) >> 1);
unchecked {
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
return min(result, a / result);
}
}
function log2(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 128;
}
if (value >> 64 > 0) {
value >>= 64;
result += 64;
}
if (value >> 32 > 0) {
value >>= 32;
result += 32;
}
if (value >> 16 > 0) {
value >>= 16;
result += 16;
}
if (value >> 8 > 0) {
value >>= 8;
result += 8;
}
if (value >> 4 > 0) {
value >>= 4;
result += 4;
}
if (value >> 2 > 0) {
value >>= 2;
result += 2;
}
if (value >> 1 > 0) result += 1;
}
return result;
}
function pow(uint256 x, uint256 y) internal pure returns (uint256) {
if (y == 0) return 1e18;
if (x == 0) return 0;
require(x >> 255 == 0, "xoob");
int256 x_int256 = int256(x);
require(y < uint256(2 ** 254) / 1e20, "yoob");
int256 y_int256 = int256(y);
int256 logx_times_y = _ln(x_int256) * y_int256 / 1e18;
require(-41e18 <= logx_times_y && logx_times_y <= 130e18, "poob");
return uint256(_exp(logx_times_y));
}
int256 constant x0 = 128000000000000000000; // 2ˆ7
int256 constant a0 = 38877084059945950922200000000000000000000000000000000000; // eˆ(x0) (no decimals)
int256 constant x1 = 64000000000000000000; // 2ˆ6
int256 constant a1 = 6235149080811616882910000000; // eˆ(x1) (no decimals)
int256 constant x2 = 3200000000000000000000; // 2ˆ5
int256 constant a2 = 7896296018268069516100000000000000; // eˆ(x2)
int256 constant x3 = 1600000000000000000000; // 2ˆ4
int256 constant a3 = 888611052050787263676000000; // eˆ(x3)
int256 constant x4 = 800000000000000000000; // 2ˆ3
int256 constant a4 = 298095798704172827474000; // eˆ(x4)
int256 constant x5 = 400000000000000000000; // 2ˆ2
int256 constant a5 = 5459815003314423907810; // eˆ(x5)
int256 constant x6 = 200000000000000000000; // 2ˆ1
int256 constant a6 = 738905609893065022723; // eˆ(x6)
int256 constant x7 = 100000000000000000000; // 2ˆ0
int256 constant a7 = 271828182845904523536; // eˆ(x7)
int256 constant x8 = 50000000000000000000; // 2ˆ-1
int256 constant a8 = 164872127070012814685; // eˆ(x8)
int256 constant x9 = 25000000000000000000; // 2ˆ-2
int256 constant a9 = 128402541668774148407; // eˆ(x9)
int256 constant x10 = 12500000000000000000; // 2ˆ-3
int256 constant a10 = 113314845306682631683; // eˆ(x10)
int256 constant x11 = 6250000000000000000; // 2ˆ-4
int256 constant a11 = 106449445891785942956; // eˆ(x11)
function _ln(int256 a) private pure returns (int256) {
if (a < 1e18) return -_ln((1e18 * 1e18) / a);
int256 sum = 0;
if (a >= a0 * 1e18) {
a /= a0;
sum += x0;
}
if (a >= a1 * 1e18) {
a /= a1;
sum += x1;
}
sum *= 100;
a *= 100;
if (a >= a2) {
a = (a * 1e20) / a2;
sum += x2;
}
if (a >= a3) {
a = (a * 1e20) / a3;
sum += x3;
}
if (a >= a4) {
a = (a * 1e20) / a4;
sum += x4;
}
if (a >= a5) {
a = (a * 1e20) / a5;
sum += x5;
}
if (a >= a6) {
a = (a * 1e20) / a6;
sum += x6;
}
if (a >= a7) {
a = (a * 1e20) / a7;
sum += x7;
}
if (a >= a8) {
a = (a * 1e20) / a8;
sum += x8;
}
if (a >= a9) {
a = (a * 1e20) / a9;
sum += x9;
}
if (a >= a10) {
a = (a * 1e20) / a10;
sum += x10;
}
if (a >= a11) {
a = (a * 1e20) / a11;
sum += x11;
}
int256 z = ((a - 1e20) * 1e20) / (a + 1e20);
int256 z_squared = (z * z) / 1e20;
int256 num = z;
int256 seriesSum = num;
num = (num * z_squared) / 1e20;
seriesSum += num / 3;
num = (num * z_squared) / 1e20;
seriesSum += num / 5;
num = (num * z_squared) / 1e20;
seriesSum += num / 7;
num = (num * z_squared) / 1e20;
seriesSum += num / 9;
num = (num * z_squared) / 1e20;
seriesSum += num / 11;
seriesSum *= 2;
return (sum + seriesSum) / 100;
}
function _exp(int256 x) internal pure returns (int256) {
require(x >= -41e18 && x <= 130e18, "ie");
if (x < 0) return ((1e18 * 1e18) / _exp(-x));
int256 firstAN;
if (x >= x0) {
x -= x0;
firstAN = a0;
} else if (x >= x1) {
x -= x1;
firstAN = a1;
} else {
firstAN = 1;
}
x *= 100;
int256 product = 1e20;
if (x >= x2) {
x -= x2;
product = (product * a2) / 1e20;
}
if (x >= x3) {
x -= x3;
product = (product * a3) / 1e20;
}
if (x >= x4) {
x -= x4;
product = (product * a4) / 1e20;
}
if (x >= x5) {
x -= x5;
product = (product * a5) / 1e20;
}
if (x >= x6) {
x -= x6;
product = (product * a6) / 1e20;
}
if (x >= x7) {
x -= x7;
product = (product * a7) / 1e20;
}
if (x >= x8) {
x -= x8;
product = (product * a8) / 1e20;
}
if (x >= x9) {
x -= x9;
product = (product * a9) / 1e20;
}
int256 seriesSum = 1e20;
int256 term;
term = x;
seriesSum += term;
term = ((term * x) / 1e20) / 2;
seriesSum += term;
term = ((term * x) / 1e20) / 3;
seriesSum += term;
term = ((term * x) / 1e20) / 4;
seriesSum += term;
term = ((term * x) / 1e20) / 5;
seriesSum += term;
term = ((term * x) / 1e20) / 6;
seriesSum += term;
term = ((term * x) / 1e20) / 7;
seriesSum += term;
term = ((term * x) / 1e20) / 8;
seriesSum += term;
term = ((term * x) / 1e20) / 9;
seriesSum += term;
term = ((term * x) / 1e20) / 10;
seriesSum += term;
term = ((term * x) / 1e20) / 11;
seriesSum += term;
term = ((term * x) / 1e20) / 12;
seriesSum += term;
return (((product * seriesSum) / 1e20) * firstAN) / 100;
}
function pull(IERC20 asset, address usr, uint256 amt) internal {
if (amt == 0) return;
if (!asset.transferFrom(usr, address(this), amt)) revert TransferFailed();
}
function pullTo(IERC20 asset, address usr, address to, uint256 amt) internal {
if (amt == 0) return;
if (!asset.transferFrom(usr, to, amt)) revert TransferFailed();
}
function push(IERC20 asset, address usr, uint256 amt) internal {
if (amt == 0) return;
if (!asset.transfer(usr, amt)) revert TransferFailed();
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
contract ERC20 {
error InsufficientBalance();
error InsufficientAllowance();
string public name;
string public symbol;
uint8 public immutable decimals;
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
event Approval(address indexed src, address indexed guy, uint256 amt);
event Transfer(address indexed src, address indexed dst, uint256 amt);
constructor(string memory _name, string memory _symbol, uint8 _decimals) {
name = _name;
symbol = _symbol;
decimals = _decimals;
}
function transfer(address dst, uint256 amt) external returns (bool) {
return transferFrom(msg.sender, dst, amt);
}
function transferFrom(address src, address dst, uint256 amt) public returns (bool) {
uint256 bal = balanceOf[src];
uint256 all = allowance[src][msg.sender];
if (bal < amt) revert InsufficientBalance();
if (src != msg.sender && all != type(uint256).max) {
if (all < amt) revert InsufficientAllowance();
allowance[src][msg.sender] = all - amt;
}
balanceOf[src] = bal - amt;
balanceOf[dst] = balanceOf[dst] + amt;
emit Transfer(src, dst, amt);
return true;
}
function approve(address usr, uint256 amt) external returns (bool) {
allowance[msg.sender][usr] = amt;
emit Approval(msg.sender, usr, amt);
return true;
}
function _mint(address usr, uint256 amt) internal {
balanceOf[usr] = balanceOf[usr] + amt;
totalSupply = totalSupply + amt;
emit Transfer(address(0), usr, amt);
}
function _burn(address usr, uint256 amt) internal {
uint256 bal = balanceOf[usr];
if (bal < amt) revert InsufficientBalance();
balanceOf[usr] = bal - amt;
totalSupply = totalSupply - amt;
emit Transfer(usr, address(0), amt);
}
}
contract Domain {
bytes32 private constant DOMAIN_SEPARATOR_SIGNATURE_HASH =
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
string private constant EIP191_PREFIX_FOR_EIP712_STRUCTURED_DATA = "\x19\x01";
bytes32 private immutable _DOMAIN_SEPARATOR;
uint256 private immutable DOMAIN_SEPARATOR_CHAIN_ID;
function _calculateDomainSeparator(uint256 chainId) private view returns (bytes32) {
return keccak256(abi.encode(DOMAIN_SEPARATOR_SIGNATURE_HASH, "Rodeo", "1", chainId, address(this)));
}
constructor() {
_DOMAIN_SEPARATOR = _calculateDomainSeparator(DOMAIN_SEPARATOR_CHAIN_ID = block.chainid);
}
function _domainSeparator() internal view returns (bytes32) {
return block.chainid == DOMAIN_SEPARATOR_CHAIN_ID ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(block.chainid);
}
function _getDigest(bytes32 dataHash) internal view returns (bytes32 digest) {
digest = keccak256(abi.encodePacked(EIP191_PREFIX_FOR_EIP712_STRUCTURED_DATA, _domainSeparator(), dataHash));
}
}
contract ERC20Permit is ERC20, Domain {
bytes32 private constant PERMIT_SIGNATURE_HASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
mapping(address => uint256) public nonces;
constructor(string memory _name, string memory _symbol, uint8 _decimals) ERC20(_name, _symbol, _decimals) {}
function DOMAIN_SEPARATOR() external view returns (bytes32) {
return _domainSeparator();
}
function permit(address owr, address usr, uint256 val, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external {
require(owr != address(0), "ERC20: Owner cannot be 0");
require(block.timestamp < deadline, "ERC20: Expired");
require(
ecrecover(
_getDigest(keccak256(abi.encode(PERMIT_SIGNATURE_HASH, owr, usr, val, nonces[owr]++, deadline))),
v,
r,
s
) == owr,
"ERC20: Invalid Signature"
);
allowance[owr][usr] = val;
emit Approval(owr, usr, val);
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
interface IERC20 {
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 (uint256);
function balanceOf(address) external view returns (uint256);
function allowance(address, address) external view returns (uint256);
function approve(address, uint256) external returns (bool);
function transfer(address, uint256) external returns (bool);
function transferFrom(address, address, uint256) external returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
interface IOracle {
function latestAnswer() external view returns (int256);
function decimals() external view returns (uint8);
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
interface IRateModel {
function rate(uint256) external view returns (uint256);
function kink() external view returns (uint256);
function base() external view returns (uint256);
function low() external view returns (uint256);
function high() external view returns (uint256);
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "london",
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_asset","type":"address"},{"internalType":"address","name":"_rateModel","type":"address"},{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"uint256","name":"_borrowMin","type":"uint256"},{"internalType":"uint256","name":"_liquidationFactor","type":"uint256"},{"internalType":"uint256","name":"_amountCap","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BorrowTooSmall","type":"error"},{"inputs":[],"name":"CapReached","type":"error"},{"inputs":[],"name":"InsufficientAllowance","type":"error"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"NoReentering","type":"error"},{"inputs":[],"name":"NotInEmergency","type":"error"},{"inputs":[],"name":"Paused","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UtilizationTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bor","type":"uint256"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"who","type":"address"},{"indexed":true,"internalType":"address","name":"usr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sha","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"address","name":"data","type":"address"}],"name":"FileAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"data","type":"uint256"}],"name":"FileInt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amttre","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amtava","type":"uint256"}],"name":"Loss","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bor","type":"uint256"}],"name":"Repay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"who","type":"address"},{"indexed":true,"internalType":"address","name":"usr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sha","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"borrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"borrowMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sha","type":"uint256"},{"internalType":"address","name":"usr","type":"address"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exec","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"uint256","name":"data","type":"uint256"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"address","name":"data","type":"address"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTotalBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUpdatedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUtilization","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"index","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"sha","type":"uint256"}],"name":"levy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidationFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"address","name":"usr","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateModel","outputs":[{"internalType":"contract IRateModel","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"bor","type":"uint256"}],"name":"repay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"update","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c0604052670de0b6b3a7640000600d553480156200001d57600080fd5b5060405162001fb938038062001fb9833981016040819052620000409162000268565b856001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156200007f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620000a991908101906200030a565b604051602001620000bb9190620003c2565b604051602081830303815290604052866001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000109573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200013391908101906200030a565b60405160200162000145919062000409565b604051602081830303815290604052876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000193573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b9919062000436565b6002620001c78482620004f1565b506003620001d68382620004f1565b5060ff1660805250506001600160a01b0395861660a052600780546001600160a01b0319908116968816969096179055600880549095169390951692909217909255600991909155600a55600b5542600c55336000908152600160208190526040909120805460ff19169091179055620005bd565b80516001600160a01b03811681146200026357600080fd5b919050565b60008060008060008060c087890312156200028257600080fd5b6200028d876200024b565b95506200029d602088016200024b565b9450620002ad604088016200024b565b9350606087015192506080870151915060a087015190509295509295509295565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000301578181015183820152602001620002e7565b50506000910152565b6000602082840312156200031d57600080fd5b81516001600160401b03808211156200033557600080fd5b818401915084601f8301126200034a57600080fd5b8151818111156200035f576200035f620002ce565b604051601f8201601f19908116603f011681019083821181831017156200038a576200038a620002ce565b81604052828152876020848701011115620003a457600080fd5b620003b7836020830160208801620002e4565b979650505050505050565b7f526f64656f20496e7465726573742042656172696e6720000000000000000000815260008251620003fc816017850160208701620002e4565b9190910160170192915050565b623934b160e91b81526000825162000429816003850160208701620002e4565b9190910160030192915050565b6000602082840312156200044957600080fd5b815160ff811681146200045b57600080fd5b9392505050565b600181811c908216806200047757607f821691505b6020821081036200049857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004ec57600081815260208120601f850160051c81016020861015620004c75750805b601f850160051c820191505b81811015620004e857828155600101620004d3565b5050505b505050565b81516001600160401b038111156200050d576200050d620002ce565b62000525816200051e845462000462565b846200049e565b602080601f8311600181146200055d5760008415620005445750858301515b600019600386901b1c1916600185901b178555620004e8565b600085815260208120601f198616915b828110156200058e578886015182559484019460019091019084016200056d565b5085821015620005ad5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05161199062000629600039600081816102f60152818161083a0152818161095f01528181610bc101528181610ce701528181610edb01528181610fae015281816110bb01528181611154015281816113b201526114530152600061029901526119906000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80637eb711311161011a578063a9059cbb116100ad578063d4e8be831161007c578063d4e8be8314610443578063dd62ed3e14610456578063e37f8a7e14610481578063eddaa3ab14610489578063fcd3533c1461049d57600080fd5b8063a9059cbb1461040c578063c04637111461041f578063c5ebeaec14610428578063caa6fea41461043b57600080fd5b806399a773cc116100e957806399a773cc146103d557806399ba3136146103de578063a1088459146103f1578063a2e620451461040457600080fd5b80637eb71131146103a95780638285ef40146103b157806394bf804d146103ba57806395d89b41146103cd57600080fd5b806335c7e9251161019d5780634bb700961161016c5780634bb70096146103395780635c975abb146103415780636bb6126e1461035357806370a08231146103765780637dc0d1d01461039657600080fd5b806335c7e925146102d6578063371fd8e6146102de57806338d52e0f146102f157806343528dda1461033057600080fd5b80632986c0e5116101d95780632986c0e51461027657806329ae81141461027f578063313ce56714610294578063352ade55146102cd57600080fd5b806306fdde031461020b578063095ea7b31461022957806318160ddd1461024c57806323b872dd14610263575b600080fd5b6102136104b0565b60405161022091906116f9565b60405180910390f35b61023c61023736600461175e565b61053e565b6040519015158152602001610220565b61025560045481565b604051908152602001610220565b61023c610271366004611788565b6105ab565b610255600d5481565b61029261028d3660046117c4565b61070a565b005b6102bb7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610220565b610255600a5481565b61025561081b565b6102556102ec3660046117e6565b6108bc565b6103187f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610220565b610255600b5481565b6102556109c9565b60005461023c90610100900460ff1681565b61023c6103613660046117ff565b60016020526000908152604090205460ff1681565b6102556103843660046117ff565b60056020526000908152604090205481565b600854610318906001600160a01b031681565b610255610a95565b610255600e5481565b6102926103c836600461181a565b610add565b610213610c47565b61025560095481565b6102926103ec3660046117e6565b610c54565b600754610318906001600160a01b031681565b610292610d50565b61023c61041a36600461175e565b610e2c565b610255600c5481565b6102556104363660046117e6565b610e40565b61029261100c565b61029261045136600461181a565b6111c5565b610255610464366004611846565b600660209081526000928352604080842090915290825290205481565b6102556112c1565b60085461023c90600160a01b900460ff1681565b6102926104ab36600461181a565b6112e6565b600280546104bd90611870565b80601f01602080910402602001604051908101604052809291908181526020018280546104e990611870565b80156105365780601f1061050b57610100808354040283529160200191610536565b820191906000526020600020905b81548152906001019060200180831161051957829003601f168201915b505050505081565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105999086815260200190565b60405180910390a35060015b92915050565b6001600160a01b03831660009081526005602090815260408083205460068352818420338552909252822054838210156105f857604051631e9acf1760e31b815260040160405180910390fd5b6001600160a01b038616331480159061061357506000198114155b156106685783811015610639576040516313be252b60e01b815260040160405180910390fd5b61064384826118c0565b6001600160a01b03871660009081526006602090815260408083203384529091529020555b61067284836118c0565b6001600160a01b0380881660009081526005602052604080822093909355908716815220546106a29085906118d3565b6001600160a01b0380871660008181526005602052604090819020939093559151908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906106f69088815260200190565b60405180910390a350600195945050505050565b3360009081526001602052604090205460ff16610739576040516282b42960e81b815260040160405180910390fd5b81651c185d5cd95960d21b0361075e576000805461ff00191660018314610100021790555b8168656d657267656e637960b81b0361078a576008805460ff60a01b191660018314600160a01b021790555b81683137b93937bba6b4b760b91b036107a35760098190555b81703634b8bab4b230ba34b7b72330b1ba37b960791b036107c457600a8190555b81680616d6f756e744361760bc1b036107dd57600b8190555b817f75b666bb5982c26146549f340e3f4c827469b18602d2bf483f21ed8a43f67e988260405161080f91815260200190565b60405180910390a25050565b60006108256112c1565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ad91906118e6565b6108b791906118d3565b905090565b60008054610100900460ff16156108e6576040516313d0ff5960e31b815260040160405180910390fd5b3360009081526001602052604090205460ff16610915576040516282b42960e81b815260040160405180910390fd5b61091d610d50565b6000670de0b6b3a7640000600d548461093691906118ff565b6109409190611916565b905082600e600082825461095491906118c0565b9091555061098590507f000000000000000000000000000000000000000000000000000000000000000033836114ce565b604080518281526020810185905233917f77c6871227e5d2dec8dadd5354f78453203e22e669cd0ec4c19d9a8c5edb31d091015b60405180910390a290505b919050565b600080600c54426109da91906118c0565b905060006109e6610a95565b6007546040516373f7356b60e11b815260048101839052919250670de0b6b3a76400009184916001600160a01b03169063e7ee6ad690602401602060405180830381865afa158015610a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6091906118e6565b600d54610a6d91906118ff565b610a7791906118ff565b610a819190611916565b600d54610a8e91906118d3565b9250505090565b600080610aa061081b565b905080600003610ab257600091505090565b80610abb6112c1565b610acd90670de0b6b3a76400006118ff565b610ad79190611916565b91505090565b60005460ff1615610b015760405163cbece43f60e01b815260040160405180910390fd5b6000805460ff191660011790819055610100900460ff1615610b36576040516313d0ff5960e31b815260040160405180910390fd5b610b3e610d50565b6000610b4861081b565b600b54909150610b5884836118d3565b1115610b7757604051636bf4c8e960e11b815260040160405180910390fd5b828115610b9e578160045485610b8d91906118ff565b610b979190611916565b9050610bbc565b610bab620f4240826118c0565b9050610bbc61dead620f4240611577565b610be77f000000000000000000000000000000000000000000000000000000000000000033866114ce565b610bf18382611577565b60408051858152602081018390526001600160a01b0385169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a350506000805460ff191690555050565b600380546104bd90611870565b600054610100900460ff1615610c7d576040516313d0ff5960e31b815260040160405180910390fd5b3360009081526001602052604090205460ff16610cac576040516282b42960e81b815260040160405180910390fd5b610cb4610d50565b6000600454610cc161081b565b610ccb90846118ff565b610cd59190611916565b9050610ce2600083611603565b610d0d7f000000000000000000000000000000000000000000000000000000000000000033836116b7565b604080518281526020810184905260009133917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb56791015b60405180910390a35050565b6000600c5442610d6091906118c0565b90508015610e29576000610d72610a95565b6007546040516373f7356b60e11b815260048101839052919250670de0b6b3a76400009184916001600160a01b03169063e7ee6ad690602401602060405180830381865afa158015610dc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dec91906118e6565b600d54610df991906118ff565b610e0391906118ff565b610e0d9190611916565b600d6000828254610e1e91906118d3565b909155505042600c55505b50565b6000610e393384846105ab565b9392505050565b60008054610100900460ff1615610e6a576040516313d0ff5960e31b815260040160405180910390fd5b3360009081526001602052604090205460ff16610e99576040516282b42960e81b815260040160405180910390fd5b610ea1610d50565b600954821015610ec457604051637139da2360e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4e91906118e6565b1015610f6d57604051633ae100b760e11b815260040160405180910390fd5b600d54600090610f8584670de0b6b3a76400006118ff565b610f8f9190611916565b905080600e6000828254610fa391906118d3565b90915550610fd490507f000000000000000000000000000000000000000000000000000000000000000033856116b7565b604080518481526020810183905233917fe1979fe4c35e0cef342fef5668e2c8e7a7e9f5d5d1ca8fee0ac6c427fa4153af91016109b9565b60005460ff16156110305760405163cbece43f60e01b815260040160405180910390fd5b6000805460ff19166001179055600854600160a01b900460ff1661106757604051633b1cf39760e21b815260040160405180910390fd5b3360009081526005602052604081205460045490919061108561081b565b61108f90846118ff565b6110999190611916565b6040516370a0823160e01b815230600482015290915081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611102573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112691906118e6565b101561114557604051633ae100b760e11b815260040160405180910390fd5b61114f3383611603565b61117a7f000000000000000000000000000000000000000000000000000000000000000033836116b7565b6040805182815260208101849052339182917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567910160405180910390a350506000805460ff19169055565b3360009081526001602052604090205460ff166111f4576040516282b42960e81b815260040160405180910390fd5b81636578656360e01b0361122b576001600160a01b0381166000908152600160205260409020805460ff19811660ff909116151790555b81681c985d19535bd9195b60ba1b0361125a57600780546001600160a01b0319166001600160a01b0383161790555b81656f7261636c6560d01b0361128657600880546001600160a01b0319166001600160a01b0383161790555b6040516001600160a01b038216815282907f41a50316b758972a692a69178de3d99c3138a652f5213364ee8eff829f22048a9060200161080f565b6000670de0b6b3a7640000600d54600e546112dc91906118ff565b6108b79190611916565b60005460ff161561130a5760405163cbece43f60e01b815260040160405180910390fd5b6000805460ff191660011790819055610100900460ff161561133f576040516313d0ff5960e31b815260040160405180910390fd5b611347610d50565b600060045461135461081b565b61135e90856118ff565b6113689190611916565b3360009081526005602052604090205490915083111561139b57604051631e9acf1760e31b815260040160405180910390fd5b6040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611401573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142591906118e6565b101561144457604051633ae100b760e11b815260040160405180910390fd5b61144e3384611603565b6114797f000000000000000000000000000000000000000000000000000000000000000083836116b7565b60408051828152602081018590526001600160a01b0384169133917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567910160405180910390a350506000805460ff1916905550565b806000036114db57505050565b6040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af1158015611531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115559190611938565b611572576040516312171d8360e31b815260040160405180910390fd5b505050565b6001600160a01b03821660009081526005602052604090205461159b9082906118d3565b6001600160a01b0383166000908152600560205260409020556004546115c29082906118d3565b6004556040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610d44565b6001600160a01b0382166000908152600560205260409020548181101561163d57604051631e9acf1760e31b815260040160405180910390fd5b61164782826118c0565b6001600160a01b03841660009081526005602052604090205560045461166e9083906118c0565b6004556040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b806000036116c457505050565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401611512565b600060208083528351808285015260005b818110156117265785810183015185820160400152820161170a565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146109c457600080fd5b6000806040838503121561177157600080fd5b61177a83611747565b946020939093013593505050565b60008060006060848603121561179d57600080fd5b6117a684611747565b92506117b460208501611747565b9150604084013590509250925092565b600080604083850312156117d757600080fd5b50508035926020909101359150565b6000602082840312156117f857600080fd5b5035919050565b60006020828403121561181157600080fd5b610e3982611747565b6000806040838503121561182d57600080fd5b8235915061183d60208401611747565b90509250929050565b6000806040838503121561185957600080fd5b61186283611747565b915061183d60208401611747565b600181811c9082168061188457607f821691505b6020821081036118a457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105a5576105a56118aa565b808201808211156105a5576105a56118aa565b6000602082840312156118f857600080fd5b5051919050565b80820281158282048414176105a5576105a56118aa565b60008261193357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561194a57600080fd5b81518015158114610e3957600080fdfea264697066735822122074e2e8d1decb517cdd816b284b15b2fba5e87449d25862e707592e157db4a04464736f6c63430008110033000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc8000000000000000000000000627ea8812ef561d6ad9308d2a63e36901f51e3e500000000000000000000000050834f3163758fcc1df9973b6e91f0f0f0434ad300000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000d2f13f7789f000000000000000000000000000000000000000000000000000000000002540be400
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c80637eb711311161011a578063a9059cbb116100ad578063d4e8be831161007c578063d4e8be8314610443578063dd62ed3e14610456578063e37f8a7e14610481578063eddaa3ab14610489578063fcd3533c1461049d57600080fd5b8063a9059cbb1461040c578063c04637111461041f578063c5ebeaec14610428578063caa6fea41461043b57600080fd5b806399a773cc116100e957806399a773cc146103d557806399ba3136146103de578063a1088459146103f1578063a2e620451461040457600080fd5b80637eb71131146103a95780638285ef40146103b157806394bf804d146103ba57806395d89b41146103cd57600080fd5b806335c7e9251161019d5780634bb700961161016c5780634bb70096146103395780635c975abb146103415780636bb6126e1461035357806370a08231146103765780637dc0d1d01461039657600080fd5b806335c7e925146102d6578063371fd8e6146102de57806338d52e0f146102f157806343528dda1461033057600080fd5b80632986c0e5116101d95780632986c0e51461027657806329ae81141461027f578063313ce56714610294578063352ade55146102cd57600080fd5b806306fdde031461020b578063095ea7b31461022957806318160ddd1461024c57806323b872dd14610263575b600080fd5b6102136104b0565b60405161022091906116f9565b60405180910390f35b61023c61023736600461175e565b61053e565b6040519015158152602001610220565b61025560045481565b604051908152602001610220565b61023c610271366004611788565b6105ab565b610255600d5481565b61029261028d3660046117c4565b61070a565b005b6102bb7f000000000000000000000000000000000000000000000000000000000000000681565b60405160ff9091168152602001610220565b610255600a5481565b61025561081b565b6102556102ec3660046117e6565b6108bc565b6103187f000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc881565b6040516001600160a01b039091168152602001610220565b610255600b5481565b6102556109c9565b60005461023c90610100900460ff1681565b61023c6103613660046117ff565b60016020526000908152604090205460ff1681565b6102556103843660046117ff565b60056020526000908152604090205481565b600854610318906001600160a01b031681565b610255610a95565b610255600e5481565b6102926103c836600461181a565b610add565b610213610c47565b61025560095481565b6102926103ec3660046117e6565b610c54565b600754610318906001600160a01b031681565b610292610d50565b61023c61041a36600461175e565b610e2c565b610255600c5481565b6102556104363660046117e6565b610e40565b61029261100c565b61029261045136600461181a565b6111c5565b610255610464366004611846565b600660209081526000928352604080842090915290825290205481565b6102556112c1565b60085461023c90600160a01b900460ff1681565b6102926104ab36600461181a565b6112e6565b600280546104bd90611870565b80601f01602080910402602001604051908101604052809291908181526020018280546104e990611870565b80156105365780601f1061050b57610100808354040283529160200191610536565b820191906000526020600020905b81548152906001019060200180831161051957829003601f168201915b505050505081565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105999086815260200190565b60405180910390a35060015b92915050565b6001600160a01b03831660009081526005602090815260408083205460068352818420338552909252822054838210156105f857604051631e9acf1760e31b815260040160405180910390fd5b6001600160a01b038616331480159061061357506000198114155b156106685783811015610639576040516313be252b60e01b815260040160405180910390fd5b61064384826118c0565b6001600160a01b03871660009081526006602090815260408083203384529091529020555b61067284836118c0565b6001600160a01b0380881660009081526005602052604080822093909355908716815220546106a29085906118d3565b6001600160a01b0380871660008181526005602052604090819020939093559151908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906106f69088815260200190565b60405180910390a350600195945050505050565b3360009081526001602052604090205460ff16610739576040516282b42960e81b815260040160405180910390fd5b81651c185d5cd95960d21b0361075e576000805461ff00191660018314610100021790555b8168656d657267656e637960b81b0361078a576008805460ff60a01b191660018314600160a01b021790555b81683137b93937bba6b4b760b91b036107a35760098190555b81703634b8bab4b230ba34b7b72330b1ba37b960791b036107c457600a8190555b81680616d6f756e744361760bc1b036107dd57600b8190555b817f75b666bb5982c26146549f340e3f4c827469b18602d2bf483f21ed8a43f67e988260405161080f91815260200190565b60405180910390a25050565b60006108256112c1565b6040516370a0823160e01b81523060048201527f000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc86001600160a01b0316906370a0823190602401602060405180830381865afa158015610889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ad91906118e6565b6108b791906118d3565b905090565b60008054610100900460ff16156108e6576040516313d0ff5960e31b815260040160405180910390fd5b3360009081526001602052604090205460ff16610915576040516282b42960e81b815260040160405180910390fd5b61091d610d50565b6000670de0b6b3a7640000600d548461093691906118ff565b6109409190611916565b905082600e600082825461095491906118c0565b9091555061098590507f000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc833836114ce565b604080518281526020810185905233917f77c6871227e5d2dec8dadd5354f78453203e22e669cd0ec4c19d9a8c5edb31d091015b60405180910390a290505b919050565b600080600c54426109da91906118c0565b905060006109e6610a95565b6007546040516373f7356b60e11b815260048101839052919250670de0b6b3a76400009184916001600160a01b03169063e7ee6ad690602401602060405180830381865afa158015610a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6091906118e6565b600d54610a6d91906118ff565b610a7791906118ff565b610a819190611916565b600d54610a8e91906118d3565b9250505090565b600080610aa061081b565b905080600003610ab257600091505090565b80610abb6112c1565b610acd90670de0b6b3a76400006118ff565b610ad79190611916565b91505090565b60005460ff1615610b015760405163cbece43f60e01b815260040160405180910390fd5b6000805460ff191660011790819055610100900460ff1615610b36576040516313d0ff5960e31b815260040160405180910390fd5b610b3e610d50565b6000610b4861081b565b600b54909150610b5884836118d3565b1115610b7757604051636bf4c8e960e11b815260040160405180910390fd5b828115610b9e578160045485610b8d91906118ff565b610b979190611916565b9050610bbc565b610bab620f4240826118c0565b9050610bbc61dead620f4240611577565b610be77f000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc833866114ce565b610bf18382611577565b60408051858152602081018390526001600160a01b0385169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a350506000805460ff191690555050565b600380546104bd90611870565b600054610100900460ff1615610c7d576040516313d0ff5960e31b815260040160405180910390fd5b3360009081526001602052604090205460ff16610cac576040516282b42960e81b815260040160405180910390fd5b610cb4610d50565b6000600454610cc161081b565b610ccb90846118ff565b610cd59190611916565b9050610ce2600083611603565b610d0d7f000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc833836116b7565b604080518281526020810184905260009133917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb56791015b60405180910390a35050565b6000600c5442610d6091906118c0565b90508015610e29576000610d72610a95565b6007546040516373f7356b60e11b815260048101839052919250670de0b6b3a76400009184916001600160a01b03169063e7ee6ad690602401602060405180830381865afa158015610dc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dec91906118e6565b600d54610df991906118ff565b610e0391906118ff565b610e0d9190611916565b600d6000828254610e1e91906118d3565b909155505042600c55505b50565b6000610e393384846105ab565b9392505050565b60008054610100900460ff1615610e6a576040516313d0ff5960e31b815260040160405180910390fd5b3360009081526001602052604090205460ff16610e99576040516282b42960e81b815260040160405180910390fd5b610ea1610d50565b600954821015610ec457604051637139da2360e11b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282907f000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc86001600160a01b0316906370a0823190602401602060405180830381865afa158015610f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4e91906118e6565b1015610f6d57604051633ae100b760e11b815260040160405180910390fd5b600d54600090610f8584670de0b6b3a76400006118ff565b610f8f9190611916565b905080600e6000828254610fa391906118d3565b90915550610fd490507f000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc833856116b7565b604080518481526020810183905233917fe1979fe4c35e0cef342fef5668e2c8e7a7e9f5d5d1ca8fee0ac6c427fa4153af91016109b9565b60005460ff16156110305760405163cbece43f60e01b815260040160405180910390fd5b6000805460ff19166001179055600854600160a01b900460ff1661106757604051633b1cf39760e21b815260040160405180910390fd5b3360009081526005602052604081205460045490919061108561081b565b61108f90846118ff565b6110999190611916565b6040516370a0823160e01b815230600482015290915081906001600160a01b037f000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc816906370a0823190602401602060405180830381865afa158015611102573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112691906118e6565b101561114557604051633ae100b760e11b815260040160405180910390fd5b61114f3383611603565b61117a7f000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc833836116b7565b6040805182815260208101849052339182917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567910160405180910390a350506000805460ff19169055565b3360009081526001602052604090205460ff166111f4576040516282b42960e81b815260040160405180910390fd5b81636578656360e01b0361122b576001600160a01b0381166000908152600160205260409020805460ff19811660ff909116151790555b81681c985d19535bd9195b60ba1b0361125a57600780546001600160a01b0319166001600160a01b0383161790555b81656f7261636c6560d01b0361128657600880546001600160a01b0319166001600160a01b0383161790555b6040516001600160a01b038216815282907f41a50316b758972a692a69178de3d99c3138a652f5213364ee8eff829f22048a9060200161080f565b6000670de0b6b3a7640000600d54600e546112dc91906118ff565b6108b79190611916565b60005460ff161561130a5760405163cbece43f60e01b815260040160405180910390fd5b6000805460ff191660011790819055610100900460ff161561133f576040516313d0ff5960e31b815260040160405180910390fd5b611347610d50565b600060045461135461081b565b61135e90856118ff565b6113689190611916565b3360009081526005602052604090205490915083111561139b57604051631e9acf1760e31b815260040160405180910390fd5b6040516370a0823160e01b815230600482015281907f000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc86001600160a01b0316906370a0823190602401602060405180830381865afa158015611401573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142591906118e6565b101561144457604051633ae100b760e11b815260040160405180910390fd5b61144e3384611603565b6114797f000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc883836116b7565b60408051828152602081018590526001600160a01b0384169133917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567910160405180910390a350506000805460ff1916905550565b806000036114db57505050565b6040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528416906323b872dd906064015b6020604051808303816000875af1158015611531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115559190611938565b611572576040516312171d8360e31b815260040160405180910390fd5b505050565b6001600160a01b03821660009081526005602052604090205461159b9082906118d3565b6001600160a01b0383166000908152600560205260409020556004546115c29082906118d3565b6004556040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610d44565b6001600160a01b0382166000908152600560205260409020548181101561163d57604051631e9acf1760e31b815260040160405180910390fd5b61164782826118c0565b6001600160a01b03841660009081526005602052604090205560045461166e9083906118c0565b6004556040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b806000036116c457505050565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401611512565b600060208083528351808285015260005b818110156117265785810183015185820160400152820161170a565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146109c457600080fd5b6000806040838503121561177157600080fd5b61177a83611747565b946020939093013593505050565b60008060006060848603121561179d57600080fd5b6117a684611747565b92506117b460208501611747565b9150604084013590509250925092565b600080604083850312156117d757600080fd5b50508035926020909101359150565b6000602082840312156117f857600080fd5b5035919050565b60006020828403121561181157600080fd5b610e3982611747565b6000806040838503121561182d57600080fd5b8235915061183d60208401611747565b90509250929050565b6000806040838503121561185957600080fd5b61186283611747565b915061183d60208401611747565b600181811c9082168061188457607f821691505b6020821081036118a457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105a5576105a56118aa565b808201808211156105a5576105a56118aa565b6000602082840312156118f857600080fd5b5051919050565b80820281158282048414176105a5576105a56118aa565b60008261193357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561194a57600080fd5b81518015158114610e3957600080fdfea264697066735822122074e2e8d1decb517cdd816b284b15b2fba5e87449d25862e707592e157db4a04464736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc8000000000000000000000000627ea8812ef561d6ad9308d2a63e36901f51e3e500000000000000000000000050834f3163758fcc1df9973b6e91f0f0f0434ad300000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000d2f13f7789f000000000000000000000000000000000000000000000000000000000002540be400
-----Decoded View---------------
Arg [0] : _asset (address): 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8
Arg [1] : _rateModel (address): 0x627ea8812ef561D6ad9308D2A63e36901f51E3E5
Arg [2] : _oracle (address): 0x50834F3163758fcC1Df9973b6e91f0F0F0434aD3
Arg [3] : _borrowMin (uint256): 1000000
Arg [4] : _liquidationFactor (uint256): 950000000000000000
Arg [5] : _amountCap (uint256): 10000000000
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc8
Arg [1] : 000000000000000000000000627ea8812ef561d6ad9308d2a63e36901f51e3e5
Arg [2] : 00000000000000000000000050834f3163758fcc1df9973b6e91f0f0f0434ad3
Arg [3] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [4] : 0000000000000000000000000000000000000000000000000d2f13f7789f0000
Arg [5] : 00000000000000000000000000000000000000000000000000000002540be400
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$10.10
Net Worth in ETH
0.004457
Token Allocations
USDC.E
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ARB | 100.00% | $0.999629 | 10.1 | $10.1 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.