Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
0 ERC20 ***
Holders
2
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
115792089237316195423570985008687907853... ERC20 ***Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
YVaultAssetProxy
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
Yes with 7500 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./interfaces/IERC20.sol"; import "./interfaces/IYearnVault.sol"; import "./WrappedPosition.sol"; import "./libraries/Authorizable.sol"; /// SECURITY - This contract has an owner address which can migrate funds to a new yearn vault [or other contract /// with compatible interface] as well as pause deposits and withdraws. This means that any deposited funds /// have the same security as that address. /// @author Element Finance /// @title Yearn Vault v1 Asset Proxy contract YVaultAssetProxy is WrappedPosition, Authorizable { // The addresses of the current yearn vault IYearnVault public vault; // 18 decimal fractional form of the multiplier which is applied after // a vault upgrade. 0 when no upgrade has happened uint88 public conversionRate; // Bool packed into the same storage slot as vault and conversion rate bool public paused; uint8 public immutable vaultDecimals; /// @notice Constructs this contract and stores needed data /// @param vault_ The yearn v2 vault /// @param _token The underlying token. /// This token should revert in the event of a transfer failure. /// @param _name The name of the token created /// @param _symbol The symbol of the token created /// @param _governance The address which can upgrade the yearn vault /// @param _pauser address which can pause this contract constructor( address vault_, IERC20 _token, string memory _name, string memory _symbol, address _governance, address _pauser ) WrappedPosition(_token, _name, _symbol) Authorizable() { // Authorize the pauser _authorize(_pauser); // set the owner setOwner(_governance); // Set the vault vault = IYearnVault(vault_); // Approve the vault so it can pull tokens from this address _token.approve(vault_, type(uint256).max); // Load the decimals and set them as an immutable uint8 localVaultDecimals = IERC20(vault_).decimals(); vaultDecimals = localVaultDecimals; require( uint8(_token.decimals()) == localVaultDecimals, "Inconsistent decimals" ); } /// @notice Checks that the contract has not been paused modifier notPaused() { require(!paused, "Paused"); _; } /// @notice Makes the actual deposit into the yearn vault /// @return Tuple (the shares minted, amount underlying used) function _deposit() internal override notPaused returns (uint256, uint256) { // Get the amount deposited uint256 amount = token.balanceOf(address(this)); // Deposit and get the shares that were minted to this uint256 shares = vault.deposit(amount, address(this)); // If we have migrated our shares are no longer 1 - 1 with the vault shares if (conversionRate != 0) { // conversionRate is the fraction of yearnSharePrice1/yearnSharePrices2 at time of migration // and so this multiplication will convert between yearn shares in the new vault and // those in the old vault shares = (shares * conversionRate) / 1e18; } // Return the amount of shares the user has produced, and the amount used for it. return (shares, amount); } /// @notice Withdraw the number of shares /// @param _shares The number of wrapped position shares to withdraw /// @param _destination The address to send the output funds // @param _underlyingPerShare The possibly precomputed underlying per share /// @return returns the amount of funds freed by doing a yearn withdraw function _withdraw( uint256 _shares, address _destination, uint256 ) internal override notPaused returns (uint256) { // If the conversion rate is non-zero we have upgraded and so our wrapped shares are // not one to one with the original shares. if (conversionRate != 0) { // Then since conversion rate is yearnSharePrice1/yearnSharePrices2 we divide the // wrapped position shares by it because they are equivalent to the first yearn vault shares _shares = (_shares * 1e18) / conversionRate; } // Withdraws shares from the vault. Max loss is set at 100% as // the minimum output value is enforced by the calling // function in the WrappedPosition contract. uint256 amountReceived = vault.withdraw(_shares, _destination, 10000); // Return the amount of underlying return amountReceived; } /// @notice Get the underlying amount of tokens per shares given /// @param _amount The amount of shares you want to know the value of /// @return Value of shares in underlying token function _underlying(uint256 _amount) internal view override returns (uint256) { // We may have to convert before using the vault price per share if (conversionRate != 0) { // Imitate the _withdraw logic and convert this amount to yearn vault2 shares _amount = (_amount * 1e18) / conversionRate; } return (_amount * _pricePerShare()) / (10**vaultDecimals); } /// @notice Get the price per share in the vault /// @return The price per share in units of underlying; function _pricePerShare() internal view returns (uint256) { return vault.pricePerShare(); } /// @notice Function to reset approvals for the proxy function approve() external { token.approve(address(vault), 0); token.approve(address(vault), type(uint256).max); } /// @notice Allows an authorized address or the owner to pause this contract /// @param pauseStatus true for paused, false for not paused /// @dev the caller must be authorized function pause(bool pauseStatus) external onlyAuthorized { paused = pauseStatus; } /// @notice Function to transition between two yearn vaults /// @param newVault The address of the new vault /// @param minOutputShares The min of the new yearn vault's shares the wp will receive /// @dev WARNING - This function has the capacity to steal all user funds from this /// contract and so it should be ensured that the owner is a high quorum /// governance vote through the time lock. function transition(IYearnVault newVault, uint256 minOutputShares) external onlyOwner { // Load the current vault's price per share uint256 currentPricePerShare = _pricePerShare(); // Load the new vault's price per share uint256 newPricePerShare = newVault.pricePerShare(); // Load the current conversion rate or set it to 1 uint256 newConversionRate = conversionRate == 0 ? 1e18 : conversionRate; // Calculate the new conversion rate, note by multiplying by the old // conversion rate here we implicitly support more than 1 upgrade newConversionRate = (newConversionRate * newPricePerShare) / currentPricePerShare; // We now withdraw from the old yearn vault using max shares // Note - Vaults should be checked in the future that they still have this behavior vault.withdraw(type(uint256).max, address(this), 10000); // Approve the new vault token.approve(address(newVault), type(uint256).max); // Then we deposit into the new vault uint256 currentBalance = token.balanceOf(address(this)); uint256 outputShares = newVault.deposit(currentBalance, address(this)); // We enforce a min output require(outputShares >= minOutputShares, "Not enough output"); // Change the stored variables vault = newVault; // because of the truncation yearn vaults can't have a larger diff than ~ billion // times larger conversionRate = uint88(newConversionRate); } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; interface IERC20 { function symbol() external view returns (string memory); function balanceOf(address account) external view returns (uint256); // Note this is non standard but nearly all ERC20 have exposed decimal functions function decimals() external view returns (uint8); 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 ); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./IERC20.sol"; interface IYearnVault is IERC20 { function deposit(uint256, address) external returns (uint256); function withdraw( uint256, address, uint256 ) external returns (uint256); // Returns the amount of underlying per each unit [1e18] of yearn shares function pricePerShare() external view returns (uint256); function governance() external view returns (address); function setDepositLimit(uint256) external; function totalSupply() external view returns (uint256); function totalAssets() external view returns (uint256); function apiVersion() external view returns (string memory); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./interfaces/IERC20.sol"; import "./interfaces/IWETH.sol"; import "./interfaces/IWrappedPosition.sol"; import "./libraries/ERC20Permit.sol"; /// @author Element Finance /// @title Wrapped Position Core abstract contract WrappedPosition is ERC20Permit, IWrappedPosition { IERC20 public immutable override token; /// @notice Constructs this contract /// @param _token The underlying token. /// This token should revert in the event of a transfer failure. /// @param _name the name of this contract /// @param _symbol the symbol for this contract constructor( IERC20 _token, string memory _name, string memory _symbol ) ERC20Permit(_name, _symbol) { token = _token; // We set our decimals to be the same as the underlying _setupDecimals(_token.decimals()); } /// We expect that the following logic will be present in an integration implementation /// which inherits from this contract /// @dev Makes the actual deposit into the 'vault' /// @return Tuple (shares minted, amount underlying used) function _deposit() internal virtual returns (uint256, uint256); /// @dev Makes the actual withdraw from the 'vault' /// @return returns the amount produced function _withdraw( uint256, address, uint256 ) internal virtual returns (uint256); /// @dev Converts between an internal balance representation /// and underlying tokens. /// @return The amount of underlying the input is worth function _underlying(uint256) internal view virtual returns (uint256); /// @notice Get the underlying balance of an address /// @param _who The address to query /// @return The underlying token balance of the address function balanceOfUnderlying(address _who) external view override returns (uint256) { return _underlying(balanceOf[_who]); } /// @notice Returns the amount of the underlying asset a certain amount of shares is worth /// @param _shares Shares to calculate underlying value for /// @return The value of underlying assets for the given shares function getSharesToUnderlying(uint256 _shares) external view override returns (uint256) { return _underlying(_shares); } /// @notice Entry point to deposit tokens into the Wrapped Position contract /// Transfers tokens on behalf of caller so the caller must set /// allowance on the contract prior to call. /// @param _amount The amount of underlying tokens to deposit /// @param _destination The address to mint to /// @return Returns the number of Wrapped Position tokens minted function deposit(address _destination, uint256 _amount) external override returns (uint256) { // Send tokens to the proxy token.transferFrom(msg.sender, address(this), _amount); // Calls our internal deposit function (uint256 shares, ) = _deposit(); // Mint them internal ERC20 tokens corresponding to the deposit _mint(_destination, shares); return shares; } /// @notice Entry point to deposit tokens into the Wrapped Position contract /// Assumes the tokens were transferred before this was called /// @param _destination the destination of this deposit /// @return Returns (WP tokens minted, used underlying, /// senders WP balance before mint) /// @dev WARNING - The call which funds this method MUST be in the same transaction // as the call to this method or you risk loss of funds function prefundedDeposit(address _destination) external override returns ( uint256, uint256, uint256 ) { // Calls our internal deposit function (uint256 shares, uint256 usedUnderlying) = _deposit(); uint256 balanceBefore = balanceOf[_destination]; // Mint them internal ERC20 tokens corresponding to the deposit _mint(_destination, shares); return (shares, usedUnderlying, balanceBefore); } /// @notice Exit point to withdraw tokens from the Wrapped Position contract /// @param _destination The address which is credited with tokens /// @param _shares The amount of shares the user is burning to withdraw underlying /// @param _minUnderlying The min output the caller expects /// @return The amount of underlying transferred to the destination function withdraw( address _destination, uint256 _shares, uint256 _minUnderlying ) public override returns (uint256) { return _positionWithdraw(_destination, _shares, _minUnderlying, 0); } /// @notice This function burns enough tokens from the sender to send _amount /// of underlying to the _destination. /// @param _destination The address to send the output to /// @param _amount The amount of underlying to try to redeem for /// @param _minUnderlying The minium underlying to receive /// @return The amount of underlying released, and shares used function withdrawUnderlying( address _destination, uint256 _amount, uint256 _minUnderlying ) external override returns (uint256, uint256) { // First we load the number of underlying per unit of Wrapped Position token uint256 oneUnit = 10**decimals; uint256 underlyingPerShare = _underlying(oneUnit); // Then we calculate the number of shares we need uint256 shares = (_amount * oneUnit) / underlyingPerShare; // Using this we call the normal withdraw function uint256 underlyingReceived = _positionWithdraw( _destination, shares, _minUnderlying, underlyingPerShare ); return (underlyingReceived, shares); } /// @notice This internal function allows the caller to provide a precomputed 'underlyingPerShare' /// so that we can avoid calling it again in the internal function /// @param _destination The destination to send the output to /// @param _shares The number of shares to withdraw /// @param _minUnderlying The min amount of output to produce /// @param _underlyingPerShare The precomputed shares per underlying /// @return The amount of underlying released function _positionWithdraw( address _destination, uint256 _shares, uint256 _minUnderlying, uint256 _underlyingPerShare ) internal returns (uint256) { // Burn users shares _burn(msg.sender, _shares); // Withdraw that many shares from the vault uint256 withdrawAmount = _withdraw( _shares, _destination, _underlyingPerShare ); // We revert if this call doesn't produce enough underlying // This security feature is useful in some edge cases require(withdrawAmount >= _minUnderlying, "Not enough underlying"); return withdrawAmount; } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.7.0; contract Authorizable { // This contract allows a flexible authorization scheme // The owner who can change authorization status address public owner; // A mapping from an address to its authorization status mapping(address => bool) public authorized; /// @dev We set the deployer to the owner constructor() { owner = msg.sender; } /// @dev This modifier checks if the msg.sender is the owner modifier onlyOwner() { require(msg.sender == owner, "Sender not owner"); _; } /// @dev This modifier checks if an address is authorized modifier onlyAuthorized() { require(isAuthorized(msg.sender), "Sender not Authorized"); _; } /// @dev Returns true if an address is authorized /// @param who the address to check /// @return true if authorized false if not function isAuthorized(address who) public view returns (bool) { return authorized[who]; } /// @dev Privileged function authorize an address /// @param who the address to authorize function authorize(address who) external onlyOwner { _authorize(who); } /// @dev Privileged function to de authorize an address /// @param who The address to remove authorization from function deauthorize(address who) external onlyOwner { authorized[who] = false; } /// @dev Function to change owner /// @param who The new owner address function setOwner(address who) public onlyOwner { owner = who; } /// @dev Inheritable function which authorizes someone /// @param who the address to authorize function _authorize(address who) internal { authorized[who] = true; } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./IERC20.sol"; interface IWETH is IERC20 { function deposit() external payable; function withdraw(uint256 wad) external; event Deposit(address indexed dst, uint256 wad); event Withdrawal(address indexed src, uint256 wad); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./IERC20Permit.sol"; import "./IERC20.sol"; interface IWrappedPosition is IERC20Permit { function token() external view returns (IERC20); function balanceOfUnderlying(address who) external view returns (uint256); function getSharesToUnderlying(uint256 shares) external view returns (uint256); function deposit(address sender, uint256 amount) external returns (uint256); function withdraw( address sender, uint256 _shares, uint256 _minUnderlying ) external returns (uint256); function withdrawUnderlying( address _destination, uint256 _amount, uint256 _minUnderlying ) external returns (uint256, uint256); function prefundedDeposit(address _destination) external returns ( uint256, uint256, uint256 ); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "../interfaces/IERC20Permit.sol"; // This default erc20 library is designed for max efficiency and security. // WARNING: By default it does not include totalSupply which breaks the ERC20 standard // to use a fully standard compliant ERC20 use 'ERC20PermitWithSupply" abstract contract ERC20Permit is IERC20Permit { // --- ERC20 Data --- // The name of the erc20 token string public name; // The symbol of the erc20 token string public override symbol; // The decimals of the erc20 token, should default to 18 for new tokens uint8 public override decimals; // A mapping which tracks user token balances mapping(address => uint256) public override balanceOf; // A mapping which tracks which addresses a user allows to move their tokens mapping(address => mapping(address => uint256)) public override allowance; // A mapping which tracks the permit signature nonces for users mapping(address => uint256) public override nonces; // --- EIP712 niceties --- // solhint-disable-next-line var-name-mixedcase bytes32 public override DOMAIN_SEPARATOR; // bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; /// @notice Initializes the erc20 contract /// @param name_ the value 'name' will be set to /// @param symbol_ the value 'symbol' will be set to /// @dev decimals default to 18 and must be reset by an inheriting contract for /// non standard decimal values constructor(string memory name_, string memory symbol_) { // Set the state variables name = name_; symbol = symbol_; decimals = 18; // By setting these addresses to 0 attempting to execute a transfer to // either of them will revert. This is a gas efficient way to prevent // a common user mistake where they transfer to the token address. // These values are not considered 'real' tokens and so are not included // in 'total supply' which only contains minted tokens. balanceOf[address(0)] = type(uint256).max; balanceOf[address(this)] = type(uint256).max; // Optional extra state manipulation _extraConstruction(); // Computes the EIP 712 domain separator which prevents user signed messages for // this contract to be replayed in other contracts. // https://eips.ethereum.org/EIPS/eip-712 DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256( "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" ), keccak256(bytes(name)), keccak256(bytes("1")), block.chainid, address(this) ) ); } /// @notice An optional override function to execute and change state before immutable assignment function _extraConstruction() internal virtual {} // --- Token --- /// @notice Allows a token owner to send tokens to another address /// @param recipient The address which will be credited with the tokens /// @param amount The amount user token to send /// @return returns true on success, reverts on failure so cannot return false. /// @dev transfers to this contract address or 0 will fail function transfer(address recipient, uint256 amount) public virtual override returns (bool) { // We forward this call to 'transferFrom' return transferFrom(msg.sender, recipient, amount); } /// @notice Transfers an amount of erc20 from a spender to a receipt /// @param spender The source of the ERC20 tokens /// @param recipient The destination of the ERC20 tokens /// @param amount the number of tokens to send /// @return returns true on success and reverts on failure /// @dev will fail transfers which send funds to this contract or 0 function transferFrom( address spender, address recipient, uint256 amount ) public virtual override returns (bool) { // Load balance and allowance uint256 balance = balanceOf[spender]; require(balance >= amount, "ERC20: insufficient-balance"); // We potentially have to change allowances if (spender != msg.sender) { // Loading the allowance in the if block prevents vanilla transfers // from paying for the sload. uint256 allowed = allowance[spender][msg.sender]; // If the allowance is max we do not reduce it // Note - This means that max allowances will be more gas efficient // by not requiring a sstore on 'transferFrom' if (allowed != type(uint256).max) { require(allowed >= amount, "ERC20: insufficient-allowance"); allowance[spender][msg.sender] = allowed - amount; } } // Update the balances balanceOf[spender] = balance - amount; // Note - In the constructor we initialize the 'balanceOf' of address 0 and // the token address to uint256.max and so in 8.0 transfers to those // addresses revert on this step. balanceOf[recipient] = balanceOf[recipient] + amount; // Emit the needed event emit Transfer(spender, recipient, amount); // Return that this call succeeded return true; } /// @notice This internal minting function allows inheriting contracts /// to mint tokens in the way they wish. /// @param account the address which will receive the token. /// @param amount the amount of token which they will receive /// @dev This function is virtual so that it can be overridden, if you /// are reviewing this contract for security you should ensure to /// check for overrides function _mint(address account, uint256 amount) internal virtual { // Add tokens to the account balanceOf[account] = balanceOf[account] + amount; // Emit an event to track the minting emit Transfer(address(0), account, amount); } /// @notice This internal burning function allows inheriting contracts to /// burn tokens in the way they see fit. /// @param account the account to remove tokens from /// @param amount the amount of tokens to remove /// @dev This function is virtual so that it can be overridden, if you /// are reviewing this contract for security you should ensure to /// check for overrides function _burn(address account, uint256 amount) internal virtual { // Reduce the balance of the account balanceOf[account] = balanceOf[account] - amount; // Emit an event tracking transfers emit Transfer(account, address(0), amount); } /// @notice This function allows a user to approve an account which can transfer /// tokens on their behalf. /// @param account The account which will be approve to transfer tokens /// @param amount The approval amount, if set to uint256.max the allowance does not go down on transfers. /// @return returns true for compatibility with the ERC20 standard function approve(address account, uint256 amount) public virtual override returns (bool) { // Set the senders allowance for account to amount allowance[msg.sender][account] = amount; // Emit an event to track approvals emit Approval(msg.sender, account, amount); return true; } /// @notice This function allows a caller who is not the owner of an account to execute the functionality of 'approve' with the owners signature. /// @param owner the owner of the account which is having the new approval set /// @param spender the address which will be allowed to spend owner's tokens /// @param value the new allowance value /// @param deadline the timestamp which the signature must be submitted by to be valid /// @param v Extra ECDSA data which allows public key recovery from signature assumed to be 27 or 28 /// @param r The r component of the ECDSA signature /// @param s The s component of the ECDSA signature /// @dev The signature for this function follows EIP 712 standard and should be generated with the /// eth_signTypedData JSON RPC call instead of the eth_sign JSON RPC call. If using out of date /// parity signing libraries the v component may need to be adjusted. Also it is very rare but possible /// for v to be other values, those values are not supported. function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external override { // The EIP 712 digest for this function bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR, keccak256( abi.encode( PERMIT_TYPEHASH, owner, spender, value, nonces[owner], deadline ) ) ) ); // Require that the owner is not zero require(owner != address(0), "ERC20: invalid-address-0"); // Require that we have a valid signature from the owner require(owner == ecrecover(digest, v, r, s), "ERC20: invalid-permit"); // Require that the signature is not expired require( deadline == 0 || block.timestamp <= deadline, "ERC20: permit-expired" ); // Format the signature to the default format require( uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ERC20: invalid signature 's' value" ); // Increment the signature nonce to prevent replay nonces[owner]++; // Set the allowance to the new value allowance[owner][spender] = value; // Emit an approval event to be able to track this happening emit Approval(owner, spender, value); } /// @notice Internal function which allows inheriting contract to set custom decimals /// @param decimals_ the new decimal value function _setupDecimals(uint8 decimals_) internal { // Set the decimals decimals = decimals_; } }
// Forked from openzepplin // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit is IERC20 { /** * @dev Sets `value` as the allowance of `spender` over `owner`'s tokens, * given `owner`'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); }
{ "optimizer": { "enabled": true, "runs": 7500 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"vault_","type":"address"},{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_pauser","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"conversionRate","outputs":[{"internalType":"uint88","name":"","type":"uint88"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"deauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_destination","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"getSharesToUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"pauseStatus","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_destination","type":"address"}],"name":"prefundedDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IYearnVault","name":"newVault","type":"address"},{"internalType":"uint256","name":"minOutputShares","type":"uint256"}],"name":"transition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IYearnVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_destination","type":"address"},{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"uint256","name":"_minUnderlying","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_destination","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minUnderlying","type":"uint256"}],"name":"withdrawUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b5060405162002be138038062002be18339810160408190526200003491620005cf565b84848481818160009080519060200190620000519291906200047e565b508051620000679060019060208401906200047e565b506002805460ff1916601217905560036020526000197f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff8190553060009081526040902055620000b6620003f3565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620000e89190620006d8565b60408051918290038220828201825260018352603160f81b60209384015290516200013b93927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc691469130910162000796565b60408051601f1981840301815282825280516020918201206006556001600160601b0319606089901b1660805263313ce56760e01b83529051620001ea94506001600160a01b038816935063313ce567926004808201939291829003018186803b158015620001a957600080fd5b505afa158015620001be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e49190620006b5565b620003f5565b5050600780546001600160a01b03191633179055506200020a816200040b565b62000215826200042f565b600980546001600160a01b0319166001600160a01b038881169190911790915560405163095ea7b360e01b81529086169063095ea7b39062000260908990600019906004016200077d565b602060405180830381600087803b1580156200027b57600080fd5b505af115801562000290573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b691906200068c565b506000866001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620002f357600080fd5b505afa15801562000308573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032e9190620006b5565b90508060ff1660a08160ff1660f81b815250508060ff16866001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037f57600080fd5b505afa15801562000394573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ba9190620006b5565b60ff1614620003e65760405162461bcd60e51b8152600401620003dd90620007ec565b60405180910390fd5b505050505050506200089b565b565b6002805460ff191660ff92909216919091179055565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6007546001600160a01b031633146200045c5760405162461bcd60e51b8152600401620003dd90620007c2565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200048c906200082f565b90600052602060002090601f016020900481019282620004b05760008555620004fb565b82601f10620004cb57805160ff1916838001178555620004fb565b82800160010185558215620004fb579182015b82811115620004fb578251825591602001919060010190620004de565b50620005099291506200050d565b5090565b5b808211156200050957600081556001016200050e565b600082601f83011262000535578081fd5b81516001600160401b03808211156200055257620005526200086c565b6040516020601f8401601f19168201810183811183821017156200057a576200057a6200086c565b604052838252858401810187101562000591578485fd5b8492505b83831015620005b4578583018101518284018201529182019162000595565b83831115620005c557848185840101525b5095945050505050565b60008060008060008060c08789031215620005e8578182fd5b8651620005f58162000882565b6020880151909650620006088162000882565b60408801519095506001600160401b038082111562000625578384fd5b620006338a838b0162000524565b9550606089015191508082111562000649578384fd5b506200065889828a0162000524565b93505060808701516200066b8162000882565b60a08801519092506200067e8162000882565b809150509295509295509295565b6000602082840312156200069e578081fd5b81518015158114620006ae578182fd5b9392505050565b600060208284031215620006c7578081fd5b815160ff81168114620006ae578182fd5b8154600090819060028104600180831680620006f557607f831692505b60208084108214156200071657634e487b7160e01b87526022600452602487fd5b8180156200072d57600181146200073f576200076f565b60ff198616895284890196506200076f565b6200074a8a62000823565b885b86811015620007675781548b8201529085019083016200074c565b505084890196505b509498975050505050505050565b6001600160a01b03929092168252602082015260400190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60208082526010908201526f29b2b73232b9103737ba1037bbb732b960811b604082015260600190565b60208082526015908201527f496e636f6e73697374656e7420646563696d616c730000000000000000000000604082015260600190565b60009081526020902090565b6002810460018216806200084457607f821691505b602082108114156200086657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200089857600080fd5b50565b60805160601c60a05160f81c6122e9620008f860003960008181610be9015261144b0152600081816105f4015281816106b601528181610a0b01528181610e8301528181610f420152818161138f015261150b01526122e96000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80637ffdf53e1161010f578063b9181611116100a2578063e613deb211610071578063e613deb214610411578063fbfa77cf14610424578063fc0c546a1461042c578063fe9fbb8014610434576101f0565b8063b9181611146103c5578063d1f4f826146103d8578063d505accf146103eb578063dd62ed3e146103fe576101f0565b80639d6179c3116100de5780639d6179c314610384578063a9059cbb1461038c578063b5c5f6721461039f578063b6a5d7de146103b2576101f0565b80637ffdf53e1461033057806385f45c88146103455780638da5cb5b1461036757806395d89b411461037c576101f0565b8063313ce567116101875780635c975abb116101565780635c975abb146102e157806367caf871146102e957806370a082311461030a5780637ecebe001461031d576101f0565b8063313ce5671461029e5780633644e515146102b35780633af9e669146102bb57806347e7ef24146102ce576101f0565b806313af4035116101c357806313af40351461025057806323b872dd1461026357806327c97fa51461027657806330adf81f14610289576101f0565b806302329a29146101f557806306fdde031461020a578063095ea7b31461022857806312424e3f14610248575b600080fd5b610208610203366004611b8b565b610447565b005b6102126104c9565b60405161021f9190611ce0565b60405180910390f35b61023b610236366004611b2c565b610557565b60405161021f9190611c7a565b6102086105c1565b61020861025e366004611a23565b610748565b61023b610271366004611a77565b6107ac565b610208610284366004611a23565b610914565b61029161097d565b60405161021f9190611c85565b6102a66109a1565b60405161021f9190612046565b6102916109aa565b6102916102c9366004611a23565b6109b0565b6102916102dc366004611b2c565b6109d8565b61023b610aae565b6102fc6102f7366004611b57565b610ada565b60405161021f92919061200a565b610291610318366004611a23565b610b37565b61029161032b366004611a23565b610b49565b610338610b5b565b60405161021f919061202e565b610358610353366004611a23565b610b86565b60405161021f93929190612018565b61036f610bcb565b60405161021f9190611c29565b610212610bda565b6102a6610be7565b61023b61039a366004611b2c565b610c0b565b6102916103ad366004611b57565b610c18565b6102086103c0366004611a23565b610c2f565b61023b6103d3366004611a23565b610c62565b6102086103e6366004611b2c565b610c77565b6102086103f9366004611ab7565b6110fa565b61029161040c366004611a3f565b611356565b61029161041f366004611bc3565b611373565b61036f61137e565b61036f61138d565b61023b610442366004611a23565b6113b1565b610450336113b1565b6104755760405162461bcd60e51b815260040161046c90611e53565b60405180910390fd5b600980549115157f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b600080546104d6906121f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610502906121f2565b801561054f5780601f106105245761010080835404028352916020019161054f565b820191906000526020600020905b81548152906001019060200180831161053257829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105b0908690611c85565b60405180910390a350600192915050565b6009546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263095ea7b392610630929190911690600090600401611c61565b602060405180830381600087803b15801561064a57600080fd5b505af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106829190611ba7565b506009546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263095ea7b3926106f392919091169060001990600401611c61565b602060405180830381600087803b15801561070d57600080fd5b505af1158015610721573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107459190611ba7565b50565b6007546001600160a01b031633146107725760405162461bcd60e51b815260040161046c90611dbf565b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6001600160a01b038316600090815260036020526040812054828110156107e55760405162461bcd60e51b815260040161046c90611f9d565b6001600160a01b0385163314610873576001600160a01b0385166000908152600460209081526040808320338452909152902054600019811461087157838110156108425760405162461bcd60e51b815260040161046c90611d51565b61084c84826121db565b6001600160a01b03871660009081526004602090815260408083203384529091529020555b505b61087d83826121db565b6001600160a01b0380871660009081526003602052604080822093909355908616815220546108ad908490612054565b6001600160a01b0380861660008181526003602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906108ff908790611c85565b60405180910390a360019150505b9392505050565b6007546001600160a01b0316331461093e5760405162461bcd60e51b815260040161046c90611dbf565b6001600160a01b0316600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60025460ff1681565b60065481565b6001600160a01b0381166000908152600360205260408120546109d2906113cf565b92915050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90610a4490339030908790600401611c3d565b602060405180830381600087803b158015610a5e57600080fd5b505af1158015610a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a969190611ba7565b506000610aa161148d565b50905061090d84826116b4565b6009547f0100000000000000000000000000000000000000000000000000000000000000900460ff1681565b60025460009081908190610af29060ff16600a6120eb565b90506000610aff826113cf565b9050600081610b0e84896121bc565b610b18919061206c565b90506000610b2889838986611733565b99919850909650505050505050565b60036020526000908152604090205481565b60056020526000908152604090205481565b6009547401000000000000000000000000000000000000000090046affffffffffffffffffffff1681565b6000806000806000610b9661148d565b6001600160a01b0388166000908152600360205260409020549193509150610bbe87846116b4565b9196909550909350915050565b6007546001600160a01b031681565b600180546104d6906121f2565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061090d3384846107ac565b6000610c278484846000611733565b949350505050565b6007546001600160a01b03163314610c595760405162461bcd60e51b815260040161046c90611dbf565b61074581611777565b60086020526000908152604090205460ff1681565b6007546001600160a01b03163314610ca15760405162461bcd60e51b815260040161046c90611dbf565b6000610cab6117b9565b90506000836001600160a01b03166399530b066040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce857600080fd5b505afa158015610cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d209190611bdb565b6009549091506000907401000000000000000000000000000000000000000090046affffffffffffffffffffff1615610d80576009547401000000000000000000000000000000000000000090046affffffffffffffffffffff16610d8a565b670de0b6b3a76400005b6affffffffffffffffffffff16905082610da483836121bc565b610dae919061206c565b6009546040517fe63697c80000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063e63697c890610e009060001990309061271090600401611feb565b602060405180830381600087803b158015610e1a57600080fd5b505af1158015610e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e529190611bdb565b506040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390610ebc90889060001990600401611c61565b602060405180830381600087803b158015610ed657600080fd5b505af1158015610eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0e9190611ba7565b506040517f70a082310000000000000000000000000000000000000000000000000000000081526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610f77903090600401611c29565b60206040518083038186803b158015610f8f57600080fd5b505afa158015610fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc79190611bdb565b90506000866001600160a01b0316636e553f6583306040518363ffffffff1660e01b8152600401610ff9929190611fd4565b602060405180830381600087803b15801561101357600080fd5b505af1158015611027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104b9190611bdb565b90508581101561106d5760405162461bcd60e51b815260040161046c90611e8a565b5050600980546affffffffffffffffffffff90921674010000000000000000000000000000000000000000027fff0000000000000000000000ffffffffffffffffffffffffffffffffffffffff6001600160a01b039097167fffffffffffffffffffffffff0000000000000000000000000000000000000000909316929092179590951617909355505050565b6006546001600160a01b0388166000908152600560209081526040808320549051929392611153927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d92918d9101611c8e565b6040516020818303038152906040528051906020012060405160200161117a929190611bf3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506001600160a01b0388166111d85760405162461bcd60e51b815260040161046c90611ec1565b600181858585604051600081526020016040526040516111fb9493929190611cc2565b6020604051602081039080840390855afa15801561121d573d6000803e3d6000fd5b505050602060405103516001600160a01b0316886001600160a01b0316146112575760405162461bcd60e51b815260040161046c90611ef8565b8415806112645750844211155b6112805760405162461bcd60e51b815260040161046c90611f66565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156112c05760405162461bcd60e51b815260040161046c90611df6565b6001600160a01b03881660009081526005602052604081208054916112e483612246565b90915550506001600160a01b038089166000818152600460209081526040808320948c168084529490915290819020899055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611344908a90611c85565b60405180910390a35050505050505050565b600460209081526000928352604080842090915290825290205481565b60006109d2826113cf565b6009546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b031660009081526008602052604090205460ff1690565b6009546000907401000000000000000000000000000000000000000090046affffffffffffffffffffff1615611446576009547401000000000000000000000000000000000000000090046affffffffffffffffffffff1661143983670de0b6b3a76400006121bc565b611443919061206c565b91505b6114717f0000000000000000000000000000000000000000000000000000000000000000600a6120eb565b6114796117b9565b61148390846121bc565b6109d2919061206c565b60095460009081907f0100000000000000000000000000000000000000000000000000000000000000900460ff16156114d85760405162461bcd60e51b815260040161046c90611d88565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190611540903090600401611c29565b60206040518083038186803b15801561155857600080fd5b505afa15801561156c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115909190611bdb565b6009546040517f6e553f650000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b0390911690636e553f65906115e19085903090600401611fd4565b602060405180830381600087803b1580156115fb57600080fd5b505af115801561160f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116339190611bdb565b6009549091507401000000000000000000000000000000000000000090046affffffffffffffffffffff16156116ac57600954670de0b6b3a76400009061169f907401000000000000000000000000000000000000000090046affffffffffffffffffffff16836121bc565b6116a9919061206c565b90505b925090509091565b6001600160a01b0382166000908152600360205260409020546116d8908290612054565b6001600160a01b0383166000818152600360205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611727908590611c85565b60405180910390a35050565b600061173f3385611854565b600061174c8587856118c4565b90508381101561176e5760405162461bcd60e51b815260040161046c90611f2f565b95945050505050565b6001600160a01b0316600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b600954604080517f99530b0600000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916399530b06916004808301926020929190829003018186803b15801561181757600080fd5b505afa15801561182b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184f9190611bdb565b905090565b6001600160a01b0382166000908152600360205260409020546118789082906121db565b6001600160a01b0383166000818152600360205260408082209390935591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611727908590611c85565b6009546000907f0100000000000000000000000000000000000000000000000000000000000000900460ff161561190d5760405162461bcd60e51b815260040161046c90611d88565b6009547401000000000000000000000000000000000000000090046affffffffffffffffffffff1615611981576009547401000000000000000000000000000000000000000090046affffffffffffffffffffff1661197485670de0b6b3a76400006121bc565b61197e919061206c565b93505b6009546040517fe63697c80000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063e63697c8906119d1908890889061271090600401611feb565b602060405180830381600087803b1580156119eb57600080fd5b505af11580156119ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176e9190611bdb565b600060208284031215611a34578081fd5b813561090d81612290565b60008060408385031215611a51578081fd5b8235611a5c81612290565b91506020830135611a6c81612290565b809150509250929050565b600080600060608486031215611a8b578081fd5b8335611a9681612290565b92506020840135611aa681612290565b929592945050506040919091013590565b600080600080600080600060e0888a031215611ad1578283fd5b8735611adc81612290565b96506020880135611aec81612290565b95506040880135945060608801359350608088013560ff81168114611b0f578384fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611b3e578182fd5b8235611b4981612290565b946020939093013593505050565b600080600060608486031215611b6b578283fd5b8335611b7681612290565b95602085013595506040909401359392505050565b600060208284031215611b9c578081fd5b813561090d816122a5565b600060208284031215611bb8578081fd5b815161090d816122a5565b600060208284031215611bd4578081fd5b5035919050565b600060208284031215611bec578081fd5b5051919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015611d0c57858101830151858201604001528201611cf0565b81811115611d1d5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6020808252601d908201527f45524332303a20696e73756666696369656e742d616c6c6f77616e6365000000604082015260600190565b60208082526006908201527f5061757365640000000000000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f53656e646572206e6f74206f776e657200000000000000000000000000000000604082015260600190565b60208082526022908201527f45524332303a20696e76616c6964207369676e6174757265202773272076616c60408201527f7565000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526015908201527f53656e646572206e6f7420417574686f72697a65640000000000000000000000604082015260600190565b60208082526011908201527f4e6f7420656e6f756768206f7574707574000000000000000000000000000000604082015260600190565b60208082526018908201527f45524332303a20696e76616c69642d616464726573732d300000000000000000604082015260600190565b60208082526015908201527f45524332303a20696e76616c69642d7065726d69740000000000000000000000604082015260600190565b60208082526015908201527f4e6f7420656e6f75676820756e6465726c79696e670000000000000000000000604082015260600190565b60208082526015908201527f45524332303a207065726d69742d657870697265640000000000000000000000604082015260600190565b6020808252601b908201527f45524332303a20696e73756666696369656e742d62616c616e63650000000000604082015260600190565b9182526001600160a01b0316602082015260400190565b9283526001600160a01b03919091166020830152604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b6affffffffffffffffffffff91909116815260200190565b60ff91909116815260200190565b6000821982111561206757612067612261565b500190565b6000826120a0577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b80825b60018086116120b757506120e2565b8187048211156120c9576120c9612261565b808616156120d657918102915b9490941c9380026120a8565b94509492505050565b600061090d60001960ff8516846000826121075750600161090d565b816121145750600061090d565b816001811461212a576002811461213457612161565b600191505061090d565b60ff84111561214557612145612261565b6001841b91508482111561215b5761215b612261565b5061090d565b5060208310610133831016604e8410600b8410161715612194575081810a8381111561218f5761218f612261565b61090d565b6121a184848460016120a5565b8086048211156121b3576121b3612261565b02949350505050565b60008160001904831182151516156121d6576121d6612261565b500290565b6000828210156121ed576121ed612261565b500390565b60028104600182168061220657607f821691505b60208210811415612240577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060001982141561225a5761225a612261565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6001600160a01b038116811461074557600080fd5b801515811461074557600080fdfea264697066735822122031ed357fa9d40691976df70868ef206c6fca7eed696ff403331f46a85811347e64736f6c63430008000033000000000000000000000000da816459f1ab5631232fe5e97a05bbbb94970c950000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000081758f3361a769016eae4844072fa6d7f828a65100000000000000000000000040309f197e7f94b555904df0f788a3f48cf326ab000000000000000000000000000000000000000000000000000000000000000d656c656d656e742079764441490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057976444149000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637ffdf53e1161010f578063b9181611116100a2578063e613deb211610071578063e613deb214610411578063fbfa77cf14610424578063fc0c546a1461042c578063fe9fbb8014610434576101f0565b8063b9181611146103c5578063d1f4f826146103d8578063d505accf146103eb578063dd62ed3e146103fe576101f0565b80639d6179c3116100de5780639d6179c314610384578063a9059cbb1461038c578063b5c5f6721461039f578063b6a5d7de146103b2576101f0565b80637ffdf53e1461033057806385f45c88146103455780638da5cb5b1461036757806395d89b411461037c576101f0565b8063313ce567116101875780635c975abb116101565780635c975abb146102e157806367caf871146102e957806370a082311461030a5780637ecebe001461031d576101f0565b8063313ce5671461029e5780633644e515146102b35780633af9e669146102bb57806347e7ef24146102ce576101f0565b806313af4035116101c357806313af40351461025057806323b872dd1461026357806327c97fa51461027657806330adf81f14610289576101f0565b806302329a29146101f557806306fdde031461020a578063095ea7b31461022857806312424e3f14610248575b600080fd5b610208610203366004611b8b565b610447565b005b6102126104c9565b60405161021f9190611ce0565b60405180910390f35b61023b610236366004611b2c565b610557565b60405161021f9190611c7a565b6102086105c1565b61020861025e366004611a23565b610748565b61023b610271366004611a77565b6107ac565b610208610284366004611a23565b610914565b61029161097d565b60405161021f9190611c85565b6102a66109a1565b60405161021f9190612046565b6102916109aa565b6102916102c9366004611a23565b6109b0565b6102916102dc366004611b2c565b6109d8565b61023b610aae565b6102fc6102f7366004611b57565b610ada565b60405161021f92919061200a565b610291610318366004611a23565b610b37565b61029161032b366004611a23565b610b49565b610338610b5b565b60405161021f919061202e565b610358610353366004611a23565b610b86565b60405161021f93929190612018565b61036f610bcb565b60405161021f9190611c29565b610212610bda565b6102a6610be7565b61023b61039a366004611b2c565b610c0b565b6102916103ad366004611b57565b610c18565b6102086103c0366004611a23565b610c2f565b61023b6103d3366004611a23565b610c62565b6102086103e6366004611b2c565b610c77565b6102086103f9366004611ab7565b6110fa565b61029161040c366004611a3f565b611356565b61029161041f366004611bc3565b611373565b61036f61137e565b61036f61138d565b61023b610442366004611a23565b6113b1565b610450336113b1565b6104755760405162461bcd60e51b815260040161046c90611e53565b60405180910390fd5b600980549115157f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b600080546104d6906121f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610502906121f2565b801561054f5780601f106105245761010080835404028352916020019161054f565b820191906000526020600020905b81548152906001019060200180831161053257829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105b0908690611c85565b60405180910390a350600192915050565b6009546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81169263095ea7b392610630929190911690600090600401611c61565b602060405180830381600087803b15801561064a57600080fd5b505af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106829190611ba7565b506009546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81169263095ea7b3926106f392919091169060001990600401611c61565b602060405180830381600087803b15801561070d57600080fd5b505af1158015610721573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107459190611ba7565b50565b6007546001600160a01b031633146107725760405162461bcd60e51b815260040161046c90611dbf565b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6001600160a01b038316600090815260036020526040812054828110156107e55760405162461bcd60e51b815260040161046c90611f9d565b6001600160a01b0385163314610873576001600160a01b0385166000908152600460209081526040808320338452909152902054600019811461087157838110156108425760405162461bcd60e51b815260040161046c90611d51565b61084c84826121db565b6001600160a01b03871660009081526004602090815260408083203384529091529020555b505b61087d83826121db565b6001600160a01b0380871660009081526003602052604080822093909355908616815220546108ad908490612054565b6001600160a01b0380861660008181526003602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906108ff908790611c85565b60405180910390a360019150505b9392505050565b6007546001600160a01b0316331461093e5760405162461bcd60e51b815260040161046c90611dbf565b6001600160a01b0316600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60025460ff1681565b60065481565b6001600160a01b0381166000908152600360205260408120546109d2906113cf565b92915050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081526000906001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16906323b872dd90610a4490339030908790600401611c3d565b602060405180830381600087803b158015610a5e57600080fd5b505af1158015610a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a969190611ba7565b506000610aa161148d565b50905061090d84826116b4565b6009547f0100000000000000000000000000000000000000000000000000000000000000900460ff1681565b60025460009081908190610af29060ff16600a6120eb565b90506000610aff826113cf565b9050600081610b0e84896121bc565b610b18919061206c565b90506000610b2889838986611733565b99919850909650505050505050565b60036020526000908152604090205481565b60056020526000908152604090205481565b6009547401000000000000000000000000000000000000000090046affffffffffffffffffffff1681565b6000806000806000610b9661148d565b6001600160a01b0388166000908152600360205260409020549193509150610bbe87846116b4565b9196909550909350915050565b6007546001600160a01b031681565b600180546104d6906121f2565b7f000000000000000000000000000000000000000000000000000000000000001281565b600061090d3384846107ac565b6000610c278484846000611733565b949350505050565b6007546001600160a01b03163314610c595760405162461bcd60e51b815260040161046c90611dbf565b61074581611777565b60086020526000908152604090205460ff1681565b6007546001600160a01b03163314610ca15760405162461bcd60e51b815260040161046c90611dbf565b6000610cab6117b9565b90506000836001600160a01b03166399530b066040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce857600080fd5b505afa158015610cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d209190611bdb565b6009549091506000907401000000000000000000000000000000000000000090046affffffffffffffffffffff1615610d80576009547401000000000000000000000000000000000000000090046affffffffffffffffffffff16610d8a565b670de0b6b3a76400005b6affffffffffffffffffffff16905082610da483836121bc565b610dae919061206c565b6009546040517fe63697c80000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063e63697c890610e009060001990309061271090600401611feb565b602060405180830381600087803b158015610e1a57600080fd5b505af1158015610e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e529190611bdb565b506040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f169063095ea7b390610ebc90889060001990600401611c61565b602060405180830381600087803b158015610ed657600080fd5b505af1158015610eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0e9190611ba7565b506040517f70a082310000000000000000000000000000000000000000000000000000000081526000906001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16906370a0823190610f77903090600401611c29565b60206040518083038186803b158015610f8f57600080fd5b505afa158015610fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc79190611bdb565b90506000866001600160a01b0316636e553f6583306040518363ffffffff1660e01b8152600401610ff9929190611fd4565b602060405180830381600087803b15801561101357600080fd5b505af1158015611027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104b9190611bdb565b90508581101561106d5760405162461bcd60e51b815260040161046c90611e8a565b5050600980546affffffffffffffffffffff90921674010000000000000000000000000000000000000000027fff0000000000000000000000ffffffffffffffffffffffffffffffffffffffff6001600160a01b039097167fffffffffffffffffffffffff0000000000000000000000000000000000000000909316929092179590951617909355505050565b6006546001600160a01b0388166000908152600560209081526040808320549051929392611153927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d92918d9101611c8e565b6040516020818303038152906040528051906020012060405160200161117a929190611bf3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506001600160a01b0388166111d85760405162461bcd60e51b815260040161046c90611ec1565b600181858585604051600081526020016040526040516111fb9493929190611cc2565b6020604051602081039080840390855afa15801561121d573d6000803e3d6000fd5b505050602060405103516001600160a01b0316886001600160a01b0316146112575760405162461bcd60e51b815260040161046c90611ef8565b8415806112645750844211155b6112805760405162461bcd60e51b815260040161046c90611f66565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156112c05760405162461bcd60e51b815260040161046c90611df6565b6001600160a01b03881660009081526005602052604081208054916112e483612246565b90915550506001600160a01b038089166000818152600460209081526040808320948c168084529490915290819020899055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611344908a90611c85565b60405180910390a35050505050505050565b600460209081526000928352604080842090915290825290205481565b60006109d2826113cf565b6009546001600160a01b031681565b7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81565b6001600160a01b031660009081526008602052604090205460ff1690565b6009546000907401000000000000000000000000000000000000000090046affffffffffffffffffffff1615611446576009547401000000000000000000000000000000000000000090046affffffffffffffffffffff1661143983670de0b6b3a76400006121bc565b611443919061206c565b91505b6114717f0000000000000000000000000000000000000000000000000000000000000012600a6120eb565b6114796117b9565b61148390846121bc565b6109d2919061206c565b60095460009081907f0100000000000000000000000000000000000000000000000000000000000000900460ff16156114d85760405162461bcd60e51b815260040161046c90611d88565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526000906001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16906370a0823190611540903090600401611c29565b60206040518083038186803b15801561155857600080fd5b505afa15801561156c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115909190611bdb565b6009546040517f6e553f650000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b0390911690636e553f65906115e19085903090600401611fd4565b602060405180830381600087803b1580156115fb57600080fd5b505af115801561160f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116339190611bdb565b6009549091507401000000000000000000000000000000000000000090046affffffffffffffffffffff16156116ac57600954670de0b6b3a76400009061169f907401000000000000000000000000000000000000000090046affffffffffffffffffffff16836121bc565b6116a9919061206c565b90505b925090509091565b6001600160a01b0382166000908152600360205260409020546116d8908290612054565b6001600160a01b0383166000818152600360205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611727908590611c85565b60405180910390a35050565b600061173f3385611854565b600061174c8587856118c4565b90508381101561176e5760405162461bcd60e51b815260040161046c90611f2f565b95945050505050565b6001600160a01b0316600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b600954604080517f99530b0600000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916399530b06916004808301926020929190829003018186803b15801561181757600080fd5b505afa15801561182b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184f9190611bdb565b905090565b6001600160a01b0382166000908152600360205260409020546118789082906121db565b6001600160a01b0383166000818152600360205260408082209390935591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611727908590611c85565b6009546000907f0100000000000000000000000000000000000000000000000000000000000000900460ff161561190d5760405162461bcd60e51b815260040161046c90611d88565b6009547401000000000000000000000000000000000000000090046affffffffffffffffffffff1615611981576009547401000000000000000000000000000000000000000090046affffffffffffffffffffff1661197485670de0b6b3a76400006121bc565b61197e919061206c565b93505b6009546040517fe63697c80000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063e63697c8906119d1908890889061271090600401611feb565b602060405180830381600087803b1580156119eb57600080fd5b505af11580156119ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176e9190611bdb565b600060208284031215611a34578081fd5b813561090d81612290565b60008060408385031215611a51578081fd5b8235611a5c81612290565b91506020830135611a6c81612290565b809150509250929050565b600080600060608486031215611a8b578081fd5b8335611a9681612290565b92506020840135611aa681612290565b929592945050506040919091013590565b600080600080600080600060e0888a031215611ad1578283fd5b8735611adc81612290565b96506020880135611aec81612290565b95506040880135945060608801359350608088013560ff81168114611b0f578384fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611b3e578182fd5b8235611b4981612290565b946020939093013593505050565b600080600060608486031215611b6b578283fd5b8335611b7681612290565b95602085013595506040909401359392505050565b600060208284031215611b9c578081fd5b813561090d816122a5565b600060208284031215611bb8578081fd5b815161090d816122a5565b600060208284031215611bd4578081fd5b5035919050565b600060208284031215611bec578081fd5b5051919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015611d0c57858101830151858201604001528201611cf0565b81811115611d1d5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6020808252601d908201527f45524332303a20696e73756666696369656e742d616c6c6f77616e6365000000604082015260600190565b60208082526006908201527f5061757365640000000000000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f53656e646572206e6f74206f776e657200000000000000000000000000000000604082015260600190565b60208082526022908201527f45524332303a20696e76616c6964207369676e6174757265202773272076616c60408201527f7565000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526015908201527f53656e646572206e6f7420417574686f72697a65640000000000000000000000604082015260600190565b60208082526011908201527f4e6f7420656e6f756768206f7574707574000000000000000000000000000000604082015260600190565b60208082526018908201527f45524332303a20696e76616c69642d616464726573732d300000000000000000604082015260600190565b60208082526015908201527f45524332303a20696e76616c69642d7065726d69740000000000000000000000604082015260600190565b60208082526015908201527f4e6f7420656e6f75676820756e6465726c79696e670000000000000000000000604082015260600190565b60208082526015908201527f45524332303a207065726d69742d657870697265640000000000000000000000604082015260600190565b6020808252601b908201527f45524332303a20696e73756666696369656e742d62616c616e63650000000000604082015260600190565b9182526001600160a01b0316602082015260400190565b9283526001600160a01b03919091166020830152604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b6affffffffffffffffffffff91909116815260200190565b60ff91909116815260200190565b6000821982111561206757612067612261565b500190565b6000826120a0577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b80825b60018086116120b757506120e2565b8187048211156120c9576120c9612261565b808616156120d657918102915b9490941c9380026120a8565b94509492505050565b600061090d60001960ff8516846000826121075750600161090d565b816121145750600061090d565b816001811461212a576002811461213457612161565b600191505061090d565b60ff84111561214557612145612261565b6001841b91508482111561215b5761215b612261565b5061090d565b5060208310610133831016604e8410600b8410161715612194575081810a8381111561218f5761218f612261565b61090d565b6121a184848460016120a5565b8086048211156121b3576121b3612261565b02949350505050565b60008160001904831182151516156121d6576121d6612261565b500290565b6000828210156121ed576121ed612261565b500390565b60028104600182168061220657607f821691505b60208210811415612240577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060001982141561225a5761225a612261565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6001600160a01b038116811461074557600080fd5b801515811461074557600080fdfea264697066735822122031ed357fa9d40691976df70868ef206c6fca7eed696ff403331f46a85811347e64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000da816459f1ab5631232fe5e97a05bbbb94970c950000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000081758f3361a769016eae4844072fa6d7f828a65100000000000000000000000040309f197e7f94b555904df0f788a3f48cf326ab000000000000000000000000000000000000000000000000000000000000000d656c656d656e742079764441490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057976444149000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : vault_ (address): 0xdA816459F1AB5631232FE5e97a05BBBb94970c95
Arg [1] : _token (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [2] : _name (string): element yvDAI
Arg [3] : _symbol (string): yvDAI
Arg [4] : _governance (address): 0x81758f3361A769016eae4844072FA6d7f828a651
Arg [5] : _pauser (address): 0x40309f197e7f94B555904DF0f788a3F48cF326aB
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 000000000000000000000000da816459f1ab5631232fe5e97a05bbbb94970c95
Arg [1] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [4] : 00000000000000000000000081758f3361a769016eae4844072fa6d7f828a651
Arg [5] : 00000000000000000000000040309f197e7f94b555904df0f788a3f48cf326ab
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [7] : 656c656d656e7420797644414900000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [9] : 7976444149000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.