ERC-721
Overview
Max Total Supply
3 STRATEGY
Holders
1
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
3 STRATEGYLoading...
Loading
Loading...
Loading
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 0x4Aca671A...AD06b20D8 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.23+commit.f704f362
Optimization Enabled:
Yes with 200 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.23; import "../base/UpgradeableProxy.sol"; import "../../interfaces/IControllable.sol"; import "../../interfaces/IProxy.sol"; /// @title Proxy for Stability Platform core contracts. /// @dev ERC-1967: Proxy Storage Slots used. /// @author JodsMigel (https://github.com/JodsMigel) contract Proxy is UpgradeableProxy, IProxy { /// @inheritdoc IProxy function initProxy(address logic_) external override { _init(logic_); } /// @inheritdoc IProxy //slither-disable-next-line naming-convention function upgrade(address _newImplementation) external override { if (IControllable(address(this)).platform() != msg.sender) { revert IControllable.NotPlatform(); } _upgradeTo(_newImplementation); // the new contract must have the same ABI and you must have the power to change it again if (IControllable(address(this)).platform() != msg.sender) { revert IControllable.NotPlatform(); } } /// @inheritdoc IProxy function implementation() external view override returns (address) { return _implementation(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.23; /// @title Simple ERC-1967 upgradeable proxy implementation abstract contract UpgradeableProxy { error ImplementationIsNotContract(); /// @dev This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; /// @dev Emitted when the implementation is upgraded. event Upgraded(address indexed implementation); constructor() { assert(_IMPLEMENTATION_SLOT == bytes32(uint(keccak256("eip1967.proxy.implementation")) - 1)); } /// @dev Post deploy initialisation for compatability with EIP-1167 factory function _init(address _logic) internal { // nosemgrep require(_implementation() == address(0), "Already inited"); _setImplementation(_logic); } /// @dev Returns the current implementation address. function _implementation() internal view virtual returns (address impl) { bytes32 slot = _IMPLEMENTATION_SLOT; // solhint-disable-next-line no-inline-assembly //slither-disable-next-line assembly assembly { impl := sload(slot) } } /// @dev Upgrades the proxy to a new implementation. function _upgradeTo(address newImplementation) internal virtual { _setImplementation(newImplementation); emit Upgraded(newImplementation); } /// @dev Stores a new address in the EIP1967 implementation slot. function _setImplementation(address newImplementation) private { if (newImplementation.code.length == 0) revert ImplementationIsNotContract(); bytes32 slot = _IMPLEMENTATION_SLOT; // solhint-disable-next-line no-inline-assembly //slither-disable-next-line assembly assembly { sstore(slot, newImplementation) } } /** * @dev Delegates the current call to `implementation`. * * This function does not return to its internal call site, it will return directly to the external caller. */ function _delegate(address implementation) internal virtual { //slither-disable-next-line assembly assembly { // Copy msg.data. We take full control of memory in this inline assembly // block because it will not return to Solidity code. We overwrite the // Solidity scratch pad at memory position 0. calldatacopy(0, 0, calldatasize()) // Call the implementation. // out and outsize are 0 because we don't know the size yet. let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) // Copy the returned data. returndatacopy(0, 0, returndatasize()) switch result // delegatecall returns 0 on error. case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } /** * @dev Delegates the current call to the address returned by `_implementation()`. * * This function does not return to its internal call site, it will return directly to the external caller. */ function _fallback() internal virtual { _delegate(_implementation()); } /// @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other /// function in the contract matches the call data. //slither-disable-next-line locked-ether fallback() external payable virtual { _fallback(); } /// @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data /// is empty. //slither-disable-next-line locked-ether receive() external payable virtual { _fallback(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.23; /// @dev Base core interface implemented by most platform contracts. /// Inherited contracts store an immutable Platform proxy address in the storage, /// which provides authorization capabilities and infrastructure contract addresses. /// @author Alien Deployer (https://github.com/a17) /// @author JodsMigel (https://github.com/JodsMigel) interface IControllable { //region ----- Custom Errors ----- error IncorrectZeroArgument(); error IncorrectMsgSender(); error NotGovernance(); error NotMultisig(); error NotGovernanceAndNotMultisig(); error NotOperator(); error NotFactory(); error NotPlatform(); error NotVault(); error IncorrectArrayLength(); error AlreadyExist(); error NotExist(); error NotTheOwner(); error ETHTransferFailed(); error IncorrectInitParams(); //endregion -- Custom Errors ----- event ContractInitialized(address platform, uint ts, uint block); /// @notice Stability Platform main contract address function platform() external view returns (address); /// @notice Version of contract implementation /// @dev SemVer scheme MAJOR.MINOR.PATCH //slither-disable-next-line naming-convention function VERSION() external view returns (string memory); /// @notice Block number when contract was initialized function createdBlock() external view returns (uint); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.23; /// @dev Proxy of core contract implementation interface IProxy { /// @dev Initialize proxy logic. Need to call after deploy new proxy. /// @param logic Address of core contract implementation function initProxy(address logic) external; /// @notice Upgrade proxy implementation (contract logic). /// @dev Upgrade execution allowed only for Platform contract. /// An upgrade of any core contract proxy is always part of a platform time locked upgrade, /// with a change in the platform version. /// @param newImplementation New implementation address function upgrade(address newImplementation) external; /// @notice Return current logic implementation /// @return Address of implementation contract function implementation() external view returns (address); }
{ "remappings": [ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@solady/=lib/solady/src/", "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "openzeppelin/=lib/openzeppelin-contracts-upgradeable/contracts/", "solady/=lib/solady/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "shanghai", "viaIR": false, "libraries": { "src/core/libs/CommonLib.sol": { "CommonLib": "0x4f76ADd676c04ecA837130CeB58Bc173de8799dE" }, "src/core/libs/DeployerLib.sol": { "DeployerLib": "0x29613385F8808A04E593163a2867f3F3D4a1BD8B" }, "src/core/libs/FactoryLib.sol": { "FactoryLib": "0x06e0912b4f2E36cfcF9556478352AFC2d991919F" }, "src/core/libs/FactoryNamingLib.sol": { "FactoryNamingLib": "0x3110a397362465b6Ad45703DE9DEa2CC2Ae6C3B3" }, "src/core/libs/StrategyLogicLib.sol": { "StrategyLogicLib": "0xCA26bF5d5B610EB3E48041Dd7eb5Ce57475fB878" }, "src/core/libs/VaultBaseLib.sol": { "VaultBaseLib": "0xD728c9C834985f583B1d0C29f84D80d1EF75A609" }, "src/core/libs/VaultManagerLib.sol": { "VaultManagerLib": "0xE080ED61824494De0b191597e907Ee458F47c64b" }, "src/strategies/libs/LPStrategyLib.sol": { "LPStrategyLib": "0xda05a4EC440C6E3A253d37652F1907118c06079a" }, "src/strategies/libs/StrategyLib.sol": { "StrategyLib": "0xc2dE381a066FD7282aF33378664161a8fc180796" }, "src/strategies/libs/UniswapV3MathLib.sol": { "UniswapV3MathLib": "0xbbc63ee4a06bf1F2432ccC4d70103e3D465fcA39" } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"ImplementationIsNotContract","type":"error"},{"inputs":[],"name":"NotPlatform","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"logic_","type":"address"}],"name":"initProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newImplementation","type":"address"}],"name":"upgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561000f575f80fd5b5061003b60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61006e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461006957610069610093565b6100a7565b8181038181111561008d57634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52600160045260245ffd5b6103d2806100b45f395ff3fe608060405260043610610037575f3560e01c80630900f0101461004e5780635c60da1b1461006d5780639c0200611461009d57610046565b36610046576100446100bc565b005b6100446100bc565b348015610059575f80fd5b5061004461006836600461033f565b6100db565b348015610078575f80fd5b50610081610209565b6040516001600160a01b03909116815260200160405180910390f35b3480156100a8575f80fd5b506100446100b736600461033f565b610224565b6100d96100d45f8051602061037d8339815191525490565b61022d565b565b336001600160a01b0316306001600160a01b0316634bde38c86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610121573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101459190610361565b6001600160a01b03161461016c5760405163016bdfed60e71b815260040160405180910390fd5b6101758161024b565b336001600160a01b0316306001600160a01b0316634bde38c86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101df9190610361565b6001600160a01b0316146102065760405163016bdfed60e71b815260040160405180910390fd5b50565b5f61021f5f8051602061037d8339815191525490565b905090565b6102068161028a565b365f80375f80365f845af43d5f803e808015610247573d5ff35b3d5ffd5b610254816102f0565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f6102a05f8051602061037d8339815191525490565b6001600160a01b0316146102eb5760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481a5b9a5d195960921b604482015260640160405180910390fd5b610206815b806001600160a01b03163b5f0361031a5760405163e84f0f9960e01b815260040160405180910390fd5b5f8051602061037d83398151915255565b6001600160a01b0381168114610206575f80fd5b5f6020828403121561034f575f80fd5b813561035a8161032b565b9392505050565b5f60208284031215610371575f80fd5b815161035a8161032b56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212200c3e694a538919fac6626407558a72a42b821008a5fa233890ac06a49d421d1964736f6c63430008170033
Deployed Bytecode
0x608060405260043610610037575f3560e01c80630900f0101461004e5780635c60da1b1461006d5780639c0200611461009d57610046565b36610046576100446100bc565b005b6100446100bc565b348015610059575f80fd5b5061004461006836600461033f565b6100db565b348015610078575f80fd5b50610081610209565b6040516001600160a01b03909116815260200160405180910390f35b3480156100a8575f80fd5b506100446100b736600461033f565b610224565b6100d96100d45f8051602061037d8339815191525490565b61022d565b565b336001600160a01b0316306001600160a01b0316634bde38c86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610121573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101459190610361565b6001600160a01b03161461016c5760405163016bdfed60e71b815260040160405180910390fd5b6101758161024b565b336001600160a01b0316306001600160a01b0316634bde38c86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101df9190610361565b6001600160a01b0316146102065760405163016bdfed60e71b815260040160405180910390fd5b50565b5f61021f5f8051602061037d8339815191525490565b905090565b6102068161028a565b365f80375f80365f845af43d5f803e808015610247573d5ff35b3d5ffd5b610254816102f0565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f6102a05f8051602061037d8339815191525490565b6001600160a01b0316146102eb5760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481a5b9a5d195960921b604482015260640160405180910390fd5b610206815b806001600160a01b03163b5f0361031a5760405163e84f0f9960e01b815260040160405180910390fd5b5f8051602061037d83398151915255565b6001600160a01b0381168114610206575f80fd5b5f6020828403121561034f575f80fd5b813561035a8161032b565b9392505050565b5f60208284031215610371575f80fd5b815161035a8161032b56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212200c3e694a538919fac6626407558a72a42b821008a5fa233890ac06a49d421d1964736f6c63430008170033
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.