More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 221,330 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 327488467 | 5 days ago | IN | 0 ETH | 0.00000228 | ||||
Withdraw | 327299274 | 6 days ago | IN | 0 ETH | 0.00000175 | ||||
Withdraw | 327299218 | 6 days ago | IN | 0 ETH | 0.00000266 | ||||
Withdraw | 327299160 | 6 days ago | IN | 0 ETH | 0.00000273 | ||||
Withdraw | 327299101 | 6 days ago | IN | 0 ETH | 0.00000554 | ||||
Repay | 327298883 | 6 days ago | IN | 0 ETH | 0.00000215 | ||||
Deposit | 327298830 | 6 days ago | IN | 0 ETH | 0.00000254 | ||||
Withdraw | 321337279 | 23 days ago | IN | 0 ETH | 0.0000037 | ||||
Withdraw | 321337175 | 23 days ago | IN | 0 ETH | 0.00000497 | ||||
Withdraw | 319928862 | 27 days ago | IN | 0 ETH | 0.00000129 | ||||
Withdraw | 319928825 | 27 days ago | IN | 0 ETH | 0.00000112 | ||||
Repay | 319928776 | 27 days ago | IN | 0 ETH | 0.00000148 | ||||
Exec | 319928698 | 27 days ago | IN | 0 ETH | 0.00000598 | ||||
Exec | 319928645 | 27 days ago | IN | 0 ETH | 0.00000632 | ||||
Approve | 319928601 | 27 days ago | IN | 0 ETH | 0.00000099 | ||||
Repay | 319928239 | 27 days ago | IN | 0 ETH | 0.00000151 | ||||
Exec | 319928136 | 27 days ago | IN | 0 ETH | 0.00000785 | ||||
Withdraw | 319926855 | 27 days ago | IN | 0 ETH | 0.00000306 | ||||
Repay | 319926715 | 27 days ago | IN | 0 ETH | 0.00000151 | ||||
Exec | 319926641 | 27 days ago | IN | 0 ETH | 0.0000061 | ||||
Approve | 319926620 | 27 days ago | IN | 0 ETH | 0.00000113 | ||||
Repay | 319926283 | 27 days ago | IN | 0 ETH | 0.00000156 | ||||
Exec | 319926191 | 27 days ago | IN | 0 ETH | 0.00000762 | ||||
Approve | 319926160 | 27 days ago | IN | 0 ETH | 0.00000107 | ||||
Withdraw | 319925093 | 27 days ago | IN | 0 ETH | 0.00000364 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
237749747 | 266 days ago | 0.23 ETH | ||||
226639584 | 298 days ago | 0.001 ETH | ||||
201730123 | 371 days ago | 0.0003 ETH | ||||
201575770 | 372 days ago | 0.005 ETH | ||||
194434501 | 393 days ago | 0.009 ETH | ||||
194433681 | 393 days ago | 0.0035 ETH | ||||
194433312 | 393 days ago | 0.003 ETH | ||||
194432697 | 393 days ago | 0.003 ETH | ||||
194430670 | 393 days ago | 0.003 ETH | ||||
194430448 | 393 days ago | 0.01 ETH | ||||
194430105 | 393 days ago | 0.0028 ETH | ||||
194427854 | 393 days ago | 0.002 ETH | ||||
194423908 | 393 days ago | 0.01 ETH | ||||
186458623 | 416 days ago | 0.001 ETH | ||||
184765694 | 421 days ago | 0.005 ETH | ||||
184736280 | 421 days ago | 0.001 ETH | ||||
181547354 | 431 days ago | 0.01 ETH | ||||
179607757 | 437 days ago | 0.0004 ETH | ||||
178216497 | 441 days ago | 0.0001 ETH | ||||
176529616 | 446 days ago | 0.02 ETH | ||||
175292502 | 450 days ago | 0.015 ETH | ||||
175292501 | 450 days ago | 0.01 ETH | ||||
175292501 | 450 days ago | 0.006 ETH | ||||
175292500 | 450 days ago | 0.005 ETH | ||||
175292500 | 450 days ago | 0.007 ETH |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x0dDB1eA4...E94B1299B The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
Proxy
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; import {BaseProxy} from "./BaseProxy.sol"; import {Errors} from "../utils/Errors.sol"; import {StorageSlot} from "../utils/Storage.sol"; import {Helpers} from "../utils/Helpers.sol"; contract Proxy is BaseProxy { bytes32 private constant _IMPL_SLOT = bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1); event Upgraded(address indexed newImplementation); constructor(address _logic) { _setImplementation(_logic); _setAdmin(msg.sender); } function changeImplementation(address implementation) external adminOnly { _setImplementation(implementation); } function upgradeToAndCall(address implementation, bytes calldata data) external adminOnly { _upgradeToAndCall(implementation, data); } function getImplementation() public override view returns (address) { return StorageSlot.getAddressAt(_IMPL_SLOT); } function _setImplementation(address implementation) internal { if (implementation == address(0)) revert Errors.ZeroAddress(); StorageSlot.setAddressAt(_IMPL_SLOT, implementation); emit Upgraded(implementation); } function _upgradeToAndCall(address implementation, bytes calldata data) internal { _setImplementation(implementation); if (data.length > 0) Helpers.functionDelegateCall(implementation, data); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; interface IAccount { function activate() external; function deactivate() external; function addAsset(address token) external; function addBorrow(address token) external; function removeAsset(address token) external; function sweepTo(address toAddress) external; function removeBorrow(address token) external; function init(address accountManager) external; function hasAsset(address) external returns (bool); function assets(uint) external returns (address); function hasNoDebt() external view returns (bool); function activationBlock() external view returns (uint); function accountManager() external view returns (address); function getAssets() external view returns (address[] memory); function getBorrows() external view returns (address[] memory); function exec( address target, uint amt, bytes calldata data ) external returns (bool, bytes memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; interface IERC20 { function decimals() external view returns (uint8); function balanceOf(address _owner) external view returns (uint256 balance); function transfer(address _to, uint256 _value) external returns (bool success); function approve(address _spender, uint256 _value) external returns (bool success); function allowance(address _owner, address _spender) external view returns (uint256 remaining); function transferFrom(address _from, address _to, uint256 _value) external returns (bool success); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; import {Errors} from "../utils/Errors.sol"; import {StorageSlot} from "../utils/Storage.sol"; abstract contract BaseProxy { bytes32 private constant _ADMIN_SLOT = bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1); event AdminChanged(address previousAdmin, address newAdmin); modifier adminOnly() { if (msg.sender != getAdmin()) revert Errors.AdminOnly(); _; } function changeAdmin(address newAdmin) external adminOnly { _setAdmin(newAdmin); } function getAdmin() public view returns (address) { return StorageSlot.getAddressAt(_ADMIN_SLOT); } function _setAdmin(address admin) internal { if (admin == address(0)) revert Errors.ZeroAddress(); emit AdminChanged(getAdmin(), admin); StorageSlot.setAddressAt(_ADMIN_SLOT, admin); } function getImplementation() public virtual returns (address); function _delegate(address impl) internal virtual { assembly { let ptr := mload(0x40) calldatacopy(ptr, 0, calldatasize()) let result := delegatecall(gas(), impl, ptr, calldatasize(), 0, 0) let size := returndatasize() returndatacopy(ptr, 0, size) switch result case 0 { revert(ptr, size) } default { return(ptr, size) } } } fallback() external payable { _delegate(getImplementation()); } receive() external payable { _delegate(getImplementation()); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; library Errors { error AdminOnly(); error MaxSupply(); error ZeroShares(); error ZeroAssets(); error ZeroAddress(); error MinimumShares(); error ContractPaused(); error OutstandingDebt(); error AccountOwnerOnly(); error TokenNotContract(); error AddressNotContract(); error ContractNotPaused(); error LTokenUnavailable(); error LiquidationFailed(); error EthTransferFailure(); error AccountManagerOnly(); error RiskThresholdBreached(); error FunctionCallRestricted(); error AccountNotLiquidatable(); error CollateralTypeRestricted(); error IncorrectConstructorArgs(); error ContractAlreadyInitialized(); error AccountDeactivationFailure(); error AccountInteractionFailure(address, address, uint, bytes); }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity ^0.8.17; import {Errors} from "./Errors.sol"; import {IERC20} from "../interface/tokens/IERC20.sol"; import {IAccount} from "../interface/core/IAccount.sol"; /// @author Modified from Rari-Capital/Solmate library Helpers { function safeTransferFrom( address token, address from, address to, uint256 amt ) internal { if (!isContract(token)) revert Errors.TokenNotContract(); (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, amt) ); require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FROM_FAILED"); } function safeTransfer( address token, address to, uint256 amt ) internal { if (!isContract(token)) revert Errors.TokenNotContract(); (bool success, bytes memory data) = address(token).call( abi.encodeWithSelector(IERC20.transfer.selector, to, amt) ); require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FAILED"); } function safeTransferEth(address to, uint256 amt) internal { (bool success, ) = to.call{value: amt}(new bytes(0)); if(!success) revert Errors.EthTransferFailure(); } function balanceOf(address token, address owner) internal view returns (uint) { return IERC20(token).balanceOf(owner); } function withdrawEth(address account, address to, uint amt) internal { (bool success, ) = IAccount(account).exec(to, amt, new bytes(0)); if(!success) revert Errors.EthTransferFailure(); } function withdraw(address account, address to, address token, uint amt) internal { if (!isContract(token)) revert Errors.TokenNotContract(); (bool success, bytes memory data) = IAccount(account).exec(token, 0, abi.encodeWithSelector(IERC20.transfer.selector, to, amt)); require(success && (data.length == 0 || abi.decode(data, (bool))), "TRANSFER_FAILED"); } function safeApprove(address account, address token, address spender, uint amt) internal { (bool success, bytes memory data) = IAccount(account).exec(token, 0, abi.encodeWithSelector(IERC20.approve.selector, spender, amt)); require(success && (data.length == 0 || abi.decode(data, (bool))), "APPROVE_FAILED"); } function isContract(address token) internal view returns (bool) { return token.code.length > 0; } function functionDelegateCall( address target, bytes calldata data ) internal { if (!isContract(target)) revert Errors.AddressNotContract(); (bool success, ) = target.delegatecall(data); require(success, "CALL_FAILED"); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; library StorageSlot { function getAddressAt(bytes32 slot) internal view returns (address a) { assembly { a := sload(slot) } } function setAddressAt(bytes32 slot, address address_) internal { assembly { sstore(slot, address_) } } }
{ "remappings": [ "controller/=lib/controller/src/", "ds-test/=lib/solmate/lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "oracle/=lib/oracle/src/", "solidity-bytes-utils/=lib/controller/lib/solidity-bytes-utils/contracts/", "solmate/=lib/solmate/src/", "v3-core/=lib/oracle/lib/v3-core/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "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
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_logic","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AddressNotContract","type":"error"},{"inputs":[],"name":"AdminOnly","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newImplementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"name":"changeImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Deployed Bytecode
0x60806040526004361061004e5760003560e01c806317a68dd8146100705780634f1ef286146100905780636e9960c3146100b05780638f283970146100e1578063aaf10f421461010157610065565b366100655761006361005e610112565b61014b565b005b61006361005e610112565b34801561007c57600080fd5b5061006361008b3660046104ac565b610170565b34801561009c57600080fd5b506100636100ab3660046104ce565b6101b5565b3480156100bc57600080fd5b506100c56101fe565b6040516001600160a01b03909116815260200160405180910390f35b3480156100ed57600080fd5b506100636100fc3660046104ac565b61022e565b34801561010d57600080fd5b506100c55b600061014661014260017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd610551565b5490565b905090565b60405136600082376000803683855af43d806000843e81801561016c578184f35b8184fd5b6101786101fe565b6001600160a01b0316336001600160a01b0316146101a957604051633057182d60e21b815260040160405180910390fd5b6101b281610278565b50565b6101bd6101fe565b6001600160a01b0316336001600160a01b0316146101ee57604051633057182d60e21b815260040160405180910390fd5b6101f9838383610309565b505050565b600061014661014260017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104610551565b6102366101fe565b6001600160a01b0316336001600160a01b03161461026757604051633057182d60e21b815260040160405180910390fd5b6101b281610323565b9055565b5490565b6001600160a01b03811661029f5760405163d92e233d60e01b815260040160405180910390fd5b6102d26102cd60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd610551565b829055565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b61031283610278565b80156101f9576101f98383836103c3565b6001600160a01b03811661034a5760405163d92e233d60e01b815260040160405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103736101fe565b604080516001600160a01b03928316815291841660208301520160405180910390a16101b26102cd60017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104610551565b6001600160a01b0383163b6103eb57604051630a48311160e41b815260040160405180910390fd5b6000836001600160a01b03168383604051610407929190610578565b600060405180830381855af49150503d8060008114610442576040519150601f19603f3d011682016040523d82523d6000602084013e610447565b606091505b505090508061048a5760405162461bcd60e51b815260206004820152600b60248201526a10d0531317d1905253115160aa1b604482015260640160405180910390fd5b50505050565b80356001600160a01b03811681146104a757600080fd5b919050565b6000602082840312156104be57600080fd5b6104c782610490565b9392505050565b6000806000604084860312156104e357600080fd5b6104ec84610490565b9250602084013567ffffffffffffffff8082111561050957600080fd5b818601915086601f83011261051d57600080fd5b81358181111561052c57600080fd5b87602082850101111561053e57600080fd5b6020830194508093505050509250925092565b8181038181111561057257634e487b7160e01b600052601160045260246000fd5b92915050565b818382376000910190815291905056fea2646970667358221220f625db3343f43a1847c252e9bb88db63d93d6616701c6583d59ce4a2f8ddcf4a64736f6c63430008110033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.