ETH Price: $2,123.48 (-2.64%)

Contract

0xc0Ff761A9d4f4E5036cf3D0e1a02B0a7b275927e
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Harvester150306572022-06-26 20:04:501361 days ago1656273890IN
0xc0Ff761A...7b275927e
0 ETH0.001703833.49598501
Earn148476732022-05-26 11:22:381393 days ago1653564158IN
0xc0Ff761A...7b275927e
0 ETH0.0330074132.34765284
Harvest147031142022-05-03 6:44:041416 days ago1651560244IN
0xc0Ff761A...7b275927e
0 ETH0.1008787963.92684432
Harvest147030982022-05-03 6:39:031416 days ago1651559943IN
0xc0Ff761A...7b275927e
0 ETH0.088919868.06684363
Harvest147030922022-05-03 6:37:491416 days ago1651559869IN
0xc0Ff761A...7b275927e
0 ETH0.0899253669.13214779
Harvest147030902022-05-03 6:36:561416 days ago1651559816IN
0xc0Ff761A...7b275927e
0 ETH0.0760019860.51354123
Harvest147030762022-05-03 6:33:431416 days ago1651559623IN
0xc0Ff761A...7b275927e
0 ETH0.0640654450.04049665
Harvest147030022022-05-03 6:17:111416 days ago1651558631IN
0xc0Ff761A...7b275927e
0 ETH0.0961706961.89888648
Earn145516812022-04-09 13:07:471440 days ago1649509667IN
0xc0Ff761A...7b275927e
0 ETH0.0175620722.36139256
Earn145516782022-04-09 13:07:251440 days ago1649509645IN
0xc0Ff761A...7b275927e
0 ETH0.0163379623.33108561
Earn145516712022-04-09 13:06:281440 days ago1649509588IN
0xc0Ff761A...7b275927e
0 ETH0.0152090124.02630811
Earn145516662022-04-09 13:06:041440 days ago1649509564IN
0xc0Ff761A...7b275927e
0 ETH0.0174874327.77582099
Earn145516592022-04-09 13:04:311440 days ago1649509471IN
0xc0Ff761A...7b275927e
0 ETH0.0213227730.18184204
Earn145516582022-04-09 13:03:511440 days ago1649509431IN
0xc0Ff761A...7b275927e
0 ETH0.0193158627.05212625
Harvest145515222022-04-09 12:32:231440 days ago1649507543IN
0xc0Ff761A...7b275927e
0 ETH0.0264615626.94114422
Harvest145515112022-04-09 12:30:071440 days ago1649507407IN
0xc0Ff761A...7b275927e
0 ETH0.0293419126.98648063
Harvest145514432022-04-09 12:15:291440 days ago1649506529IN
0xc0Ff761A...7b275927e
0 ETH0.0576830345.3604191
Harvest145514242022-04-09 12:09:311440 days ago1649506171IN
0xc0Ff761A...7b275927e
0 ETH0.0433082844.57672007
Harvest145514012022-04-09 12:03:431440 days ago1649505823IN
0xc0Ff761A...7b275927e
0 ETH0.046980434.745015
Earn145512632022-04-09 11:31:031440 days ago1649503863IN
0xc0Ff761A...7b275927e
0 ETH0.0145036522.88791223
Harvest144506912022-03-24 18:48:401455 days ago1648147720IN
0xc0Ff761A...7b275927e
0 ETH0.0679926353.65250463
Harvest144506502022-03-24 18:40:571455 days ago1648147257IN
0xc0Ff761A...7b275927e
0 ETH0.0926867186.24555311
Harvest144506382022-03-24 18:37:441455 days ago1648147064IN
0xc0Ff761A...7b275927e
0 ETH0.0614564562.17696493
Harvest144506032022-03-24 18:31:001455 days ago1648146660IN
0xc0Ff761A...7b275927e
0 ETH0.086548383.73514115
Harvest144505732022-03-24 18:23:331455 days ago1648146213IN
0xc0Ff761A...7b275927e
0 ETH0.0590446160.77256489
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Harvester

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

import "@openzeppelin/contracts/math/SafeMath.sol";

import "./interfaces/IVault.sol";
import "./interfaces/IController.sol";
import "./interfaces/IHarvester.sol";
import "./interfaces/ILegacyController.sol";
import "./interfaces/IManager.sol";
import "./interfaces/IStrategy.sol";
import "./interfaces/ISwap.sol";

/**
 * @title Harvester
 * @notice This contract is to be used as a central point to call
 * harvest on all strategies for any given vault. It has its own
 * permissions for harvesters (set by the strategist or governance).
 */
contract Harvester is IHarvester {
    using SafeMath for uint256;

    uint256 public constant ONE_HUNDRED_PERCENT = 10000;

    IManager public immutable override manager;
    IController public immutable controller;
    ILegacyController public immutable legacyController;

    uint256 public override slippage;

    struct Strategy {
        uint256 timeout;
        uint256 lastCalled;
        address[] addresses;
    }

    mapping(address => Strategy) public strategies;
    mapping(address => bool) public isHarvester;

    /**
     * @notice Logged when harvest is called for a strategy
     */
    event Harvest(
        address indexed controller,
        address indexed strategy
    );

    /**
     * @notice Logged when a harvester is set
     */
    event HarvesterSet(address indexed harvester, bool status);

    /**
     * @notice Logged when a strategy is added for a vault
     */
    event StrategyAdded(address indexed vault, address indexed strategy, uint256 timeout);

    /**
     * @notice Logged when a strategy is removed for a vault
     */
    event StrategyRemoved(address indexed vault, address indexed strategy, uint256 timeout);

    /**
     * @param _manager The address of the yAxisMetaVaultManager contract
     * @param _controller The address of the controller
     */
    constructor(
        address _manager,
        address _controller,
        address _legacyController
    )
        public
    {
        manager = IManager(_manager);
        controller = IController(_controller);
        legacyController = ILegacyController(_legacyController);
    }

    /**
     * (GOVERNANCE|STRATEGIST)-ONLY FUNCTIONS
     */

    /**
     * @notice Adds a strategy to the rotation for a given vault and sets a timeout
     * @param _vault The address of the vault
     * @param _strategy The address of the strategy
     * @param _timeout The timeout between harvests
     */
    function addStrategy(
        address _vault,
        address _strategy,
        uint256 _timeout
    )
        external
        override
        onlyController
    {
        strategies[_vault].addresses.push(_strategy);
        strategies[_vault].timeout = _timeout;
        emit StrategyAdded(_vault, _strategy, _timeout);
    }

    /**
     * @notice Removes a strategy from the rotation for a given vault and sets a timeout
     * @param _vault The address of the vault
     * @param _strategy The address of the strategy
     * @param _timeout The timeout between harvests
     */
    function removeStrategy(
        address _vault,
        address _strategy,
        uint256 _timeout
    )
        external
        override
        onlyController
    {
        uint256 tail = strategies[_vault].addresses.length;
        uint256 index;
        bool found;
        for (uint i; i < tail; i++) {
            if (strategies[_vault].addresses[i] == _strategy) {
                index = i;
                found = true;
                break;
            }
        }

        if (found) {
            strategies[_vault].addresses[index] = strategies[_vault].addresses[tail.sub(1)];
            strategies[_vault].addresses.pop();
            strategies[_vault].timeout = _timeout;
            emit StrategyRemoved(_vault, _strategy, _timeout);
        }
    }

    /**
     * @notice Sets the status of a harvester address to be able to call harvest functions
     * @param _harvester The address of the harvester
     * @param _status The status to allow the harvester to harvest
     */
    function setHarvester(
        address _harvester,
        bool _status
    )
        external
        onlyStrategist
    {
        isHarvester[_harvester] = _status;
        emit HarvesterSet(_harvester, _status);
    }

    function setSlippage(
        uint256 _slippage
    )
        external
        onlyStrategist
    {
        require(_slippage < ONE_HUNDRED_PERCENT, "!_slippage");
        slippage = _slippage;
    }

    /**
     * HARVESTER-ONLY FUNCTIONS
     */

    function earn(
        address _strategy,
        address _vault
    )
        external
        onlyHarvester
    {
        IVault(_vault).earn(_strategy);
    }

    /**
     * @notice Harvests a given strategy on the provided controller
     * @dev This function ignores the timeout
     * @param _controller The address of the controller
     * @param _strategy The address of the strategy
     * @param _estimates The estimated outputs from swaps during harvest
     */
    function harvest(
        IController _controller,
        address _strategy,
        uint256[] calldata _estimates
    )
        public
        onlyHarvester
    {
        _controller.harvestStrategy(_strategy, _estimates);
        emit Harvest(address(_controller), _strategy);
    }

    /**
     * @notice Harvests the next available strategy for a given vault and
     * rotates the strategies
     * @param _vault The address of the vault
     * @param _estimates The estimated outputs from swaps during harvest
     */
    function harvestNextStrategy(
        address _vault,
        uint256[] calldata _estimates
    )
        external
    {
        require(canHarvest(_vault), "!canHarvest");
        address strategy = strategies[_vault].addresses[0];
        harvest(controller, strategy, _estimates);
        uint256 k = strategies[_vault].addresses.length;
        if (k > 1) {
            address[] memory _strategies = new address[](k);
            for (uint i; i < k-1; i++) {
                _strategies[i] = strategies[_vault].addresses[i+1];
            }
            _strategies[k-1] = strategy;
            strategies[_vault].addresses = _strategies;
        }
        // solhint-disable-next-line not-rely-on-time
        strategies[_vault].lastCalled = block.timestamp;
    }

    /**
     * @notice Earns tokens in the LegacyController to the v3 vault
     * @param _expected The expected amount to deposit after conversion
     */
    function legacyEarn(
        uint256 _expected
    )
        external
        onlyHarvester
    {
        legacyController.legacyDeposit(_expected);
    }

    /**
     * EXTERNAL VIEW FUNCTIONS
     */

    /**
     * @notice Returns the addresses of the strategies for a given vault
     * @param _vault The address of the vault
     */
    function strategyAddresses(
        address _vault
    )
        external
        view
        returns (address[] memory)
    {
        return strategies[_vault].addresses;
    }

    /**
     * PUBLIC VIEW FUNCTIONS
     */

    /**
     * @notice Returns the availability of a vault's strategy to be harvested
     * @param _vault The address of the vault
     */
    function canHarvest(
        address _vault
    )
        public
        view
        returns (bool)
    {
        Strategy storage strategy = strategies[_vault];
        // only can harvest if there are strategies, and when sufficient time has elapsed
        // solhint-disable-next-line not-rely-on-time
        return (strategy.addresses.length > 0 && strategy.lastCalled <= block.timestamp.sub(strategy.timeout));
    }

    /**
     * @notice Returns the estimated amount of WETH and YAXIS for the given strategy
     * @param _strategy The address of the strategy
     */
    function getEstimates(
        address _strategy
    )
        public
        view
        returns (uint256[] memory _estimates)
    {
        _estimates = IStrategyExtended(_strategy).getEstimates();
    }

    /**
     * MODIFIERS
     */

    modifier onlyController() {
        require(manager.allowedControllers(msg.sender), "!controller");
        _;
    }

    modifier onlyHarvester() {
        require(isHarvester[msg.sender], "!harvester");
        _;
    }

    modifier onlyStrategist() {
        require(msg.sender == manager.strategist(), "!strategist");
        _;
    }
}

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

import "./IManager.sol";

interface IVault {
    function available() external view returns (uint256);
    function balance() external view returns (uint256);
    function deposit(uint256 _amount) external returns (uint256);
    function earn(address _strategy) external;
    function gauge() external returns (address);
    function getLPToken() external view returns (address);
    function getPricePerFullShare() external view returns (uint256);
    function getToken() external view returns (address);
    function manager() external view returns (IManager);
    function withdraw(uint256 _amount) external;
    function withdrawAll() external;
    function withdrawFee(uint256 _amount) external view returns (uint256);
}

// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

import "./IManager.sol";

interface IController {
    function balanceOf() external view returns (uint256);
    function converter(address _vault) external view returns (address);
    function earn(address _strategy, address _token, uint256 _amount) external;
    function investEnabled() external view returns (bool);
    function harvestStrategy(address _strategy, uint256[] calldata _estimates) external;
    function manager() external view returns (IManager);
    function strategies() external view returns (uint256);
    function withdraw(address _token, uint256 _amount) external;
    function withdrawAll(address _strategy, address _convert) external;
}

// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

import "./IManager.sol";

interface IHarvester {
    function addStrategy(address, address, uint256) external;
    function manager() external view returns (IManager);
    function removeStrategy(address, address, uint256) external;
    function slippage() external view returns (uint256);
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

interface ILegacyController {
    function legacyDeposit(uint256 _expected) external;
}

// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

interface IManager {
    function addVault(address) external;
    function allowedControllers(address) external view returns (bool);
    function allowedConverters(address) external view returns (bool);
    function allowedStrategies(address) external view returns (bool);
    function allowedVaults(address) external view returns (bool);
    function controllers(address) external view returns (address);
    function getHarvestFeeInfo() external view returns (address, address, uint256);
    function getToken(address) external view returns (address);
    function governance() external view returns (address);
    function halted() external view returns (bool);
    function harvester() external view returns (address);
    function insuranceFee() external view returns (uint256);
    function insurancePool() external view returns (address);
    function insurancePoolFee() external view returns (uint256);
    function pendingStrategist() external view returns (address);
    function removeVault(address) external;
    function stakingPool() external view returns (address);
    function stakingPoolShareFee() external view returns (uint256);
    function strategist() external view returns (address);
    function treasury() external view returns (address);
    function treasuryFee() external view returns (uint256);
    function withdrawalProtectionFee() external view returns (uint256);
    function yaxis() external view returns (address);
}

// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

import "./IManager.sol";
import "./ISwap.sol";

interface IStrategy {
    function balanceOf() external view returns (uint256);
    function balanceOfPool() external view returns (uint256);
    function balanceOfWant() external view returns (uint256);
    function deposit() external;
    function harvest(uint256[] calldata) external;
    function manager() external view returns (IManager);
    function name() external view returns (string memory);
    function router() external view returns (ISwap);
    function skim() external;
    function want() external view returns (address);
    function weth() external view returns (address);
    function withdraw(address) external;
    function withdraw(uint256) external;
    function withdrawAll() external;
}

interface IStrategyExtended {
    function getEstimates() external view returns (uint256[] memory);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.6.2;

interface ISwap {
    function swapExactTokensForTokens(uint256, uint256, address[] calldata, address, uint256) external;
    function getAmountsOut(uint256, address[] calldata) external view returns (uint256[] memory);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_manager","type":"address"},{"internalType":"address","name":"_controller","type":"address"},{"internalType":"address","name":"_legacyController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"controller","type":"address"},{"indexed":true,"internalType":"address","name":"strategy","type":"address"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"harvester","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"HarvesterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vault","type":"address"},{"indexed":true,"internalType":"address","name":"strategy","type":"address"},{"indexed":false,"internalType":"uint256","name":"timeout","type":"uint256"}],"name":"StrategyAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vault","type":"address"},{"indexed":true,"internalType":"address","name":"strategy","type":"address"},{"indexed":false,"internalType":"uint256","name":"timeout","type":"uint256"}],"name":"StrategyRemoved","type":"event"},{"inputs":[],"name":"ONE_HUNDRED_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_strategy","type":"address"},{"internalType":"uint256","name":"_timeout","type":"uint256"}],"name":"addStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"canHarvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"contract IController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_strategy","type":"address"},{"internalType":"address","name":"_vault","type":"address"}],"name":"earn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategy","type":"address"}],"name":"getEstimates","outputs":[{"internalType":"uint256[]","name":"_estimates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IController","name":"_controller","type":"address"},{"internalType":"address","name":"_strategy","type":"address"},{"internalType":"uint256[]","name":"_estimates","type":"uint256[]"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256[]","name":"_estimates","type":"uint256[]"}],"name":"harvestNextStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHarvester","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"legacyController","outputs":[{"internalType":"contract ILegacyController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expected","type":"uint256"}],"name":"legacyEarn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"contract IManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"address","name":"_strategy","type":"address"},{"internalType":"uint256","name":"_timeout","type":"uint256"}],"name":"removeStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_harvester","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setHarvester","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slippage","type":"uint256"}],"name":"setSlippage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"slippage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"strategies","outputs":[{"internalType":"uint256","name":"timeout","type":"uint256"},{"internalType":"uint256","name":"lastCalled","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"strategyAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"}]

60e060405234801561001057600080fd5b5060405161145f38038061145f8339818101604052606081101561003357600080fd5b50805160208201516040909201516001600160601b0319606092831b811660805292821b831660a052901b1660c05260805160601c60a05160601c60c05160601c6113aa6100b5600039806104bb5280611020525080610e3552806111b85250806104df528061075a528061079c52806108ee52806110a152506113aa6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80639af409dd116100a2578063eeabd79f11610071578063eeabd79f146103d1578063ef73bb5714610451578063f0fa55a91461046e578063f77c47911461048b578063fb70261a1461049357610116565b80639af409dd146102f3578063a71bbfd514610369578063b6dcbde7146103a3578063dd0081c7146103c957610116565b8063461c420a116100e9578063461c420a146101c8578063481c6a75146102515780634b704acd146102595780636bb3722e1461028f5780636bc9a5a9146102c557610116565b8063039f28c21461011b57806331b710571461013f57806339ebf8231461016f5780633e032a3b146101ae575b600080fd5b6101236104b9565b604080516001600160a01b039092168252519081900360200190f35b61016d6004803603604081101561015557600080fd5b506001600160a01b03813516906020013515156104dd565b005b6101956004803603602081101561018557600080fd5b50356001600160a01b031661060c565b6040805192835260208301919091528051918290030190f35b6101b6610625565b60408051918252519081900360200190f35b61016d600480360360608110156101de57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561021257600080fd5b82018360208201111561022457600080fd5b8035906020019184602083028401116401000000008311171561024657600080fd5b50909250905061062b565b610123610758565b61016d6004803603606081101561026f57600080fd5b506001600160a01b0381358116916020810135909116906040013561077c565b61016d600480360360608110156102a557600080fd5b506001600160a01b038135811691602081013590911690604001356108ce565b61016d600480360360408110156102db57600080fd5b506001600160a01b0381358116916020013516610b59565b6103196004803603602081101561030957600080fd5b50356001600160a01b0316610c0d565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561035557818101518382015260200161033d565b505050509050019250505060405180910390f35b61038f6004803603602081101561037f57600080fd5b50356001600160a01b0316610c86565b604080519115158252519081900360200190f35b610319600480360360208110156103b957600080fd5b50356001600160a01b0316610c9b565b6101b6610da6565b61016d600480360360408110156103e757600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561041257600080fd5b82018360208201111561042457600080fd5b8035906020019184602083028401116401000000008311171561044657600080fd5b509092509050610dac565b61016d6004803603602081101561046757600080fd5b5035610fcd565b61016d6004803603602081101561048457600080fd5b503561109f565b6101236111b6565b61038f600480360360208110156104a957600080fd5b50356001600160a01b03166111da565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631fe4a6866040518163ffffffff1660e01b815260040160206040518083038186803b15801561053657600080fd5b505afa15801561054a573d6000803e3d6000fd5b505050506040513d602081101561056057600080fd5b50516001600160a01b031633146105ac576040805162461bcd60e51b815260206004820152600b60248201526a085cdd1c985d1959da5cdd60aa1b604482015290519081900360640190fd5b6001600160a01b038216600081815260026020908152604091829020805460ff1916851515908117909155825190815291517f0dd4aeebdb71d8f88640d3361815b0e64e31aaf0ee73ad7f5a421115fac879ae9281900390910190a25050565b6001602081905260009182526040909120805491015482565b60005481565b3360009081526002602052604090205460ff1661067c576040805162461bcd60e51b815260206004820152600a60248201526910b430b93b32b9ba32b960b11b604482015290519081900360640190fd5b836001600160a01b031663423344838484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001806020018281038252848482818152602001925060200280828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561070257600080fd5b505af1158015610716573d6000803e3d6000fd5b50506040516001600160a01b038087169350871691507ffdfdf879d9abdea70f1d228c39cf14f5e7179a54f36b378f29bccfe7648f333e90600090a350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60408051633577910560e11b815233600482015290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636aef220a916024808301926020929190829003018186803b1580156107e257600080fd5b505afa1580156107f6573d6000803e3d6000fd5b505050506040513d602081101561080c57600080fd5b505161084d576040805162461bcd60e51b815260206004820152600b60248201526a10b1b7b73a3937b63632b960a91b604482015290519081900360640190fd5b6001600160a01b0383811660008181526001602081815260408084206002810180549485018155855282852090930180546001600160a01b03191696891696871790559284905290859055815185815291517fc2008aa15e9b0989ec7ae02bc3d8054428c527c989269ffb2a5bff829028a0129281900390910190a3505050565b60408051633577910560e11b815233600482015290516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636aef220a916024808301926020929190829003018186803b15801561093457600080fd5b505afa158015610948573d6000803e3d6000fd5b505050506040513d602081101561095e57600080fd5b505161099f576040805162461bcd60e51b815260206004820152600b60248201526a10b1b7b73a3937b63632b960a91b604482015290519081900360640190fd5b6001600160a01b0383166000908152600160205260408120600201549080805b83811015610a22576001600160a01b038781166000908152600160205260409020600201805491881691839081106109f357fe5b6000918252602090912001546001600160a01b03161415610a1a5780925060019150610a22565b6001016109bf565b508015610b51576001600160a01b038616600090815260016020819052604090912060020190610a5390859061121c565b81548110610a5d57fe5b60009182526020808320909101546001600160a01b03898116845260019092526040909220600201805491909216919084908110610a9757fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559188168152600190915260409020600201805480610ad957fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388811680845260018352604093849020889055835188815293519189169390927fdd3e131c7baafda30070fc3f53c5153570a3e6552809d20e2b682dd30fa7cc6e92918290030190a35b505050505050565b3360009081526002602052604090205460ff16610baa576040805162461bcd60e51b815260206004820152600a60248201526910b430b93b32b9ba32b960b11b604482015290519081900360640190fd5b806001600160a01b031663fdb5fefc836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015610bf957600080fd5b505af1158015610b51573d6000803e3d6000fd5b6001600160a01b038116600090815260016020908152604091829020600201805483518184028101840190945280845260609392830182828015610c7a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c5c575b50505050509050919050565b60026020526000908152604090205460ff1681565b6060816001600160a01b031663185881ec6040518163ffffffff1660e01b815260040160006040518083038186803b158015610cd657600080fd5b505afa158015610cea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610d1357600080fd5b8101908080516040519392919084640100000000821115610d3357600080fd5b908301906020820185811115610d4857600080fd5b8251866020820283011164010000000082111715610d6557600080fd5b82525081516020918201928201910280838360005b83811015610d92578181015183820152602001610d7a565b505050509050016040525050509050919050565b61271081565b610db5836111da565b610df4576040805162461bcd60e51b815260206004820152600b60248201526a0858d85b92185c9d995cdd60aa1b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040812060020180548290610e1957fe5b6000918252602090912001546001600160a01b03169050610e5c7f000000000000000000000000000000000000000000000000000000000000000082858561062b565b6001600160a01b03841660009081526001602081905260409091206002015490811115610fa95760608167ffffffffffffffff81118015610e9c57600080fd5b50604051908082528060200260200182016040528015610ec6578160200160208202803683370190505b50905060005b60018303811015610f575760016000886001600160a01b03166001600160a01b031681526020019081526020016000206002018160010181548110610f0d57fe5b9060005260206000200160009054906101000a90046001600160a01b0316828281518110610f3757fe5b6001600160a01b0390921660209283029190910190910152600101610ecc565b5082816001840381518110610f6857fe5b6001600160a01b03928316602091820292909201810191909152908716600090815260018252604090208251610fa6926002909201918401906112f0565b50505b505050506001600160a01b0316600090815260016020819052604090912042910155565b3360009081526002602052604090205460ff1661101e576040805162461bcd60e51b815260206004820152600a60248201526910b430b93b32b9ba32b960b11b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632c4c95a1826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561108457600080fd5b505af1158015611098573d6000803e3d6000fd5b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631fe4a6866040518163ffffffff1660e01b815260040160206040518083038186803b1580156110f857600080fd5b505afa15801561110c573d6000803e3d6000fd5b505050506040513d602081101561112257600080fd5b50516001600160a01b0316331461116e576040805162461bcd60e51b815260206004820152600b60248201526a085cdd1c985d1959da5cdd60aa1b604482015290519081900360640190fd5b61271081106111b1576040805162461bcd60e51b815260206004820152600a602482015269215f736c69707061676560b01b604482015290519081900360640190fd5b600055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b03811660009081526001602052604081206002810154158015906112155750805461120d90429061121c565b816001015411155b9392505050565b600061121583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250600081848411156112e85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156112ad578181015183820152602001611295565b50505050905090810190601f1680156112da5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b828054828255906000526020600020908101928215611345579160200282015b8281111561134557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611310565b50611351929150611355565b5090565b5b808211156113515780546001600160a01b031916815560010161135656fea26469706673582212202b8b4fb95fec2090a546aed7504aefcbc6c074349adf2a868b45cd37fb9e1c8964736f6c634300060c0033000000000000000000000000ab72cc293b63f6477baf9d514da735cf6caadc2d000000000000000000000000834ebce3b3fb5b9647d9398a1f6f44a2e831ac6000000000000000000000000084d40423e66c02689c2c90fbb28213dc06aa6f1a

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101165760003560e01c80639af409dd116100a2578063eeabd79f11610071578063eeabd79f146103d1578063ef73bb5714610451578063f0fa55a91461046e578063f77c47911461048b578063fb70261a1461049357610116565b80639af409dd146102f3578063a71bbfd514610369578063b6dcbde7146103a3578063dd0081c7146103c957610116565b8063461c420a116100e9578063461c420a146101c8578063481c6a75146102515780634b704acd146102595780636bb3722e1461028f5780636bc9a5a9146102c557610116565b8063039f28c21461011b57806331b710571461013f57806339ebf8231461016f5780633e032a3b146101ae575b600080fd5b6101236104b9565b604080516001600160a01b039092168252519081900360200190f35b61016d6004803603604081101561015557600080fd5b506001600160a01b03813516906020013515156104dd565b005b6101956004803603602081101561018557600080fd5b50356001600160a01b031661060c565b6040805192835260208301919091528051918290030190f35b6101b6610625565b60408051918252519081900360200190f35b61016d600480360360608110156101de57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561021257600080fd5b82018360208201111561022457600080fd5b8035906020019184602083028401116401000000008311171561024657600080fd5b50909250905061062b565b610123610758565b61016d6004803603606081101561026f57600080fd5b506001600160a01b0381358116916020810135909116906040013561077c565b61016d600480360360608110156102a557600080fd5b506001600160a01b038135811691602081013590911690604001356108ce565b61016d600480360360408110156102db57600080fd5b506001600160a01b0381358116916020013516610b59565b6103196004803603602081101561030957600080fd5b50356001600160a01b0316610c0d565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561035557818101518382015260200161033d565b505050509050019250505060405180910390f35b61038f6004803603602081101561037f57600080fd5b50356001600160a01b0316610c86565b604080519115158252519081900360200190f35b610319600480360360208110156103b957600080fd5b50356001600160a01b0316610c9b565b6101b6610da6565b61016d600480360360408110156103e757600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561041257600080fd5b82018360208201111561042457600080fd5b8035906020019184602083028401116401000000008311171561044657600080fd5b509092509050610dac565b61016d6004803603602081101561046757600080fd5b5035610fcd565b61016d6004803603602081101561048457600080fd5b503561109f565b6101236111b6565b61038f600480360360208110156104a957600080fd5b50356001600160a01b03166111da565b7f00000000000000000000000084d40423e66c02689c2c90fbb28213dc06aa6f1a81565b7f000000000000000000000000ab72cc293b63f6477baf9d514da735cf6caadc2d6001600160a01b0316631fe4a6866040518163ffffffff1660e01b815260040160206040518083038186803b15801561053657600080fd5b505afa15801561054a573d6000803e3d6000fd5b505050506040513d602081101561056057600080fd5b50516001600160a01b031633146105ac576040805162461bcd60e51b815260206004820152600b60248201526a085cdd1c985d1959da5cdd60aa1b604482015290519081900360640190fd5b6001600160a01b038216600081815260026020908152604091829020805460ff1916851515908117909155825190815291517f0dd4aeebdb71d8f88640d3361815b0e64e31aaf0ee73ad7f5a421115fac879ae9281900390910190a25050565b6001602081905260009182526040909120805491015482565b60005481565b3360009081526002602052604090205460ff1661067c576040805162461bcd60e51b815260206004820152600a60248201526910b430b93b32b9ba32b960b11b604482015290519081900360640190fd5b836001600160a01b031663423344838484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001806020018281038252848482818152602001925060200280828437600081840152601f19601f820116905080830192505050945050505050600060405180830381600087803b15801561070257600080fd5b505af1158015610716573d6000803e3d6000fd5b50506040516001600160a01b038087169350871691507ffdfdf879d9abdea70f1d228c39cf14f5e7179a54f36b378f29bccfe7648f333e90600090a350505050565b7f000000000000000000000000ab72cc293b63f6477baf9d514da735cf6caadc2d81565b60408051633577910560e11b815233600482015290516001600160a01b037f000000000000000000000000ab72cc293b63f6477baf9d514da735cf6caadc2d1691636aef220a916024808301926020929190829003018186803b1580156107e257600080fd5b505afa1580156107f6573d6000803e3d6000fd5b505050506040513d602081101561080c57600080fd5b505161084d576040805162461bcd60e51b815260206004820152600b60248201526a10b1b7b73a3937b63632b960a91b604482015290519081900360640190fd5b6001600160a01b0383811660008181526001602081815260408084206002810180549485018155855282852090930180546001600160a01b03191696891696871790559284905290859055815185815291517fc2008aa15e9b0989ec7ae02bc3d8054428c527c989269ffb2a5bff829028a0129281900390910190a3505050565b60408051633577910560e11b815233600482015290516001600160a01b037f000000000000000000000000ab72cc293b63f6477baf9d514da735cf6caadc2d1691636aef220a916024808301926020929190829003018186803b15801561093457600080fd5b505afa158015610948573d6000803e3d6000fd5b505050506040513d602081101561095e57600080fd5b505161099f576040805162461bcd60e51b815260206004820152600b60248201526a10b1b7b73a3937b63632b960a91b604482015290519081900360640190fd5b6001600160a01b0383166000908152600160205260408120600201549080805b83811015610a22576001600160a01b038781166000908152600160205260409020600201805491881691839081106109f357fe5b6000918252602090912001546001600160a01b03161415610a1a5780925060019150610a22565b6001016109bf565b508015610b51576001600160a01b038616600090815260016020819052604090912060020190610a5390859061121c565b81548110610a5d57fe5b60009182526020808320909101546001600160a01b03898116845260019092526040909220600201805491909216919084908110610a9757fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559188168152600190915260409020600201805480610ad957fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388811680845260018352604093849020889055835188815293519189169390927fdd3e131c7baafda30070fc3f53c5153570a3e6552809d20e2b682dd30fa7cc6e92918290030190a35b505050505050565b3360009081526002602052604090205460ff16610baa576040805162461bcd60e51b815260206004820152600a60248201526910b430b93b32b9ba32b960b11b604482015290519081900360640190fd5b806001600160a01b031663fdb5fefc836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015610bf957600080fd5b505af1158015610b51573d6000803e3d6000fd5b6001600160a01b038116600090815260016020908152604091829020600201805483518184028101840190945280845260609392830182828015610c7a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c5c575b50505050509050919050565b60026020526000908152604090205460ff1681565b6060816001600160a01b031663185881ec6040518163ffffffff1660e01b815260040160006040518083038186803b158015610cd657600080fd5b505afa158015610cea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610d1357600080fd5b8101908080516040519392919084640100000000821115610d3357600080fd5b908301906020820185811115610d4857600080fd5b8251866020820283011164010000000082111715610d6557600080fd5b82525081516020918201928201910280838360005b83811015610d92578181015183820152602001610d7a565b505050509050016040525050509050919050565b61271081565b610db5836111da565b610df4576040805162461bcd60e51b815260206004820152600b60248201526a0858d85b92185c9d995cdd60aa1b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020526040812060020180548290610e1957fe5b6000918252602090912001546001600160a01b03169050610e5c7f000000000000000000000000834ebce3b3fb5b9647d9398a1f6f44a2e831ac6082858561062b565b6001600160a01b03841660009081526001602081905260409091206002015490811115610fa95760608167ffffffffffffffff81118015610e9c57600080fd5b50604051908082528060200260200182016040528015610ec6578160200160208202803683370190505b50905060005b60018303811015610f575760016000886001600160a01b03166001600160a01b031681526020019081526020016000206002018160010181548110610f0d57fe5b9060005260206000200160009054906101000a90046001600160a01b0316828281518110610f3757fe5b6001600160a01b0390921660209283029190910190910152600101610ecc565b5082816001840381518110610f6857fe5b6001600160a01b03928316602091820292909201810191909152908716600090815260018252604090208251610fa6926002909201918401906112f0565b50505b505050506001600160a01b0316600090815260016020819052604090912042910155565b3360009081526002602052604090205460ff1661101e576040805162461bcd60e51b815260206004820152600a60248201526910b430b93b32b9ba32b960b11b604482015290519081900360640190fd5b7f00000000000000000000000084d40423e66c02689c2c90fbb28213dc06aa6f1a6001600160a01b0316632c4c95a1826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561108457600080fd5b505af1158015611098573d6000803e3d6000fd5b5050505050565b7f000000000000000000000000ab72cc293b63f6477baf9d514da735cf6caadc2d6001600160a01b0316631fe4a6866040518163ffffffff1660e01b815260040160206040518083038186803b1580156110f857600080fd5b505afa15801561110c573d6000803e3d6000fd5b505050506040513d602081101561112257600080fd5b50516001600160a01b0316331461116e576040805162461bcd60e51b815260206004820152600b60248201526a085cdd1c985d1959da5cdd60aa1b604482015290519081900360640190fd5b61271081106111b1576040805162461bcd60e51b815260206004820152600a602482015269215f736c69707061676560b01b604482015290519081900360640190fd5b600055565b7f000000000000000000000000834ebce3b3fb5b9647d9398a1f6f44a2e831ac6081565b6001600160a01b03811660009081526001602052604081206002810154158015906112155750805461120d90429061121c565b816001015411155b9392505050565b600061121583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250600081848411156112e85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156112ad578181015183820152602001611295565b50505050905090810190601f1680156112da5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b828054828255906000526020600020908101928215611345579160200282015b8281111561134557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611310565b50611351929150611355565b5090565b5b808211156113515780546001600160a01b031916815560010161135656fea26469706673582212202b8b4fb95fec2090a546aed7504aefcbc6c074349adf2a868b45cd37fb9e1c8964736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000ab72cc293b63f6477baf9d514da735cf6caadc2d000000000000000000000000834ebce3b3fb5b9647d9398a1f6f44a2e831ac6000000000000000000000000084d40423e66c02689c2c90fbb28213dc06aa6f1a

-----Decoded View---------------
Arg [0] : _manager (address): 0xAB72cC293B63f6477BAf9d514Da735Cf6caADC2d
Arg [1] : _controller (address): 0x834ebCE3b3Fb5B9647d9398a1f6F44A2E831aC60
Arg [2] : _legacyController (address): 0x84D40423e66C02689c2C90fbB28213dC06aa6F1a

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000ab72cc293b63f6477baf9d514da735cf6caadc2d
Arg [1] : 000000000000000000000000834ebce3b3fb5b9647d9398a1f6f44a2e831ac60
Arg [2] : 00000000000000000000000084d40423e66c02689c2c90fbb28213dc06aa6f1a


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
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.