Contract 0xd73863c0d3637ca805d449aac7ed04c605bc456c

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xdadc0d093e8e818ca7f7499a16b36d31f0e2ae7f8a8a765b69497f1fbd2417b8Deposit135503802024-04-19 7:00:552 hrs 14 mins agoCronos ID Name weicheng.cro IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c3,770 CRO1.95407241 5,048.5
0xd12268a1d7cf1e1d343da1509f8c8adea17d42d77c0d0696ada7145221b5ece0Deposit135496592024-04-19 5:52:563 hrs 22 mins ago0xc8758a9c13eee005d177b8f7b94d437925eb1ef7 IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c50,680 CRO2.2137180
0xefaf0ffbe4890f181d076a71ca74160f6c7e8bf8d1428975a309a65601382804Withdraw135496452024-04-19 5:51:373 hrs 23 mins ago0xc8758a9c13eee005d177b8f7b94d437925eb1ef7 IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c0 CRO5.7002380
0x17c470e0f5a1cdd7be4bec799109f241fe0d8c5d263c9f7c633d7855a861a481Deposit135493892024-04-19 5:27:313 hrs 47 mins ago0xc8758a9c13eee005d177b8f7b94d437925eb1ef7 IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c835 CRO1.9546530
0x4b020592160f491c1f55830d11f72ca9296702f5eba09718244eb579a20efe14Withdraw135430462024-04-18 19:29:0613 hrs 46 mins ago0xc7d5acfe783b8f56d98e9641ca1fdff2321f1f6c IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c0 CRO2.12852450
0xc8b5c77fd2ead4c4783cd9118188f6d38050d59ecaf5d480f7fe4df354f897d8Deposit135394962024-04-18 13:53:5819 hrs 21 mins ago0x1ebc161321e4238846acc58704a39a81a7693361 IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c200.2 CRO1.943275350
0x53f252c7e84eed222390d41679b22b014441758e7d655434c644149a9c64ae56Deposit135341442024-04-18 5:28:161 day 3 hrs ago0xe458b89f2ed5e7ba8fbb18e114642a8936bdc23e IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c74 CRO1.9546530
0x54690af3a2d9df8f5918d1ad259778dc2eb5597185b20718cd651d63b1c3fd0cDeposit135289212024-04-17 21:16:031 day 11 hrs ago0xbab858be4ad6f040b70d1dd55188078d3dad821b IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c90.36143467 CRO1.943275350
0x7e0769e93b608ba1655bef12b5d52a8004f97fd9edf604cc068c77b61bfdc200Deposit135288872024-04-17 21:12:501 day 12 hrs ago0xbab858be4ad6f040b70d1dd55188078d3dad821b IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c182.57876364 CRO2.029630350
0xcfb9782c2f9fd69dcfd417a512222fdc3772bf48e3df9c4494bdb76f27d4d3bdDeposit135284532024-04-17 20:31:561 day 12 hrs agoCronos ID Name muladi.cro IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c852 CRO1.943275350
0xc2dcc4be6dbeef660a288148cb95553fd58ccdf1f4654a7d8148f187b0c6ff2fDeposit135260672024-04-17 16:46:331 day 16 hrs agoCronos ID Name kingofcronos.cro IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c225 CRO1.943275350
0xa580cd635e03abf0fd28d95c536b5fa0c6e316734fe2dd20db73e431a33e2f7dWithdraw135250512024-04-17 15:10:241 day 18 hrs ago0x5bcb0d64bcb954f210e5b8e89c6f386a40c2a023 IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c0 CRO2.12840330
0x6d317e5df9cdf1274472e042957f12246028c9ef23f6dfbb57d05755d5c3db2fDeposit135221352024-04-17 10:34:511 day 22 hrs ago0xf7cd943c9f465e75dbaf9a34bc7bdcfda65ad937 IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c3,583 CRO1.942138245315 5,047.045
0x4144f4ac13b8887cf352b699415e02adeb7b78119912a59074b4a24a6eda911fDeposit135221192024-04-17 10:33:211 day 22 hrs agoCronos ID Name weicheng.cro IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c3,653 CRO1.942418192407 5,047.7725
0x173bc623ef39ad2068697bf4fa2e0fda21eabe3537c059ca5724071ace8aa6a4Withdraw135187192024-04-17 5:09:522 days 4 hrs ago0x5b3adf3e4422ca48147d996babb5f3ab247b2da6 IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c0 CRO2.139841550
0xb86e56cd29d72a290b28f8500c769e6e908edf9cbd5686d5265daa3101ab5e09Deposit135170162024-04-17 2:29:222 days 6 hrs ago0x1ebc161321e4238846acc58704a39a81a7693361 IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c100 CRO1.9546530
0x244b08286d7587bf6ebe644f64da4e750970e7501166cebc56812d343c6bfe8cDeposit135114582024-04-16 17:45:442 days 15 hrs ago0x9a4f3ee4068234a402f1307d2bc0e7a735aa58f3 IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c41.250550779 CRO2.029630350
0x5460303c651716da7d02f8a27b2a7b32cf2810843ccb434d50ff2ba7b383276bWithdraw135082742024-04-16 12:45:182 days 20 hrs ago0x839d71e9ae9254b4a7f63afea52f9564344a6981 IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c0 CRO2.12834270
0xccd357cb25b5e22b2efff8d956cffdbcaa3fe81a51c7786acec7f695d097c5ddDeposit135064892024-04-16 9:56:522 days 23 hrs ago0x502e8af447069ddcc14fc6ef5cda51b19d9ebad5 IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c105.98201292 CRO1.996118971275 5,187.325
0xeb423cb496de3f5efd07a7617719a234e1f5d30b1d58f0bd6132b5d1df3d14cbDeposit135052032024-04-16 7:55:433 days 1 hr agoCronos ID Name devol.cro IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c55.46447978 CRO2.029630350
0x997a1ee384b0cb72b18d75476cc212def43cb44f9411e714a321915c047e75c1Withdraw135050822024-04-16 7:44:203 days 1 hr ago0xfa1c568caf2ea38ba78ad7d8b7a9e742c04a721f IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c0 CRO2.12846390
0x9a3ae7127da0b3192dbc8d2408d7542e396d8d644f6730c13e161c6bd310ce76Deposit135044302024-04-16 6:43:023 days 2 hrs ago0x5bcb0d64bcb954f210e5b8e89c6f386a40c2a023 IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c750 CRO1.9546530
0xef69281315a8904ad907a04040c62f4a4fa690d5bf250ac67d9121a9869ab350Withdraw135042062024-04-16 6:21:573 days 2 hrs ago0x5bcb0d64bcb954f210e5b8e89c6f386a40c2a023 IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c0 CRO2.139780950
0x948c831c05d8bc5442958cefe08dc528fbbb18b3eb764a6d61ec37b13ec01682Deposit135017492024-04-16 2:30:503 days 6 hrs ago0x11a59ee4db75556ecced35cafe863195b7f98976 IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c700 CRO2.0665206 5,113.125
0x3038a584158ccc992f20ae58ca43bb3d7e0151d5ae4a1339a12b59849aea5645Withdraw135007132024-04-16 0:53:203 days 8 hrs ago0xa0f8d4663cc8667cda9ed696ea006e2cff0ad7a9 IN  0xd73863c0d3637ca805d449aac7ed04c605bc456c0 CRO2.12852450
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xdadc0d093e8e818ca7f7499a16b36d31f0e2ae7f8a8a765b69497f1fbd2417b8135503802024-04-19 7:00:552 hrs 14 mins ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c Cronos: WCRO Token3,770 CRO
0xd12268a1d7cf1e1d343da1509f8c8adea17d42d77c0d0696ada7145221b5ece0135496592024-04-19 5:52:563 hrs 22 mins ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c Cronos: WCRO Token50,680 CRO
0xefaf0ffbe4890f181d076a71ca74160f6c7e8bf8d1428975a309a65601382804135496452024-04-19 5:51:373 hrs 23 mins ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c0xc8758a9c13eee005d177b8f7b94d437925eb1ef750,684.714715073276204712 CRO
0xefaf0ffbe4890f181d076a71ca74160f6c7e8bf8d1428975a309a65601382804135496452024-04-19 5:51:373 hrs 23 mins ago Cronos: WCRO Token 0xd73863c0d3637ca805d449aac7ed04c605bc456c50,684.714715073276204712 CRO
0x17c470e0f5a1cdd7be4bec799109f241fe0d8c5d263c9f7c633d7855a861a481135493892024-04-19 5:27:313 hrs 47 mins ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c Cronos: WCRO Token835 CRO
0x4b020592160f491c1f55830d11f72ca9296702f5eba09718244eb579a20efe14135430462024-04-18 19:29:0613 hrs 46 mins ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c0xc7d5acfe783b8f56d98e9641ca1fdff2321f1f6c4,564.386805018908539154 CRO
0x4b020592160f491c1f55830d11f72ca9296702f5eba09718244eb579a20efe14135430462024-04-18 19:29:0613 hrs 46 mins ago Cronos: WCRO Token 0xd73863c0d3637ca805d449aac7ed04c605bc456c4,564.386805018908539154 CRO
0xc8b5c77fd2ead4c4783cd9118188f6d38050d59ecaf5d480f7fe4df354f897d8135394962024-04-18 13:53:5819 hrs 21 mins ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c Cronos: WCRO Token200.2 CRO
0x53f252c7e84eed222390d41679b22b014441758e7d655434c644149a9c64ae56135341442024-04-18 5:28:161 day 3 hrs ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c Cronos: WCRO Token74 CRO
0x54690af3a2d9df8f5918d1ad259778dc2eb5597185b20718cd651d63b1c3fd0c135289212024-04-17 21:16:031 day 11 hrs ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c Cronos: WCRO Token90.36143467 CRO
0x7e0769e93b608ba1655bef12b5d52a8004f97fd9edf604cc068c77b61bfdc200135288872024-04-17 21:12:501 day 12 hrs ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c Cronos: WCRO Token182.57876364 CRO
0xcfb9782c2f9fd69dcfd417a512222fdc3772bf48e3df9c4494bdb76f27d4d3bd135284532024-04-17 20:31:561 day 12 hrs ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c Cronos: WCRO Token852 CRO
0xc2dcc4be6dbeef660a288148cb95553fd58ccdf1f4654a7d8148f187b0c6ff2f135260672024-04-17 16:46:331 day 16 hrs ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c Cronos: WCRO Token225 CRO
0xa580cd635e03abf0fd28d95c536b5fa0c6e316734fe2dd20db73e431a33e2f7d135250512024-04-17 15:10:241 day 18 hrs ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c0x5bcb0d64bcb954f210e5b8e89c6f386a40c2a023744.027089526027498858 CRO
0xa580cd635e03abf0fd28d95c536b5fa0c6e316734fe2dd20db73e431a33e2f7d135250512024-04-17 15:10:241 day 18 hrs ago Cronos: WCRO Token 0xd73863c0d3637ca805d449aac7ed04c605bc456c744.027089526027498858 CRO
0x6d317e5df9cdf1274472e042957f12246028c9ef23f6dfbb57d05755d5c3db2f135221352024-04-17 10:34:511 day 22 hrs ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c Cronos: WCRO Token3,583 CRO
0x4144f4ac13b8887cf352b699415e02adeb7b78119912a59074b4a24a6eda911f135221192024-04-17 10:33:211 day 22 hrs ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c Cronos: WCRO Token3,653 CRO
0x173bc623ef39ad2068697bf4fa2e0fda21eabe3537c059ca5724071ace8aa6a4135187192024-04-17 5:09:522 days 4 hrs ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c0x5b3adf3e4422ca48147d996babb5f3ab247b2da6149.589069768937797991 CRO
0x173bc623ef39ad2068697bf4fa2e0fda21eabe3537c059ca5724071ace8aa6a4135187192024-04-17 5:09:522 days 4 hrs ago Cronos: WCRO Token 0xd73863c0d3637ca805d449aac7ed04c605bc456c149.589069768937797991 CRO
0xb86e56cd29d72a290b28f8500c769e6e908edf9cbd5686d5265daa3101ab5e09135170162024-04-17 2:29:222 days 6 hrs ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c Cronos: WCRO Token100 CRO
0x244b08286d7587bf6ebe644f64da4e750970e7501166cebc56812d343c6bfe8c135114582024-04-16 17:45:442 days 15 hrs ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c Cronos: WCRO Token41.250550779 CRO
0x5460303c651716da7d02f8a27b2a7b32cf2810843ccb434d50ff2ba7b383276b135082742024-04-16 12:45:182 days 20 hrs ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c0x839d71e9ae9254b4a7f63afea52f9564344a6981203.981069010778238011 CRO
0x5460303c651716da7d02f8a27b2a7b32cf2810843ccb434d50ff2ba7b383276b135082742024-04-16 12:45:182 days 20 hrs ago Cronos: WCRO Token 0xd73863c0d3637ca805d449aac7ed04c605bc456c203.981069010778238011 CRO
0xccd357cb25b5e22b2efff8d956cffdbcaa3fe81a51c7786acec7f695d097c5dd135064892024-04-16 9:56:522 days 23 hrs ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c Cronos: WCRO Token105.98201292 CRO
0xeb423cb496de3f5efd07a7617719a234e1f5d30b1d58f0bd6132b5d1df3d14cb135052032024-04-16 7:55:433 days 1 hr ago 0xd73863c0d3637ca805d449aac7ed04c605bc456c Cronos: WCRO Token55.46447978 CRO
[ Download CSV Export 
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CroDelegator

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 10 : CroDelegator.sol
// Wrap CRO to WCro and deposit via WCroDelegator contract

// SPDX-License-Identifier: AGPL-3.0

pragma solidity 0.8.15;

import {IDelegator} from "./interfaces/IDelegator.sol";
import {IVault} from "./interfaces/IVault.sol";

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

import "./DelegatorStorage.sol";

interface WrappedERC20 is IERC20 {
    function deposit() external payable;
    function approve(address spender, uint256 amount) external returns (bool);
    function withdraw(uint256 amount) external;
}

contract CroDelegator is ReentrancyGuard, DelegatorStorage {
    using SafeERC20 for WrappedERC20;

    IDelegator WCroDelegator;
    WrappedERC20 WCro;
    IVault Vault;
    uint256 defaultSlippage;

    constructor(address _wcroDelegator) {
        WCroDelegator = IDelegator(_wcroDelegator);
        WCro = WrappedERC20(WCroDelegator.token());
        Vault = IVault(WCroDelegator.vault());

        WCro.approve(_wcroDelegator, type(uint256).max);
        Vault.approve(_wcroDelegator, type(uint256).max);

        defaultSlippage = 100;
    }

    function deposit() external payable returns (uint256) {
        return _deposit(defaultSlippage);
    }

    function deposit(uint256 _slippage) external payable returns (uint256) {
        return _deposit(_slippage);
    }

    function _deposit(uint256 _slippage) internal nonReentrant returns (uint256) {
        require(msg.value > 0, "deposit amount can not be 0");
        require(_slippage > 0 && _slippage < 10_000, "slippage is invalid");

        WCro.deposit{value: msg.value}();
        uint256 shares = WCroDelegator.deposit(msg.value, msg.sender, _slippage);

        emit Deposit(msg.sender, shares, msg.value);

        return shares;
    }

    function withdraw(uint256 _amount) external returns (uint256) {
        return _withdraw(_amount, defaultSlippage);
    }

    function withdraw(uint256 _amount, uint256 _slippage) external returns (uint256) {
        return _withdraw(_amount, _slippage);
    }

    function _withdraw(uint256 _amount, uint256 _slippage) internal nonReentrant returns (uint256) {
        require(_amount > 0, "amount can not be 0");
        require(_slippage > 0 && _slippage < 10_000, "slippage is invalid");

        bool vaultTransfer = Vault.transferFrom(msg.sender, address(this), _amount);
        require(vaultTransfer, "!Vault.transferFrom");

        uint256 wcroAmount = WCroDelegator.withdraw(_amount, _slippage);

        // unwrap wcro to cro
        WCro.withdraw(wcroAmount);

        (bool success,) = msg.sender.call{value: wcroAmount, gas: 450000}("");
        require(success, "transfer failed!");

        emit Withdraw(msg.sender, _amount, wcroAmount);

        return wcroAmount;
    }

    fallback() external payable {}
}

File 2 of 10 : IDelegator.sol
// SPDX-License-Identifier: AGPL-3.0

pragma solidity 0.8.15;

interface IDelegator {
    function token() external view returns (address);
    function vault() external view returns (address);
    function deposit(uint256 _amount) external returns (uint256);
    function deposit(uint256 _amount, uint256 _slippage) external returns (uint256);
    function deposit(uint256 _amount, address _sender, uint256 _slippage) external returns (uint256);
    function withdraw(uint256 _amount) external returns (uint256);
    function withdraw(uint256 _amount, uint256 _slippage) external returns (uint256);
    function withdraw(uint256 _amount, address _sender, uint256 _slippage) external returns (uint256);
}

File 3 of 10 : IVault.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.15;

import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {StrategyParams} from "../Storage.sol";

interface IVault is IERC20 {
    function name() external view returns (string calldata);

    function symbol() external view returns (string calldata);

    function decimals() external view returns (uint256);

    function apiVersion() external pure returns (string memory);

    function permit(
        address owner,
        address spender,
        uint256 amount,
        uint256 expiry,
        bytes calldata signature
    ) external returns (bool);

    function initialize(
        address token,
        address governance,
        address rewards,
        string memory name,
        string memory symbol,
        address guardian,
        address management
    ) external;

    function addStrategy(
        address _strategy,
        uint256 _debtRatio,
        uint256 _minDebtPerHarvest,
        uint256 _maxDebtPerHarvest,
        uint256 _performanceFee
    ) external;

    function setDepositLimit(uint256 amount) external;

    // NOTE: Vyper produces multiple signatures for a given function with "default" args
    function deposit() external returns (uint256);

    function deposit(uint256 amount) external returns (uint256);

    function deposit(
        uint256 amount,
        address recipient
    ) external returns (uint256);

    // NOTE: Vyper produces multiple signatures for a given function with "default" args
    function withdraw() external returns (uint256);

    function withdraw(uint256 maxShares) external returns (uint256);

    function withdraw(
        uint256 maxShares,
        address recipient
    ) external returns (uint256);

    function token() external view returns (address);

    function strategies(
        address _strategy
    ) external view returns (StrategyParams memory);

    function pricePerShare() external view returns (uint256);

    function totalAssets() external view returns (uint256);

    function depositLimit() external view returns (uint256);

    function maxAvailableShares() external view returns (uint256);

    /**
     * View how much the Vault would increase this Strategy's borrow limit,
     * based on its present performance (since its last report). Can be used to
     * determine expectedReturn in your Strategy.
     */
    function creditAvailable() external view returns (uint256);

    function creditAvailable(address _strategy) external view returns (uint256);

    /**
     * View how much the Vault would like to pull back from the Strategy,
     * based on its present performance (since its last report). Can be used to
     * determine expectedReturn in your Strategy.
     */
    function debtOutstanding() external view returns (uint256);

    function debtOutstanding(address _strategy) external view returns (uint256);

    /**
     * View how much the Vault expect this Strategy to return at the current
     * block, based on its present performance (since its last report). Can be
     * used to determine expectedReturn in your Strategy.
     */
    function expectedReturn() external view returns (uint256);

    /**
     * This is the main contact point where the Strategy interacts with the
     * Vault. It is critical that this call is handled as intended by the
     * Strategy. Therefore, this function will be called by BaseStrategy to
     * make sure the integration is correct.
     */
    function report(
        uint256 _gain,
        uint256 _loss,
        uint256 _debtPayment
    ) external returns (uint256);

    /**
     * This function should only be used in the scenario where the Strategy is
     * being retired but no migration of the positions are possible, or in the
     * extreme scenario that the Strategy needs to be put into "Emergency Exit"
     * mode in order for it to exit as quickly as possible. The latter scenario
     * could be for any reason that is considered "critical" that the Strategy
     * exits its position as fast as possible, such as a sudden change in
     * market conditions leading to losses, or an imminent failure in an
     * external dependency.
     */
    function revokeStrategy() external;

    function revokeStrategy(address strategy) external;

    function migrateStrategy(address oldVersion, address newVersion) external;

    function setEmergencyShutdown(bool active) external;

    function setManagementFee(uint256 fee) external;

    function updateStrategyDebtRatio(
        address strategy,
        uint256 debtRatio
    ) external;

    function withdraw(
        uint256 maxShare,
        address recipient,
        uint256 maxLoss
    ) external;

    /**
     * View the governance address of the Vault to assert privileged functions
     * can only be called by governance. The Strategy serves the Vault, so it
     * is subject to governance defined by the Vault.
     */
    function governance() external view returns (address);

    /**
     * View the management address of the Vault to assert privileged functions
     * can only be called by management. The Strategy serves the Vault, so it
     * is subject to management defined by the Vault.
     */
    function management() external view returns (address);

    /**
     * View the guardian address of the Vault to assert privileged functions
     * can only be called by guardian. The Strategy serves the Vault, so it
     * is subject to guardian defined by the Vault.
     */
    function guardian() external view returns (address);
}

File 4 of 10 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

File 5 of 10 : SafeERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";
import "../extensions/IERC20Permit.sol";
import "../../../utils/Address.sol";

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    /**
     * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
     * non-reverting calls are assumed to be successful.
     */
    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    /**
     * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
     * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
     */
    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    /**
     * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
     * non-reverting calls are assumed to be successful.
     */
    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 oldAllowance = token.allowance(address(this), spender);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));
    }

    /**
     * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
     * non-reverting calls are assumed to be successful.
     */
    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));
        }
    }

    /**
     * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
     * non-reverting calls are assumed to be successful. Compatible with tokens that require the approval to be set to
     * 0 before setting it to a non-zero value.
     */
    function forceApprove(IERC20 token, address spender, uint256 value) internal {
        bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));
            _callOptionalReturn(token, approvalCall);
        }
    }

    /**
     * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.
     * Revert on invalid signature.
     */
    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     *
     * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.
     */
    function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false
        // and not revert is the subcall reverts.

        (bool success, bytes memory returndata) = address(token).call(data);
        return
            success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token));
    }
}

File 6 of 10 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

File 7 of 10 : DelegatorStorage.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.15;

contract DelegatorStorage {
    event Deposit(address indexed recipient, uint256 shares, uint256 amount);

    event Withdraw(address indexed recipient, uint256 shares, uint256 amount);
}

File 8 of 10 : Storage.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.15;

struct StrategyParams {
    uint256 performanceFee;
    uint256 activation;
    uint256 debtRatio;
    uint256 minDebtPerHarvest;
    uint256 maxDebtPerHarvest;
    uint256 lastReport;
    uint256 totalDebt;
    uint256 totalGain;
    uint256 totalLoss;
}

File 9 of 10 : IERC20Permit.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Permit.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 */
interface IERC20Permit {
    /**
     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
     * given ``owner``'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

File 10 of 10 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     *
     * Furthermore, `isContract` will also return true if the target contract within
     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
     * which only has an effect at the end of a transaction.
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "@ferro-stableswap/contracts/=lib/ferro-stableswap/contracts/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin/=lib/openzeppelin-contracts/contracts/",
    "utils/=lib/utils/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_wcroDelegator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"uint256","name":"_slippage","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_slippage","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5060405161099638038061099683398101604081905261002f91610243565b6001600081905580546001600160a01b0319166001600160a01b03831690811790915560408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa15801561008d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b19190610243565b600280546001600160a01b0319166001600160a01b039283161790556001546040805163fbfa77cf60e01b81529051919092169163fbfa77cf9160048083019260209291908290030181865afa15801561010f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101339190610243565b600380546001600160a01b0319166001600160a01b0392831617905560025460405163095ea7b360e01b81528383166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af115801561019a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101be9190610273565b5060035460405163095ea7b360e01b81526001600160a01b03838116600483015260001960248301529091169063095ea7b3906044016020604051808303816000875af1158015610213573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102379190610273565b50506064600455610295565b60006020828403121561025557600080fd5b81516001600160a01b038116811461026c57600080fd5b9392505050565b60006020828403121561028557600080fd5b8151801515811461026c57600080fd5b6106f2806102a46000396000f3fe60806040526004361061003f5760003560e01c80632e1a7d4d14610041578063441a3e7014610073578063b6b55f2514610093578063d0e30db0146100a6575b005b34801561004d57600080fd5b5061006161005c366004610646565b6100ae565b60405190815260200160405180910390f35b34801561007f57600080fd5b5061006161008e36600461065f565b6100c2565b6100616100a1366004610646565b6100d5565b6100616100e0565b60006100bc826004546100f2565b92915050565b60006100ce83836100f2565b9392505050565b60006100bc8261040b565b60006100ed60045461040b565b905090565b60006100fc6105ed565b600083116101475760405162461bcd60e51b81526020600482015260136024820152720616d6f756e742063616e206e6f74206265203606c1b60448201526064015b60405180910390fd5b600082118015610158575061271082105b61019a5760405162461bcd60e51b81526020600482015260136024820152721cdb1a5c1c1859d9481a5cc81a5b9d985b1a59606a1b604482015260640161013e565b6003546040516323b872dd60e01b8152336004820152306024820152604481018590526000916001600160a01b0316906323b872dd906064016020604051808303816000875af11580156101f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102169190610681565b90508061025b5760405162461bcd60e51b8152602060048201526013602482015272215661756c742e7472616e7366657246726f6d60681b604482015260640161013e565b600154604051630441a3e760e41b815260048101869052602481018590526000916001600160a01b03169063441a3e70906044016020604051808303816000875af11580156102ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d291906106a3565b600254604051632e1a7d4d60e01b8152600481018390529192506001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b5050604051600092503391506206ddd090849084818181858888f193505050503d8060008114610379576040519150601f19603f3d011682016040523d82523d6000602084013e61037e565b606091505b50509050806103c25760405162461bcd60e51b815260206004820152601060248201526f7472616e73666572206661696c65642160801b604482015260640161013e565b604080518781526020810184905233917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568910160405180910390a2509150506100bc6001600055565b60006104156105ed565b600034116104655760405162461bcd60e51b815260206004820152601b60248201527f6465706f73697420616d6f756e742063616e206e6f7420626520300000000000604482015260640161013e565b600082118015610476575061271082105b6104b85760405162461bcd60e51b81526020600482015260136024820152721cdb1a5c1c1859d9481a5cc81a5b9d985b1a59606a1b604482015260640161013e565b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561050857600080fd5b505af115801561051c573d6000803e3d6000fd5b505060015460405163bc157ac160e01b815234600482015233602482015260448101879052600094506001600160a01b03909116925063bc157ac191506064016020604051808303816000875af115801561057b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059f91906106a3565b6040805182815234602082015291925033917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15910160405180910390a290506105e86001600055565b919050565b60026000540361063f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161013e565b6002600055565b60006020828403121561065857600080fd5b5035919050565b6000806040838503121561067257600080fd5b50508035926020909101359150565b60006020828403121561069357600080fd5b815180151581146100ce57600080fd5b6000602082840312156106b557600080fd5b505191905056fea26469706673582212209cf51b0c856d625756414f539f306ffcf2fe5c99f2a3db9baf1beeed9cbf299d64736f6c634300080f0033000000000000000000000000186a963f78ba0ca8e1799a32e3106c9fee05c7c1

Deployed Bytecode

0x60806040526004361061003f5760003560e01c80632e1a7d4d14610041578063441a3e7014610073578063b6b55f2514610093578063d0e30db0146100a6575b005b34801561004d57600080fd5b5061006161005c366004610646565b6100ae565b60405190815260200160405180910390f35b34801561007f57600080fd5b5061006161008e36600461065f565b6100c2565b6100616100a1366004610646565b6100d5565b6100616100e0565b60006100bc826004546100f2565b92915050565b60006100ce83836100f2565b9392505050565b60006100bc8261040b565b60006100ed60045461040b565b905090565b60006100fc6105ed565b600083116101475760405162461bcd60e51b81526020600482015260136024820152720616d6f756e742063616e206e6f74206265203606c1b60448201526064015b60405180910390fd5b600082118015610158575061271082105b61019a5760405162461bcd60e51b81526020600482015260136024820152721cdb1a5c1c1859d9481a5cc81a5b9d985b1a59606a1b604482015260640161013e565b6003546040516323b872dd60e01b8152336004820152306024820152604481018590526000916001600160a01b0316906323b872dd906064016020604051808303816000875af11580156101f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102169190610681565b90508061025b5760405162461bcd60e51b8152602060048201526013602482015272215661756c742e7472616e7366657246726f6d60681b604482015260640161013e565b600154604051630441a3e760e41b815260048101869052602481018590526000916001600160a01b03169063441a3e70906044016020604051808303816000875af11580156102ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d291906106a3565b600254604051632e1a7d4d60e01b8152600481018390529192506001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b5050604051600092503391506206ddd090849084818181858888f193505050503d8060008114610379576040519150601f19603f3d011682016040523d82523d6000602084013e61037e565b606091505b50509050806103c25760405162461bcd60e51b815260206004820152601060248201526f7472616e73666572206661696c65642160801b604482015260640161013e565b604080518781526020810184905233917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568910160405180910390a2509150506100bc6001600055565b60006104156105ed565b600034116104655760405162461bcd60e51b815260206004820152601b60248201527f6465706f73697420616d6f756e742063616e206e6f7420626520300000000000604482015260640161013e565b600082118015610476575061271082105b6104b85760405162461bcd60e51b81526020600482015260136024820152721cdb1a5c1c1859d9481a5cc81a5b9d985b1a59606a1b604482015260640161013e565b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561050857600080fd5b505af115801561051c573d6000803e3d6000fd5b505060015460405163bc157ac160e01b815234600482015233602482015260448101879052600094506001600160a01b03909116925063bc157ac191506064016020604051808303816000875af115801561057b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059f91906106a3565b6040805182815234602082015291925033917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15910160405180910390a290506105e86001600055565b919050565b60026000540361063f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161013e565b6002600055565b60006020828403121561065857600080fd5b5035919050565b6000806040838503121561067257600080fd5b50508035926020909101359150565b60006020828403121561069357600080fd5b815180151581146100ce57600080fd5b6000602082840312156106b557600080fd5b505191905056fea26469706673582212209cf51b0c856d625756414f539f306ffcf2fe5c99f2a3db9baf1beeed9cbf299d64736f6c634300080f0033

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

000000000000000000000000186a963f78ba0ca8e1799a32e3106c9fee05c7c1

-----Decoded View---------------
Arg [0] : _wcroDelegator (address): 0x186a963f78ba0ca8e1799a32e3106c9fee05c7c1

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000186a963f78ba0ca8e1799a32e3106c9fee05c7c1


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.