Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
D3M4626TypePool
Compiler Version
v0.8.14+commit.80d49f37
Optimization Enabled:
Yes with 200 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-FileCopyrightText: © 2021 Dai Foundation <www.daifoundation.org> // SPDX-License-Identifier: AGPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. pragma solidity ^0.8.14; import "./ID3MPool.sol"; import "forge-std/interfaces/IERC4626.sol"; interface VatLike { function live() external view returns (uint256); function hope(address) external; function nope(address) external; } interface D3mHubLike { function vat() external view returns (address); function end() external view returns (EndLike); } interface EndLike { function Art(bytes32) external view returns (uint256); } contract D3M4626TypePool is ID3MPool { mapping (address => uint256) public wards; address public hub; uint256 public exited; bytes32 public immutable ilk; VatLike public immutable vat; IERC4626 public immutable vault; IERC20 public immutable dai; // --- Events --- event Rely(address indexed usr); event Deny(address indexed usr); event File(bytes32 indexed what, address data); constructor(bytes32 ilk_, address hub_, address dai_, address vault_) { ilk = ilk_; dai = IERC20(dai_); vault = IERC4626(vault_); require(ilk_ != bytes32(0), "D3M4626TypePool/zero-bytes32"); require(hub_ != address(0), "D3M4626TypePool/zero-address"); require(dai_ != address(0), "D3M4626TypePool/zero-address"); require(vault_ != address(0), "D3M4626TypePool/zero-address"); require(IERC4626(vault_).asset() == dai_, "D3M4626TypePool/vault-asset-is-not-dai"); dai.approve(vault_, type(uint256).max); hub = hub_; vat = VatLike(D3mHubLike(hub_).vat()); vat.hope(hub_); wards[msg.sender] = 1; emit Rely(msg.sender); } modifier auth() { require(wards[msg.sender] == 1, "D3M4626TypePool/not-authorized"); _; } modifier onlyHub() { require(msg.sender == hub, "D3M4626TypePool/only-hub"); _; } // --- Admin --- function rely(address usr) external auth { wards[usr] = 1; emit Rely(usr); } function deny(address usr) external auth { wards[usr] = 0; emit Deny(usr); } function file(bytes32 what, address data) external auth { require(vat.live() == 1, "D3M4626TypePool/no-file-during-shutdown"); if (what == "hub") { vat.nope(hub); hub = data; vat.hope(data); } else revert("D3M4626TypePool/file-unrecognized-param"); emit File(what, data); } /// https://github.com/morpho-org/metamorpho/blob/fcf3c41d9c113514c9af0bbf6298e88a1060b220/src/MetaMorpho.sol#L531 /// @inheritdoc ID3MPool function deposit(uint256 wad) external override onlyHub { vault.deposit(wad, address(this)); } /// https://github.com/morpho-org/metamorpho/blob/fcf3c41d9c113514c9af0bbf6298e88a1060b220/src/MetaMorpho.sol#L557 /// @inheritdoc ID3MPool function withdraw(uint256 wad) external override onlyHub { vault.withdraw(wad, msg.sender, address(this)); } /// @inheritdoc ID3MPool function exit(address dst, uint256 wad) external override onlyHub { uint256 exited_ = exited; exited = exited_ + wad; uint256 amt = wad * vault.balanceOf(address(this)) / (D3mHubLike(hub).end().Art(ilk) - exited_); require(vault.transfer(dst, amt), "D3M4626TypePool/transfer-failed"); } /// @inheritdoc ID3MPool function quit(address dst) external auth { require(vat.live() == 1, "D3M4626TypePool/no-quit-during-shutdown"); require(vault.transfer(dst, vault.balanceOf(address(this))), "D3M4626TypePool/transfer-failed"); } /// @inheritdoc ID3MPool function preDebtChange() external override {} /// @inheritdoc ID3MPool function postDebtChange() external override {} /// @inheritdoc ID3MPool function assetBalance() external view returns (uint256) { return vault.convertToAssets(vault.balanceOf(address(this))); } /// @inheritdoc ID3MPool function maxDeposit() external view returns (uint256) { return vault.maxDeposit(address(this)); } /// @inheritdoc ID3MPool function maxWithdraw() external view returns (uint256) { return vault.maxWithdraw(address(this)); } /// @inheritdoc ID3MPool function redeemable() external view returns (address) { return address(vault); } }
// SPDX-FileCopyrightText: © 2022 Dai Foundation <www.daifoundation.org> // SPDX-License-Identifier: AGPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. pragma solidity >=0.8.0; /** @title D3M Pool Interface @notice Pool contracts are contracts that the Hub uses to standardize interactions with external Pools. @dev Implementing contracts will hold any balance provided by the external pool as well as the balance in the Vat. This interface aims to use EIP-4626 guidelines for assets/shares/maxWithdraw etc. */ interface ID3MPool { /** @notice Deposit assets (Dai) in the external pool. @dev If the external pool requires a different amount to be passed in, the conversion should occur here as the Hub passes Dai [wad] amounts. msg.sender must be the hub. @param wad amount in asset (Dai) terms that we want to deposit */ function deposit(uint256 wad) external; /** @notice Withdraw assets (Dai) from the external pool. @dev If the external pool requires a different amount to be passed in the conversion should occur here as the Hub passes Dai [wad] amounts. msg.sender must be the hub. @param wad amount in asset (Dai) terms that we want to withdraw */ function withdraw(uint256 wad) external; /** @notice Exit proportional amount of shares. @dev If the external pool/token contract requires a different amount to be passed in the conversion should occur here as the Hub passes Gem [wad] amounts. msg.sender must be the hub. @param dst address that should receive the redeemable tokens @param wad amount in Gem terms that we want to withdraw */ function exit(address dst, uint256 wad) external; /** @notice Transfer all assets from this pool. @dev msg.sender must be authorized. @param dst address that should receive the assets. */ function quit(address dst) external; /** @notice Some external pools require actions before debt changes */ function preDebtChange() external; /** @notice Some external pools require actions after debt changes */ function postDebtChange() external; /** @notice Balance of assets this pool "owns". @dev This could be greater than the amount the pool can withdraw due to lack of liquidity. @return uint256 number of assets in Dai [wad] */ function assetBalance() external view returns (uint256); /** @notice Maximum number of assets the pool could deposit at present. @return uint256 number of assets in Dai [wad] */ function maxDeposit() external view returns (uint256); /** @notice Maximum number of assets the pool could withdraw at present. @return uint256 number of assets in Dai [wad] */ function maxWithdraw() external view returns (uint256); /// @notice returns address of redeemable tokens (if any) function redeemable() external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; import "./IERC20.sol"; /// @dev Interface of the ERC4626 "Tokenized Vault Standard", as defined in /// https://eips.ethereum.org/EIPS/eip-4626 interface IERC4626 is IERC20 { event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares); event Withdraw( address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares ); /// @notice Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. /// @dev /// - MUST be an ERC-20 token contract. /// - MUST NOT revert. function asset() external view returns (address assetTokenAddress); /// @notice Returns the total amount of the underlying asset that is “managed” by Vault. /// @dev /// - SHOULD include any compounding that occurs from yield. /// - MUST be inclusive of any fees that are charged against assets in the Vault. /// - MUST NOT revert. function totalAssets() external view returns (uint256 totalManagedAssets); /// @notice Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal /// scenario where all the conditions are met. /// @dev /// - MUST NOT be inclusive of any fees that are charged against assets in the Vault. /// - MUST NOT show any variations depending on the caller. /// - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. /// - MUST NOT revert. /// /// NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the /// “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and /// from. function convertToShares(uint256 assets) external view returns (uint256 shares); /// @notice Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal /// scenario where all the conditions are met. /// @dev /// - MUST NOT be inclusive of any fees that are charged against assets in the Vault. /// - MUST NOT show any variations depending on the caller. /// - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. /// - MUST NOT revert. /// /// NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the /// “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and /// from. function convertToAssets(uint256 shares) external view returns (uint256 assets); /// @notice Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, /// through a deposit call. /// @dev /// - MUST return a limited value if receiver is subject to some deposit limit. /// - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. /// - MUST NOT revert. function maxDeposit(address receiver) external view returns (uint256 maxAssets); /// @notice Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given /// current on-chain conditions. /// @dev /// - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit /// call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called /// in the same transaction. /// - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the /// deposit would be accepted, regardless if the user has enough tokens approved, etc. /// - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. /// - MUST NOT revert. /// /// NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in /// share price or some other type of condition, meaning the depositor will lose assets by depositing. function previewDeposit(uint256 assets) external view returns (uint256 shares); /// @notice Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. /// @dev /// - MUST emit the Deposit event. /// - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the /// deposit execution, and are accounted for during deposit. /// - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not /// approving enough underlying tokens to the Vault contract, etc). /// /// NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token. function deposit(uint256 assets, address receiver) external returns (uint256 shares); /// @notice Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. /// @dev /// - MUST return a limited value if receiver is subject to some mint limit. /// - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. /// - MUST NOT revert. function maxMint(address receiver) external view returns (uint256 maxShares); /// @notice Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given /// current on-chain conditions. /// @dev /// - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call /// in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the /// same transaction. /// - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint /// would be accepted, regardless if the user has enough tokens approved, etc. /// - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. /// - MUST NOT revert. /// /// NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in /// share price or some other type of condition, meaning the depositor will lose assets by minting. function previewMint(uint256 shares) external view returns (uint256 assets); /// @notice Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. /// @dev /// - MUST emit the Deposit event. /// - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint /// execution, and are accounted for during mint. /// - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not /// approving enough underlying tokens to the Vault contract, etc). /// /// NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token. function mint(uint256 shares, address receiver) external returns (uint256 assets); /// @notice Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the /// Vault, through a withdraw call. /// @dev /// - MUST return a limited value if owner is subject to some withdrawal limit or timelock. /// - MUST NOT revert. function maxWithdraw(address owner) external view returns (uint256 maxAssets); /// @notice Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, /// given current on-chain conditions. /// @dev /// - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw /// call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if /// called /// in the same transaction. /// - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though /// the withdrawal would be accepted, regardless if the user has enough shares, etc. /// - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. /// - MUST NOT revert. /// /// NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in /// share price or some other type of condition, meaning the depositor will lose assets by depositing. function previewWithdraw(uint256 assets) external view returns (uint256 shares); /// @notice Burns shares from owner and sends exactly assets of underlying tokens to receiver. /// @dev /// - MUST emit the Withdraw event. /// - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the /// withdraw execution, and are accounted for during withdraw. /// - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner /// not having enough shares, etc). /// /// Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. /// Those methods should be performed separately. function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares); /// @notice Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, /// through a redeem call. /// @dev /// - MUST return a limited value if owner is subject to some withdrawal limit or timelock. /// - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. /// - MUST NOT revert. function maxRedeem(address owner) external view returns (uint256 maxShares); /// @notice Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, /// given current on-chain conditions. /// @dev /// - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call /// in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the /// same transaction. /// - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the /// redemption would be accepted, regardless if the user has enough shares, etc. /// - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. /// - MUST NOT revert. /// /// NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in /// share price or some other type of condition, meaning the depositor will lose assets by redeeming. function previewRedeem(uint256 shares) external view returns (uint256 assets); /// @notice Burns exactly shares from owner and sends assets of underlying tokens to receiver. /// @dev /// - MUST emit the Withdraw event. /// - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the /// redeem execution, and are accounted for during redeem. /// - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner /// not having enough shares, etc). /// /// NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. /// Those methods should be performed separately. function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; /// @dev Interface of the ERC20 standard as defined in the EIP. /// @dev This includes the optional name, symbol, and decimals metadata. interface IERC20 { /// @dev Emitted when `value` tokens are moved from one account (`from`) to another (`to`). event Transfer(address indexed from, address indexed to, uint256 value); /// @dev Emitted when the allowance of a `spender` for an `owner` is set, where `value` /// is the new allowance. event Approval(address indexed owner, address indexed spender, uint256 value); /// @notice Returns the amount of tokens in existence. function totalSupply() external view returns (uint256); /// @notice Returns the amount of tokens owned by `account`. function balanceOf(address account) external view returns (uint256); /// @notice Moves `amount` tokens from the caller's account to `to`. function transfer(address to, uint256 amount) external returns (bool); /// @notice Returns the remaining number of tokens that `spender` is allowed /// to spend on behalf of `owner` function allowance(address owner, address spender) external view returns (uint256); /// @notice Sets `amount` as the allowance of `spender` over the caller's tokens. /// @dev Be aware of front-running risks: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 function approve(address spender, uint256 amount) external returns (bool); /// @notice Moves `amount` tokens from `from` to `to` using the allowance mechanism. /// `amount` is then deducted from the caller's allowance. function transferFrom(address from, address to, uint256 amount) external returns (bool); /// @notice Returns the name of the token. function name() external view returns (string memory); /// @notice Returns the symbol of the token. function symbol() external view returns (string memory); /// @notice Returns the decimals places of the token. function decimals() external view returns (uint8); }
{ "remappings": [ "@openzeppelin/contracts/=lib/metamorpho/lib/openzeppelin-contracts/contracts/", "ds-test/=lib/solmate/lib/ds-test/src/", "dss-interfaces/=lib/dss-test/lib/dss-interfaces/src/", "dss-test/=lib/dss-test/src/", "erc4626-tests/=lib/metamorpho/lib/erc4626-tests/", "forge-std/=lib/metamorpho/lib/forge-std/src/", "metamorpho/=lib/metamorpho/src/", "morpho-blue/=lib/metamorpho/lib/morpho-blue/", "murky/=lib/metamorpho/lib/universal-rewards-distributor/lib/murky/src/", "openzeppelin-contracts/=lib/metamorpho/lib/openzeppelin-contracts/", "openzeppelin/=lib/metamorpho/lib/universal-rewards-distributor/lib/openzeppelin-contracts/contracts/", "solmate/=lib/solmate/src/", "universal-rewards-distributor/=lib/metamorpho/lib/universal-rewards-distributor/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"bytes32","name":"ilk_","type":"bytes32"},{"internalType":"address","name":"hub_","type":"address"},{"internalType":"address","name":"dai_","type":"address"},{"internalType":"address","name":"vault_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"address","name":"data","type":"address"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"inputs":[],"name":"assetBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dai","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"address","name":"data","type":"address"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hub","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ilk","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"postDebtChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"preDebtChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"}],"name":"quit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redeemable","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vat","outputs":[{"internalType":"contract VatLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IERC4626","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101006040523480156200001257600080fd5b50604051620016453803806200164583398101604081905262000035916200040c565b60808490526001600160a01b0380831660e052811660c05283620000a05760405162461bcd60e51b815260206004820152601c60248201527f44334d3436323654797065506f6f6c2f7a65726f2d627974657333320000000060448201526064015b60405180910390fd5b6001600160a01b038316620000e75760405162461bcd60e51b815260206004820152601c602482015260008051602062001625833981519152604482015260640162000097565b6001600160a01b0382166200012e5760405162461bcd60e51b815260206004820152601c602482015260008051602062001625833981519152604482015260640162000097565b6001600160a01b038116620001755760405162461bcd60e51b815260206004820152601c602482015260008051602062001625833981519152604482015260640162000097565b816001600160a01b0316816001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e4919062000460565b6001600160a01b0316146200024b5760405162461bcd60e51b815260206004820152602660248201527f44334d3436323654797065506f6f6c2f7661756c742d61737365742d69732d6e6044820152656f742d64616960d01b606482015260840162000097565b60e05160405163095ea7b360e01b81526001600160a01b03838116600483015260001960248301529091169063095ea7b3906044016020604051808303816000875af1158015620002a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c6919062000485565b50600180546001600160a01b0319166001600160a01b038516908117909155604080516336569e7760e01b815290516336569e77916004808201926020929091908290030181865afa15801562000321573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000347919062000460565b6001600160a01b0390811660a08190526040516328ec8bf160e21b815291851660048301529063a3b22fc490602401600060405180830381600087803b1580156200039157600080fd5b505af1158015620003a6573d6000803e3d6000fd5b50503360008181526020819052604080822060019055519193507fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a60925090a250505050620004a9565b80516001600160a01b03811681146200040757600080fd5b919050565b600080600080608085870312156200042357600080fd5b845193506200043560208601620003ef565b92506200044560408601620003ef565b91506200045560608601620003ef565b905092959194509250565b6000602082840312156200047357600080fd5b6200047e82620003ef565b9392505050565b6000602082840312156200049857600080fd5b815180151581146200047e57600080fd5b60805160a05160c05160e0516110e06200054560003960006102ac015260008181610135015281816102d30152818161034a015281816103dc01528181610554015281816105d101528181610620015281816107de01528181610d3f0152610def01526000818161018a015281816106ea0152818161094a01528181610a580152610aea0152600081816102440152610ca501526110e06000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063ac7a1b5b116100ad578063d32b91dd11610071578063d32b91dd1461026e578063d4e8be8314610281578063ef693bed14610294578063f4b9fa75146102a7578063fbfa77cf146102ce57600080fd5b8063ac7a1b5b14610204578063b6b55f251461020c578063bf353dbb1461021f578063c5ce281e1461023f578063c66f24551461026657600080fd5b80635ce6c327116100f45780635ce6c327146101bf5780636083e59a146101d657806365fae35e146101de57806387edc58f146101315780639c52a7f1146101f157600080fd5b80632001fdb7146101315780632d7ecd11146101335780632e1a7d4d1461017257806336569e7714610185578063365a86fc146101ac575b600080fd5b005b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020015b60405180910390f35b610131610180366004610eb0565b6102f5565b6101557f000000000000000000000000000000000000000000000000000000000000000081565b600154610155906001600160a01b031681565b6101c860025481565b604051908152602001610169565b6101c86103c4565b6101316101ec366004610ede565b610455565b6101316101ff366004610ede565b6104c9565b6101c861053c565b61013161021a366004610eb0565b61058b565b6101c861022d366004610ede565b60006020819052908152604090205481565b6101c87f000000000000000000000000000000000000000000000000000000000000000081565b6101c8610608565b61013161027c366004610ede565b6106b9565b61013161028f366004610f02565b610919565b6101316102a2366004610f32565b610be9565b6101557f000000000000000000000000000000000000000000000000000000000000000081565b6101557f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031633146103285760405162461bcd60e51b815260040161031f90610f5e565b60405180910390fd5b604051632d182be560e21b8152600481018290523360248201523060448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b460af94906064015b6020604051808303816000875af115801561039c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c09190610f95565b5050565b60405163402d267d60e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063402d267d906024015b602060405180830381865afa15801561042c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104509190610f95565b905090565b336000908152602081905260409020546001146104845760405162461bcd60e51b815260040161031f90610fae565b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b336000908152602081905260409020546001146104f85760405162461bcd60e51b815260040161031f90610fae565b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b60405163ce96cb7760e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ce96cb779060240161040f565b6001546001600160a01b031633146105b55760405162461bcd60e51b815260040161031f90610f5e565b604051636e553f6560e01b8152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636e553f659060440161037d565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307a2d13a9082906370a0823190602401602060405180830381865afa158015610677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069b9190610f95565b6040518263ffffffff1660e01b815260040161040f91815260200190565b336000908152602081905260409020546001146106e85760405162461bcd60e51b815260040161031f90610fae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663957aa58c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610746573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190610f95565b6001146107c95760405162461bcd60e51b815260206004820152602760248201527f44334d3436323654797065506f6f6c2f6e6f2d717569742d647572696e672d73604482015266343aba3237bbb760c91b606482015260840161031f565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb90839083906370a0823190602401602060405180830381865afa158015610837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085b9190610f95565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca9190610fe5565b6109165760405162461bcd60e51b815260206004820152601f60248201527f44334d3436323654797065506f6f6c2f7472616e736665722d6661696c656400604482015260640161031f565b50565b336000908152602081905260409020546001146109485760405162461bcd60e51b815260040161031f90610fae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663957aa58c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ca9190610f95565b600114610a295760405162461bcd60e51b815260206004820152602760248201527f44334d3436323654797065506f6f6c2f6e6f2d66696c652d647572696e672d73604482015266343aba3237bbb760c91b606482015260840161031f565b8162343ab160e91b03610b4f57600154604051636e26907d60e11b81526001600160a01b0391821660048201527f00000000000000000000000000000000000000000000000000000000000000009091169063dc4d20fa90602401600060405180830381600087803b158015610a9e57600080fd5b505af1158015610ab2573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038581169182179092556040516328ec8bf160e21b815260048101919091527f0000000000000000000000000000000000000000000000000000000000000000909116925063a3b22fc49150602401600060405180830381600087803b158015610b3257600080fd5b505af1158015610b46573d6000803e3d6000fd5b50505050610ba7565b60405162461bcd60e51b815260206004820152602760248201527f44334d3436323654797065506f6f6c2f66696c652d756e7265636f676e697a65604482015266642d706172616d60c81b606482015260840161031f565b6040516001600160a01b038216815282907f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba9060200160405180910390a25050565b6001546001600160a01b03163314610c135760405162461bcd60e51b815260040161031f90610f5e565b600254610c20828261101d565b60025560015460408051633bef870760e21b8152905160009284926001600160a01b039091169163efbe1c1c916004808201926020929091908290030181865afa158015610c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c969190611035565b60405163e1340a3d60e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b03919091169063e1340a3d90602401602060405180830381865afa158015610cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d209190610f95565b610d2a9190611052565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db29190610f95565b610dbc9085611069565b610dc69190611088565b60405163a9059cbb60e01b81526001600160a01b038681166004830152602482018390529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af1158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e9190610fe5565b610eaa5760405162461bcd60e51b815260206004820152601f60248201527f44334d3436323654797065506f6f6c2f7472616e736665722d6661696c656400604482015260640161031f565b50505050565b600060208284031215610ec257600080fd5b5035919050565b6001600160a01b038116811461091657600080fd5b600060208284031215610ef057600080fd5b8135610efb81610ec9565b9392505050565b60008060408385031215610f1557600080fd5b823591506020830135610f2781610ec9565b809150509250929050565b60008060408385031215610f4557600080fd5b8235610f5081610ec9565b946020939093013593505050565b60208082526018908201527f44334d3436323654797065506f6f6c2f6f6e6c792d6875620000000000000000604082015260600190565b600060208284031215610fa757600080fd5b5051919050565b6020808252601e908201527f44334d3436323654797065506f6f6c2f6e6f742d617574686f72697a65640000604082015260600190565b600060208284031215610ff757600080fd5b81518015158114610efb57600080fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561103057611030611007565b500190565b60006020828403121561104757600080fd5b8151610efb81610ec9565b60008282101561106457611064611007565b500390565b600081600019048311821515161561108357611083611007565b500290565b6000826110a557634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220e32980c3eeb895ff99c2798c28895c71003bd08c5f5e2592cfce35c8500c121164736f6c634300080e003344334d3436323654797065506f6f6c2f7a65726f2d61646472657373000000004449524543542d535041524b2d4d4f5250484f2d44414900000000000000000000000000000000000000000012f36cdea3a28c35ac8c6cc71d9265c17c74a27f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000073e65dbd630f90604062f6e02fab9138e713edd9
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063ac7a1b5b116100ad578063d32b91dd11610071578063d32b91dd1461026e578063d4e8be8314610281578063ef693bed14610294578063f4b9fa75146102a7578063fbfa77cf146102ce57600080fd5b8063ac7a1b5b14610204578063b6b55f251461020c578063bf353dbb1461021f578063c5ce281e1461023f578063c66f24551461026657600080fd5b80635ce6c327116100f45780635ce6c327146101bf5780636083e59a146101d657806365fae35e146101de57806387edc58f146101315780639c52a7f1146101f157600080fd5b80632001fdb7146101315780632d7ecd11146101335780632e1a7d4d1461017257806336569e7714610185578063365a86fc146101ac575b600080fd5b005b7f00000000000000000000000073e65dbd630f90604062f6e02fab9138e713edd95b6040516001600160a01b0390911681526020015b60405180910390f35b610131610180366004610eb0565b6102f5565b6101557f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b81565b600154610155906001600160a01b031681565b6101c860025481565b604051908152602001610169565b6101c86103c4565b6101316101ec366004610ede565b610455565b6101316101ff366004610ede565b6104c9565b6101c861053c565b61013161021a366004610eb0565b61058b565b6101c861022d366004610ede565b60006020819052908152604090205481565b6101c87f4449524543542d535041524b2d4d4f5250484f2d44414900000000000000000081565b6101c8610608565b61013161027c366004610ede565b6106b9565b61013161028f366004610f02565b610919565b6101316102a2366004610f32565b610be9565b6101557f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81565b6101557f00000000000000000000000073e65dbd630f90604062f6e02fab9138e713edd981565b6001546001600160a01b031633146103285760405162461bcd60e51b815260040161031f90610f5e565b60405180910390fd5b604051632d182be560e21b8152600481018290523360248201523060448201527f00000000000000000000000073e65dbd630f90604062f6e02fab9138e713edd96001600160a01b03169063b460af94906064015b6020604051808303816000875af115801561039c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c09190610f95565b5050565b60405163402d267d60e01b81523060048201526000907f00000000000000000000000073e65dbd630f90604062f6e02fab9138e713edd96001600160a01b03169063402d267d906024015b602060405180830381865afa15801561042c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104509190610f95565b905090565b336000908152602081905260409020546001146104845760405162461bcd60e51b815260040161031f90610fae565b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b336000908152602081905260409020546001146104f85760405162461bcd60e51b815260040161031f90610fae565b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b60405163ce96cb7760e01b81523060048201526000907f00000000000000000000000073e65dbd630f90604062f6e02fab9138e713edd96001600160a01b03169063ce96cb779060240161040f565b6001546001600160a01b031633146105b55760405162461bcd60e51b815260040161031f90610f5e565b604051636e553f6560e01b8152600481018290523060248201527f00000000000000000000000073e65dbd630f90604062f6e02fab9138e713edd96001600160a01b031690636e553f659060440161037d565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000073e65dbd630f90604062f6e02fab9138e713edd96001600160a01b0316906307a2d13a9082906370a0823190602401602060405180830381865afa158015610677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069b9190610f95565b6040518263ffffffff1660e01b815260040161040f91815260200190565b336000908152602081905260409020546001146106e85760405162461bcd60e51b815260040161031f90610fae565b7f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b031663957aa58c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610746573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190610f95565b6001146107c95760405162461bcd60e51b815260206004820152602760248201527f44334d3436323654797065506f6f6c2f6e6f2d717569742d647572696e672d73604482015266343aba3237bbb760c91b606482015260840161031f565b6040516370a0823160e01b81523060048201527f00000000000000000000000073e65dbd630f90604062f6e02fab9138e713edd96001600160a01b03169063a9059cbb90839083906370a0823190602401602060405180830381865afa158015610837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085b9190610f95565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca9190610fe5565b6109165760405162461bcd60e51b815260206004820152601f60248201527f44334d3436323654797065506f6f6c2f7472616e736665722d6661696c656400604482015260640161031f565b50565b336000908152602081905260409020546001146109485760405162461bcd60e51b815260040161031f90610fae565b7f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b031663957aa58c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ca9190610f95565b600114610a295760405162461bcd60e51b815260206004820152602760248201527f44334d3436323654797065506f6f6c2f6e6f2d66696c652d647572696e672d73604482015266343aba3237bbb760c91b606482015260840161031f565b8162343ab160e91b03610b4f57600154604051636e26907d60e11b81526001600160a01b0391821660048201527f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b9091169063dc4d20fa90602401600060405180830381600087803b158015610a9e57600080fd5b505af1158015610ab2573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038581169182179092556040516328ec8bf160e21b815260048101919091527f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b909116925063a3b22fc49150602401600060405180830381600087803b158015610b3257600080fd5b505af1158015610b46573d6000803e3d6000fd5b50505050610ba7565b60405162461bcd60e51b815260206004820152602760248201527f44334d3436323654797065506f6f6c2f66696c652d756e7265636f676e697a65604482015266642d706172616d60c81b606482015260840161031f565b6040516001600160a01b038216815282907f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba9060200160405180910390a25050565b6001546001600160a01b03163314610c135760405162461bcd60e51b815260040161031f90610f5e565b600254610c20828261101d565b60025560015460408051633bef870760e21b8152905160009284926001600160a01b039091169163efbe1c1c916004808201926020929091908290030181865afa158015610c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c969190611035565b60405163e1340a3d60e01b81527f4449524543542d535041524b2d4d4f5250484f2d44414900000000000000000060048201526001600160a01b03919091169063e1340a3d90602401602060405180830381865afa158015610cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d209190610f95565b610d2a9190611052565b6040516370a0823160e01b81523060048201527f00000000000000000000000073e65dbd630f90604062f6e02fab9138e713edd96001600160a01b0316906370a0823190602401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db29190610f95565b610dbc9085611069565b610dc69190611088565b60405163a9059cbb60e01b81526001600160a01b038681166004830152602482018390529192507f00000000000000000000000073e65dbd630f90604062f6e02fab9138e713edd99091169063a9059cbb906044016020604051808303816000875af1158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e9190610fe5565b610eaa5760405162461bcd60e51b815260206004820152601f60248201527f44334d3436323654797065506f6f6c2f7472616e736665722d6661696c656400604482015260640161031f565b50505050565b600060208284031215610ec257600080fd5b5035919050565b6001600160a01b038116811461091657600080fd5b600060208284031215610ef057600080fd5b8135610efb81610ec9565b9392505050565b60008060408385031215610f1557600080fd5b823591506020830135610f2781610ec9565b809150509250929050565b60008060408385031215610f4557600080fd5b8235610f5081610ec9565b946020939093013593505050565b60208082526018908201527f44334d3436323654797065506f6f6c2f6f6e6c792d6875620000000000000000604082015260600190565b600060208284031215610fa757600080fd5b5051919050565b6020808252601e908201527f44334d3436323654797065506f6f6c2f6e6f742d617574686f72697a65640000604082015260600190565b600060208284031215610ff757600080fd5b81518015158114610efb57600080fd5b634e487b7160e01b600052601160045260246000fd5b6000821982111561103057611030611007565b500190565b60006020828403121561104757600080fd5b8151610efb81610ec9565b60008282101561106457611064611007565b500390565b600081600019048311821515161561108357611083611007565b500290565b6000826110a557634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220e32980c3eeb895ff99c2798c28895c71003bd08c5f5e2592cfce35c8500c121164736f6c634300080e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
4449524543542d535041524b2d4d4f5250484f2d44414900000000000000000000000000000000000000000012f36cdea3a28c35ac8c6cc71d9265c17c74a27f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000073e65dbd630f90604062f6e02fab9138e713edd9
-----Decoded View---------------
Arg [0] : ilk_ (bytes32): 0x4449524543542d535041524b2d4d4f5250484f2d444149000000000000000000
Arg [1] : hub_ (address): 0x12F36cdEA3A28C35aC8C6Cc71D9265c17C74A27F
Arg [2] : dai_ (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [3] : vault_ (address): 0x73e65DBD630f90604062f6E02fAb9138e713edD9
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 4449524543542d535041524b2d4d4f5250484f2d444149000000000000000000
Arg [1] : 00000000000000000000000012f36cdea3a28c35ac8c6cc71d9265c17c74a27f
Arg [2] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [3] : 00000000000000000000000073e65dbd630f90604062f6e02fab9138e713edd9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.