[ { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "contract IERC20", "name": "asset", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxDeposit", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxRedeem", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxWithdraw", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "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": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Deposit", "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" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "asset", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "convertToAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "convertToShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
60c06040523480156200001157600080fd5b50604051620013f8380380620013f883398101604081905262000034916200024f565b80838360036200004583826200036d565b5060046200005482826200036d565b5050506000806200006b836200009d60201b60201c565b91509150816200007d5760126200007f565b805b60ff1660a05250506001600160a01b03166080525062000471915050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516000918291829182916001600160a01b03871691620000e69162000439565b600060405180830381855afa9150503d806000811462000123576040519150601f19603f3d011682016040523d82523d6000602084013e62000128565b606091505b50915091508180156200013d57506020815110155b1562000175576000818060200190518101906200015b919062000457565b905060ff811162000173576001969095509350505050565b505b5060009485945092505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001b55781810151838201526020016200019b565b50506000910152565b600082601f830112620001d057600080fd5b81516001600160401b0380821115620001ed57620001ed62000182565b604051601f8301601f19908116603f0116810190828211818310171562000218576200021862000182565b816040528381528660208588010111156200023257600080fd5b6200024584602083016020890162000198565b9695505050505050565b6000806000606084860312156200026557600080fd5b83516001600160401b03808211156200027d57600080fd5b6200028b87838801620001be565b94506020860151915080821115620002a257600080fd5b50620002b186828701620001be565b604086015190935090506001600160a01b0381168114620002d157600080fd5b809150509250925092565b600181811c90821680620002f157607f821691505b6020821081036200031257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000368576000816000526020600020601f850160051c81016020861015620003435750805b601f850160051c820191505b8181101562000364578281556001016200034f565b5050505b505050565b81516001600160401b0381111562000389576200038962000182565b620003a1816200039a8454620002dc565b8462000318565b602080601f831160018114620003d95760008415620003c05750858301515b600019600386901b1c1916600185901b17855562000364565b600085815260208120601f198616915b828110156200040a57888601518255948401946001909101908401620003e9565b5085821015620004295787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082516200044d81846020870162000198565b9190910192915050565b6000602082840312156200046a57600080fd5b5051919050565b60805160a051610f4c620004ac60003960006104ad01526000818161022001528181610353015281816106e601526107a60152610f4c6000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de578063ba08765211610097578063ce96cb7711610071578063ce96cb77146102ef578063d905777e146102ef578063dd62ed3e14610302578063ef8b30f7146101a857600080fd5b8063ba087652146102dc578063c63d75b61461024a578063c6e6f592146101a857600080fd5b806370a082311461027257806394bf804d1461029b57806395d89b41146102ae578063a9059cbb146102b6578063b3d7f6b9146101a8578063b460af94146102c957600080fd5b806323b872dd1161013057806323b872dd146101e6578063313ce567146101f957806338d52e0f14610213578063402d267d1461024a5780634cdad506146101a85780636e553f651461025f57600080fd5b806301e1d1141461017857806306fdde031461019357806307a2d13a146101a8578063095ea7b3146101bb5780630a28a477146101a857806318160ddd146101de575b600080fd5b61018061033b565b6040519081526020015b60405180910390f35b61019b6103cb565b60405161018a9190610ca7565b6101806101b6366004610cda565b61045d565b6101ce6101c9366004610d0f565b610467565b604051901515815260200161018a565b600254610180565b6101ce6101f4366004610d39565b61047f565b6102016104a5565b60405160ff909116815260200161018a565b6040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016815260200161018a565b610180610258366004610d75565b5060001990565b61018061026d366004610d90565b6104d1565b610180610280366004610d75565b6001600160a01b031660009081526020819052604090205490565b6101806102a9366004610d90565b610505565b61019b610523565b6101ce6102c4366004610d0f565b610532565b6101806102d7366004610dbc565b610540565b6101806102ea366004610dbc565b610598565b6101806102fd366004610d75565b6105e7565b610180610310366004610df8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156103a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c69190610e22565b905090565b6060600380546103da90610e3b565b80601f016020809104026020016040519081016040528092919081815260200182805461040690610e3b565b80156104535780601f1061042857610100808354040283529160200191610453565b820191906000526020600020905b81548152906001019060200180831161043657829003601f168201915b5050505050905090565b6000815b92915050565b600033610475818585610605565b5060019392505050565b60003361048d858285610617565b610498858585610682565b60019150505b9392505050565b60006103c6817f0000000000000000000000000000000000000000000000000000000000000000610e8b565b60006000196104e4565b60405180910390fd5b60006104ef8561045d565b90506104fd338587846106e1565b949350505050565b600060001960006105158561045d565b90506104fd338583886106e1565b6060600480546103da90610e3b565b600033610475818585610682565b60008061054c836105e7565b90508085111561057557828582604051633fa733bb60e21b81526004016104db93929190610ea4565b60006105808661045d565b905061058f3386868985610773565b95945050505050565b6000806105a4836105e7565b9050808511156105cd57828582604051632e52afbb60e21b81526004016104db93929190610ea4565b60006105d88661045d565b905061058f338686848a610773565b6001600160a01b038116600090815260208190526040812054610461565b6106128383836001610833565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461067c578181101561066d57828183604051637dc7a0d960e11b81526004016104db93929190610ea4565b61067c84848484036000610833565b50505050565b6001600160a01b0383166106ac57604051634b637e8f60e11b8152600060048201526024016104db565b6001600160a01b0382166106d65760405163ec442f0560e01b8152600060048201526024016104db565b6106128383836108fa565b61070d7f0000000000000000000000000000000000000000000000000000000000000000853085610a11565b6107178382610a78565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051610765929190918252602082015260400190565b60405180910390a350505050565b826001600160a01b0316856001600160a01b03161461079757610797838683610617565b6107a18382610ab2565b6107cc7f00000000000000000000000000000000000000000000000000000000000000008584610ae8565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051610824929190918252602082015260400190565b60405180910390a45050505050565b6001600160a01b03841661085d5760405163e602df0560e01b8152600060048201526024016104db565b6001600160a01b03831661088757604051634a1406b160e11b8152600060048201526024016104db565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561067c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161076591815260200190565b6001600160a01b03831661092557806002600082825461091a9190610ec5565b909155506109849050565b6001600160a01b038316600090815260208190526040902054818110156109655783818360405163391434e360e21b81526004016104db93929190610ea4565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166109a0576002805482900390556109bf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a0491815260200190565b60405180910390a3505050565b6040516001600160a01b03848116602483015283811660448301526064820183905261067c9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050610b19565b6001600160a01b038216610aa25760405163ec442f0560e01b8152600060048201526024016104db565b610aae600083836108fa565b5050565b6001600160a01b038216610adc57604051634b637e8f60e11b8152600060048201526024016104db565b610aae826000836108fa565b6040516001600160a01b0383811660248301526044820183905261061291859182169063a9059cbb90606401610a46565b6000610b2e6001600160a01b03841683610b7c565b90508051600014158015610b53575080806020019051810190610b519190610ed8565b155b1561061257604051635274afe760e01b81526001600160a01b03841660048201526024016104db565b606061049e8383600084600080856001600160a01b03168486604051610ba29190610efa565b60006040518083038185875af1925050503d8060008114610bdf576040519150601f19603f3d011682016040523d82523d6000602084013e610be4565b606091505b5091509150610bf4868383610bfe565b9695505050505050565b606082610c1357610c0e82610c5a565b61049e565b8151158015610c2a57506001600160a01b0384163b155b15610c5357604051639996b31560e01b81526001600160a01b03851660048201526024016104db565b508061049e565b805115610c6a5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60005b83811015610c9e578181015183820152602001610c86565b50506000910152565b6020815260008251806020840152610cc6816040850160208701610c83565b601f01601f19169190910160400192915050565b600060208284031215610cec57600080fd5b5035919050565b80356001600160a01b0381168114610d0a57600080fd5b919050565b60008060408385031215610d2257600080fd5b610d2b83610cf3565b946020939093013593505050565b600080600060608486031215610d4e57600080fd5b610d5784610cf3565b9250610d6560208501610cf3565b9150604084013590509250925092565b600060208284031215610d8757600080fd5b61049e82610cf3565b60008060408385031215610da357600080fd5b82359150610db360208401610cf3565b90509250929050565b600080600060608486031215610dd157600080fd5b83359250610de160208501610cf3565b9150610def60408501610cf3565b90509250925092565b60008060408385031215610e0b57600080fd5b610e1483610cf3565b9150610db360208401610cf3565b600060208284031215610e3457600080fd5b5051919050565b600181811c90821680610e4f57607f821691505b602082108103610e6f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60ff818116838216019081111561046157610461610e75565b6001600160a01b039390931683526020830191909152604082015260600190565b8082018082111561046157610461610e75565b600060208284031215610eea57600080fd5b8151801515811461049e57600080fd5b60008251610f0c818460208701610c83565b919091019291505056fea2646970667358221220822fadc96d0d79e58e10d200631f43a1f7780f4f9a3964a0b915208cd645be5f64736f6c63430008180033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000cec1a9154ff802e7934fc916ed7ca50bde6844e000000000000000000000000000000000000000000000000000000000000000b5374616b656420504f4f4c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067374504f4f4c0000000000000000000000000000000000000000000000000000