S Price: $0.459385 (+0.62%)
    /

    Contract

    0x22AacdEc57b13911dE9f188CF69633cC537BdB76

    Overview

    S Balance

    Sonic LogoSonic LogoSonic Logo0.11 S

    S Value

    $0.05 (@ $0.46/S)

    Token Holdings

    Multichain Info

    No addresses found
    Transaction Hash
    Method
    Block
    Age
    From
    To
    Amount
    Execute214956372025-04-22 5:47:2234 mins ago1745300842IN
    Silo: Silo Router v2
    0 S0.0076827150.0001
    VIEW ADVANCED FILTER

    Latest 25 internal transactions (View All)

    Parent Transaction Hash Block Age From To Amount
    213394022025-04-21 8:28:3921 hrs ago1745224119
    Silo: Silo Router v2
    1,210.26284613 S
    213392152025-04-21 8:27:0121 hrs ago1745224021
    Silo: Silo Router v2
    2,004.57456332 S
    213390702025-04-21 8:25:4021 hrs ago1745223940
    Silo: Silo Router v2
    3,011.50706733 S
    213389172025-04-21 8:24:3321 hrs ago1745223873
    Silo: Silo Router v2
    0.61425468 S
    213389172025-04-21 8:24:3321 hrs ago1745223873
    Silo: Silo Router v2
    4,160.41659225 S
    210051132025-04-19 8:01:562 days ago1745049716
    Silo: Silo Router v2
    360.85914135 S
    208932582025-04-18 13:02:153 days ago1744981335
    Silo: Silo Router v2
    88.89296615 S
    208425612025-04-18 5:18:074 days ago1744953487
    Silo: Silo Router v2
    259 S
    206806142025-04-17 5:42:475 days ago1744868567
    Silo: Silo Router v2
    6,400 S
    206406252025-04-16 23:35:305 days ago1744846530
    Silo: Silo Router v2
    217.18346545 S
    206404862025-04-16 23:34:155 days ago1744846455
    Silo: Silo Router v2
    230.53408431 S
    206403682025-04-16 23:33:045 days ago1744846384
    Silo: Silo Router v2
    222.92927764 S
    205759202025-04-16 15:31:385 days ago1744817498
    Silo: Silo Router v2
    907 S
    205680532025-04-16 14:36:565 days ago1744814216
    Silo: Silo Router v2
    2,762.69653587 S
    205635852025-04-16 14:05:095 days ago1744812309
    Silo: Silo Router v2
    77,700 S
    205624782025-04-16 13:55:505 days ago1744811750
    Silo: Silo Router v2
    250 S
    205624662025-04-16 13:55:425 days ago1744811742
    Silo: Silo Router v2
    250 S
    205624462025-04-16 13:55:355 days ago1744811735
    Silo: Silo Router v2
    250 S
    205624252025-04-16 13:55:275 days ago1744811727
    Silo: Silo Router v2
    250 S
    205624062025-04-16 13:55:195 days ago1744811719
    Silo: Silo Router v2
    250 S
    205623832025-04-16 13:55:115 days ago1744811711
    Silo: Silo Router v2
    250 S
    205623632025-04-16 13:55:045 days ago1744811704
    Silo: Silo Router v2
    250 S
    205623522025-04-16 13:54:565 days ago1744811696
    Silo: Silo Router v2
    250 S
    205623332025-04-16 13:54:495 days ago1744811689
    Silo: Silo Router v2
    250 S
    205623182025-04-16 13:54:405 days ago1744811680
    Silo: Silo Router v2
    250 S
    View All Internal Transactions
    Loading...
    Loading

    Contract Source Code Verified (Exact Match)

    Contract Name:
    SiloRouter

    Compiler Version
    v0.8.28+commit.7893614a

    Optimization Enabled:
    Yes with 200 runs

    Other Settings:
    cancun EvmVersion
    File 1 of 23 : SiloRouter.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: BUSL-1.1
    pragma solidity 0.8.28;
    import {IERC20} from "openzeppelin5/token/ERC20/IERC20.sol";
    import {SafeERC20} from "openzeppelin5/token/ERC20/utils/SafeERC20.sol";
    import {IWrappedNativeToken} from "./interfaces/IWrappedNativeToken.sol";
    import {ISilo} from "./interfaces/ISilo.sol";
    import {TokenHelper} from "./lib/TokenHelper.sol";
    /// @title SiloRouter
    /// @notice Silo Router is a utility contract that aims to improve UX. It can batch any number or combination
    /// of actions (Deposit, Withdraw, Borrow, Repay) and execute them in a single transaction.
    /// @dev SiloRouter requires only first action asset to be approved
    /// @custom:security-contact security@silo.finance
    contract SiloRouter {
    using SafeERC20 for IERC20;
    // @notice Action types that are supported
    enum ActionType {
    Deposit,
    Mint,
    Repay,
    RepayShares
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 23 : IERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Interface of the ERC-20 standard as defined in the ERC.
    */
    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 value of tokens in existence.
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 23 : SafeERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)
    pragma solidity ^0.8.20;
    import {IERC20} from "../IERC20.sol";
    import {IERC1363} from "../../../interfaces/IERC1363.sol";
    import {Address} from "../../../utils/Address.sol";
    /**
    * @title SafeERC20
    * @dev Wrappers around ERC-20 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 An operation with an ERC-20 token failed.
    */
    error SafeERC20FailedOperation(address token);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 23 : IWrappedNativeToken.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.5.0;
    import {IERC20} from "openzeppelin5/token/ERC20/IERC20.sol";
    interface IWrappedNativeToken is IERC20 {
    function deposit() external payable;
    function withdraw(uint256 amount) external;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 23 : ISilo.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.5.0;
    import {IERC4626, IERC20, IERC20Metadata} from "openzeppelin5/interfaces/IERC4626.sol";
    import {IERC3156FlashLender} from "./IERC3156FlashLender.sol";
    import {ISiloConfig} from "./ISiloConfig.sol";
    import {ISiloFactory} from "./ISiloFactory.sol";
    import {IHookReceiver} from "./IHookReceiver.sol";
    // solhint-disable ordering
    interface ISilo is IERC20, IERC4626, IERC3156FlashLender {
    /// @dev Interest accrual happens on each deposit/withdraw/borrow/repay. View methods work on storage that might be
    /// outdate. Some calculations require accrued interest to return current state of Silo. This struct is used
    /// to make a decision inside functions if interest should be accrued in memory to work on updated values.
    enum AccrueInterestInMemory {
    No,
    Yes
    }
    /// @dev Silo has two separate oracles for solvency and maxLtv calculations. MaxLtv oracle is optional. Solvency
    /// oracle can also be optional if asset is used as denominator in Silo config. For example, in ETH/USDC Silo
    /// one could setup only solvency oracle for ETH that returns price in USDC. Then USDC does not need an oracle
    /// because it's used as denominator for ETH and it's "price" can be assume as 1.
    enum OracleType {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 23 : TokenHelper.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: BUSL-1.1
    pragma solidity ^0.8.28;
    import {IERC20Metadata} from "openzeppelin5/token/ERC20/extensions/IERC20Metadata.sol";
    import {IsContract} from "./IsContract.sol";
    library TokenHelper {
    uint256 private constant _BYTES32_SIZE = 32;
    error TokenIsNotAContract();
    function assertAndGetDecimals(address _token) internal view returns (uint256) {
    (bool hasMetadata, bytes memory data) =
    _tokenMetadataCall(_token, abi.encodeCall(IERC20Metadata.decimals, ()));
    // decimals() is optional in the ERC20 standard, so if metadata is not accessible
    // we assume there are no decimals and use 0.
    if (!hasMetadata) {
    return 0;
    }
    return abi.decode(data, (uint8));
    }
    /// @dev Returns the symbol for the provided ERC20 token.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 23 : IERC1363.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1363.sol)
    pragma solidity ^0.8.20;
    import {IERC20} from "./IERC20.sol";
    import {IERC165} from "./IERC165.sol";
    /**
    * @title IERC1363
    * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].
    *
    * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract
    * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.
    */
    interface IERC1363 is IERC20, IERC165 {
    /*
    * Note: the ERC-165 identifier for this interface is 0xb0202a11.
    * 0xb0202a11 ===
    * bytes4(keccak256('transferAndCall(address,uint256)')) ^
    * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^
    * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^
    * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^
    * bytes4(keccak256('approveAndCall(address,uint256)')) ^
    * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))
    */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 23 : Address.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)
    pragma solidity ^0.8.20;
    import {Errors} from "./Errors.sol";
    /**
    * @dev Collection of functions related to the address type
    */
    library Address {
    /**
    * @dev There's no code at `target` (it is not a contract).
    */
    error AddressEmptyCode(address target);
    /**
    * @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].
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 23 : IERC4626.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4626.sol)
    pragma solidity ^0.8.20;
    import {IERC20} from "../token/ERC20/IERC20.sol";
    import {IERC20Metadata} from "../token/ERC20/extensions/IERC20Metadata.sol";
    /**
    * @dev Interface of the ERC-4626 "Tokenized Vault Standard", as defined in
    * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].
    */
    interface IERC4626 is IERC20, IERC20Metadata {
    event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);
    event Withdraw(
    address indexed sender,
    address indexed receiver,
    address indexed owner,
    uint256 assets,
    uint256 shares
    );
    /**
    * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.
    *
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 23 : IERC3156FlashLender.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.5.0;
    import {IERC3156FlashBorrower} from "./IERC3156FlashBorrower.sol";
    /// @notice https://eips.ethereum.org/EIPS/eip-3156
    interface IERC3156FlashLender {
    /// @notice Protected deposits are not available for a flash loan.
    /// During the execution of the flashloan, Silo methods are not taking into consideration the fact,
    /// that some (or all) tokens were transferred as flashloan, therefore some methods can return invalid state
    /// eg. maxWithdraw can return amount that are not available to withdraw during flashlon.
    /// @dev Initiate a flash loan.
    /// @param _receiver The receiver of the tokens in the loan, and the receiver of the callback.
    /// @param _token The loan currency.
    /// @param _amount The amount of tokens lent.
    /// @param _data Arbitrary data structure, intended to contain user-defined parameters.
    function flashLoan(IERC3156FlashBorrower _receiver, address _token, uint256 _amount, bytes calldata _data)
    external
    returns (bool);
    /// @dev The amount of currency available to be lent.
    /// @param _token The loan currency.
    /// @return The amount of `token` that can be borrowed.
    function maxFlashLoan(address _token) external view returns (uint256);
    /// @dev The fee to be charged for a given loan.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 23 : ISiloConfig.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.5.0;
    import {ISilo} from "./ISilo.sol";
    import {ICrossReentrancyGuard} from "./ICrossReentrancyGuard.sol";
    interface ISiloConfig is ICrossReentrancyGuard {
    struct InitData {
    /// @notice Can be address zero if deployer fees are not to be collected. If deployer address is zero then
    /// deployer fee must be zero as well. Deployer will be minted an NFT that gives the right to claim deployer
    /// fees. NFT can be transferred with the right to claim.
    address deployer;
    /// @notice Address of the hook receiver called on every before/after action on Silo. Hook contract also
    /// implements liquidation logic and veSilo gauge connection.
    address hookReceiver;
    /// @notice Deployer's fee in 18 decimals points. Deployer will earn this fee based on the interest earned
    /// by the Silo. Max deployer fee is set by the DAO. At deployment it is 15%.
    uint256 deployerFee;
    /// @notice DAO's fee in 18 decimals points. DAO will earn this fee based on the interest earned
    /// by the Silo. Acceptable fee range fee is set by the DAO. Default at deployment is 5% - 50%.
    uint256 daoFee;
    /// @notice Address of the first token
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 23 : ISiloFactory.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.5.0;
    import {IERC721} from "openzeppelin5/interfaces/IERC721.sol";
    import {ISiloConfig} from "./ISiloConfig.sol";
    interface ISiloFactory is IERC721 {
    struct Range {
    uint128 min;
    uint128 max;
    }
    /// @notice Emitted on the creation of a Silo.
    /// @param implementation Address of the Silo implementation.
    /// @param token0 Address of the first Silo token.
    /// @param token1 Address of the second Silo token.
    /// @param silo0 Address of the first Silo.
    /// @param silo1 Address of the second Silo.
    /// @param siloConfig Address of the SiloConfig.
    event NewSilo(
    address indexed implementation,
    address indexed token0,
    address indexed token1,
    address silo0,
    address silo1,
    address siloConfig
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 23 : IHookReceiver.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.5.0;
    import {ISiloConfig} from "./ISiloConfig.sol";
    interface IHookReceiver {
    struct HookConfig {
    uint24 hooksBefore;
    uint24 hooksAfter;
    }
    event HookConfigured(address silo, uint24 hooksBefore, uint24 hooksAfter);
    /// @notice Initialize a hook receiver
    /// @param _siloConfig Silo configuration with all the details about the silo
    /// @param _data Data to initialize the hook receiver (if needed)
    function initialize(ISiloConfig _siloConfig, bytes calldata _data) external;
    /// @notice state of Silo before action, can be also without interest, if you need them, call silo.accrueInterest()
    function beforeAction(address _silo, uint256 _action, bytes calldata _input) external;
    function afterAction(address _silo, uint256 _action, bytes calldata _inputAndOutput) external;
    /// @notice return hooksBefore and hooksAfter configuration
    function hookReceiverConfig(address _silo) external view returns (uint24 hooksBefore, uint24 hooksAfter);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 23 : IERC20Metadata.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)
    pragma solidity ^0.8.20;
    import {IERC20} from "../IERC20.sol";
    /**
    * @dev Interface for the optional metadata functions from the ERC-20 standard.
    */
    interface IERC20Metadata is IERC20 {
    /**
    * @dev Returns the name of the token.
    */
    function name() external view returns (string memory);
    /**
    * @dev Returns the symbol of the token.
    */
    function symbol() external view returns (string memory);
    /**
    * @dev Returns the decimals places of the token.
    */
    function decimals() external view returns (uint8);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 23 : IsContract.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: BUSL-1.1
    pragma solidity ^0.8.24;
    library IsContract {
    /**
    * @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]
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 23 : IERC20.sol
    1
    2
    3
    4
    5
    6
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)
    pragma solidity ^0.8.20;
    import {IERC20} from "../token/ERC20/IERC20.sol";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 23 : IERC165.sol
    1
    2
    3
    4
    5
    6
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "../utils/introspection/IERC165.sol";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 23 : Errors.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.20;
    /**
    * @dev Collection of common custom errors used in multiple contracts
    *
    * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.
    * It is recommended to avoid relying on the error API for critical functionality.
    */
    library Errors {
    /**
    * @dev The ETH balance of the account is not enough to perform the operation.
    */
    error InsufficientBalance(uint256 balance, uint256 needed);
    /**
    * @dev A call to an address target failed. The target may have reverted.
    */
    error FailedCall();
    /**
    * @dev The deployment failed.
    */
    error FailedDeployment();
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 23 : IERC3156FlashBorrower.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.5.0;
    interface IERC3156FlashBorrower {
    /// @notice During the execution of the flashloan, Silo methods are not taking into consideration the fact,
    /// that some (or all) tokens were transferred as flashloan, therefore some methods can return invalid state
    /// eg. maxWithdraw can return amount that are not available to withdraw during flashlon.
    /// @dev Receive a flash loan.
    /// @param _initiator The initiator of the loan.
    /// @param _token The loan currency.
    /// @param _amount The amount of tokens lent.
    /// @param _fee The additional amount of tokens to repay.
    /// @param _data Arbitrary data structure, intended to contain user-defined parameters.
    /// @return The keccak256 hash of "ERC3156FlashBorrower.onFlashLoan"
    function onFlashLoan(address _initiator, address _token, uint256 _amount, uint256 _fee, bytes calldata _data)
    external
    returns (bytes32);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 23 : ICrossReentrancyGuard.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.5.0;
    interface ICrossReentrancyGuard {
    error CrossReentrantCall();
    error CrossReentrancyNotActive();
    /// @notice only silo method for cross Silo reentrancy
    function turnOnReentrancyProtection() external;
    /// @notice only silo method for cross Silo reentrancy
    function turnOffReentrancyProtection() external;
    /// @notice view method for checking cross Silo reentrancy flag
    /// @return entered true if the reentrancy guard is currently set to "entered", which indicates there is a
    /// `nonReentrant` function in the call stack.
    function reentrancyGuardEntered() external view returns (bool entered);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 23 : IERC721.sol
    1
    2
    3
    4
    5
    6
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC721.sol)
    pragma solidity ^0.8.20;
    import {IERC721} from "../token/ERC721/IERC721.sol";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 22 of 23 : IERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Interface of the ERC-165 standard, as defined in the
    * https://eips.ethereum.org/EIPS/eip-165[ERC].
    *
    * Implementers can declare support of contract interfaces, which can then be
    * queried by others ({ERC165Checker}).
    *
    * For an implementation, see {ERC165}.
    */
    interface IERC165 {
    /**
    * @dev Returns true if this contract implements the interface defined by
    * `interfaceId`. See the corresponding
    * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
    * to learn more about how these ids are created.
    *
    * This function call must use less than 30 000 gas.
    */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 23 of 23 : IERC721.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "../../utils/introspection/IERC165.sol";
    /**
    * @dev Required interface of an ERC-721 compliant contract.
    */
    interface IERC721 is IERC165 {
    /**
    * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
    */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    /**
    * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
    */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    /**
    * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
    */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    {
    "remappings": [
    "forge-std/=gitmodules/forge-std/src/",
    "silo-foundry-utils/=gitmodules/silo-foundry-utils/contracts/",
    "properties/=gitmodules/crytic/properties/contracts/",
    "silo-core/=silo-core/",
    "silo-oracles/=silo-oracles/",
    "silo-vaults/=silo-vaults/",
    "ve-silo/=ve-silo/",
    "@openzeppelin/=gitmodules/openzeppelin-contracts-5/contracts/",
    "morpho-blue/=gitmodules/morpho-blue/src/",
    "openzeppelin5/=gitmodules/openzeppelin-contracts-5/contracts/",
    "openzeppelin5-upgradeable/=gitmodules/openzeppelin-contracts-upgradeable-5/contracts/",
    "chainlink/=gitmodules/chainlink/contracts/src/",
    "chainlink-ccip/=gitmodules/chainlink-ccip/contracts/src/",
    "uniswap/=gitmodules/uniswap/",
    "@uniswap/v3-core/=gitmodules/uniswap/v3-core/",
    "balancer-labs/v2-solidity-utils/=external/balancer-v2-monorepo/pkg/solidity-utils/contracts/",
    "balancer-labs/v2-interfaces/=external/balancer-v2-monorepo/pkg/interfaces/contracts/",
    "balancer-labs/v2-liquidity-mining/=external/balancer-v2-monorepo/pkg/liquidity-mining/contracts/",
    "@balancer-labs/=node_modules/@balancer-labs/",
    "@ensdomains/=node_modules/@ensdomains/",
    "@openzeppelin/contracts-upgradeable/=gitmodules/openzeppelin-contracts-upgradeable-5/contracts/",
    "@openzeppelin/contracts/=gitmodules/openzeppelin-contracts-5/contracts/",
    "@solidity-parser/=node_modules/@solidity-parser/",
    "ERC4626/=gitmodules/crytic/properties/lib/ERC4626/contracts/",
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract Security Audit

    Contract ABI

    API
    [{"inputs":[{"internalType":"address","name":"_wrappedNativeToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[],"name":"ApprovalFailed","type":"error"},{"inputs":[],"name":"ERC20TransferFailed","type":"error"},{"inputs":[],"name":"EthTransferFailed","type":"error"},{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"InvalidSilo","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"TokenIsNotAContract","type":"error"},{"inputs":[],"name":"WRAPPED_NATIVE_TOKEN","outputs":[{"internalType":"contract IWrappedNativeToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SiloRouter.ActionType","name":"actionType","type":"uint8"},{"internalType":"contract ISilo","name":"silo","type":"address"},{"internalType":"contract IERC20","name":"asset","type":"address"},{"internalType":"bytes","name":"options","type":"bytes"}],"internalType":"struct SiloRouter.Action[]","name":"_actions","type":"tuple[]"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

    60a060405234801561000f575f5ffd5b5060405161117638038061117683398101604081905261002e9161016f565b61003781610049565b506001600160a01b03166080526101d2565b6040805160048152602481019091526020810180516001600160e01b0390811663313ce56760e01b179091525f9182918291610088918691906100b916565b915091508161009a57505f9392505050565b808060200190518101906100ae919061019c565b60ff16949350505050565b5f60606001600160a01b0384163b6100e4576040516373d39f9d60e01b815260040160405180910390fd5b5f5f856001600160a01b0316856040516100fe91906101bc565b5f60405180830381855afa9150503d805f8114610136576040519150601f19603f3d011682016040523d82523d5f602084013e61013b565b606091505b509150915081610160575f60405180602001604052805f815250935093505050610168565b600193509150505b9250929050565b5f6020828403121561017f575f5ffd5b81516001600160a01b0381168114610195575f5ffd5b9392505050565b5f602082840312156101ac575f5ffd5b815160ff81168114610195575f5ffd5b5f82518060208501845e5f920191825250919050565b608051610f716102055f395f81816047015281816106bb0152818161070801528181610a3f0152610a7a0152610f715ff3fe60806040526004361061002b575f3560e01c80631b3f8c5e14610036578063c3cd3eda14610085575f5ffd5b3661003257005b5f5ffd5b348015610041575f5ffd5b506100697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b610098610093366004610cdd565b61009a565b005b805f5b818110156100d9576100d18484838181106100ba576100ba610d4e565b90506020028101906100cc9190610d62565b610222565b60010161009d565b505f5b818110156101a1575f8484838181106100f7576100f7610d4e565b90506020028101906101099190610d62565b61011a906060810190604001610d94565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610161573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101859190610daf565b905080156101975761019782826106b9565b50506001016100dc565b5034158015906101b057504715155b1561021d576040515f90339047908381818185875af1925050503d805f81146101f4576040519150601f19603f3d011682016040523d82523d5f602084013e6101f9565b606091505b505090508061021b57604051630db2c7f160e31b815260040160405180910390fd5b505b505050565b5f6102306020830183610dda565b600381111561024157610241610dc6565b0361032d575f6102546060830183610df8565b8101906102619190610e42565b905061027d6102766060840160408501610d94565b82516107e5565b6102a76102906060840160408501610d94565b6102a06040850160208601610d94565b8351610878565b6102b76040830160208401610d94565b6001600160a01b031663b7ec8d4b825f01513384602001516040518463ffffffff1660e01b81526004016102ed93929190610ea7565b6020604051808303815f875af1158015610309573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021d9190610daf565b600161033c6020830183610dda565b600381111561034d5761034d610dc6565b036104bb575f6103606060830183610df8565b81019061036d9190610e42565b90505f6103806040840160208501610d94565b825160405163b3d7f6b960e01b81526001600160a01b03929092169163b3d7f6b9916103b29160040190815260200190565b602060405180830381865afa1580156103cd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f19190610daf565b905061040c6104066060850160408601610d94565b826107e5565b61043561041f6060850160408601610d94565b61042f6040860160208701610d94565b83610878565b6104456040840160208501610d94565b6001600160a01b031663c061ddc7835f01513385602001516040518463ffffffff1660e01b815260040161047b93929190610ea7565b6020604051808303815f875af1158015610497573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021b9190610daf565b60026104ca6020830183610dda565b60038111156104db576104db610dc6565b0361056b575f6104ee6060830183610df8565b8101906104fb9190610e42565b90506105106102766060840160408501610d94565b6105236102906060840160408501610d94565b6105336040830160208401610d94565b815160405163acb7081560e01b815260048101919091523360248201526001600160a01b03919091169063acb70815906044016102ed565b600361057a6020830183610dda565b600381111561058b5761058b610dc6565b036106b6575f61059e6060830183610df8565b8101906105ab9190610e42565b90505f6105be6040840160208501610d94565b825160405163e72bec5760e01b81526001600160a01b03929092169163e72bec57916105f09160040190815260200190565b602060405180830381865afa15801561060b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062f9190610daf565b90506106446104066060850160408601610d94565b61065761041f6060850160408601610d94565b6106676040840160208501610d94565b825160405163e36754eb60e01b815260048101919091523360248201526001600160a01b03919091169063e36754eb906044016020604051808303815f875af1158015610497573d5f5f3e3d5ffd5b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036107cd57604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015610751575f5ffd5b505af1158015610763573d5f5f3e3d5ffd5b50506040515f925033915083908381818185875af1925050503d805f81146107a6576040519150601f19603f3d011682016040523d82523d5f602084013e6107ab565b606091505b505090508061021d57604051633c9fd93960e21b815260040160405180910390fd5b6107e16001600160a01b03831633836109d4565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610829573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061084d9190610daf565b905081811061085c575f610866565b6108668183610ee7565b9150811561021d5761021d8383610a33565b604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015282919085169063dd62ed3e90604401602060405180830381865afa1580156108c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e99190610daf565b101561021d576040516001600160a01b0383811660248301525f1960448301525f91829186169060640160408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b179052516109489190610f06565b5f604051808303815f865af19150503d805f8114610981576040519150601f19603f3d011682016040523d82523d5f602084013e610986565b606091505b50915091508180156109b05750805115806109b05750808060200190518101906109b09190610f1c565b6109cd576040516340b27c2160e11b815260040160405180910390fd5b5050505050565b6040516001600160a01b0383811660248301526044820183905261021d91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050610b01565b3415801590610a7357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15610aec577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015610ad1575f5ffd5b505af1158015610ae3573d5f5f3e3d5ffd5b50505050505050565b6107e16001600160a01b038316333084610b67565b5f610b156001600160a01b03841683610ba0565b905080515f14158015610b39575080806020019051810190610b379190610f1c565b155b1561021d57604051635274afe760e01b81526001600160a01b03841660048201526024015b60405180910390fd5b6040516001600160a01b03848116602483015283811660448301526064820183905261021b9186918216906323b872dd90608401610a01565b6060610bad83835f610bb6565b90505b92915050565b606081471015610be25760405163cf47918160e01b815247600482015260248101839052604401610b5e565b5f5f856001600160a01b03168486604051610bfd9190610f06565b5f6040518083038185875af1925050503d805f8114610c37576040519150601f19603f3d011682016040523d82523d5f602084013e610c3c565b606091505b5091509150610c4c868383610c58565b925050505b9392505050565b606082610c6d57610c6882610cb4565b610c51565b8151158015610c8457506001600160a01b0384163b155b15610cad57604051639996b31560e01b81526001600160a01b0385166004820152602401610b5e565b5080610c51565b805115610cc45780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f5f60208385031215610cee575f5ffd5b823567ffffffffffffffff811115610d04575f5ffd5b8301601f81018513610d14575f5ffd5b803567ffffffffffffffff811115610d2a575f5ffd5b8560208260051b8401011115610d3e575f5ffd5b6020919091019590945092505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112610d76575f5ffd5b9190910192915050565b6001600160a01b03811681146106b6575f5ffd5b5f60208284031215610da4575f5ffd5b8135610c5181610d80565b5f60208284031215610dbf575f5ffd5b5051919050565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215610dea575f5ffd5b813560048110610c51575f5ffd5b5f5f8335601e19843603018112610e0d575f5ffd5b83018035915067ffffffffffffffff821115610e27575f5ffd5b602001915036819003821315610e3b575f5ffd5b9250929050565b5f6040828403128015610e53575f5ffd5b506040805190810167ffffffffffffffff81118282101715610e8357634e487b7160e01b5f52604160045260245ffd5b60405282358152602083013560028110610e9b575f5ffd5b60208201529392505050565b8381526001600160a01b03831660208201526060810160028310610ed957634e487b7160e01b5f52602160045260245ffd5b826040830152949350505050565b81810381811115610bb057634e487b7160e01b5f52601160045260245ffd5b5f82518060208501845e5f920191825250919050565b5f60208284031215610f2c575f5ffd5b81518015158114610c51575f5ffdfea26469706673582212203d54a22f989f4ec074e7ed39ae7071da7a23b558f8eee439bd7f3adae06c58b364736f6c634300081c0033000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38

    Deployed Bytecode

    0x60806040526004361061002b575f3560e01c80631b3f8c5e14610036578063c3cd3eda14610085575f5ffd5b3661003257005b5f5ffd5b348015610041575f5ffd5b506100697f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b6040516001600160a01b03909116815260200160405180910390f35b610098610093366004610cdd565b61009a565b005b805f5b818110156100d9576100d18484838181106100ba576100ba610d4e565b90506020028101906100cc9190610d62565b610222565b60010161009d565b505f5b818110156101a1575f8484838181106100f7576100f7610d4e565b90506020028101906101099190610d62565b61011a906060810190604001610d94565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610161573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101859190610daf565b905080156101975761019782826106b9565b50506001016100dc565b5034158015906101b057504715155b1561021d576040515f90339047908381818185875af1925050503d805f81146101f4576040519150601f19603f3d011682016040523d82523d5f602084013e6101f9565b606091505b505090508061021b57604051630db2c7f160e31b815260040160405180910390fd5b505b505050565b5f6102306020830183610dda565b600381111561024157610241610dc6565b0361032d575f6102546060830183610df8565b8101906102619190610e42565b905061027d6102766060840160408501610d94565b82516107e5565b6102a76102906060840160408501610d94565b6102a06040850160208601610d94565b8351610878565b6102b76040830160208401610d94565b6001600160a01b031663b7ec8d4b825f01513384602001516040518463ffffffff1660e01b81526004016102ed93929190610ea7565b6020604051808303815f875af1158015610309573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021d9190610daf565b600161033c6020830183610dda565b600381111561034d5761034d610dc6565b036104bb575f6103606060830183610df8565b81019061036d9190610e42565b90505f6103806040840160208501610d94565b825160405163b3d7f6b960e01b81526001600160a01b03929092169163b3d7f6b9916103b29160040190815260200190565b602060405180830381865afa1580156103cd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f19190610daf565b905061040c6104066060850160408601610d94565b826107e5565b61043561041f6060850160408601610d94565b61042f6040860160208701610d94565b83610878565b6104456040840160208501610d94565b6001600160a01b031663c061ddc7835f01513385602001516040518463ffffffff1660e01b815260040161047b93929190610ea7565b6020604051808303815f875af1158015610497573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021b9190610daf565b60026104ca6020830183610dda565b60038111156104db576104db610dc6565b0361056b575f6104ee6060830183610df8565b8101906104fb9190610e42565b90506105106102766060840160408501610d94565b6105236102906060840160408501610d94565b6105336040830160208401610d94565b815160405163acb7081560e01b815260048101919091523360248201526001600160a01b03919091169063acb70815906044016102ed565b600361057a6020830183610dda565b600381111561058b5761058b610dc6565b036106b6575f61059e6060830183610df8565b8101906105ab9190610e42565b90505f6105be6040840160208501610d94565b825160405163e72bec5760e01b81526001600160a01b03929092169163e72bec57916105f09160040190815260200190565b602060405180830381865afa15801561060b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062f9190610daf565b90506106446104066060850160408601610d94565b61065761041f6060850160408601610d94565b6106676040840160208501610d94565b825160405163e36754eb60e01b815260048101919091523360248201526001600160a01b03919091169063e36754eb906044016020604051808303815f875af1158015610497573d5f5f3e3d5ffd5b50565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316826001600160a01b0316036107cd57604051632e1a7d4d60e01b8152600481018290527f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015610751575f5ffd5b505af1158015610763573d5f5f3e3d5ffd5b50506040515f925033915083908381818185875af1925050503d805f81146107a6576040519150601f19603f3d011682016040523d82523d5f602084013e6107ab565b606091505b505090508061021d57604051633c9fd93960e21b815260040160405180910390fd5b6107e16001600160a01b03831633836109d4565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610829573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061084d9190610daf565b905081811061085c575f610866565b6108668183610ee7565b9150811561021d5761021d8383610a33565b604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015282919085169063dd62ed3e90604401602060405180830381865afa1580156108c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e99190610daf565b101561021d576040516001600160a01b0383811660248301525f1960448301525f91829186169060640160408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b179052516109489190610f06565b5f604051808303815f865af19150503d805f8114610981576040519150601f19603f3d011682016040523d82523d5f602084013e610986565b606091505b50915091508180156109b05750805115806109b05750808060200190518101906109b09190610f1c565b6109cd576040516340b27c2160e11b815260040160405180910390fd5b5050505050565b6040516001600160a01b0383811660248301526044820183905261021d91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050610b01565b3415801590610a7357507f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b0316826001600160a01b0316145b15610aec577f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015610ad1575f5ffd5b505af1158015610ae3573d5f5f3e3d5ffd5b50505050505050565b6107e16001600160a01b038316333084610b67565b5f610b156001600160a01b03841683610ba0565b905080515f14158015610b39575080806020019051810190610b379190610f1c565b155b1561021d57604051635274afe760e01b81526001600160a01b03841660048201526024015b60405180910390fd5b6040516001600160a01b03848116602483015283811660448301526064820183905261021b9186918216906323b872dd90608401610a01565b6060610bad83835f610bb6565b90505b92915050565b606081471015610be25760405163cf47918160e01b815247600482015260248101839052604401610b5e565b5f5f856001600160a01b03168486604051610bfd9190610f06565b5f6040518083038185875af1925050503d805f8114610c37576040519150601f19603f3d011682016040523d82523d5f602084013e610c3c565b606091505b5091509150610c4c868383610c58565b925050505b9392505050565b606082610c6d57610c6882610cb4565b610c51565b8151158015610c8457506001600160a01b0384163b155b15610cad57604051639996b31560e01b81526001600160a01b0385166004820152602401610b5e565b5080610c51565b805115610cc45780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f5f60208385031215610cee575f5ffd5b823567ffffffffffffffff811115610d04575f5ffd5b8301601f81018513610d14575f5ffd5b803567ffffffffffffffff811115610d2a575f5ffd5b8560208260051b8401011115610d3e575f5ffd5b6020919091019590945092505050565b634e487b7160e01b5f52603260045260245ffd5b5f8235607e19833603018112610d76575f5ffd5b9190910192915050565b6001600160a01b03811681146106b6575f5ffd5b5f60208284031215610da4575f5ffd5b8135610c5181610d80565b5f60208284031215610dbf575f5ffd5b5051919050565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215610dea575f5ffd5b813560048110610c51575f5ffd5b5f5f8335601e19843603018112610e0d575f5ffd5b83018035915067ffffffffffffffff821115610e27575f5ffd5b602001915036819003821315610e3b575f5ffd5b9250929050565b5f6040828403128015610e53575f5ffd5b506040805190810167ffffffffffffffff81118282101715610e8357634e487b7160e01b5f52604160045260245ffd5b60405282358152602083013560028110610e9b575f5ffd5b60208201529392505050565b8381526001600160a01b03831660208201526060810160028310610ed957634e487b7160e01b5f52602160045260245ffd5b826040830152949350505050565b81810381811115610bb057634e487b7160e01b5f52601160045260245ffd5b5f82518060208501845e5f920191825250919050565b5f60208284031215610f2c575f5ffd5b81518015158114610c51575f5ffdfea26469706673582212203d54a22f989f4ec074e7ed39ae7071da7a23b558f8eee439bd7f3adae06c58b364736f6c634300081c0033

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

    000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38

    -----Decoded View---------------
    Arg [0] : _wrappedNativeToken (address): 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38

    -----Encoded View---------------
    1 Constructor Arguments found :
    Arg [0] : 000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38


    Block Age Transaction Gas Used Reward
    view all blocks ##produced##

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

    Validator Index Block Age Amount
    View All Withdrawals

    Transaction Hash Block Age Value Eth2 PubKey Valid
    View All Deposits
    [ Download: CSV Export  ]
    [ 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.