S Price: $0.500478 (-7.55%)
    /

    Contract

    0x5448A65ddB14e6F273cd0eD6598805105A39d8cC

    Overview

    S Balance

    Sonic LogoSonic LogoSonic Logo0 S

    S Value

    $0.00

    Token Holdings

    Multichain Info

    No addresses found
    Transaction Hash
    Method
    Block
    Age
    From
    To
    Amount
    Request On Chain...167577732025-03-29 9:41:0650 mins ago1743241266IN
    Rings: stkscUSD withdraw queue
    0 S0.0074020256
    Request On Chain...167557502025-03-29 9:28:391 hr ago1743240519IN
    Rings: stkscUSD withdraw queue
    0 S0.0076735650.0001
    Request On Chain...167095612025-03-29 4:09:236 hrs ago1743221363IN
    Rings: stkscUSD withdraw queue
    0 S0.0062714150.0001
    Request On Chain...166991412025-03-29 2:57:557 hrs ago1743217075IN
    Rings: stkscUSD withdraw queue
    0 S0.0083737454.9339398
    Cancel On Chain ...166977862025-03-29 2:48:567 hrs ago1743216536IN
    Rings: stkscUSD withdraw queue
    0 S0.004418650.0001
    Request On Chain...166976812025-03-29 2:48:157 hrs ago1743216495IN
    Rings: stkscUSD withdraw queue
    0 S0.0062720150.0001
    Request On Chain...166944782025-03-29 2:26:208 hrs ago1743215180IN
    Rings: stkscUSD withdraw queue
    0 S0.0076216650.0001
    Request On Chain...166929032025-03-29 2:15:068 hrs ago1743214506IN
    Rings: stkscUSD withdraw queue
    0 S0.0062720150.0001
    Cancel On Chain ...166909162025-03-29 2:00:388 hrs ago1743213638IN
    Rings: stkscUSD withdraw queue
    0 S0.0060258150.0001
    Request On Chain...166705242025-03-28 23:42:5210 hrs ago1743205372IN
    Rings: stkscUSD withdraw queue
    0 S0.0062720150.0001
    Request On Chain...166575832025-03-28 22:23:1012 hrs ago1743200590IN
    Rings: stkscUSD withdraw queue
    0 S0.0062714150.0001
    Request On Chain...166559362025-03-28 22:13:3912 hrs ago1743200019IN
    Rings: stkscUSD withdraw queue
    0 S0.0062720150.0001
    Request On Chain...166484512025-03-28 21:25:3013 hrs ago1743197130IN
    Rings: stkscUSD withdraw queue
    0 S0.0062714150.0001
    Request On Chain...166470712025-03-28 21:16:1913 hrs ago1743196579IN
    Rings: stkscUSD withdraw queue
    0 S0.0062714150.0001
    Request On Chain...166246322025-03-28 18:48:5515 hrs ago1743187735IN
    Rings: stkscUSD withdraw queue
    0 S0.0072711655.01
    Request On Chain...166196342025-03-28 18:18:5516 hrs ago1743185935IN
    Rings: stkscUSD withdraw queue
    0 S0.0062714150.0001
    Request On Chain...166077722025-03-28 17:06:5817 hrs ago1743181618IN
    Rings: stkscUSD withdraw queue
    0 S0.0076216550
    Request On Chain...166066592025-03-28 17:00:0617 hrs ago1743181206IN
    Rings: stkscUSD withdraw queue
    0 S0.0078616550
    Request On Chain...166033732025-03-28 16:40:5417 hrs ago1743180054IN
    Rings: stkscUSD withdraw queue
    0 S0.0072711655.01
    Request On Chain...165905222025-03-28 15:25:5919 hrs ago1743175559IN
    Rings: stkscUSD withdraw queue
    0 S0.0075936857.45
    Cancel On Chain ...165836532025-03-28 14:46:0419 hrs ago1743173164IN
    Rings: stkscUSD withdraw queue
    0 S0.004940350.0001
    Request On Chain...165833112025-03-28 14:44:0719 hrs ago1743173047IN
    Rings: stkscUSD withdraw queue
    0 S0.007273255.02
    Request On Chain...165803972025-03-28 14:27:0920 hrs ago1743172029IN
    Rings: stkscUSD withdraw queue
    0 S0.0062708150.0001
    Request On Chain...165802172025-03-28 14:26:0420 hrs ago1743171964IN
    Rings: stkscUSD withdraw queue
    0 S0.0062714150.0001
    Request On Chain...165798092025-03-28 14:23:4220 hrs ago1743171822IN
    Rings: stkscUSD withdraw queue
    0 S0.0062714150.0001
    View all transactions

    Latest 1 internal transaction

    Parent Transaction Hash Block Age From To Amount
    5978042024-12-18 17:56:17100 days ago1734544577
     Contract Creation
    0 S
    Loading...
    Loading

    Similar Match Source Code
    This contract matches the deployed Bytecode of the Source Code for Contract 0x65b6AFB8...Ea390E133
    The constructor portion of the code might be different and could alter the actual behaviour of the contract

    Contract Name:
    BoringOnChainQueue

    Compiler Version
    v0.8.21+commit.d9974bed

    Optimization Enabled:
    Yes with 200 runs

    Other Settings:
    shanghai EvmVersion
    File 1 of 21 : BoringOnChainQueue.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: UNLICENSED
    pragma solidity 0.8.21;
    import {ERC20} from "@solmate/tokens/ERC20.sol";
    import {WETH} from "@solmate/tokens/WETH.sol";
    import {BoringVault} from "src/base/BoringVault.sol";
    import {AccountantWithRateProviders} from "src/base/Roles/AccountantWithRateProviders.sol";
    import {FixedPointMathLib} from "@solmate/utils/FixedPointMathLib.sol";
    import {SafeTransferLib} from "@solmate/utils/SafeTransferLib.sol";
    import {BeforeTransferHook} from "src/interfaces/BeforeTransferHook.sol";
    import {Auth, Authority} from "@solmate/auth/Auth.sol";
    import {ReentrancyGuard} from "@solmate/utils/ReentrancyGuard.sol";
    import {IPausable} from "src/interfaces/IPausable.sol";
    import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
    import {IBoringSolver} from "src/base/Roles/BoringQueue/IBoringSolver.sol";
    contract BoringOnChainQueue is Auth, ReentrancyGuard, IPausable {
    using EnumerableSet for EnumerableSet.Bytes32Set;
    using SafeTransferLib for BoringVault;
    using SafeTransferLib for ERC20;
    using FixedPointMathLib for uint256;
    // ========================================= STRUCTS =========================================
    /**
    * @param allowWithdraws Whether or not withdraws are allowed for this asset.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 21 : ERC20.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: AGPL-3.0-only
    pragma solidity >=0.8.0;
    /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
    /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
    /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
    /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
    abstract contract ERC20 {
    /*//////////////////////////////////////////////////////////////
    EVENTS
    //////////////////////////////////////////////////////////////*/
    event Transfer(address indexed from, address indexed to, uint256 amount);
    event Approval(address indexed owner, address indexed spender, uint256 amount);
    /*//////////////////////////////////////////////////////////////
    METADATA STORAGE
    //////////////////////////////////////////////////////////////*/
    string public name;
    string public symbol;
    uint8 public immutable decimals;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 21 : WETH.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: AGPL-3.0-only
    pragma solidity >=0.8.0;
    import {ERC20} from "./ERC20.sol";
    import {SafeTransferLib} from "../utils/SafeTransferLib.sol";
    /// @notice Minimalist and modern Wrapped Ether implementation.
    /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/WETH.sol)
    /// @author Inspired by WETH9 (https://github.com/dapphub/ds-weth/blob/master/src/weth9.sol)
    contract WETH is ERC20("Wrapped Ether", "WETH", 18) {
    using SafeTransferLib for address;
    event Deposit(address indexed from, uint256 amount);
    event Withdrawal(address indexed to, uint256 amount);
    function deposit() public payable virtual {
    _mint(msg.sender, msg.value);
    emit Deposit(msg.sender, msg.value);
    }
    function withdraw(uint256 amount) public virtual {
    _burn(msg.sender, amount);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 21 : BoringVault.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: UNLICENSED
    pragma solidity 0.8.21;
    import {Address} from "@openzeppelin/contracts/utils/Address.sol";
    import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";
    import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";
    import {FixedPointMathLib} from "@solmate/utils/FixedPointMathLib.sol";
    import {SafeTransferLib} from "@solmate/utils/SafeTransferLib.sol";
    import {ERC20} from "@solmate/tokens/ERC20.sol";
    import {BeforeTransferHook} from "src/interfaces/BeforeTransferHook.sol";
    import {Auth, Authority} from "@solmate/auth/Auth.sol";
    contract BoringVault is ERC20, Auth, ERC721Holder, ERC1155Holder {
    using Address for address;
    using SafeTransferLib for ERC20;
    using FixedPointMathLib for uint256;
    // ========================================= STATE =========================================
    /**
    * @notice Contract responsbile for implementing `beforeTransfer`.
    */
    BeforeTransferHook public hook;
    //============================== EVENTS ===============================
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 21 : AccountantWithRateProviders.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: UNLICENSED
    pragma solidity 0.8.21;
    import {FixedPointMathLib} from "@solmate/utils/FixedPointMathLib.sol";
    import {IRateProvider} from "src/interfaces/IRateProvider.sol";
    import {ERC20} from "@solmate/tokens/ERC20.sol";
    import {SafeTransferLib} from "@solmate/utils/SafeTransferLib.sol";
    import {BoringVault} from "src/base/BoringVault.sol";
    import {Auth, Authority} from "@solmate/auth/Auth.sol";
    import {IPausable} from "src/interfaces/IPausable.sol";
    contract AccountantWithRateProviders is Auth, IRateProvider, IPausable {
    using FixedPointMathLib for uint256;
    using SafeTransferLib for ERC20;
    // ========================================= STRUCTS =========================================
    /**
    * @param payoutAddress the address `claimFees` sends fees to
    * @param highwaterMark the highest value of the BoringVault's share price
    * @param feesOwedInBase total pending fees owed in terms of base
    * @param totalSharesLastUpdate total amount of shares the last exchange rate update
    * @param exchangeRate the current exchange rate in terms of base
    * @param allowedExchangeRateChangeUpper the max allowed change to exchange rate from an update
    * @param allowedExchangeRateChangeLower the min allowed change to exchange rate from an update
    * @param lastUpdateTimestamp the block timestamp of the last exchange rate update
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 21 : FixedPointMathLib.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: AGPL-3.0-only
    pragma solidity >=0.8.0;
    /// @notice Arithmetic library with operations for fixed-point numbers.
    /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/FixedPointMathLib.sol)
    /// @author Inspired by USM (https://github.com/usmfum/USM/blob/master/contracts/WadMath.sol)
    library FixedPointMathLib {
    /*//////////////////////////////////////////////////////////////
    SIMPLIFIED FIXED POINT OPERATIONS
    //////////////////////////////////////////////////////////////*/
    uint256 internal constant MAX_UINT256 = 2**256 - 1;
    uint256 internal constant WAD = 1e18; // The scalar of ETH and most ERC20s.
    function mulWadDown(uint256 x, uint256 y) internal pure returns (uint256) {
    return mulDivDown(x, y, WAD); // Equivalent to (x * y) / WAD rounded down.
    }
    function mulWadUp(uint256 x, uint256 y) internal pure returns (uint256) {
    return mulDivUp(x, y, WAD); // Equivalent to (x * y) / WAD rounded up.
    }
    function divWadDown(uint256 x, uint256 y) internal pure returns (uint256) {
    return mulDivDown(x, WAD, y); // Equivalent to (x * WAD) / y rounded down.
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 21 : SafeTransferLib.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: AGPL-3.0-only
    pragma solidity >=0.8.0;
    import {ERC20} from "../tokens/ERC20.sol";
    /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values.
    /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol)
    /// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer.
    /// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller.
    library SafeTransferLib {
    /*//////////////////////////////////////////////////////////////
    ETH OPERATIONS
    //////////////////////////////////////////////////////////////*/
    function safeTransferETH(address to, uint256 amount) internal {
    bool success;
    /// @solidity memory-safe-assembly
    assembly {
    // Transfer the ETH and store if it succeeded or not.
    success := call(gas(), to, amount, 0, 0, 0, 0)
    }
    require(success, "ETH_TRANSFER_FAILED");
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 21 : BeforeTransferHook.sol
    1
    2
    3
    4
    5
    6
    // SPDX-License-Identifier: UNLICENSED
    pragma solidity 0.8.21;
    interface BeforeTransferHook {
    function beforeTransfer(address from, address to, address operator) external view;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 21 : Auth.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: AGPL-3.0-only
    pragma solidity >=0.8.0;
    /// @notice Provides a flexible and updatable auth pattern which is completely separate from application logic.
    /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Auth.sol)
    /// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
    abstract contract Auth {
    event OwnershipTransferred(address indexed user, address indexed newOwner);
    event AuthorityUpdated(address indexed user, Authority indexed newAuthority);
    address public owner;
    Authority public authority;
    constructor(address _owner, Authority _authority) {
    owner = _owner;
    authority = _authority;
    emit OwnershipTransferred(msg.sender, _owner);
    emit AuthorityUpdated(msg.sender, _authority);
    }
    modifier requiresAuth() virtual {
    require(isAuthorized(msg.sender, msg.sig), "UNAUTHORIZED");
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 21 : ReentrancyGuard.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // SPDX-License-Identifier: AGPL-3.0-only
    pragma solidity >=0.8.0;
    /// @notice Gas optimized reentrancy protection for smart contracts.
    /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/ReentrancyGuard.sol)
    /// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/ReentrancyGuard.sol)
    abstract contract ReentrancyGuard {
    uint256 private locked = 1;
    modifier nonReentrant() virtual {
    require(locked == 1, "REENTRANCY");
    locked = 2;
    _;
    locked = 1;
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 21 : IPausable.sol
    1
    2
    3
    4
    5
    6
    7
    // SPDX-License-Identifier: UNLICENSED
    pragma solidity 0.8.21;
    interface IPausable {
    function pause() external;
    function unpause() external;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 21 : EnumerableSet.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/structs/EnumerableSet.sol)
    // This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.
    pragma solidity ^0.8.20;
    /**
    * @dev Library for managing
    * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
    * types.
    *
    * Sets have the following properties:
    *
    * - Elements are added, removed, and checked for existence in constant time
    * (O(1)).
    * - Elements are enumerated in O(n). No guarantees are made on the ordering.
    *
    * ```solidity
    * contract Example {
    * // Add the library methods
    * using EnumerableSet for EnumerableSet.AddressSet;
    *
    * // Declare a set state variable
    * EnumerableSet.AddressSet private mySet;
    * }
    * ```
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 21 : IBoringSolver.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // SPDX-License-Identifier: UNLICENSED
    pragma solidity 0.8.21;
    interface IBoringSolver {
    function boringSolve(
    address initiator,
    address boringVault,
    address solveAsset,
    uint256 totalShares,
    uint256 requiredAssets,
    bytes calldata solveData
    ) external;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 21 : 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;
    /**
    * @dev Collection of functions related to the address type
    */
    library Address {
    /**
    * @dev The ETH balance of the account is not enough to perform the operation.
    */
    error AddressInsufficientBalance(address account);
    /**
    * @dev There's no code at `target` (it is not a contract).
    */
    error AddressEmptyCode(address target);
    /**
    * @dev A call to an address target failed. The target may have reverted.
    */
    error FailedInnerCall();
    /**
    * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 21 : ERC721Holder.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
    // SPDX-License-Identifier: MIT
    // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/utils/ERC721Holder.sol)
    pragma solidity ^0.8.20;
    import {IERC721Receiver} from "../IERC721Receiver.sol";
    /**
    * @dev Implementation of the {IERC721Receiver} interface.
    *
    * Accepts all token transfers.
    * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or
    * {IERC721-setApprovalForAll}.
    */
    abstract contract ERC721Holder is IERC721Receiver {
    /**
    * @dev See {IERC721Receiver-onERC721Received}.
    *
    * Always returns `IERC721Receiver.onERC721Received.selector`.
    */
    function onERC721Received(address, address, uint256, bytes memory) public virtual returns (bytes4) {
    return this.onERC721Received.selector;
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 21 : ERC1155Holder.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/ERC1155/utils/ERC1155Holder.sol)
    pragma solidity ^0.8.20;
    import {IERC165, ERC165} from "../../../utils/introspection/ERC165.sol";
    import {IERC1155Receiver} from "../IERC1155Receiver.sol";
    /**
    * @dev Simple implementation of `IERC1155Receiver` that will allow a contract to hold ERC1155 tokens.
    *
    * IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be
    * stuck.
    */
    abstract contract ERC1155Holder is ERC165, IERC1155Receiver {
    /**
    * @dev See {IERC165-supportsInterface}.
    */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
    return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
    }
    function onERC1155Received(
    address,
    address,
    uint256,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 21 : IRateProvider.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // SPDX-License-Identifier: UNLICENSED
    // This program is free software: you can redistribute it and/or modify
    // it under the terms of the GNU General Public License as published by
    // the Free Software Foundation, either version 3 of the License, or
    // (at your option) any later version.
    // This program is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    // GNU General Public License for more details.
    // You should have received a copy of the GNU General Public License
    // along with this program. If not, see <http://www.gnu.org/licenses/>.
    pragma solidity ^0.8.0;
    interface IRateProvider {
    function getRate() external view returns (uint256);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 21 : IERC721Receiver.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/IERC721Receiver.sol)
    pragma solidity ^0.8.20;
    /**
    * @title ERC721 token receiver interface
    * @dev Interface for any contract that wants to support safeTransfers
    * from ERC721 asset contracts.
    */
    interface IERC721Receiver {
    /**
    * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
    * by `operator` from `from`, this function is called.
    *
    * It must return its Solidity selector to confirm the token transfer.
    * If any other value is returned or the interface is not implemented by the recipient, the transfer will be
    * reverted.
    *
    * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
    */
    function onERC721Received(
    address operator,
    address from,
    uint256 tokenId,
    bytes calldata data
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 21 : ERC165.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/introspection/ERC165.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "./IERC165.sol";
    /**
    * @dev Implementation of the {IERC165} interface.
    *
    * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
    * for the additional interface id that will be supported. For example:
    *
    * ```solidity
    * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
    * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
    * }
    * ```
    */
    abstract contract ERC165 is IERC165 {
    /**
    * @dev See {IERC165-supportsInterface}.
    */
    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
    return interfaceId == type(IERC165).interfaceId;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 21 : IERC1155Receiver.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/ERC1155/IERC1155Receiver.sol)
    pragma solidity ^0.8.20;
    import {IERC165} from "../../utils/introspection/IERC165.sol";
    /**
    * @dev Interface that must be implemented by smart contracts in order to receive
    * ERC-1155 token transfers.
    */
    interface IERC1155Receiver is IERC165 {
    /**
    * @dev Handles the receipt of a single ERC1155 token type. This function is
    * called at the end of a `safeTransferFrom` after the balance has been updated.
    *
    * NOTE: To accept the transfer, this must return
    * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
    * (i.e. 0xf23a6e61, or its own function selector).
    *
    * @param operator The address which initiated the transfer (i.e. msg.sender)
    * @param from The address which previously owned the token
    * @param id The ID of the token being transferred
    * @param value The amount of tokens being transferred
    * @param data Additional data with no specified format
    * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 21 : 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 ERC165 standard, as defined in the
    * https://eips.ethereum.org/EIPS/eip-165[EIP].
    *
    * 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[EIP 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

    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": [
    "@solmate/=lib/solmate/src/",
    "@forge-std/=lib/forge-std/src/",
    "@ds-test/=lib/forge-std/lib/ds-test/src/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "@openzeppelin/=lib/openzeppelin-contracts/",
    "@ccip/=lib/ccip/",
    "@oapp-auth/=lib/OAppAuth/src/",
    "@devtools-oapp-evm/=lib/OAppAuth/lib/devtools/packages/oapp-evm/contracts/oapp/",
    "@layerzerolabs/lz-evm-messagelib-v2/=lib/OAppAuth/node_modules/@layerzerolabs/lz-evm-messagelib-v2/",
    "@layerzerolabs/lz-evm-protocol-v2/=lib/OAppAuth/lib/LayerZero-V2/packages/layerzero-v2/evm/protocol/",
    "@layerzerolabs/oapp-evm/=lib/OAppAuth/lib/devtools/packages/oapp-evm/",
    "@lz-oapp-evm/=lib/OAppAuth/lib/LayerZero-V2/packages/layerzero-v2/evm/oapp/contracts/oapp/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "@sbu/=lib/OAppAuth/lib/solidity-bytes-utils/",
    "LayerZero-V2/=lib/OAppAuth/lib/",
    "OAppAuth/=lib/OAppAuth/",
    "ccip/=lib/ccip/contracts/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "halmos-cheatcodes/=lib/OAppAuth/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "solidity-bytes-utils/=lib/OAppAuth/node_modules/solidity-bytes-utils/",
    "solmate/=lib/solmate/src/"
    ],
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract Security Audit

    Contract ABI

    API
    [{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_auth","type":"address"},{"internalType":"address payable","name":"_boringVault","type":"address"},{"internalType":"address","name":"_accountant","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BoringOnChainQueue__BadDeadline","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__BadDiscount","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__BadInput","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__BadShareAmount","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__BadUser","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__DeadlinePassed","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__Keccak256Collision","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__MAXIMUM_MINIMUM_SECONDS_TO_DEADLINE","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__MAXIMUM_SECONDS_TO_MATURITY","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__MAX_DISCOUNT","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__NotMatured","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__Overflow","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__Paused","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__PermitFailedAndAllowanceTooLow","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__RequestNotFound","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__RescueCannotTakeSharesFromActiveRequests","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__SolveAssetMismatch","type":"error"},{"inputs":[],"name":"BoringOnChainQueue__WithdrawsNotAllowedForAsset","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"AuthorityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"requestId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OnChainWithdrawCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"requestId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"assetOut","type":"address"},{"indexed":false,"internalType":"uint96","name":"nonce","type":"uint96"},{"indexed":false,"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"amountOfAssets","type":"uint128"},{"indexed":false,"internalType":"uint40","name":"creationTime","type":"uint40"},{"indexed":false,"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"name":"OnChainWithdrawRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"requestId","type":"bytes32"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OnChainWithdrawSolved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"assetOut","type":"address"},{"indexed":false,"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"minimumSecondsToDeadline","type":"uint24"},{"indexed":false,"internalType":"uint16","name":"minDiscount","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"maxDiscount","type":"uint16"},{"indexed":false,"internalType":"uint96","name":"minimumShares","type":"uint96"}],"name":"WithdrawAssetSetup","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"assetOut","type":"address"}],"name":"WithdrawAssetStopped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"assetOut","type":"address"},{"indexed":false,"internalType":"uint24","name":"minimumSecondsToDeadline","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"indexed":false,"internalType":"uint16","name":"minDiscount","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"maxDiscount","type":"uint16"},{"indexed":false,"internalType":"uint96","name":"minimumShares","type":"uint96"}],"name":"WithdrawAssetUpdated","type":"event"},{"inputs":[],"name":"ONE_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accountant","outputs":[{"internalType":"contract AccountantWithRateProviders","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"authority","outputs":[{"internalType":"contract Authority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boringVault","outputs":[{"internalType":"contract BoringVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint96","name":"nonce","type":"uint96"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint128","name":"amountOfAssets","type":"uint128"},{"internalType":"uint40","name":"creationTime","type":"uint40"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"internalType":"struct BoringOnChainQueue.OnChainWithdraw","name":"request","type":"tuple"}],"name":"cancelOnChainWithdraw","outputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint96","name":"nonce","type":"uint96"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint128","name":"amountOfAssets","type":"uint128"},{"internalType":"uint40","name":"creationTime","type":"uint40"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"internalType":"struct BoringOnChainQueue.OnChainWithdraw[]","name":"requests","type":"tuple[]"}],"name":"cancelUserWithdraws","outputs":[{"internalType":"bytes32[]","name":"canceledRequestIds","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint96","name":"nonce","type":"uint96"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint128","name":"amountOfAssets","type":"uint128"},{"internalType":"uint40","name":"creationTime","type":"uint40"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"internalType":"struct BoringOnChainQueue.OnChainWithdraw","name":"request","type":"tuple"}],"name":"getRequestId","outputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getRequestIds","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint16","name":"discount","type":"uint16"}],"name":"previewAssetsOut","outputs":[{"internalType":"uint128","name":"amountOfAssets128","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint96","name":"nonce","type":"uint96"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint128","name":"amountOfAssets","type":"uint128"},{"internalType":"uint40","name":"creationTime","type":"uint40"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"internalType":"struct BoringOnChainQueue.OnChainWithdraw","name":"oldRequest","type":"tuple"},{"internalType":"uint16","name":"discount","type":"uint16"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"name":"replaceOnChainWithdraw","outputs":[{"internalType":"bytes32","name":"oldRequestId","type":"bytes32"},{"internalType":"bytes32","name":"newRequestId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint16","name":"discount","type":"uint16"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"name":"requestOnChainWithdraw","outputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint16","name":"discount","type":"uint16"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"},{"internalType":"uint256","name":"permitDeadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"requestOnChainWithdrawWithPermit","outputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"components":[{"internalType":"uint96","name":"nonce","type":"uint96"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint128","name":"amountOfAssets","type":"uint128"},{"internalType":"uint40","name":"creationTime","type":"uint40"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"internalType":"struct BoringOnChainQueue.OnChainWithdraw[]","name":"activeRequests","type":"tuple[]"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint96","name":"nonce","type":"uint96"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint128","name":"amountOfShares","type":"uint128"},{"internalType":"uint128","name":"amountOfAssets","type":"uint128"},{"internalType":"uint40","name":"creationTime","type":"uint40"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"secondsToDeadline","type":"uint24"}],"internalType":"struct BoringOnChainQueue.OnChainWithdraw[]","name":"requests","type":"tuple[]"},{"internalType":"bytes","name":"solveData","type":"bytes"},{"internalType":"address","name":"solver","type":"address"}],"name":"solveOnChainWithdraws","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"assetOut","type":"address"}],"name":"stopWithdrawsInAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"minimumSecondsToDeadline","type":"uint24"},{"internalType":"uint16","name":"minDiscount","type":"uint16"},{"internalType":"uint16","name":"maxDiscount","type":"uint16"},{"internalType":"uint96","name":"minimumShares","type":"uint96"}],"name":"updateWithdrawAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"withdrawAssets","outputs":[{"internalType":"bool","name":"allowWithdraws","type":"bool"},{"internalType":"uint24","name":"secondsToMaturity","type":"uint24"},{"internalType":"uint24","name":"minimumSecondsToDeadline","type":"uint24"},{"internalType":"uint16","name":"minDiscount","type":"uint16"},{"internalType":"uint16","name":"maxDiscount","type":"uint16"},{"internalType":"uint96","name":"minimumShares","type":"uint96"}],"stateMutability":"view","type":"function"}]

    Deployed Bytecode

    0x608060405234801561000f575f80fd5b5060043610610153575f3560e01c8063a5672fd7116100bf578063b7d122b511610079578063b7d122b5146103b0578063bf7e214f146103d7578063e69a31c2146103ea578063eed4b3f814610415578063f2fde38b14610428578063f3b977841461043b575f80fd5b8063a5672fd714610272578063aa5a0ffd1461029a578063ac33a27314610346578063affed0e01461034e578063b187bd2614610379578063b22ed42a1461039d575f80fd5b80636bb3b476116101105780636bb3b476146101ff57806374732728146102125780637a9e5e4b146102255780638456cb59146102385780638da5cb5b146102405780639fff7e2a14610252575f80fd5b80630bf6cab7146101575780633f4ba83a1461016c578063412638dc146101745780634a2dc5e4146101875780634fb3ccc5146101ad578063581b4920146101ec575b5f80fd5b61016a6101653660046121a0565b610462565b005b61016a610734565b61016a61018236600461220e565b61079c565b61019a6101953660046123ef565b610c0f565b6040519081526020015b60405180910390f35b6101d47f00000000000000000000000013ccc810dfaa6b71957f2b87060afe17e6eb803481565b6040516001600160a01b0390911681526020016101a4565b61019a6101fa36600461241b565b610c50565b61019a61020d3660046124a1565b610ece565b61016a6102203660046124f4565b610fec565b61016a6102333660046124f4565b611065565b61016a611149565b5f546101d4906001600160a01b031681565b61026561026036600461250f565b6111b7565b6040516101a49190612542565b610285610280366004612585565b6112a0565b604080519283526020830191909152016101a4565b6102ff6102a83660046124f4565b60056020525f908152604090205460ff81169062ffffff610100820481169164010000000081049091169061ffff600160381b8204811691600160481b8104909116906001600160601b03600160581b9091041686565b60408051961515875262ffffff9586166020880152939094169285019290925261ffff90811660608501521660808301526001600160601b031660a082015260c0016101a4565b6102656112ea565b600654610361906001600160601b031681565b6040516001600160601b0390911681526020016101a4565b60065461038d90600160601b900460ff1681565b60405190151581526020016101a4565b61019a6103ab3660046125c9565b6112fb565b61019a7f00000000000000000000000000000000000000000000000000000000000f424081565b6001546101d4906001600160a01b031681565b6103fd6103f83660046125da565b61132a565b6040516001600160801b0390911681526020016101a4565b61016a610423366004612613565b61143f565b61016a6104363660046124f4565b611767565b6101d47f0000000000000000000000004d85ba8c3918359c78ed09581e5bc7578ba932ba81565b610477335f356001600160e01b0319166117e2565b61049c5760405162461bcd60e51b815260040161049390612685565b60405180910390fd5b7f0000000000000000000000004d85ba8c3918359c78ed09581e5bc7578ba932ba6001600160a01b0316856001600160a01b0316036106a8575f6104e06003611888565b8051909150828114610505576040516312ed8d4160e21b815260040160405180910390fd5b5f805b828110156105d757838181518110610522576105226126ab565b602002602001015186868381811061053c5761053c6126ab565b9050610100020160405160200161055391906126bf565b6040516020818303038152906040528051906020012014610587576040516312ed8d4160e21b815260040160405180910390fd5b858582818110610599576105996126ab565b9050610100020160600160208101906105b29190612789565b6105c5906001600160801b0316836127b6565b91506105d0816127c9565b9050610508565b506040516370a0823160e01b81523060048201525f9082906001600160a01b037f0000000000000000000000004d85ba8c3918359c78ed09581e5bc7578ba932ba16906370a0823190602401602060405180830381865afa15801561063e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066291906127e1565b61066c91906127f8565b90505f19880361067e5780975061069f565b8088111561069f5760405163fbeb452f60e01b815260040160405180910390fd5b50505050610719565b5f198403610719576040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa1580156106f2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061071691906127e1565b93505b61072d6001600160a01b038616848661189b565b5050505050565b610749335f356001600160e01b0319166117e2565b6107655760405162461bcd60e51b815260040161049390612685565b6006805460ff60601b191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d16933905f90a1565b6107b1335f356001600160e01b0319166117e2565b6107cd5760405162461bcd60e51b815260040161049390612685565b600654600160601b900460ff16156107f85760405163158b17e360e11b815260040160405180910390fd5b5f85855f81811061080b5761080b6126ab565b90506101000201604001602081019061082491906124f4565b90505f8086815b81811015610ab357898982818110610845576108456126ab565b90506101000201604001602081019061085e91906124f4565b6001600160a01b0316856001600160a01b03161461088f576040516331f59b5960e21b815260040160405180910390fd5b5f8a8a838181106108a2576108a26126ab565b9050610100020160c00160208101906108bb919061280b565b62ffffff168b8b848181106108d2576108d26126ab565b9050610100020160a00160208101906108eb9190612824565b6108f5919061283d565b64ffffffffff1690508042101561091f576040516332924a4960e01b815260040160405180910390fd5b5f8b8b84818110610932576109326126ab565b9050610100020160e001602081019061094b919061280b565b61095a9062ffffff16836127b6565b90508042111561097d576040516378b2b00760e01b815260040160405180910390fd5b8b8b8481811061098f5761098f6126ab565b9050610100020160800160208101906109a89190612789565b6109bb906001600160801b0316876127b6565b95508b8b848181106109cf576109cf6126ab565b9050610100020160600160208101906109e89190612789565b6109fb906001600160801b0316866127b6565b94505f610a2f8d8d86818110610a1357610a136126ab565b90506101000201803603810190610a2a91906123ef565b61191e565b90508c8c85818110610a4357610a436126ab565b905061010002016020016020810190610a5c91906124f4565b6001600160a01b0316817fd94fc49a6578873ff851671d19cacb1809887f7a9128867ee4306dc3ffc93c2642604051610a9791815260200190565b60405180910390a350505080610aac906127c9565b905061082b565b50610ae86001600160a01b037f0000000000000000000000004d85ba8c3918359c78ed09581e5bc7578ba932ba16868461189b565b8515610b74576040516333d5020b60e11b81526001600160a01b038616906367aa041690610b469033907f0000000000000000000000004d85ba8c3918359c78ed09581e5bc7578ba932ba90899088908a908f908f9060040161285b565b5f604051808303815f87803b158015610b5d575f80fd5b505af1158015610b6f573d5f803e3d5ffd5b505050505b5f5b81811015610c0357610bf3868b8b84818110610b9457610b946126ab565b905061010002016020016020810190610bad91906124f4565b8c8c85818110610bbf57610bbf6126ab565b905061010002016080016020810190610bd89190612789565b6001600160a01b0389169291906001600160801b031661197c565b610bfc816127c9565b9050610b76565b50505050505050505050565b5f610c25335f356001600160e01b0319166117e2565b610c415760405162461bcd60e51b815260040161049390612685565b610c4a82611a0d565b92915050565b5f610c66335f356001600160e01b0319166117e2565b610c825760405162461bcd60e51b815260040161049390612685565b6001600160a01b0389165f90815260056020908152604091829020825160c081018452905460ff81161515825262ffffff610100820481169383019390935264010000000081049092169281019290925261ffff600160381b820481166060840152600160481b82041660808301526001600160601b03600160581b9091041660a0820152610d13818a8a8a611a47565b60405163d505accf60e01b81523360048201523060248201526001600160801b038a1660448201526064810187905260ff8616608482015260a4810185905260c481018490527f0000000000000000000000004d85ba8c3918359c78ed09581e5bc7578ba932ba6001600160a01b03169063d505accf9060e4015f604051808303815f87803b158015610da4575f80fd5b505af1925050508015610db5575060015b610e6f57604051636eb1769f60e11b81523360048201523060248201526001600160801b038a16907f0000000000000000000000004d85ba8c3918359c78ed09581e5bc7578ba932ba6001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015610e2c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5091906127e1565b1015610e6f57604051634bfd8d1d60e01b815260040160405180910390fd5b610ead6001600160a01b037f0000000000000000000000004d85ba8c3918359c78ed09581e5bc7578ba932ba1633306001600160801b038d1661197c565b610ebf338b8b8b85602001518c611b3a565b509a9950505050505050505050565b5f610ee4335f356001600160e01b0319166117e2565b610f005760405162461bcd60e51b815260040161049390612685565b6001600160a01b0385165f90815260056020908152604091829020825160c081018452905460ff81161515825262ffffff610100820481169383019390935264010000000081049092169281019290925261ffff600160381b820481166060840152600160481b82041660808301526001600160601b03600160581b9091041660a0820152610f9181868686611a47565b610fcf6001600160a01b037f0000000000000000000000004d85ba8c3918359c78ed09581e5bc7578ba932ba1633306001600160801b03891661197c565b610fe133878787856020015188611b3a565b509695505050505050565b611001335f356001600160e01b0319166117e2565b61101d5760405162461bcd60e51b815260040161049390612685565b6001600160a01b0381165f81815260056020526040808220805460ff19169055517ff1abf38a870f414456542524a2b679c0ece751691e36f4feee2ca7826c99e4629190a250565b5f546001600160a01b03163314806110f6575060015460405163b700961360e01b81526001600160a01b039091169063b7009613906110b790339030906001600160e01b03195f3516906004016128be565b602060405180830381865afa1580156110d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f691906128eb565b6110fe575f80fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198905f90a350565b61115e335f356001600160e01b0319166117e2565b61117a5760405162461bcd60e51b815260040161049390612685565b6006805460ff60601b1916600160601b1790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e752905f90a1565b60606111ce335f356001600160e01b0319166117e2565b6111ea5760405162461bcd60e51b815260040161049390612685565b818067ffffffffffffffff811115611204576112046122b7565b60405190808252806020026020018201604052801561122d578160200160208202803683370190505b5091505f5b818110156112985761126b85858381811061124f5761124f6126ab565b9050610100020180360381019061126691906123ef565b611d1b565b83828151811061127d5761127d6126ab565b6020908102919091010152611291816127c9565b9050611232565b505092915050565b5f806112b7335f356001600160e01b0319166117e2565b6112d35760405162461bcd60e51b815260040161049390612685565b6112de858585611dc3565b90969095509350505050565b60606112f66003611888565b905090565b5f8160405160200161130d91906126bf565b604051602081830303815290604052805190602001209050919050565b604051634104b9ed60e11b81526001600160a01b0384811660048301525f9182917f00000000000000000000000013ccc810dfaa6b71957f2b87060afe17e6eb8034169063820973da90602401602060405180830381865afa158015611392573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113b691906127e1565b90506113d56113c78461271061290a565b829061ffff16612710611e16565b90505f61140c6001600160801b038616837f00000000000000000000000000000000000000000000000000000000000f4240611e16565b90506001600160801b0381111561143657604051635637123160e01b815260040160405180910390fd5b95945050505050565b611454335f356001600160e01b0319166117e2565b6114705760405162461bcd60e51b815260040161049390612685565b610bb861ffff831611156114975760405163daf4c27560e01b815260040160405180910390fd5b62278d0062ffffff861611156114c0576040516341e2834f60e11b815260040160405180910390fd5b62278d0062ffffff851611156114e957604051632496e55f60e21b815260040160405180910390fd5b8161ffff168361ffff1611156115125760405163a800f19560e01b815260040160405180910390fd5b604051634104b9ed60e11b81526001600160a01b0387811660048301527f00000000000000000000000013ccc810dfaa6b71957f2b87060afe17e6eb8034169063820973da90602401602060405180830381865afa158015611576573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159a91906127e1565b506040518060c001604052806001151581526020018662ffffff1681526020018562ffffff1681526020018461ffff1681526020018361ffff168152602001826001600160601b031681525060055f886001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f015f6101000a81548160ff0219169083151502179055506020820151815f0160016101000a81548162ffffff021916908362ffffff1602179055506040820151815f0160046101000a81548162ffffff021916908362ffffff1602179055506060820151815f0160076101000a81548161ffff021916908361ffff1602179055506080820151815f0160096101000a81548161ffff021916908361ffff16021790555060a0820151815f01600b6101000a8154816001600160601b0302191690836001600160601b03160217905550905050856001600160a01b03167f6ece44744f1fe676735f115da497fe130c7acf43fcd142fe92e20df15788797e868686868660405161175795949392919062ffffff958616815293909416602084015261ffff91821660408401521660608201526001600160601b0391909116608082015260a00190565b60405180910390a2505050505050565b61177c335f356001600160e01b0319166117e2565b6117985760405162461bcd60e51b815260040161049390612685565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001545f906001600160a01b03168015801590611869575060405163b700961360e01b81526001600160a01b0382169063b70096139061182a908790309088906004016128be565b602060405180830381865afa158015611845573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061186991906128eb565b8061188057505f546001600160a01b038581169116145b949350505050565b60605f61189483611e31565b9392505050565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f5114161716915050806119185760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610493565b50505050565b5f816040516020016119309190612925565b60408051601f19818403018152919052805160209091012090505f611956600383611e8a565b90508061197657604051630ba52cdd60e11b815260040160405180910390fd5b50919050565b5f6040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af13d15601f3d1160015f51141617169150508061072d5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610493565b60208101515f90336001600160a01b0382168114611a3e576040516322583d4960e21b815260040160405180910390fd5b61188084611d1b565b600654600160601b900460ff1615611a725760405163158b17e360e11b815260040160405180910390fd5b8351611a91576040516312baa4e960e11b815260040160405180910390fd5b836060015161ffff168261ffff161080611ab65750836080015161ffff168261ffff16115b15611ad45760405163a800f19560e01b815260040160405180910390fd5b8360a001516001600160601b0316836001600160801b03161015611b0b5760405163030510d560e11b815260040160405180910390fd5b836040015162ffffff168162ffffff161015611918576040516394fb53cb60e01b815260040160405180910390fd5b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052600680546bffffffffffffffffffffffff19811660016001600160601b03928316908101909216179091555f611bb089898961132a565b90505f429050604051806101000160405280846001600160601b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a6001600160801b03168152602001836001600160801b031681526020018264ffffffffff1681526020018862ffffff1681526020018762ffffff16815250935083604051602001611c419190612925565b60408051601f19818403018152919052805160209091012094505f611c67600387611e95565b905080611c8757604051635028981b60e11b815260040160405180910390fd5b604080516001600160601b03861681526001600160801b038c8116602083015285168183015264ffffffffff8416606082015262ffffff8a81166080830152891660a082015290516001600160a01b038d811692908f169189917f2eb08ebdb4d68b4a37e3b424927f3363e1d799ca7e56e7b2c59cc6c1778d33f5919081900360c00190a450505050965096945050505050565b5f611d258261191e565b9050611d76826020015183606001516001600160801b03167f0000000000000000000000004d85ba8c3918359c78ed09581e5bc7578ba932ba6001600160a01b031661189b9092919063ffffffff16565b81602001516001600160a01b0316817f114ef421aef557f2e4086396789e7fb532b1133ff2982c9d948daa73d0691e3642604051611db691815260200190565b60405180910390a3919050565b5f80846020015133806001600160a01b0316826001600160a01b031614611dfd576040516322583d4960e21b815260040160405180910390fd5b611e08878787611ea0565b909890975095505050505050565b5f825f190484118302158202611e2a575f80fd5b5091020490565b6060815f01805480602002602001604051908101604052809291908181526020018280548015611e7e57602002820191905f5260205f20905b815481526020019060010190808311611e6a575b50505050509050919050565b5f6118948383611ffb565b5f61189483836120e5565b5f80846020015133806001600160a01b0316826001600160a01b031614611eda576040516322583d4960e21b815260040160405180910390fd5b6040878101516001600160a01b03165f9081526005602090815290829020825160c081018452905460ff811615158252610100810462ffffff90811693830193909352640100000000810490921692810192909252600160381b810461ffff908116606080850191909152600160481b83049091166080840152600160581b9091046001600160601b031660a0830152880151611f7a9082908989611a47565b611f838861191e565b945087602001516001600160a01b0316857f114ef421aef557f2e4086396789e7fb532b1133ff2982c9d948daa73d0691e3642604051611fc591815260200190565b60405180910390a3611feb886020015189604001518a606001518a85602001518b611b3a565b5080945050505050935093915050565b5f81815260018301602052604081205480156120d5575f61201d6001836127f8565b85549091505f90612030906001906127f8565b905080821461208f575f865f01828154811061204e5761204e6126ab565b905f5260205f200154905080875f01848154811061206e5761206e6126ab565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806120a0576120a06129d0565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610c4a565b5f915050610c4a565b5092915050565b5f81815260018301602052604081205461212a57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610c4a565b505f610c4a565b6001600160a01b0381168114612145575f80fd5b50565b803561215381612131565b919050565b5f8083601f840112612168575f80fd5b50813567ffffffffffffffff81111561217f575f80fd5b6020830191508360208260081b8501011115612199575f80fd5b9250929050565b5f805f805f608086880312156121b4575f80fd5b85356121bf81612131565b94506020860135935060408601356121d681612131565b9250606086013567ffffffffffffffff8111156121f1575f80fd5b6121fd88828901612158565b969995985093965092949392505050565b5f805f805f60608688031215612222575f80fd5b853567ffffffffffffffff80821115612239575f80fd5b61224589838a01612158565b9097509550602088013591508082111561225d575f80fd5b818801915088601f830112612270575f80fd5b81358181111561227e575f80fd5b89602082850101111561228f575f80fd5b60208301955080945050505060408601356122a981612131565b809150509295509295909350565b634e487b7160e01b5f52604160045260245ffd5b80356001600160601b0381168114612153575f80fd5b80356001600160801b0381168114612153575f80fd5b803564ffffffffff81168114612153575f80fd5b803562ffffff81168114612153575f80fd5b5f61010080838503121561232f575f80fd5b6040519081019067ffffffffffffffff8211818310171561235e57634e487b7160e01b5f52604160045260245ffd5b8160405280925061236e846122cb565b815261237c60208501612148565b602082015261238d60408501612148565b604082015261239e606085016122e1565b60608201526123af608085016122e1565b60808201526123c060a085016122f7565b60a08201526123d160c0850161230b565b60c08201526123e260e0850161230b565b60e0820152505092915050565b5f6101008284031215612400575f80fd5b611894838361231d565b803561ffff81168114612153575f80fd5b5f805f805f805f80610100898b031215612433575f80fd5b883561243e81612131565b975061244c60208a016122e1565b965061245a60408a0161240a565b955061246860608a0161230b565b94506080890135935060a089013560ff81168114612484575f80fd5b979a969950949793969295929450505060c08201359160e0013590565b5f805f80608085870312156124b4575f80fd5b84356124bf81612131565b93506124cd602086016122e1565b92506124db6040860161240a565b91506124e96060860161230b565b905092959194509250565b5f60208284031215612504575f80fd5b813561189481612131565b5f8060208385031215612520575f80fd5b823567ffffffffffffffff811115612536575f80fd5b6112de85828601612158565b602080825282518282018190525f9190848201906040850190845b818110156125795783518352928401929184019160010161255d565b50909695505050505050565b5f805f6101408486031215612598575f80fd5b6125a2858561231d565b92506125b1610100850161240a565b91506125c0610120850161230b565b90509250925092565b5f6101008284031215611976575f80fd5b5f805f606084860312156125ec575f80fd5b83356125f781612131565b9250612605602085016122e1565b91506125c06040850161240a565b5f805f805f8060c08789031215612628575f80fd5b863561263381612131565b95506126416020880161230b565b945061264f6040880161230b565b935061265d6060880161240a565b925061266b6080880161240a565b915061267960a088016122cb565b90509295509295509295565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b61010081016001600160601b036126d5846122cb565b16825260208301356126e681612131565b6001600160a01b03908116602084015260408401359061270582612131565b166040830152612717606084016122e1565b6001600160801b03166060830152612731608084016122e1565b6001600160801b0316608083015261274b60a084016122f7565b64ffffffffff1660a083015261276360c0840161230b565b62ffffff1660c083015261277960e0840161230b565b62ffffff811660e08401526120de565b5f60208284031215612799575f80fd5b611894826122e1565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610c4a57610c4a6127a2565b5f600182016127da576127da6127a2565b5060010190565b5f602082840312156127f1575f80fd5b5051919050565b81810381811115610c4a57610c4a6127a2565b5f6020828403121561281b575f80fd5b6118948261230b565b5f60208284031215612834575f80fd5b611894826122f7565b64ffffffffff8181168382160190808211156120de576120de6127a2565b6001600160a01b038881168252878116602083015286166040820152606081018590526080810184905260c060a0820181905281018290525f828460e08401375f60e0848401015260e0601f19601f850116830101905098975050505050505050565b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b5f602082840312156128fb575f80fd5b81518015158114611894575f80fd5b61ffff8281168282160390808211156120de576120de6127a2565b5f610100820190506001600160601b038351168252602083015160018060a01b03808216602085015280604086015116604085015250506001600160801b036060840151166060830152608083015161298960808401826001600160801b03169052565b5060a08301516129a260a084018264ffffffffff169052565b5060c08301516129b960c084018262ffffff169052565b5060e08301516120de60e084018262ffffff169052565b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220798bb35bd3f7882e861f2f2a58ef795b3c62221a3631d2d729533b485196b2be64736f6c63430008150033

    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.