Address Contract Partially Verified
Address
0xE0db48B4F71752C4bEf16De1DBD042B82976b8C7
Balance
0 ETH
Nonce
1
Code Size
7351 bytes
Creator
0x710295b5...2F24 at tx 0x9c5b4e21...7481fd
Indexed Transactions
0
Contract Bytecode
7351 bytes
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806392eefe9b11610104578063b84c8246116100a2578063de5f626811610071578063de5f6268146105b8578063f77c4791146105c0578063f8897945146105c8578063fc0c546a146105d0576101cf565b8063b84c8246146104a2578063c47f002714610512578063d389800f14610582578063dd62ed3e1461058a576101cf565b8063a9059cbb116100de578063a9059cbb1461042b578063ab033ea914610457578063b69ef8a81461047d578063b6b55f2514610485576101cf565b806392eefe9b146103d157806395d89b41146103f7578063a457c2d7146103ff576101cf565b806345dc3dd8116101715780636ac5db191161014b5780636ac5db191461039357806370a082311461039b57806377c7b8fc146103c1578063853828b6146103c9576101cf565b806345dc3dd81461034a57806348a0d754146103675780635aa6e6751461036f576101cf565b806323b872dd116101ad57806323b872dd146102ab5780632e1a7d4d146102e1578063313ce56714610300578063395093511461031e576101cf565b806306fdde03146101d4578063095ea7b31461025157806318160ddd14610291575b600080fd5b6101dc6105d8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102165781810151838201526020016101fe565b50505050905090810190601f1680156102435780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61027d6004803603604081101561026757600080fd5b506001600160a01b038135169060200135610666565b604080519115158252519081900360200190f35b610299610684565b60408051918252519081900360200190f35b61027d600480360360608110156102c157600080fd5b506001600160a01b0381358116916020810135909116906040013561068b565b6102fe600480360360208110156102f757600080fd5b5035610718565b005b61030861092a565b6040805160ff9092168252519081900360200190f35b61027d6004803603604081101561033457600080fd5b506001600160a01b038135169060200135610933565b6102fe6004803603602081101561036057600080fd5b5035610987565b6102996109d9565b610377610a8f565b604080516001600160a01b039092168252519081900360200190f35b610299610a9e565b610299600480360360208110156103b157600080fd5b50356001600160a01b0316610aa4565b610299610abf565b6102fe610ae0565b6102fe600480360360208110156103e757600080fd5b50356001600160a01b0316610af3565b6101dc610b62565b61027d6004803603604081101561041557600080fd5b506001600160a01b038135169060200135610bbd565b61027d6004803603604081101561044157600080fd5b506001600160a01b038135169060200135610c2b565b6102fe6004803603602081101561046d57600080fd5b50356001600160a01b0316610c3f565b610299610cae565b6102fe6004803603602081101561049b57600080fd5b5035610db1565b6102fe600480360360208110156104b857600080fd5b8101906020810181356401000000008111156104d357600080fd5b8201836020820111156104e557600080fd5b8035906020019184600183028401116401000000008311171561050757600080fd5b509092509050610f29565b6102fe6004803603602081101561052857600080fd5b81019060208101813564010000000081111561054357600080fd5b82018360208201111561055557600080fd5b8035906020019184600183028401116401000000008311171561057757600080fd5b509092509050610f82565b6102fe610fdb565b610299600480360360408110156105a057600080fd5b506001600160a01b0381358116916020013516611077565b6102fe6110a2565b61037761111f565b61029961112e565b610377611134565b6007805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561065e5780601f106106335761010080835404028352916020019161065e565b820191906000526020600020905b81548152906001019060200180831161064157829003601f168201915b505050505081565b600061067a610673611143565b8484611147565b5060015b92915050565b6002545b90565b6000610698848484611233565b61070e846106a4611143565b61070985604051806060016040528060288152602001611ba2602891396001600160a01b038a166000908152600160205260408120906106e2611143565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61138f16565b611147565b5060019392505050565b6000610749610725610684565b61073d84610731610cae565b9063ffffffff61142616565b9063ffffffff61148616565b905061075533836114c8565b600354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156107a057600080fd5b505afa1580156107b4573d6000803e3d6000fd5b505050506040513d60208110156107ca57600080fd5b50519050818110156109085760006107e8838363ffffffff6115c416565b6006546003546040805163f3fef3a360e01b81526001600160a01b03928316600482015260248101859052905193945091169163f3fef3a39160448082019260009290919082900301818387803b15801561084257600080fd5b505af1158015610856573d6000803e3d6000fd5b5050600354604080516370a0823160e01b81523060048201529051600094506001600160a01b0390921692506370a08231916024808301926020929190829003018186803b1580156108a757600080fd5b505afa1580156108bb573d6000803e3d6000fd5b505050506040513d60208110156108d157600080fd5b5051905060006108e7828563ffffffff6115c416565b90508281101561090457610901848263ffffffff61160616565b94505b5050505b600354610925906001600160a01b0316338463ffffffff61166016565b505050565b60095460ff1681565b600061067a610940611143565b846107098560016000610951611143565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61160616565b6005546001600160a01b031633146109d4576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600455565b6000610a8a61271061073d600454600360009054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015610a5257600080fd5b505afa158015610a66573d6000803e3d6000fd5b505050506040513d6020811015610a7c57600080fd5b50519063ffffffff61142616565b905090565b6005546001600160a01b031681565b61271081565b6001600160a01b031660009081526020819052604090205490565b6000610a8a610acc610684565b61073d670de0b6b3a7640000610731610cae565b610af1610aec33610aa4565b610718565b565b6005546001600160a01b03163314610b40576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6008805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561065e5780601f106106335761010080835404028352916020019161065e565b600061067a610bca611143565b8461070985604051806060016040528060258152602001611c5e6025913960016000610bf4611143565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61138f16565b600061067a610c38611143565b8484611233565b6005546001600160a01b03163314610c8c576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600654600354604080516370a0823160e01b81526001600160a01b0392831660048201529051600093610a8a9316916370a08231916024808301926020929190829003018186803b158015610d0257600080fd5b505afa158015610d16573d6000803e3d6000fd5b505050506040513d6020811015610d2c57600080fd5b5051600354604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610d7957600080fd5b505afa158015610d8d573d6000803e3d6000fd5b505050506040513d6020811015610da357600080fd5b50519063ffffffff61160616565b6000610dbb610cae565b600354604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e0c57600080fd5b505afa158015610e20573d6000803e3d6000fd5b505050506040513d6020811015610e3657600080fd5b5051600354909150610e59906001600160a01b031633308663ffffffff6116b216565b600354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ea457600080fd5b505afa158015610eb8573d6000803e3d6000fd5b505050506040513d6020811015610ece57600080fd5b50519050610ee2818363ffffffff6115c416565b93506000610eee610684565b610ef9575083610f18565b610f158461073d610f08610684565b889063ffffffff61142616565b90505b610f223382611712565b5050505050565b6005546001600160a01b03163314610f76576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b61092560088383611a5b565b6005546001600160a01b03163314610fcf576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b61092560078383611a5b565b6000610fe56109d9565b60065460035491925061100b916001600160a01b0390811691168363ffffffff61166016565b6006546003546040805163b02bf4b960e01b81526001600160a01b039283166004820152602481018590529051919092169163b02bf4b991604480830192600092919082900301818387803b15801561106357600080fd5b505af1158015610f22573d6000803e3d6000fd5b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600354604080516370a0823160e01b81523360048201529051610af1926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156110ee57600080fd5b505afa158015611102573d6000803e3d6000fd5b505050506040513d602081101561111857600080fd5b5051610db1565b6006546001600160a01b031681565b60045481565b6003546001600160a01b031681565b3390565b6001600160a01b03831661118c5760405162461bcd60e51b8152600401808060200182810382526024815260200180611c106024913960400191505060405180910390fd5b6001600160a01b0382166111d15760405162461bcd60e51b8152600401808060200182810382526022815260200180611b396022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166112785760405162461bcd60e51b8152600401808060200182810382526025815260200180611beb6025913960400191505060405180910390fd5b6001600160a01b0382166112bd5760405162461bcd60e51b8152600401808060200182810382526023815260200180611af46023913960400191505060405180910390fd5b61130081604051806060016040528060268152602001611b5b602691396001600160a01b038616600090815260208190526040902054919063ffffffff61138f16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611335908263ffffffff61160616565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561141e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113e35781810151838201526020016113cb565b50505050905090810190601f1680156114105780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000826114355750600061067e565b8282028284828161144257fe5b041461147f5760405162461bcd60e51b8152600401808060200182810382526021815260200180611b816021913960400191505060405180910390fd5b9392505050565b600061147f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611802565b6001600160a01b03821661150d5760405162461bcd60e51b8152600401808060200182810382526021815260200180611bca6021913960400191505060405180910390fd5b61155081604051806060016040528060228152602001611b17602291396001600160a01b038516600090815260208190526040902054919063ffffffff61138f16565b6001600160a01b03831660009081526020819052604090205560025461157c908263ffffffff6115c416565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600061147f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061138f565b60008282018381101561147f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610925908490611867565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261170c908590611867565b50505050565b6001600160a01b03821661176d576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254611780908263ffffffff61160616565b6002556001600160a01b0382166000908152602081905260409020546117ac908263ffffffff61160616565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081836118515760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156113e35781810151838201526020016113cb565b50600083858161185d57fe5b0495945050505050565b611879826001600160a01b0316611a1f565b6118ca576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106119085780518252601f1990920191602091820191016118e9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461196a576040519150601f19603f3d011682016040523d82523d6000602084013e61196f565b606091505b5091509150816119c6576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561170c578080602001905160208110156119e257600080fd5b505161170c5760405162461bcd60e51b815260040180806020018281038252602a815260200180611c34602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590611a535750808214155b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611a9c5782800160ff19823516178555611ac9565b82800160010185558215611ac9579182015b82811115611ac9578235825591602001919060010190611aae565b50611ad5929150611ad9565b5090565b61068891905b80821115611ad55760008155600101611adf56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a723158204344622e04eda2d9f4bee63084fd35890173ecbed0267e8fed9170a63465f1a964736f6c63430005110032
Verified Source Code Partial Match
Compiler: v0.5.17+commit.d19bba13
EVM: istanbul
Optimization: Yes (200 runs)
yVault.sol 335 lines
pragma solidity ^0.5.17;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IDetailed {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
contract Context {
constructor () internal { }
// solhint-disable-previous-line no-empty-blocks
function _msgSender() internal view returns (address payable) {
return msg.sender;
}
function _msgData() internal view returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
contract ERC20 is Context, IERC20 {
using SafeMath for uint256;
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
uint256 private _totalSupply;
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) public returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
function _transfer(address sender, address recipient, uint256 amount) internal {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
function _mint(address account, uint256 amount) internal {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal {
require(account != address(0), "ERC20: burn from the zero address");
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
function _approve(address owner, address spender, uint256 amount) internal {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _burnFrom(address account, uint256 amount) internal {
_burn(account, amount);
_approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
}
}
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
library Address {
function isContract(address account) internal view returns (bool) {
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != 0x0 && codehash != accountHash);
}
function toPayable(address account) internal pure returns (address payable) {
return address(uint160(account));
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-call-value
(bool success, ) = recipient.call.value(amount)("");
require(success, "Address: unable to send value, recipient may have reverted");
}
}
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint256 value) internal {
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function callOptionalReturn(IERC20 token, bytes memory data) private {
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
interface Controller {
function withdraw(address, uint) external;
function balanceOf(address) external view returns (uint);
function earn(address, uint) external;
}
contract yVault is ERC20 {
using SafeERC20 for IERC20;
using Address for address;
using SafeMath for uint256;
IERC20 public token;
uint public min = 9990;
uint public constant max = 10000;
address public governance;
address public controller;
string public name;
string public symbol;
uint8 public decimals;
constructor (address _token, address _controller) public {
name = string(abi.encodePacked("yearn ", IDetailed(_token).name()));
symbol = string(abi.encodePacked("yv", IDetailed(_token).symbol()));
decimals = IDetailed(_token).decimals();
token = IERC20(_token);
governance = msg.sender;
controller = _controller;
}
function setName(string calldata _name) external {
require(msg.sender == governance, "!governance");
name = _name;
}
function setSymbol(string calldata _symbol) external {
require(msg.sender == governance, "!governance");
symbol = _symbol;
}
function balance() public view returns (uint) {
return token.balanceOf(address(this))
.add(Controller(controller).balanceOf(address(token)));
}
function setMin(uint _min) external {
require(msg.sender == governance, "!governance");
min = _min;
}
function setGovernance(address _governance) public {
require(msg.sender == governance, "!governance");
governance = _governance;
}
function setController(address _controller) public {
require(msg.sender == governance, "!governance");
controller = _controller;
}
// Custom logic in here for how much the vault allows to be borrowed
// Sets minimum required on-hand to keep small withdrawals cheap
function available() public view returns (uint) {
return token.balanceOf(address(this)).mul(min).div(max);
}
function earn() public {
uint _bal = available();
token.safeTransfer(controller, _bal);
Controller(controller).earn(address(token), _bal);
}
function depositAll() external {
deposit(token.balanceOf(msg.sender));
}
function deposit(uint _amount) public {
uint _pool = balance();
uint _before = token.balanceOf(address(this));
token.safeTransferFrom(msg.sender, address(this), _amount);
uint _after = token.balanceOf(address(this));
_amount = _after.sub(_before); // Additional check for deflationary tokens
uint shares = 0;
if (totalSupply() == 0) {
shares = _amount;
} else {
shares = (_amount.mul(totalSupply())).div(_pool);
}
_mint(msg.sender, shares);
}
function withdrawAll() external {
withdraw(balanceOf(msg.sender));
}
// No rebalance implementation for lower fees and faster swaps
function withdraw(uint _shares) public {
uint r = (balance().mul(_shares)).div(totalSupply());
_burn(msg.sender, _shares);
// Check balance
uint b = token.balanceOf(address(this));
if (b < r) {
uint _withdraw = r.sub(b);
Controller(controller).withdraw(address(token), _withdraw);
uint _after = token.balanceOf(address(this));
uint _diff = _after.sub(b);
if (_diff < _withdraw) {
r = b.add(_diff);
}
}
token.safeTransfer(msg.sender, r);
}
function getPricePerFullShare() public view returns (uint) {
return balance().mul(1e18).div(totalSupply());
}
}
Read Contract
allowance 0xdd62ed3e → uint256
available 0x48a0d754 → uint256
balance 0xb69ef8a8 → uint256
balanceOf 0x70a08231 → uint256
controller 0xf77c4791 → address
decimals 0x313ce567 → uint8
getPricePerFullShare 0x77c7b8fc → uint256
governance 0x5aa6e675 → address
max 0x6ac5db19 → uint256
min 0xf8897945 → uint256
name 0x06fdde03 → string
symbol 0x95d89b41 → string
token 0xfc0c546a → address
totalSupply 0x18160ddd → uint256
Write Contract 15 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
deposit 0xb6b55f25
uint256 _amount
depositAll 0xde5f6268
No parameters
earn 0xd389800f
No parameters
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
setController 0x92eefe9b
address _controller
setGovernance 0xab033ea9
address _governance
setMin 0x45dc3dd8
uint256 _min
setName 0xc47f0027
string _name
setSymbol 0xb84c8246
string _symbol
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
withdraw 0x2e1a7d4d
uint256 _shares
withdrawAll 0x853828b6
No parameters
Recent Transactions
No transactions found for this address