More Info
Private Name Tags
ContractCreator
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14781484 | 831 days ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x2afFCD76...A259285c7 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
ExternalPositionProxy
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; import "../vault/interfaces/IExternalPositionVault.sol"; import "./IExternalPosition.sol"; import "./IExternalPositionProxy.sol"; /// @title ExternalPositionProxy Contract /// @author Enzyme Council <[email protected]> /// @notice A proxy for all external positions, modified from EIP-1822 contract ExternalPositionProxy is IExternalPositionProxy { uint256 private immutable EXTERNAL_POSITION_TYPE; address private immutable VAULT_PROXY; /// @dev Needed to receive ETH on external positions receive() external payable {} constructor( address _vaultProxy, uint256 _typeId, address _constructLib, bytes memory _constructData ) public { VAULT_PROXY = _vaultProxy; EXTERNAL_POSITION_TYPE = _typeId; (bool success, bytes memory returnData) = _constructLib.delegatecall(_constructData); require(success, string(returnData)); } // solhint-disable-next-line no-complex-fallback fallback() external payable { address contractLogic = IExternalPositionVault(getVaultProxy()) .getExternalPositionLibForType(getExternalPositionType()); assembly { calldatacopy(0x0, 0x0, calldatasize()) let success := delegatecall( sub(gas(), 10000), contractLogic, 0x0, calldatasize(), 0, 0 ) let retSz := returndatasize() returndatacopy(0, 0, retSz) switch success case 0 { revert(0, retSz) } default { return(0, retSz) } } } /// @notice Delegates call to IExternalPosition.receiveCallFromVault /// @param _data The bytes data variable to be decoded at the External Position function receiveCallFromVault(bytes calldata _data) external { require( msg.sender == getVaultProxy(), "receiveCallFromVault: Only the vault can make this call" ); address contractLogic = IExternalPositionVault(getVaultProxy()) .getExternalPositionLibForType(getExternalPositionType()); (bool success, bytes memory returnData) = contractLogic.delegatecall( abi.encodeWithSelector(IExternalPosition.receiveCallFromVault.selector, _data) ); require(success, string(returnData)); } /////////////////// // STATE GETTERS // /////////////////// /// @notice Gets the `EXTERNAL_POSITION_TYPE` variable /// @return externalPositionType_ The `EXTERNAL_POSITION_TYPE` variable value function getExternalPositionType() public view override returns (uint256 externalPositionType_) { return EXTERNAL_POSITION_TYPE; } /// @notice Gets the `VAULT_PROXY` variable /// @return vaultProxy_ The `VAULT_PROXY` variable value function getVaultProxy() public view override returns (address vaultProxy_) { return VAULT_PROXY; } }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; /// @title IExternalPositionVault interface /// @author Enzyme Council <[email protected]> /// Provides an interface to get the externalPositionLib for a given type from the Vault interface IExternalPositionVault { function getExternalPositionLibForType(uint256) external view returns (address); }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; /// @title IExternalPosition Contract /// @author Enzyme Council <[email protected]> interface IExternalPosition { function getDebtAssets() external returns (address[] memory, uint256[] memory); function getManagedAssets() external returns (address[] memory, uint256[] memory); function init(bytes memory) external; function receiveCallFromVault(bytes memory) external; }
// SPDX-License-Identifier: GPL-3.0 /* This file is part of the Enzyme Protocol. (c) Enzyme Council <[email protected]> For the full license information, please view the LICENSE file that was distributed with this source code. */ pragma solidity 0.6.12; /// @title IExternalPositionProxy interface /// @author Enzyme Council <[email protected]> /// @notice An interface for publicly accessible functions on the ExternalPositionProxy interface IExternalPositionProxy { function getExternalPositionType() external view returns (uint256); function getVaultProxy() external view returns (address); }
{ "optimizer": { "enabled": true, "runs": 200, "details": { "yul": false } }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_vaultProxy","type":"address"},{"internalType":"uint256","name":"_typeId","type":"uint256"},{"internalType":"address","name":"_constructLib","type":"address"},{"internalType":"bytes","name":"_constructData","type":"bytes"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"getExternalPositionType","outputs":[{"internalType":"uint256","name":"externalPositionType_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultProxy","outputs":[{"internalType":"address","name":"vaultProxy_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"receiveCallFromVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Deployed Bytecode
0x6080604052600436106100385760003560e01c806312bc0a44146100ea578063c980918714610111578063e5c23a97146101425761003f565b3661003f57005b60006100496101c1565b6001600160a01b03166375d8bb0e61005f6101e5565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561009357600080fd5b505afa1580156100a7573d6000803e3d6000fd5b505050506040513d60208110156100bd57600080fd5b505190503660008037600080366000846127105a03f43d806000803e8180156100e557816000f35b816000fd5b3480156100f657600080fd5b506100ff6101e5565b60408051918252519081900360200190f35b34801561011d57600080fd5b506101266101c1565b604080516001600160a01b039092168252519081900360200190f35b34801561014e57600080fd5b506101bf6004803603602081101561016557600080fd5b81019060208101813564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b509092509050610209565b005b7f000000000000000000000000ea2c32c03575433d04898deb28db2f17d710b60a90565b7f000000000000000000000000000000000000000000000000000000000000000190565b6102116101c1565b6001600160a01b0316336001600160a01b0316146102605760405162461bcd60e51b81526004018080602001828103825260378152602001806104976037913960400191505060405180910390fd5b600061026a6101c1565b6001600160a01b03166375d8bb0e6102806101e5565b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156102b457600080fd5b505afa1580156102c8573d6000803e3d6000fd5b505050506040513d60208110156102de57600080fd5b5051604051602060248201908152604482018590529192506000916060916001600160a01b0385169163e5c23a9760e01b9188918891819060640184848082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b03166001600160e01b0319909916989098178852915182519297909650869550935090915081905083835b602083106103995780518252601f19909201916020918201910161037a565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103f9576040519150601f19603f3d011682016040523d82523d6000602084013e6103fe565b606091505b509150915081819061048e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561045357818101518382015260200161043b565b50505050905090810190601f1680156104805780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505050505056fe7265636569766543616c6c46726f6d5661756c743a204f6e6c7920746865207661756c742063616e206d616b6520746869732063616c6ca2646970667358221220bde61788034e5b718c72d545b684debc52940a46fa12898481ef83f83212901964736f6c634300060c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 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.