Holesky Testnet

Contract

0xFc8E3E7c919b4392D9F5B27015688e49c80015f0

Overview

ETH Balance

0 ETH

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Set Strategy Con...28552112024-12-02 7:42:48108 days ago1733125368IN
0xFc8E3E7c...9c80015f0
0 ETH0.000003780.0515506
Set Strategy28334102024-11-28 20:47:24111 days ago1732826844IN
0xFc8E3E7c...9c80015f0
0 ETH0.000002080.07914795
Set Strategy Con...28333862024-11-28 20:42:36111 days ago1732826556IN
0xFc8E3E7c...9c80015f0
0 ETH0.000002230.06595663
Set Strategy Con...28333852024-11-28 20:42:24111 days ago1732826544IN
0xFc8E3E7c...9c80015f0
0 ETH0.000002220.06595663
Set Strategy Con...28333842024-11-28 20:42:12111 days ago1732826532IN
0xFc8E3E7c...9c80015f0
0 ETH0.000002230.06595663
Set Strategy Con...28333832024-11-28 20:42:00111 days ago1732826520IN
0xFc8E3E7c...9c80015f0
0 ETH0.000002220.06595663
Set Strategy Con...28333822024-11-28 20:41:48111 days ago1732826508IN
0xFc8E3E7c...9c80015f0
0 ETH0.000002220.06595663
Set Strategy Con...28333812024-11-28 20:41:36111 days ago1732826496IN
0xFc8E3E7c...9c80015f0
0 ETH0.000002220.06595663
Set Strategy28333792024-11-28 20:41:12111 days ago1732826472IN
0xFc8E3E7c...9c80015f0
0 ETH0.000003180.06595663
Set Strategy Con...25977992024-10-24 11:17:12147 days ago1729768632IN
0xFc8E3E7c...9c80015f0
0 ETH0.000000320.00958122
Set Strategy Con...25977982024-10-24 11:17:00147 days ago1729768620IN
0xFc8E3E7c...9c80015f0
0 ETH0.000000320.00958122
Set Strategy Con...25977972024-10-24 11:16:48147 days ago1729768608IN
0xFc8E3E7c...9c80015f0
0 ETH0.000000320.00958122
Set Strategy Con...25977952024-10-24 11:16:24147 days ago1729768584IN
0xFc8E3E7c...9c80015f0
0 ETH0.000000320.00958122
Set Strategy Con...25977922024-10-24 11:15:48147 days ago1729768548IN
0xFc8E3E7c...9c80015f0
0 ETH0.000000320.00958122
Set Strategy Con...25977912024-10-24 11:15:36147 days ago1729768536IN
0xFc8E3E7c...9c80015f0
0 ETH0.000000320.00958122
Set Strategy25977892024-10-24 11:15:12147 days ago1729768512IN
0xFc8E3E7c...9c80015f0
0 ETH0.000000460.00958122
Set Strategy25977682024-10-24 11:10:48147 days ago1729768248IN
0xFc8E3E7c...9c80015f0
0 ETH0.00000030.01149746
Initialize25794212024-10-21 16:49:00149 days ago1729529340IN
0xFc8E3E7c...9c80015f0
0 ETH0.000000050.00101184
Set Strategy Con...25794212024-10-21 16:49:00149 days ago1729529340IN
0xFc8E3E7c...9c80015f0
0 ETH0.000000070.00101184
Set Strategy Con...25794212024-10-21 16:49:00149 days ago1729529340IN
0xFc8E3E7c...9c80015f0
0 ETH0.000000070.00101184
Set Strategy Con...25794212024-10-21 16:49:00149 days ago1729529340IN
0xFc8E3E7c...9c80015f0
0 ETH0.000000070.00101184
Set Strategy Con...25794212024-10-21 16:49:00149 days ago1729529340IN
0xFc8E3E7c...9c80015f0
0 ETH0.000000070.00101184
Set Strategy Con...25794212024-10-21 16:49:00149 days ago1729529340IN
0xFc8E3E7c...9c80015f0
0 ETH0.000000070.00101184
Set Strategy Con...25794212024-10-21 16:49:00149 days ago1729529340IN
0xFc8E3E7c...9c80015f0
0 ETH0.000000070.00101184
Set Strategy25794212024-10-21 16:49:00149 days ago1729529340IN
0xFc8E3E7c...9c80015f0
0 ETH0.000000040.00101184
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StrategiesRegistry

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
cancun EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 6 : StrategiesRegistry.sol
// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity ^0.8.26;

import {Ownable2Step, Ownable} from '@openzeppelin/contracts/access/Ownable2Step.sol';
import {Errors} from '@stakewise-core/libraries/Errors.sol';
import {IStrategiesRegistry} from './interfaces/IStrategiesRegistry.sol';

/**
 * @title StrategiesRegistry
 * @author StakeWise
 * @notice Defines the registry functionality that keeps track of Strategies and their settings
 */
contract StrategiesRegistry is Ownable2Step, IStrategiesRegistry {
    /// @inheritdoc IStrategiesRegistry
    mapping(address strategy => bool enabled) public strategies;

    /// @inheritdoc IStrategiesRegistry
    mapping(bytes32 strategyProxyId => address proxy) public strategyProxyIdToProxy;

    /// @inheritdoc IStrategiesRegistry
    mapping(address proxy => bool exists) public strategyProxies;

    mapping(bytes32 strategyConfigId => bytes value) private _strategyConfigs;

    bool private _initialized;

    /**
     * @dev Constructor
     */
    constructor() Ownable(msg.sender) {}

    /// @inheritdoc IStrategiesRegistry
    function getStrategyConfig(
        bytes32 strategyId,
        string calldata configName
    ) external view returns (bytes memory value) {
        return _strategyConfigs[keccak256(abi.encode(strategyId, configName))];
    }

    /// @inheritdoc IStrategiesRegistry
    function setStrategy(address strategy, bool enabled) external onlyOwner {
        if (strategy == address(0)) revert Errors.ZeroAddress();
        if (strategies[strategy] == enabled) revert Errors.ValueNotChanged();
        // update strategy
        strategies[strategy] = enabled;
        emit StrategyUpdated(msg.sender, strategy, enabled);
    }

    /// @inheritdoc IStrategiesRegistry
    function addStrategyProxy(bytes32 strategyProxyId, address proxy) external {
        if (strategyProxyId == bytes32(0)) revert InvalidStrategyProxyId();
        if (proxy == address(0)) revert Errors.ZeroAddress();

        // only active strategies can add proxies
        if (!strategies[msg.sender]) revert Errors.AccessDenied();
        if (strategyProxies[proxy]) revert Errors.AlreadyAdded();

        // add strategy proxy
        strategyProxyIdToProxy[strategyProxyId] = proxy;
        strategyProxies[proxy] = true;
        emit StrategyProxyAdded(msg.sender, strategyProxyId, proxy);
    }

    /// @inheritdoc IStrategiesRegistry
    function setStrategyConfig(
        bytes32 strategyId,
        string calldata configName,
        bytes calldata value
    ) external onlyOwner {
        // calculate strategy config ID
        bytes32 strategyConfigId = keccak256(abi.encode(strategyId, configName));

        // update strategy config
        _strategyConfigs[strategyConfigId] = value;
        emit StrategyConfigUpdated(strategyId, configName, value);
    }

    /// @inheritdoc IStrategiesRegistry
    function initialize(
        address _owner
    ) external onlyOwner {
        if (_owner == address(0)) revert Errors.ZeroAddress();
        if (_initialized) revert Errors.AccessDenied();

        // transfer ownership
        _transferOwnership(_owner);
        _initialized = true;
    }
}

File 2 of 6 : Ownable2Step.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol)

pragma solidity ^0.8.20;

import {Ownable} from "./Ownable.sol";

/**
 * @dev Contract module which provides access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is specified at deployment time in the constructor for `Ownable`. This
 * can later be changed with {transferOwnership} and {acceptOwnership}.
 *
 * This module is used through inheritance. It will make available all functions
 * from parent (Ownable).
 */
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Returns the address of the pending owner.
     */
    function pendingOwner() public view virtual returns (address) {
        return _pendingOwner;
    }

    /**
     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    /**
     * @dev The new owner accepts the ownership transfer.
     */
    function acceptOwnership() public virtual {
        address sender = _msgSender();
        if (pendingOwner() != sender) {
            revert OwnableUnauthorizedAccount(sender);
        }
        _transferOwnership(sender);
    }
}

File 3 of 6 : Errors.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity ^0.8.22;

/**
 * @title Errors
 * @author StakeWise
 * @notice Contains all the custom errors
 */
library Errors {
  error AccessDenied();
  error InvalidShares();
  error InvalidAssets();
  error ZeroAddress();
  error InsufficientAssets();
  error CapacityExceeded();
  error InvalidCapacity();
  error InvalidSecurityDeposit();
  error InvalidFeeRecipient();
  error InvalidFeePercent();
  error NotHarvested();
  error NotCollateralized();
  error InvalidProof();
  error LowLtv();
  error InvalidPosition();
  error InvalidHealthFactor();
  error InvalidReceivedAssets();
  error InvalidTokenMeta();
  error UpgradeFailed();
  error InvalidValidators();
  error DeadlineExpired();
  error PermitInvalidSigner();
  error InvalidValidatorsRegistryRoot();
  error InvalidVault();
  error AlreadyAdded();
  error AlreadyRemoved();
  error InvalidOracles();
  error NotEnoughSignatures();
  error InvalidOracle();
  error TooEarlyUpdate();
  error InvalidAvgRewardPerSecond();
  error InvalidRewardsRoot();
  error HarvestFailed();
  error LiquidationDisabled();
  error InvalidLiqThresholdPercent();
  error InvalidLiqBonusPercent();
  error InvalidLtvPercent();
  error InvalidCheckpointIndex();
  error InvalidCheckpointValue();
  error MaxOraclesExceeded();
  error ExitRequestNotProcessed();
  error ValueNotChanged();
  error InvalidWithdrawalCredentials();
  error EigenPodNotFound();
  error InvalidQueuedShares();
  error FlashLoanFailed();
}

File 4 of 6 : IStrategiesRegistry.sol
// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity ^0.8.26;

/**
 * @title IStrategiesRegistry
 * @author StakeWise
 * @notice Defines the interface for the StrategiesRegistry contract
 */
interface IStrategiesRegistry {
    error InvalidStrategyId();
    error InvalidStrategyProxyId();

    /**
     * @notice Event emitted on a Strategy update
     * @param caller The address that called the function
     * @param strategy The address of the updated strategy
     * @param enabled The new status of the strategy
     */
    event StrategyUpdated(address indexed caller, address strategy, bool enabled);

    /**
     * @notice Event emitted on adding Strategy proxy contract
     * @param strategy The address of the Strategy that added the proxy
     * @param strategyProxyId The ID of the added proxy
     * @param proxy The address of the added proxy
     */
    event StrategyProxyAdded(address indexed strategy, bytes32 indexed strategyProxyId, address indexed proxy);

    /**
     * @notice Event emitted on updating the strategy configuration
     * @param strategyId The ID of the strategy to update the configuration
     * @param configName The name of the configuration to update
     * @param value The new value of the configuration
     */
    event StrategyConfigUpdated(bytes32 indexed strategyId, string configName, bytes value);

    /**
     * @notice Registered Strategies
     * @param strategy The address of the strategy to check whether it is registered
     * @return `true` for the registered Strategy, `false` otherwise
     */
    function strategies(
        address strategy
    ) external view returns (bool);

    /**
     * @notice Get the strategy proxy address based on the strategy proxy ID
     * @param strategyProxyId The ID of the strategy proxy to get the address
     * @return The address of the strategy proxy
     */
    function strategyProxyIdToProxy(
        bytes32 strategyProxyId
    ) external view returns (address);

    /**
     * @notice Registered Strategy Proxies
     * @param proxy The address of the proxy to check whether it is registered
     * @return `true` for the registered Strategy proxy, `false` otherwise
     */
    function strategyProxies(
        address proxy
    ) external view returns (bool);

    /**
     * @notice Get strategy configuration
     * @param strategyId The ID of the strategy to get the configuration
     * @param configName The name of the configuration
     * @return value The value of the configuration
     */
    function getStrategyConfig(
        bytes32 strategyId,
        string calldata configName
    ) external view returns (bytes memory value);

    /**
     * @notice Set strategy configuration. Can only be called by the owner.
     * @param strategyId The ID of the strategy to set the configuration
     * @param configName The name of the configuration
     * @param value The value of the configuration
     */
    function setStrategyConfig(bytes32 strategyId, string calldata configName, bytes calldata value) external;

    /**
     * @notice Function for enabling/disabling the Strategy. Can only be called by the owner.
     * @param strategy The address of the strategy to enable/disable
     * @param enabled The new status of the strategy
     */
    function setStrategy(address strategy, bool enabled) external;

    /**
     * @notice Function for adding Strategy proxy contract. Can only be called by the registered strategy.
     * @param strategyProxyId The ID of the proxy to add
     * @param proxy The address of the proxy to add
     */
    function addStrategyProxy(bytes32 strategyProxyId, address proxy) external;

    /**
     * @notice Function for initializing the registry. Can only be called once during the deployment.
     * @param _owner The address of the owner of the contract
     */
    function initialize(
        address _owner
    ) external;
}

File 5 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 6 of 6 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

Settings
{
  "remappings": [
    "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "@stakewise-core/=lib/v3-core/contracts/",
    "@aave-core/=lib/aave-v3-origin/src/contracts/",
    "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "aave-v3-core/=lib/aave-v3-origin/src/core/",
    "aave-v3-origin/=lib/aave-v3-origin/",
    "aave-v3-periphery/=lib/aave-v3-origin/src/periphery/",
    "ds-test/=lib/aave-v3-origin/lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
    "forge-gas-snapshot/=lib/forge-gas-snapshot/src/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/",
    "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/",
    "solidity-utils/=lib/aave-v3-origin/lib/solidity-utils/",
    "v3-core/=lib/v3-core/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": true,
  "libraries": {}
}

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessDenied","type":"error"},{"inputs":[],"name":"AlreadyAdded","type":"error"},{"inputs":[],"name":"InvalidStrategyId","type":"error"},{"inputs":[],"name":"InvalidStrategyProxyId","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ValueNotChanged","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"strategyId","type":"bytes32"},{"indexed":false,"internalType":"string","name":"configName","type":"string"},{"indexed":false,"internalType":"bytes","name":"value","type":"bytes"}],"name":"StrategyConfigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"strategy","type":"address"},{"indexed":true,"internalType":"bytes32","name":"strategyProxyId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"}],"name":"StrategyProxyAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"address","name":"strategy","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"StrategyUpdated","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"strategyProxyId","type":"bytes32"},{"internalType":"address","name":"proxy","type":"address"}],"name":"addStrategyProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"strategyId","type":"bytes32"},{"internalType":"string","name":"configName","type":"string"}],"name":"getStrategyConfig","outputs":[{"internalType":"bytes","name":"value","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"strategy","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"strategyId","type":"bytes32"},{"internalType":"string","name":"configName","type":"string"},{"internalType":"bytes","name":"value","type":"bytes"}],"name":"setStrategyConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"strategy","type":"address"}],"name":"strategies","outputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"proxy","type":"address"}],"name":"strategyProxies","outputs":[{"internalType":"bool","name":"exists","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"strategyProxyId","type":"bytes32"}],"name":"strategyProxyIdToProxy","outputs":[{"internalType":"address","name":"proxy","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608080604052346079573315606657600180546001600160a01b03199081169091555f805433928116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3610975908161007e8239f35b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630869ddd3146105ee5780630f4c99261461051057806339ebf823146104d3578063682d2ff3146103a3578063715018a6146103405780637266c08e1461030357806379ba5097146102c15780638da5cb5b1461029a578063baa82a34146101e8578063c4d66de814610178578063e30c397814610150578063e38774c41461011e5763f2fde38b146100a8575f80fd5b3461011a57602036600319011261011a576100c161082e565b6100c96108d8565b60018060a01b0316806bffffffffffffffffffffffff60a01b600154161760015560018060a01b035f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b3461011a57602036600319011261011a576004355f526003602052602060018060a01b0360405f205416604051908152f35b3461011a575f36600319011261011a576001546040516001600160a01b039091168152602090f35b3461011a57602036600319011261011a5761019161082e565b6101996108d8565b6001600160a01b038116156101d95760ff600654166101ca576101bb906108eb565b6006805460ff19166001179055005b634ca8886760e01b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b3461011a57604036600319011261011a5761020161082e565b6024359081151580920361011a576102176108d8565b6001600160a01b03169081156101d957815f5260026020528060ff60405f20541615151461028b57815f52600260205260405f2060ff1981541660ff831617905560405191825260208201527fe3f7f834b8b2594f17ebfee126f1dc9333586c26a261a7be4dc0367db9ed32c260403392a2005b638c8728c760e01b5f5260045ffd5b3461011a575f36600319011261011a575f546040516001600160a01b039091168152602090f35b3461011a575f36600319011261011a57600154336001600160a01b03909116036102f0576102ee336108eb565b005b63118cdaa760e01b5f523360045260245ffd5b3461011a57602036600319011261011a576001600160a01b0361032461082e565b165f526004602052602060ff60405f2054166040519015158152f35b3461011a575f36600319011261011a576103586108d8565b600180546001600160a01b03199081169091555f80549182168155906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461011a57604036600319011261011a5760243567ffffffffffffffff811161011a576103f16103da6103ff923690600401610800565b604093919351928391602083019560043587610864565b03601f19810183528261087e565b5190205f52600560205260405f206040515f82549261041d846108a0565b9081845260208401946001811690815f146104b65750600114610476575b8460408561044b8187038261087e565b8151928391602083525180918160208501528484015e5f828201840152601f01601f19168101030190f35b5f90815260208120939250905b80821061049c5750909150810160200161044b8261043b565b919260018160209254838588010152019101909291610483565b60ff191686525050151560051b8201602001905061044b8261043b565b3461011a57602036600319011261011a576001600160a01b036104f461082e565b165f526002602052602060ff60405f2054166040519015158152f35b3461011a57604036600319011261011a576024356001600160a01b038116906004359082900361011a5780156105df5781156101d957335f52600260205260ff60405f205416156101ca57815f52600460205260ff60405f2054166105d057805f52600360205260405f20826bffffffffffffffffffffffff60a01b825416179055815f52600460205260405f20600160ff19825416179055337f0c3b7f019fdbbef4020a79612516769b52596e761a0bf6d42a8de7cf09bd25d35f80a4005b63f411c32760e01b5f5260045ffd5b630b64e4b960e31b5f5260045ffd5b3461011a57606036600319011261011a5760043560243567ffffffffffffffff811161011a57610622903690600401610800565b919060443567ffffffffffffffff811161011a57610644903690600401610800565b939061064e6108d8565b6040516020810190610666816103f186888a87610864565b5190205f52600560205260405f209467ffffffffffffffff81116107ec5761068e86546108a0565b601f81116107a7575b505f95601f821160011461071e579061070e9291817fdc411272cb709cbfa950a1d8a0d01358fbfcde93a41da01acd6ca2168f01313597985f91610713575b508260011b905f198460031b1c19161790555b610700604051958695604087526040870191610844565b918483036020860152610844565b0390a2005b9050830135896106d6565b601f198216815f5260205f20905f5b81811061078f5750907fdc411272cb709cbfa950a1d8a0d01358fbfcde93a41da01acd6ca2168f01313597988461070e9695949310610776575b5050600182811b0190556106e9565b8401355f19600385901b60f8161c191690558880610767565b858a013583556020998a01996001909301920161072d565b865f5260205f20601f830160051c810191602084106107e2575b601f0160051c01905b8181106107d75750610697565b5f81556001016107ca565b90915081906107c1565b634e487b7160e01b5f52604160045260245ffd5b9181601f8401121561011a5782359167ffffffffffffffff831161011a576020838186019501011161011a57565b600435906001600160a01b038216820361011a57565b908060209392818452848401375f828201840152601f01601f1916010190565b60409061087b949281528160208201520191610844565b90565b90601f8019910116810190811067ffffffffffffffff8211176107ec57604052565b90600182811c921680156108ce575b60208310146108ba57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916108af565b5f546001600160a01b031633036102f057565b600180546001600160a01b03199081169091555f80549182166001600160a01b03938416908117825592909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fea26469706673582212204baab2858cd3b6d600f3fa8fbc32790712c80a8c9f302ffcfdcf1a07de00aa4364736f6c634300081a0033

Deployed Bytecode

0x60806040526004361015610011575f80fd5b5f3560e01c80630869ddd3146105ee5780630f4c99261461051057806339ebf823146104d3578063682d2ff3146103a3578063715018a6146103405780637266c08e1461030357806379ba5097146102c15780638da5cb5b1461029a578063baa82a34146101e8578063c4d66de814610178578063e30c397814610150578063e38774c41461011e5763f2fde38b146100a8575f80fd5b3461011a57602036600319011261011a576100c161082e565b6100c96108d8565b60018060a01b0316806bffffffffffffffffffffffff60a01b600154161760015560018060a01b035f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b3461011a57602036600319011261011a576004355f526003602052602060018060a01b0360405f205416604051908152f35b3461011a575f36600319011261011a576001546040516001600160a01b039091168152602090f35b3461011a57602036600319011261011a5761019161082e565b6101996108d8565b6001600160a01b038116156101d95760ff600654166101ca576101bb906108eb565b6006805460ff19166001179055005b634ca8886760e01b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b3461011a57604036600319011261011a5761020161082e565b6024359081151580920361011a576102176108d8565b6001600160a01b03169081156101d957815f5260026020528060ff60405f20541615151461028b57815f52600260205260405f2060ff1981541660ff831617905560405191825260208201527fe3f7f834b8b2594f17ebfee126f1dc9333586c26a261a7be4dc0367db9ed32c260403392a2005b638c8728c760e01b5f5260045ffd5b3461011a575f36600319011261011a575f546040516001600160a01b039091168152602090f35b3461011a575f36600319011261011a57600154336001600160a01b03909116036102f0576102ee336108eb565b005b63118cdaa760e01b5f523360045260245ffd5b3461011a57602036600319011261011a576001600160a01b0361032461082e565b165f526004602052602060ff60405f2054166040519015158152f35b3461011a575f36600319011261011a576103586108d8565b600180546001600160a01b03199081169091555f80549182168155906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461011a57604036600319011261011a5760243567ffffffffffffffff811161011a576103f16103da6103ff923690600401610800565b604093919351928391602083019560043587610864565b03601f19810183528261087e565b5190205f52600560205260405f206040515f82549261041d846108a0565b9081845260208401946001811690815f146104b65750600114610476575b8460408561044b8187038261087e565b8151928391602083525180918160208501528484015e5f828201840152601f01601f19168101030190f35b5f90815260208120939250905b80821061049c5750909150810160200161044b8261043b565b919260018160209254838588010152019101909291610483565b60ff191686525050151560051b8201602001905061044b8261043b565b3461011a57602036600319011261011a576001600160a01b036104f461082e565b165f526002602052602060ff60405f2054166040519015158152f35b3461011a57604036600319011261011a576024356001600160a01b038116906004359082900361011a5780156105df5781156101d957335f52600260205260ff60405f205416156101ca57815f52600460205260ff60405f2054166105d057805f52600360205260405f20826bffffffffffffffffffffffff60a01b825416179055815f52600460205260405f20600160ff19825416179055337f0c3b7f019fdbbef4020a79612516769b52596e761a0bf6d42a8de7cf09bd25d35f80a4005b63f411c32760e01b5f5260045ffd5b630b64e4b960e31b5f5260045ffd5b3461011a57606036600319011261011a5760043560243567ffffffffffffffff811161011a57610622903690600401610800565b919060443567ffffffffffffffff811161011a57610644903690600401610800565b939061064e6108d8565b6040516020810190610666816103f186888a87610864565b5190205f52600560205260405f209467ffffffffffffffff81116107ec5761068e86546108a0565b601f81116107a7575b505f95601f821160011461071e579061070e9291817fdc411272cb709cbfa950a1d8a0d01358fbfcde93a41da01acd6ca2168f01313597985f91610713575b508260011b905f198460031b1c19161790555b610700604051958695604087526040870191610844565b918483036020860152610844565b0390a2005b9050830135896106d6565b601f198216815f5260205f20905f5b81811061078f5750907fdc411272cb709cbfa950a1d8a0d01358fbfcde93a41da01acd6ca2168f01313597988461070e9695949310610776575b5050600182811b0190556106e9565b8401355f19600385901b60f8161c191690558880610767565b858a013583556020998a01996001909301920161072d565b865f5260205f20601f830160051c810191602084106107e2575b601f0160051c01905b8181106107d75750610697565b5f81556001016107ca565b90915081906107c1565b634e487b7160e01b5f52604160045260245ffd5b9181601f8401121561011a5782359167ffffffffffffffff831161011a576020838186019501011161011a57565b600435906001600160a01b038216820361011a57565b908060209392818452848401375f828201840152601f01601f1916010190565b60409061087b949281528160208201520191610844565b90565b90601f8019910116810190811067ffffffffffffffff8211176107ec57604052565b90600182811c921680156108ce575b60208310146108ba57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916108af565b5f546001600160a01b031633036102f057565b600180546001600160a01b03199081169091555f80549182166001600160a01b03938416908117825592909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fea26469706673582212204baab2858cd3b6d600f3fa8fbc32790712c80a8c9f302ffcfdcf1a07de00aa4364736f6c634300081a0033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
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.