Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x61010060 | 14132110 | 784 days ago | IN | Create: YearnSilo | 0 ETH | 0.06433648 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
YearnSilo
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 800 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "contracts/libraries/FullMath.sol"; import "contracts/interfaces/ISilo.sol"; interface IYearnVault { /// @notice The vault's name. ex: UNI yVault function name() external view returns (string memory); /// @notice The number of decimals on the yToken function decimals() external view returns (uint256); /// @notice The address of the underlying token function token() external view returns (address); /// @notice Similar to Compound's `exchangeRateStored()`, but scaled by `10 ** decimals()` instead of `10 ** 18` function pricePerShare() external view returns (uint256); /// @notice A standard ERC20 balance getter function balanceOf(address user) external view returns (uint256 shares); /// @notice The maximum `amount` of underlying that can be deposited function availableDepositLimit() external view returns (uint256 amount); /// @notice The maximum number of `shares` that can be withdrawn atomically function maxAvailableShares() external view returns (uint256 shares); /// @notice Deposits `amount` of underlying to the vault function deposit(uint256 amount) external returns (uint256 shares); /// @notice Burns up to `maxShares` shares and gives `amount` of underlying function withdraw(uint256 maxShares, address recipient, uint256 maxLoss) external returns (uint256 amount); } contract YearnSilo is ISilo { /// @inheritdoc ISilo string public name; IYearnVault public immutable vault; uint256 public immutable maxYearnWithdrawLoss; address public immutable underlying; uint256 private immutable decimals; constructor(IYearnVault _vault, uint256 _maxYearnWithdrawLoss) { vault = _vault; maxYearnWithdrawLoss = _maxYearnWithdrawLoss; underlying = vault.token(); decimals = vault.decimals(); // ex: UNI yVault Silo name = string( abi.encodePacked( vault.name(), " Silo" ) ); } /// @inheritdoc ISilo function poke() external override {} /// @inheritdoc ISilo function deposit(uint256 amount) external override { if (amount == 0) return; // If Yearn deposits are capped, deposit as much as possible and hold the rest in Blend contract uint256 maxDepositable = vault.availableDepositLimit(); if (amount > maxDepositable) amount = maxDepositable; _approve(underlying, address(vault), amount); vault.deposit(amount); } /// @inheritdoc ISilo function withdraw(uint256 amount) external override { if (amount == 0) return; uint256 shares = FullMath.mulDivRoundingUp( amount, 10_000 * 10 ** decimals, vault.pricePerShare() * (10_000 - maxYearnWithdrawLoss) ); require(vault.withdraw(shares, address(this), maxYearnWithdrawLoss) >= amount, "Yearn: withdraw failed"); } /// @inheritdoc ISilo function balanceOf(address account) external view override returns (uint256 balance) { uint256 shares = vault.balanceOf(account); uint256 maxWithdrawable = vault.maxAvailableShares(); // If Blend isn't able to atomically withdraw shares, it doesn't *really* own them if (shares > maxWithdrawable) shares = maxWithdrawable; balance = FullMath.mulDiv( shares, vault.pricePerShare() * (10_000 - maxYearnWithdrawLoss), 10_000 * 10 ** decimals ); } /// @inheritdoc ISilo function shouldAllowRemovalOf(address token) external view override returns (bool shouldAllow) { shouldAllow = token != address(vault); } function _approve( address token, address spender, uint256 amount ) private { // 200 gas to read uint256 if (IERC20(token).allowance(address(this), spender) < amount) { // 20000 gas to write uint256 if changing from zero to non-zero // 5000 gas to write uint256 if changing from non-zero to non-zero IERC20(token).approve(spender, type(uint256).max); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; /// @title Contains 512-bit math functions /// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision /// @dev Handles "phantom overflow" i.e., allows multiplication and division where an intermediate value overflows 256 bits library FullMath { /// @notice Calculates floor(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 /// @param a The multiplicand /// @param b The multiplier /// @param denominator The divisor /// @return result The 256-bit result /// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv function mulDiv( uint256 a, uint256 b, uint256 denominator ) internal pure returns (uint256 result) { // Handle division by zero require(denominator != 0); // 512-bit multiply [prod1 prod0] = a * b // Compute the product mod 2**256 and mod 2**256 - 1 // then use the Chinese Remainder Theorem to reconstruct // the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2**256 + prod0 uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(a, b, not(0)) prod0 := mul(a, b) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Short circuit 256 by 256 division // This saves gas when a * b is small, at the cost of making the // large case a bit more expensive. Depending on your use case you // may want to remove this short circuit and always go through the // 512 bit path. if (prod1 == 0) { assembly { result := div(prod0, denominator) } return result; } /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Handle overflow, the result must be < 2**256 require(prod1 < denominator); // Make division exact by subtracting the remainder from [prod1 prod0] // Compute remainder using mulmod // Note mulmod(_, _, 0) == 0 uint256 remainder; assembly { remainder := mulmod(a, b, denominator) } // Subtract 256 bit number from 512 bit number assembly { prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator // Compute largest power of two divisor of denominator. // Always >= 1. unchecked { // https://ethereum.stackexchange.com/a/96646 uint256 twos = (type(uint256).max - denominator + 1) & denominator; // Divide denominator by power of two assembly { denominator := div(denominator, twos) } // Divide [prod1 prod0] by the factors of two assembly { prod0 := div(prod0, twos) } // Shift in bits from prod1 into prod0. For this we need // to flip `twos` such that it is 2**256 / twos. // If twos is zero, then it becomes one assembly { twos := add(div(sub(0, twos), twos), 1) } prod0 |= prod1 * twos; // Invert denominator mod 2**256 // Now that denominator is an odd number, it has an inverse // modulo 2**256 such that denominator * inv = 1 mod 2**256. // Compute the inverse by starting with a seed that is correct // correct for four bits. That is, denominator * inv = 1 mod 2**4 // If denominator is zero the inverse starts with 2 uint256 inv = (3 * denominator) ^ 2; // Now use Newton-Raphson iteration to improve the precision. // Thanks to Hensel's lifting lemma, this also works in modular // arithmetic, doubling the correct bits in each step. inv *= 2 - denominator * inv; // inverse mod 2**8 inv *= 2 - denominator * inv; // inverse mod 2**16 inv *= 2 - denominator * inv; // inverse mod 2**32 inv *= 2 - denominator * inv; // inverse mod 2**64 inv *= 2 - denominator * inv; // inverse mod 2**128 inv *= 2 - denominator * inv; // inverse mod 2**256 // If denominator is zero, inv is now 128 // Because the division is now exact we can divide by multiplying // with the modular inverse of denominator. This will give us the // correct result modulo 2**256. Since the precoditions guarantee // that the outcome is less than 2**256, this is the final result. // We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inv; return result; } } /// @notice Calculates ceil(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 /// @param a The multiplicand /// @param b The multiplier /// @param denominator The divisor /// @return result The 256-bit result function mulDivRoundingUp( uint256 a, uint256 b, uint256 denominator ) internal pure returns (uint256 result) { result = mulDiv(a, b, denominator); if (mulmod(a, b, denominator) > 0) { require(result < type(uint256).max); result++; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; interface ISilo { /// @notice A descriptive name for the silo (ex: Compound USDC Silo) function name() external view returns (string memory); /// @notice A place to update the silo's internal state /// @dev After this has been called, balances reported by `balanceOf` MUST be correct function poke() external; /// @notice Deposits `amount` of the underlying token function deposit(uint256 amount) external; /// @notice Withdraws EXACTLY `amount` of the underlying token function withdraw(uint256 amount) external; /// @notice Reports how much of the underlying token `account` has stored /// @dev Must never overestimate `balance`. Should give the exact, correct value after `poke` is called function balanceOf(address account) external view returns (uint256 balance); /** * @notice Whether the given token is irrelevant to the silo's strategy (`shouldAllow = true`) or * is required for proper management (`shouldAllow = false`). ex: Compound silos shouldn't allow * removal of cTokens, but the may allow removal of COMP rewards. * @dev Removed tokens are used to help incentivize rebalances for the Blend vault that uses the silo. So * if you want something like COMP rewards to go to Blend *users* instead, you'd have to implement a * trading function as part of `poke()` to convert COMP to the underlying token. */ function shouldAllowRemovalOf(address token) external view returns (bool shouldAllow); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
{ "optimizer": { "enabled": true, "runs": 800 }, "metadata": { "bytecodeHash": "none" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IYearnVault","name":"_vault","type":"address"},{"internalType":"uint256","name":"_maxYearnWithdrawLoss","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxYearnWithdrawLoss","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"shouldAllowRemovalOf","outputs":[{"internalType":"bool","name":"shouldAllow","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IYearnVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101006040523480156200001257600080fd5b50604051620011ae380380620011ae83398101604081905262000035916200029d565b6001600160a01b038216608081905260a082905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab9190620002ce565b6001600160a01b031660c0816001600160a01b0316815250506080516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012b9190620002f5565b60e081815250506080516001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200019d919081019062000358565b604051602001620001af919062000410565b60405160208183030381529060405260009080519060200190620001d5929190620001de565b50505062000478565b828054620001ec906200043b565b90600052602060002090601f0160209004810192826200021057600085556200025b565b82601f106200022b57805160ff19168380011785556200025b565b828001600101855582156200025b579182015b828111156200025b5782518255916020019190600101906200023e565b50620002699291506200026d565b5090565b5b808211156200026957600081556001016200026e565b6001600160a01b03811681146200029a57600080fd5b50565b60008060408385031215620002b157600080fd5b8251620002be8162000284565b6020939093015192949293505050565b600060208284031215620002e157600080fd5b8151620002ee8162000284565b9392505050565b6000602082840312156200030857600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200034257818101518382015260200162000328565b8381111562000352576000848401525b50505050565b6000602082840312156200036b57600080fd5b81516001600160401b03808211156200038357600080fd5b818401915084601f8301126200039857600080fd5b815181811115620003ad57620003ad6200030f565b604051601f8201601f19908116603f01168101908382118183101715620003d857620003d86200030f565b81604052828152876020848701011115620003f257600080fd5b6200040583602083016020880162000325565b979650505050505050565b600082516200042481846020870162000325565b642053696c6f60d81b920191825250600501919050565b600181811c908216806200045057607f821691505b602082108114156200047257634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610c9b620005136000396000818161028e01526106730152600081816101660152610751015260008181610131015281816102c50152818161039901526105bb01526000818160d6015281816101cb015281816102ee015281816103cc015281816104b301528181610524015281816105e4015281816106be0152818161077201526107ad0152610c9b6000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80635a2f65e11161007657806370a082311161005b57806370a08231146101a0578063b6b55f25146101b3578063fbfa77cf146101c657600080fd5b80635a2f65e11461012c5780636f307dc31461016157600080fd5b806306fdde03146100a85780631363efd8146100c657806318178358146101175780632e1a7d4d14610119575b600080fd5b6100b06101ed565b6040516100bd9190610a12565b60405180910390f35b6101076100d4366004610a67565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116141590565b60405190151581526020016100bd565b005b610117610127366004610a90565b61027b565b6101537f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100bd565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100bd565b6101536101ae366004610a67565b61048f565b6101176101c1366004610a90565b6106b2565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b600080546101fa90610aa9565b80601f016020809104026020016040519081016040528092919081815260200182805461022690610aa9565b80156102735780601f1061024857610100808354040283529160200191610273565b820191906000526020600020905b81548152906001019060200180831161025657829003601f168201915b505050505081565b806102835750565b600061037d826102b47f0000000000000000000000000000000000000000000000000000000000000000600a610be0565b6102c090612710610bec565b6102ec7f0000000000000000000000000000000000000000000000000000000000000000612710610c0b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa15801561034a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036e9190610c22565b6103789190610bec565b610827565b604051631cc6d2f960e31b8152600481018290523060248201527f0000000000000000000000000000000000000000000000000000000000000000604482015290915082906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e63697c8906064016020604051808303816000875af1158015610415573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104399190610c22565b101561048b5760405162461bcd60e51b815260206004820152601660248201527f596561726e3a207769746864726177206661696c656400000000000000000000604482015260640160405180910390fd5b5050565b6040516370a0823160e01b81526001600160a01b03828116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156104fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051e9190610c22565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166375de29026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610c22565b9050808211156105b2578091505b6106aa826105e27f0000000000000000000000000000000000000000000000000000000000000000612710610c0b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610640573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106649190610c22565b61066e9190610bec565b6106997f0000000000000000000000000000000000000000000000000000000000000000600a610be0565b6106a590612710610bec565b610872565b949350505050565b806106ba5750565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663153c27c46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561071a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073e9190610c22565b90508082111561074c578091505b6107977f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008461091f565b60405163b6b55f2560e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b6b55f25906024016020604051808303816000875af11580156107fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108229190610c22565b505050565b6000610834848484610872565b90506000828061084657610846610c3b565b848609111561086b57600019811061085d57600080fd5b8061086781610c51565b9150505b9392505050565b60008161087e57600080fd5b60008060001985870985870292508281108382030391505080600014156108aa5750829004905061086b565b8381106108b657600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015282919085169063dd62ed3e90604401602060405180830381865afa15801561096e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109929190610c22565b10156108225760405163095ea7b360e01b81526001600160a01b038381166004830152600019602483015284169063095ea7b3906044016020604051808303816000875af11580156109e8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0c9190610c6c565b50505050565b600060208083528351808285015260005b81811015610a3f57858101830151858201604001528201610a23565b81811115610a51576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215610a7957600080fd5b81356001600160a01b038116811461086b57600080fd5b600060208284031215610aa257600080fd5b5035919050565b600181811c90821680610abd57607f821691505b60208210811415610ade57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610b35578160001904821115610b1b57610b1b610ae4565b80851615610b2857918102915b93841c9390800290610aff565b509250929050565b600082610b4c57506001610bda565b81610b5957506000610bda565b8160018114610b6f5760028114610b7957610b95565b6001915050610bda565b60ff841115610b8a57610b8a610ae4565b50506001821b610bda565b5060208310610133831016604e8410600b8410161715610bb8575081810a610bda565b610bc28383610afa565b8060001904821115610bd657610bd6610ae4565b0290505b92915050565b600061086b8383610b3d565b6000816000190483118215151615610c0657610c06610ae4565b500290565b600082821015610c1d57610c1d610ae4565b500390565b600060208284031215610c3457600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000600019821415610c6557610c65610ae4565b5060010190565b600060208284031215610c7e57600080fd5b8151801515811461086b57600080fdfea164736f6c634300080a000a000000000000000000000000a696a63cc78dffa1a63e9e50587c197387ff6c7e0000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100a35760003560e01c80635a2f65e11161007657806370a082311161005b57806370a08231146101a0578063b6b55f25146101b3578063fbfa77cf146101c657600080fd5b80635a2f65e11461012c5780636f307dc31461016157600080fd5b806306fdde03146100a85780631363efd8146100c657806318178358146101175780632e1a7d4d14610119575b600080fd5b6100b06101ed565b6040516100bd9190610a12565b60405180910390f35b6101076100d4366004610a67565b7f000000000000000000000000a696a63cc78dffa1a63e9e50587c197387ff6c7e6001600160a01b039081169116141590565b60405190151581526020016100bd565b005b610117610127366004610a90565b61027b565b6101537f000000000000000000000000000000000000000000000000000000000000000181565b6040519081526020016100bd565b6101887f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c59981565b6040516001600160a01b0390911681526020016100bd565b6101536101ae366004610a67565b61048f565b6101176101c1366004610a90565b6106b2565b6101887f000000000000000000000000a696a63cc78dffa1a63e9e50587c197387ff6c7e81565b600080546101fa90610aa9565b80601f016020809104026020016040519081016040528092919081815260200182805461022690610aa9565b80156102735780601f1061024857610100808354040283529160200191610273565b820191906000526020600020905b81548152906001019060200180831161025657829003601f168201915b505050505081565b806102835750565b600061037d826102b47f0000000000000000000000000000000000000000000000000000000000000008600a610be0565b6102c090612710610bec565b6102ec7f0000000000000000000000000000000000000000000000000000000000000001612710610c0b565b7f000000000000000000000000a696a63cc78dffa1a63e9e50587c197387ff6c7e6001600160a01b03166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa15801561034a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036e9190610c22565b6103789190610bec565b610827565b604051631cc6d2f960e31b8152600481018290523060248201527f0000000000000000000000000000000000000000000000000000000000000001604482015290915082906001600160a01b037f000000000000000000000000a696a63cc78dffa1a63e9e50587c197387ff6c7e169063e63697c8906064016020604051808303816000875af1158015610415573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104399190610c22565b101561048b5760405162461bcd60e51b815260206004820152601660248201527f596561726e3a207769746864726177206661696c656400000000000000000000604482015260640160405180910390fd5b5050565b6040516370a0823160e01b81526001600160a01b03828116600483015260009182917f000000000000000000000000a696a63cc78dffa1a63e9e50587c197387ff6c7e16906370a0823190602401602060405180830381865afa1580156104fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051e9190610c22565b905060007f000000000000000000000000a696a63cc78dffa1a63e9e50587c197387ff6c7e6001600160a01b03166375de29026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610c22565b9050808211156105b2578091505b6106aa826105e27f0000000000000000000000000000000000000000000000000000000000000001612710610c0b565b7f000000000000000000000000a696a63cc78dffa1a63e9e50587c197387ff6c7e6001600160a01b03166399530b066040518163ffffffff1660e01b8152600401602060405180830381865afa158015610640573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106649190610c22565b61066e9190610bec565b6106997f0000000000000000000000000000000000000000000000000000000000000008600a610be0565b6106a590612710610bec565b610872565b949350505050565b806106ba5750565b60007f000000000000000000000000a696a63cc78dffa1a63e9e50587c197387ff6c7e6001600160a01b031663153c27c46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561071a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073e9190610c22565b90508082111561074c578091505b6107977f0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5997f000000000000000000000000a696a63cc78dffa1a63e9e50587c197387ff6c7e8461091f565b60405163b6b55f2560e01b8152600481018390527f000000000000000000000000a696a63cc78dffa1a63e9e50587c197387ff6c7e6001600160a01b03169063b6b55f25906024016020604051808303816000875af11580156107fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108229190610c22565b505050565b6000610834848484610872565b90506000828061084657610846610c3b565b848609111561086b57600019811061085d57600080fd5b8061086781610c51565b9150505b9392505050565b60008161087e57600080fd5b60008060001985870985870292508281108382030391505080600014156108aa5750829004905061086b565b8381106108b657600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015282919085169063dd62ed3e90604401602060405180830381865afa15801561096e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109929190610c22565b10156108225760405163095ea7b360e01b81526001600160a01b038381166004830152600019602483015284169063095ea7b3906044016020604051808303816000875af11580156109e8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0c9190610c6c565b50505050565b600060208083528351808285015260005b81811015610a3f57858101830151858201604001528201610a23565b81811115610a51576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215610a7957600080fd5b81356001600160a01b038116811461086b57600080fd5b600060208284031215610aa257600080fd5b5035919050565b600181811c90821680610abd57607f821691505b60208210811415610ade57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610b35578160001904821115610b1b57610b1b610ae4565b80851615610b2857918102915b93841c9390800290610aff565b509250929050565b600082610b4c57506001610bda565b81610b5957506000610bda565b8160018114610b6f5760028114610b7957610b95565b6001915050610bda565b60ff841115610b8a57610b8a610ae4565b50506001821b610bda565b5060208310610133831016604e8410600b8410161715610bb8575081810a610bda565b610bc28383610afa565b8060001904821115610bd657610bd6610ae4565b0290505b92915050565b600061086b8383610b3d565b6000816000190483118215151615610c0657610c06610ae4565b500290565b600082821015610c1d57610c1d610ae4565b500390565b600060208284031215610c3457600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000600019821415610c6557610c65610ae4565b5060010190565b600060208284031215610c7e57600080fd5b8151801515811461086b57600080fdfea164736f6c634300080a000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a696a63cc78dffa1a63e9e50587c197387ff6c7e0000000000000000000000000000000000000000000000000000000000000001
-----Decoded View---------------
Arg [0] : _vault (address): 0xA696a63cc78DfFa1a63E9E50587C197387FF6C7E
Arg [1] : _maxYearnWithdrawLoss (uint256): 1
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a696a63cc78dffa1a63e9e50587c197387ff6c7e
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 24 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.