S Price: $0.4576 (+3.91%)
    /

    Contract

    0x5050bc082FF4A74Fb6B0B04385dEfdDB114b2424

    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
    Convert Emission...57377842025-01-29 2:07:2039 secs ago1738116440IN
    0x5050bc08...B114b2424
    0 S0.0038210755
    Approve57372032025-01-29 1:57:3010 mins ago1738115850IN
    0x5050bc08...B114b2424
    0 S0.0026740355.01
    Create Vest57369382025-01-29 1:52:1715 mins ago1738115537IN
    0x5050bc08...B114b2424
    0 S0.0069492555
    Convert Emission...57368942025-01-29 1:51:3016 mins ago1738115490IN
    0x5050bc08...B114b2424
    0 S0.0038210755
    Exit57365182025-01-29 1:44:3623 mins ago1738115076IN
    0x5050bc08...B114b2424
    0 S0.0040132955
    Exit57365102025-01-29 1:44:2923 mins ago1738115069IN
    0x5050bc08...B114b2424
    0 S0.0040139555
    Convert Emission...57361272025-01-29 1:38:1929 mins ago1738114699IN
    0x5050bc08...B114b2424
    0 S0.0041716557
    Approve57360532025-01-29 1:36:5131 mins ago1738114611IN
    0x5050bc08...B114b2424
    0 S0.0025462855
    Convert Emission...57358482025-01-29 1:32:3635 mins ago1738114356IN
    0x5050bc08...B114b2424
    0 S0.0038210755
    Approve57355092025-01-29 1:25:1542 mins ago1738113915IN
    0x5050bc08...B114b2424
    0 S0.0027707757
    Exit57354642025-01-29 1:24:1943 mins ago1738113859IN
    0x5050bc08...B114b2424
    0 S0.004380157
    Approve57354562025-01-29 1:24:1143 mins ago1738113851IN
    0x5050bc08...B114b2424
    0 S0.0027707757
    Exit57347312025-01-29 1:10:2757 mins ago1738113027IN
    0x5050bc08...B114b2424
    0 S0.0040132955
    Convert Emission...57346852025-01-29 1:09:2558 mins ago1738112965IN
    0x5050bc08...B114b2424
    0 S0.0035873164.95
    Approve57326122025-01-29 0:36:571 hr ago1738111017IN
    0x5050bc08...B114b2424
    0 S0.002430550
    Approve57326082025-01-29 0:36:531 hr ago1738111013IN
    0x5050bc08...B114b2424
    0 S0.0026740355.01
    Exit57324712025-01-29 0:34:161 hr ago1738110856IN
    0x5050bc08...B114b2424
    0 S0.0042286155.01
    Approve57323022025-01-29 0:30:501 hr ago1738110650IN
    0x5050bc08...B114b2424
    0 S0.0025304455
    Approve57309722025-01-29 0:16:231 hr ago1738109783IN
    0x5050bc08...B114b2424
    0 S0.0026740355.01
    Exit57298972025-01-29 0:00:242 hrs ago1738108824IN
    0x5050bc08...B114b2424
    0 S0.004227955.01
    Approve57295172025-01-28 23:53:402 hrs ago1738108420IN
    0x5050bc08...B114b2424
    0 S0.0026740355.01
    Approve57295112025-01-28 23:53:292 hrs ago1738108409IN
    0x5050bc08...B114b2424
    0 S0.0015909355
    Create Vest57291102025-01-28 23:47:002 hrs ago1738108020IN
    0x5050bc08...B114b2424
    0 S0.0071032555
    Approve57264472025-01-28 23:10:172 hrs ago1738105817IN
    0x5050bc08...B114b2424
    0 S0.0027604550
    Approve57226642025-01-28 22:26:143 hrs ago1738103174IN
    0x5050bc08...B114b2424
    0 S0.0026099155
    View all transactions

    Latest 1 internal transaction

    Parent Transaction Hash Block Age From To Amount
    40352422025-01-15 19:03:3113 days ago1736967811
     Contract Creation
    0 S
    Loading...
    Loading

    Contract Source Code Verified (Exact Match)

    Contract Name:
    XShadow

    Compiler Version
    v0.8.28+commit.7893614a

    Optimization Enabled:
    Yes with 1633 runs

    Other Settings:
    cancun EvmVersion
    File 1 of 22 : XShadow.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.26;
    import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
    import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
    import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol";
    import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
    import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
    import {IVoter} from "../interfaces/IVoter.sol";
    import {IRamsesV3Pool} from "../CL/core/interfaces/IRamsesV3Pool.sol";
    import {IXShadow} from "../interfaces/IXShadow.sol";
    import {IVoteModule} from "../interfaces/IVoteModule.sol";
    contract XShadow is ERC20, IXShadow, Pausable {
    using EnumerableSet for EnumerableSet.AddressSet;
    /** Addresses */
    /// @inheritdoc IXShadow
    address public operator;
    /// @inheritdoc IXShadow
    address public immutable MINTER;
    /// @inheritdoc IXShadow
    address public immutable ACCESS_HUB;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 22 : 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: MIT
    // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/ERC20.sol)
    pragma solidity ^0.8.20;
    import {IERC20} from "./IERC20.sol";
    import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
    import {Context} from "../../utils/Context.sol";
    import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";
    /**
    * @dev Implementation of the {IERC20} interface.
    *
    * This implementation is agnostic to the way tokens are created. This means
    * that a supply mechanism has to be added in a derived contract using {_mint}.
    *
    * TIP: For a detailed writeup see our guide
    * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
    * to implement supply mechanisms].
    *
    * The default value of {decimals} is 18. To change this, you should override
    * this function so it returns a different value.
    *
    * We have followed general OpenZeppelin Contracts guidelines: functions revert
    * instead returning `false` on failure. This behavior is nonetheless
    * conventional and does not conflict with the expectations of ERC-20
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 22 : 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.1.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 4 of 22 : Pausable.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/Pausable.sol)
    pragma solidity ^0.8.20;
    import {Context} from "../utils/Context.sol";
    /**
    * @dev Contract module which allows children to implement an emergency stop
    * mechanism that can be triggered by an authorized account.
    *
    * This module is used through inheritance. It will make available the
    * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
    * the functions of your contract. Note that they will not be pausable by
    * simply including this module, only once the modifiers are put in place.
    */
    abstract contract Pausable is Context {
    bool private _paused;
    /**
    * @dev Emitted when the pause is triggered by `account`.
    */
    event Paused(address account);
    /**
    * @dev Emitted when the pause is lifted by `account`.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 22 : Math.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.1.0) (utils/math/Math.sol)
    pragma solidity ^0.8.20;
    import {Panic} from "../Panic.sol";
    import {SafeCast} from "./SafeCast.sol";
    /**
    * @dev Standard math utilities missing in the Solidity language.
    */
    library Math {
    enum Rounding {
    Floor, // Toward negative infinity
    Ceil, // Toward positive infinity
    Trunc, // Toward zero
    Expand // Away from zero
    }
    /**
    * @dev Returns the addition of two unsigned integers, with an success flag (no overflow).
    */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {
    unchecked {
    uint256 c = a + b;
    if (c < a) return (false, 0);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 22 : 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.1.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 7 of 22 : IVoter.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.26;
    pragma abicoder v2;
    interface IVoter {
    error ACTIVE_GAUGE(address gauge);
    error GAUGE_INACTIVE(address gauge);
    error ALREADY_WHITELISTED(address token);
    error NOT_AUTHORIZED(address caller);
    error NOT_WHITELISTED();
    error NOT_POOL();
    error NOT_INIT();
    error LENGTH_MISMATCH();
    error NO_GAUGE();
    error ALREADY_DISTRIBUTED(address gauge, uint256 period);
    error ZERO_VOTE(address pool);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 22 : IRamsesV3Pool.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: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    import {IRamsesV3PoolImmutables} from './pool/IRamsesV3PoolImmutables.sol';
    import {IRamsesV3PoolState} from './pool/IRamsesV3PoolState.sol';
    import {IRamsesV3PoolDerivedState} from './pool/IRamsesV3PoolDerivedState.sol';
    import {IRamsesV3PoolActions} from './pool/IRamsesV3PoolActions.sol';
    import {IRamsesV3PoolOwnerActions} from './pool/IRamsesV3PoolOwnerActions.sol';
    import {IRamsesV3PoolErrors} from './pool/IRamsesV3PoolErrors.sol';
    import {IRamsesV3PoolEvents} from './pool/IRamsesV3PoolEvents.sol';
    /// @title The interface for a Ramses V3 Pool
    /// @notice A Ramses pool facilitates swapping and automated market making between any two assets that strictly conform
    /// to the ERC20 specification
    /// @dev The pool interface is broken up into many smaller pieces
    interface IRamsesV3Pool is
    IRamsesV3PoolImmutables,
    IRamsesV3PoolState,
    IRamsesV3PoolDerivedState,
    IRamsesV3PoolActions,
    IRamsesV3PoolOwnerActions,
    IRamsesV3PoolErrors,
    IRamsesV3PoolEvents
    {
    /// @notice if a new period, advance on interaction
    function _advancePeriod() external;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 22 : IXShadow.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: GPL-2.0-or-later
    pragma solidity ^0.8.24;
    import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
    import {IVoter} from "./IVoter.sol";
    interface IXShadow is IERC20 {
    struct VestPosition {
    /// @dev amount of xShadow
    uint256 amount;
    /// @dev start unix timestamp
    uint256 start;
    /// @dev start + MAX_VEST (end timestamp)
    uint256 maxEnd;
    /// @dev vest identifier (starting from 0)
    uint256 vestID;
    }
    error NOT_WHITELISTED(address);
    error NOT_MINTER();
    error ZERO();
    error NO_VEST();
    error ALREADY_EXEMPT();
    error NOT_EXEMPT();
    error CANT_RESCUE();
    error NO_CHANGE();
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 22 : IVoteModule.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: GPL-2.0-or-later
    pragma solidity ^0.8.26;
    interface IVoteModule {
    /** Custom Errors */
    /// @dev == 0
    error ZERO_AMOUNT();
    /// @dev if address is not xShadow
    error NOT_XSHADOW();
    /// @dev error for when the cooldown period has not been passed yet
    error COOLDOWN_ACTIVE();
    /// @dev error for when you try to deposit or withdraw for someone who isn't the msg.sender
    error NOT_VOTEMODULE();
    /// @dev error for when the caller is not authorized
    error UNAUTHORIZED();
    /// @dev error for accessHub gated functions
    error NOT_ACCESSHUB();
    /// @dev error for when there is no change of state
    error NO_CHANGE();
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 22 : 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.1.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 12 of 22 : Context.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.1) (utils/Context.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Provides information about the current execution context, including the
    * sender of the transaction and its data. While these are generally available
    * via msg.sender and msg.data, they should not be accessed in such a direct
    * manner, since when dealing with meta-transactions the account sending and
    * paying for execution may not be the actual sender (as far as an application
    * is concerned).
    *
    * This contract is only required for intermediate, library-like contracts.
    */
    abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
    return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
    return msg.data;
    }
    function _contextSuffixLength() internal view virtual returns (uint256) {
    return 0;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 22 : draft-IERC6093.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.1.0) (interfaces/draft-IERC6093.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Standard ERC-20 Errors
    * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
    */
    interface IERC20Errors {
    /**
    * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
    * @param sender Address whose tokens are being transferred.
    * @param balance Current balance for the interacting account.
    * @param needed Minimum amount required to perform a transfer.
    */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
    /**
    * @dev Indicates a failure with the token `sender`. Used in transfers.
    * @param sender Address whose tokens are being transferred.
    */
    error ERC20InvalidSender(address sender);
    /**
    * @dev Indicates a failure with the token `receiver`. Used in transfers.
    * @param receiver Address to which tokens are being transferred.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 22 : Panic.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.1.0) (utils/Panic.sol)
    pragma solidity ^0.8.20;
    /**
    * @dev Helper library for emitting standardized panic codes.
    *
    * ```solidity
    * contract Example {
    * using Panic for uint256;
    *
    * // Use any of the declared internal constants
    * function foo() { Panic.GENERIC.panic(); }
    *
    * // Alternatively
    * function foo() { Panic.panic(Panic.GENERIC); }
    * }
    * ```
    *
    * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].
    *
    * _Available since v5.1._
    */
    // slither-disable-next-line unused-state
    library Panic {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 22 : SafeCast.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.1.0) (utils/math/SafeCast.sol)
    // This file was procedurally generated from scripts/generate/templates/SafeCast.js.
    pragma solidity ^0.8.20;
    /**
    * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow
    * checks.
    *
    * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
    * easily result in undesired exploitation or bugs, since developers usually
    * assume that overflows raise errors. `SafeCast` restores this intuition by
    * reverting the transaction when such an operation overflows.
    *
    * Using this library instead of the unchecked operations eliminates an entire
    * class of bugs, so it's recommended to use it always.
    */
    library SafeCast {
    /**
    * @dev Value doesn't fit in an uint of `bits` size.
    */
    error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);
    /**
    * @dev An int value doesn't fit in an uint of `bits` size.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 22 : IRamsesV3PoolImmutables.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: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Pool state that never changes
    /// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same values
    interface IRamsesV3PoolImmutables {
    /// @notice The contract that deployed the pool, which must adhere to the IRamsesV3Factory interface
    /// @return The contract address
    function factory() external view returns (address);
    /// @notice The first of the two tokens of the pool, sorted by address
    /// @return The token contract address
    function token0() external view returns (address);
    /// @notice The second of the two tokens of the pool, sorted by address
    /// @return The token contract address
    function token1() external view returns (address);
    /// @notice The pool's fee in hundredths of a bip, i.e. 1e-6
    /// @return The fee
    function fee() external view returns (uint24);
    /// @notice The pool tick spacing
    /// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive
    /// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, ...
    /// This value is an int24 to avoid casting even though it is always positive.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 22 : IRamsesV3PoolState.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: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Pool state that can change
    /// @notice These methods compose the pool's state, and can change with any frequency including multiple times
    /// per transaction
    interface IRamsesV3PoolState {
    /// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas
    /// when accessed externally.
    /// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value
    /// @return tick The current tick of the pool, i.e. according to the last tick transition that was run.
    /// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick
    /// boundary.
    /// @return observationIndex The index of the last oracle observation that was written,
    /// @return observationCardinality The current maximum number of observations stored in the pool,
    /// @return observationCardinalityNext The next maximum number of observations, to be updated when the observation.
    /// @return feeProtocol The protocol fee for both tokens of the pool.
    /// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0
    /// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee.
    /// unlocked Whether the pool is currently locked to reentrancy
    function slot0()
    external
    view
    returns (
    uint160 sqrtPriceX96,
    int24 tick,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 22 : IRamsesV3PoolDerivedState.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: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Pool state that is not stored
    /// @notice Contains view functions to provide information about the pool that is computed rather than stored on the
    /// blockchain. The functions here may have variable gas costs.
    interface IRamsesV3PoolDerivedState {
    /// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp
    /// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing
    /// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,
    /// you must call it with secondsAgos = [3600, 0].
    /// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in
    /// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio.
    /// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned
    /// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp
    /// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block
    /// timestamp
    function observe(
    uint32[] calldata secondsAgos
    ) external view returns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);
    /// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range
    /// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed.
    /// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first
    /// snapshot is taken and the second snapshot is taken.
    /// @param tickLower The lower tick of the range
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 22 : IRamsesV3PoolActions.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: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Permissionless pool actions
    /// @notice Contains pool methods that can be called by anyone
    interface IRamsesV3PoolActions {
    /// @notice Sets the initial price for the pool
    /// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value
    /// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96
    function initialize(uint160 sqrtPriceX96) external;
    /// @notice Adds liquidity for the given recipient/tickLower/tickUpper position
    /// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback
    /// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends
    /// on tickLower, tickUpper, the amount of liquidity, and the current price.
    /// @param recipient The address for which the liquidity will be created
    /// @param index The index for which the liquidity will be created
    /// @param tickLower The lower tick of the position in which to add liquidity
    /// @param tickUpper The upper tick of the position in which to add liquidity
    /// @param amount The amount of liquidity to mint
    /// @param data Any data that should be passed through to the callback
    /// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback
    /// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callback
    function mint(
    address recipient,
    uint256 index,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 22 : IRamsesV3PoolOwnerActions.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Permissioned pool actions
    /// @notice Contains pool methods that may only be called by the factory owner
    interface IRamsesV3PoolOwnerActions {
    /// @notice Set the denominator of the protocol's % share of the fees
    function setFeeProtocol() external;
    /// @notice Collect the protocol fee accrued to the pool
    /// @param recipient The address to which collected protocol fees should be sent
    /// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1
    /// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0
    /// @return amount0 The protocol fee collected in token0
    /// @return amount1 The protocol fee collected in token1
    function collectProtocol(
    address recipient,
    uint128 amount0Requested,
    uint128 amount1Requested
    ) external returns (uint128 amount0, uint128 amount1);
    function setFee(uint24 _fee) external;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 22 : IRamsesV3PoolErrors.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // SPDX-License-Identifier: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Errors emitted by a pool
    /// @notice Contains all events emitted by the pool
    interface IRamsesV3PoolErrors {
    error LOK();
    error TLU();
    error TLM();
    error TUM();
    error AI();
    error M0();
    error M1();
    error AS();
    error IIA();
    error L();
    error F0();
    error F1();
    error SPL();
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 22 of 22 : IRamsesV3PoolEvents.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: GPL-2.0-or-later
    pragma solidity >=0.5.0;
    /// @title Events emitted by a pool
    /// @notice Contains all events emitted by the pool
    interface IRamsesV3PoolEvents {
    /// @notice Emitted exactly once by a pool when #initialize is first called on the pool
    /// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize
    /// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96
    /// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the pool
    event Initialize(uint160 sqrtPriceX96, int24 tick);
    /// @notice Emitted when liquidity is minted for a given position
    /// @param sender The address that minted the liquidity
    /// @param owner The owner of the position and recipient of any minted liquidity
    /// @param tickLower The lower tick of the position
    /// @param tickUpper The upper tick of the position
    /// @param amount The amount of liquidity minted to the position range
    /// @param amount0 How much token0 was required for the minted liquidity
    /// @param amount1 How much token1 was required for the minted liquidity
    event Mint(
    address sender,
    address indexed owner,
    int24 indexed tickLower,
    int24 indexed tickUpper,
    uint128 amount,
    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": [
    "@openzeppelin-contracts-5.1.0/=dependencies/@openzeppelin-contracts-5.1.0/",
    "@openzeppelin-contracts-upgradeable-5.1.0/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/",
    "@forge-std-1.9.4/=dependencies/forge-std-1.9.4/",
    "@layerzerolabs/=node_modules/@layerzerolabs/",
    "@layerzerolabs/lz-evm-protocol-v2/=node_modules/@layerzerolabs/lz-evm-protocol-v2/",
    "@openzeppelin-contracts-upgradeable/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/",
    "@openzeppelin-contracts/contracts/=dependencies/@openzeppelin-contracts-5.1.0/",
    "@openzeppelin/contracts/=dependencies/@openzeppelin-contracts-5.1.0/",
    "erc4626-tests/=dependencies/erc4626-property-tests-1.0/",
    "forge-std/=dependencies/forge-std-1.9.4/src/",
    "permit2/=lib/permit2/",
    "@openzeppelin-3.4.2/=node_modules/@openzeppelin-3.4.2/",
    "@openzeppelin-contracts-5.1.0/=dependencies/@openzeppelin-contracts-5.1.0/",
    "@openzeppelin-contracts-upgradeable-5.1.0/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/",
    "@uniswap/=node_modules/@uniswap/",
    "base64-sol/=node_modules/base64-sol/",
    "ds-test/=node_modules/ds-test/",
    "erc4626-property-tests-1.0/=dependencies/erc4626-property-tests-1.0/",
    "eth-gas-reporter/=node_modules/eth-gas-reporter/",
    "forge-std-1.9.4/=dependencies/forge-std-1.9.4/src/",
    "hardhat/=node_modules/hardhat/",
    "solidity-bytes-utils/=node_modules/solidity-bytes-utils/",
    "solmate/=node_modules/solmate/"
    ],
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract Security Audit

    Contract ABI

    [{"inputs":[{"internalType":"address","name":"_shadow","type":"address"},{"internalType":"address","name":"_voter","type":"address"},{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_accessHub","type":"address"},{"internalType":"address","name":"_voteModule","type":"address"},{"internalType":"address","name":"_minter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ALREADY_EXEMPT","type":"error"},{"inputs":[],"name":"ARRAY_LENGTHS","type":"error"},{"inputs":[],"name":"CANT_RESCUE","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"NOT_AUTHORIZED","type":"error"},{"inputs":[],"name":"NOT_EXEMPT","type":"error"},{"inputs":[],"name":"NOT_MINTER","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"NOT_WHITELISTED","type":"error"},{"inputs":[],"name":"NO_CHANGE","type":"error"},{"inputs":[],"name":"NO_VEST","type":"error"},{"inputs":[],"name":"TOO_HIGH","type":"error"},{"inputs":[],"name":"VEST_OVERLAP","type":"error"},{"inputs":[],"name":"ZERO","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"vestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CancelVesting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Converted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"candidate","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"Exemption","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"vestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ExitVesting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"InstantExit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"o","type":"address"},{"indexed":true,"internalType":"address","name":"n","type":"address"}],"name":"NewOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"penalty","type":"uint256"}],"name":"NewSlashingPenalty","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"vestId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NewVest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"min","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"max","type":"uint256"}],"name":"NewVestingTimes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Rebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"XShadowRedeemed","type":"event"},{"inputs":[],"name":"ACCESS_HUB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASIS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_VEST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_VEST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHADOW","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SLASHING_PENALTY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VOTER","outputs":[{"internalType":"contract IVoter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VOTE_MODULE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"convertEmissionsToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"createVest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"exit","outputs":[{"internalType":"uint256","name":"_exitedAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_vestID","type":"uint256"}],"name":"exitVest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBalanceResiding","outputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"},{"internalType":"uint256","name":"_vestID","type":"uint256"}],"name":"getVestInfo","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"maxEnd","type":"uint256"},{"internalType":"uint256","name":"vestID","type":"uint256"}],"internalType":"struct IXShadow.VestPosition","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"}],"name":"isExempt","outputs":[{"internalType":"bool","name":"_exempt","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastDistributedPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"migrateOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"operatorRedeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"rescueTrappedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_exemptee","type":"address[]"},{"internalType":"bool[]","name":"_exempt","type":"bool[]"}],"name":"setExemption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_exemptee","type":"address[]"},{"internalType":"bool[]","name":"_exempt","type":"bool[]"}],"name":"setExemptionTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shadow","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"}],"name":"usersTotalVests","outputs":[{"internalType":"uint256","name":"_length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"vestInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"maxEnd","type":"uint256"},{"internalType":"uint256","name":"vestID","type":"uint256"}],"stateMutability":"view","type":"function"}]

    61012080604052346103325760c081612acc8038038091610020828561053f565b8339810103126103325761003381610562565b61003f60208301610562565b9161004c60408201610562565b9161005960608301610562565b9061007260a061006b60808601610562565b9401610562565b936040519561008260408861053f565b600787526678536861646f7760c81b6020880152604051966100a560408961053f565b600788526678534841444f5760c81b60208901528051906001600160401b0382116104425760035490600182811c92168015610535575b60208310146104245781601f8493116104c7575b50602090601f8311600114610461575f92610456575b50508160011b915f199060031b1c1916176003555b86516001600160401b03811161044257600454600181811c91168015610438575b602082101461042457601f81116103c1575b506020601f821160011461035457908060209897969594939260049a5f92610349575b50508160011b915f199060031b1c19161788555b600580546001600160a01b0394851660e052919093166101008190526080969096526001600160a81b03191660089190911b610100600160a81b031617905560a05260c0526101d381610576565b506005546101ec9060081c6001600160a01b0316610576565b5060c051610202906001600160a01b0316610576565b5060c051610218906001600160a01b0316610602565b50604051631ed2419560e01b815292839182905afa90811561033e575f91610308575b50600a55604051612456908161067682396080518181816101f50152610542015260a051818181610289015281816104dd01528181610b9201528181610d3401528181610f7f015281816111a9015281816112560152611343015260c0518181816106150152610efd015260e0518181816102b2015281816104400152818161065f0152818161080e015281816108ff01528181610e2e015281816113c2015261166201526101005181818161059e01528181610cf201528181611c8001528181611eb001526120c90152f35b90506020813d602011610336575b816103236020938361053f565b8101031261033257515f61023b565b5f80fd5b3d9150610316565b6040513d5f823e3d90fd5b015190505f80610171565b601f1982169860045f52815f20995f5b8181106103a9575099600192849260209b9a999897969560049d10610391575b505050811b018855610185565b01515f1960f88460031b161c191690555f8080610384565b838301518c556001909b019a60209384019301610364565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c8101916020841061041a575b601f0160051c01905b81811061040f575061014e565b5f8155600101610402565b90915081906103f9565b634e487b7160e01b5f52602260045260245ffd5b90607f169061013c565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610106565b60035f9081528281209350601f198516905b8181106104af5750908460019594939210610497575b505050811b0160035561011b565b01515f1960f88460031b161c191690555f8080610489565b92936020600181928786015181550195019301610473565b60035f529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c8101916020851061052b575b90601f859493920160051c01905b81811061051d57506100f0565b5f8155849350600101610510565b9091508190610502565b91607f16916100dc565b601f909101601f19168101906001600160401b0382119082101761044257604052565b51906001600160a01b038216820361033257565b805f52600760205260405f2054155f146105fd57600654680100000000000000008110156104425760018101806006558110156105e9577ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018190556006545f9182526007602052604090912055600190565b634e487b7160e01b5f52603260045260245ffd5b505f90565b805f52600960205260405f2054155f146105fd57600854680100000000000000008110156104425760018101806008558110156105e9577ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3018190556008545f918252600960205260409091205560019056fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816306fdde03146118d95750806308b4bd63146117d9578063095ea7b31461175757806311147bd6146116e557806312e82674146115f757806318160ddd146115da57806323b872dd146114aa57806325d64f4b1461148e5780632cf53bd814611456578063313ce5671461143b57806332fef3cf14611321578063353140d0146112375780633f4ba83a1461118b57806349e821931461116e578063528cfa9814611152578063570ca735146111295780635a8aed661461107e5780635c975abb1461105c5780636379808f14610f5857806370a0823114610f2157806379248d94146107ef5780637dd51d7a14610ede5780637f8661a114610db95780638392331114610d9c5780638456cb5914610d165780638ebf2fd614610cd35780638f7b565b14610cb657806394126bb114610b7357806395d89b4114610a6f578063a9059cbb14610a3e578063ab95605414610832578063ac600a3c146107ef578063ad5dff73146107b5578063af14052c1461051f578063b7f045e914610501578063b989216a146104bd578063bacbf61b146103f2578063beb7dc341461026a578063dd62ed3e1461021c5763fe6d8124146101d6575f80fd5b3461021957806003193601126102195760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b5034610219576040366003190112610219576001600160a01b0360406102406119bb565b928261024a6119d1565b9416815260016020522091165f52602052602060405f2054604051908152f35b50346102195761027936611a45565b90916102b0336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611afa565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693855b8281106102e8578680f35b856001600160a01b036103046102ff848787611b37565b611b54565b16146103ca578060206001600160a01b036103266102ff610377958888611b37565b166001600160a01b0360055460081c169061034284898b611b37565b35918b60405180978195829463a9059cbb60e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af19182156103bf57600192610391575b50016102dd565b6103b19060203d81116103b8575b6103a98183611ab3565b810190611ae2565b505f61038a565b503d61039f565b6040513d8a823e3d90fd5b6004877f512428f9000000000000000000000000000000000000000000000000000000008152fd5b5034610219578060031936011261021957604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156104b1579061047a575b602090604051908152f35b506020813d6020116104a9575b8161049460209383611ab3565b810103126104a5576020905161046f565b5f80fd5b3d9150610487565b604051903d90823e3d90fd5b503461021957806003193601126102195760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102195780600319360112610219576020600a54604051908152f35b50346104a5575f3660031901126104a557610538611b75565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361078e576040517f1ed241950000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610726575f9161075c575b50600a5481118061074e575b6105e2575080f35b600a55600b80545f9091556040517f095ea7b30000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038116600483015260248201839052602082806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1918215610726576001600160a01b0392610731575b5016803b156104a5575f80916024604051809481937f3c6b16ab0000000000000000000000000000000000000000000000000000000083528760048401525af1801561072657610711575b506040519081527fcf0cf43969b3f0a08a20481cfa1fd31d1023ab827f0babb8d8125862a9c403f860203392a280f35b61071e9192505f90611ab3565b5f905f6106e1565b6040513d5f823e3d90fd5b6107499060203d6020116103b8576103a98183611ab3565b610696565b50612710600b5410156105da565b90506020813d602011610786575b8161077760209383611ab3565b810103126104a557515f6105ce565b3d915061076a565b7e914334000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a55760203660031901126104a5576001600160a01b036107d66119bb565b165f526007602052602060405f20541515604051908152f35b346104a5575f3660031901126104a55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346104a55760203660031901126104a55760043561084e611b75565b335f52600c6020526108638160405f206119e7565b508054908115610a16576001810154905f8155621275008201808311610a02574210156108c45750506108968133611dd7565b6040519081527fcda231b62bdbcfdebaec108470aea3eb3fcc5ebe00d79b6e252850d4bf5c60b560203392a3005b600201544210610978575060405163a9059cbb60e01b81523360048201526024810182905260208180604481015b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107265761095b575b506040519081527f902061c3e3f4d419563154f2c22ef4847f185919d82ff921a64559c1dc83bb7660203392a3005b6109739060203d6020116103b8576103a98183611ab3565b61092c565b61138882029082820461138803610a02576109939042611b68565b9061138882840202918183041481151715610a02576109c36020916127108062ed4e006108f29604049104611ad5565b6109d86109d08286611b68565b600b54611ad5565b600b5560405163a9059cbb60e01b8152336004820152602481019190915291829081906044820190565b634e487b7160e01b5f52601160045260245ffd5b7f2b5d497a000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a55760403660031901126104a557610a64610a5a6119bb565b6024359033611fde565b602060405160018152f35b346104a5575f3660031901126104a5576040515f6004548060011c90600181168015610b69575b602083108114610b5557828552908115610b315750600114610ad3575b610acf83610ac381850382611ab3565b60405191829182611991565b0390f35b91905060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f905b808210610b1757509091508101602001610ac3610ab3565b919260018160209254838588010152019101909291610aff565b60ff191660208086019190915291151560051b84019091019150610ac39050610ab3565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610a96565b346104a557610b8136611a45565b610bb9939193336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611afa565b808303610c8e575f5b818110610bcb57005b80837f0c26de26c21d52b9af1eae2bc6d3c4f03cf66cf139d32166af29b8aed71351926001600160a01b0388610c6d610c4d610c1f878a610c476102ff8f9c8d8160019f8e610c24610c1f848f8b90611b37565b611b47565b15610c76576102ff610c41938f93610c3b93611b37565b166123cb565b9c611b37565b95611b37565b946040519384931695839092916020906040830194151583521515910152565b0390a201610bc2565b6102ff610c41938f93610c8893611b37565b166122c6565b7f3d0084d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a5575f3660031901126104a5576020600b54604051908152f35b346104a5575f3660031901126104a55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346104a5575f3660031901126104a557610d5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611afa565b610d63611b75565b600160ff1960055416176005557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346104a5575f3660031901126104a557602060405162ed4e008152f35b346104a55760203660031901126104a557600435610dd5611b75565b8015610eb657611388810281810461138803610a0257612710610e0791046109d0610e008285611b68565b9333611ba9565b600b5560405163a9059cbb60e01b815233600482015260248101829052906020826044815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af191821561072657602092610e9b575b506040518181527fa8a63b0531e55ae709827fb089d01034e24a200ad14dc710dfa9e962005f629a833392a2604051908152f35b610eb190833d85116103b8576103a98183611ab3565b610e67565b7f58fa63ca000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a5575f3660031901126104a55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346104a55760203660031901126104a5576001600160a01b03610f426119bb565b165f525f602052602060405f2054604051908152f35b346104a55760203660031901126104a557610f716119bb565b610fa6336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611afa565b600554906001600160a01b038260081c166001600160a01b03821691828214611034577fffffffffffffffffffffff0000000000000000000000000000000000000000ff9274ffffffffffffffffffffffffffffffffffffffff00927ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c5f80a360081b169116176005555f80f35b7fff302aa0000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a5575f3660031901126104a557602060ff600554166040519015158152f35b346104a55760403660031901126104a5576001600160a01b0361109f6119bb565b5f60606040516110ae81611a97565b8281528260208201528260408201520152165f52600c60205260806110d860243560405f206119e7565b506040516110e581611a97565b815491828252600181015460208301908152606060036002840154936040860194855201549301928352604051938452516020840152516040830152516060820152f35b346104a5575f3660031901126104a55760206001600160a01b0360055460081c16604051908152f35b346104a5575f3660031901126104a55760206040516127108152f35b346104a5575f3660031901126104a5576020604051621275008152f35b346104a5575f3660031901126104a5576111d0336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611afa565b60055460ff81161561120f5760ff19166005557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a55761124536611a45565b61127d939193336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611afa565b808303610c8e575f5b81811061128f57005b80837f0c26de26c21d52b9af1eae2bc6d3c4f03cf66cf139d32166af29b8aed71351926001600160a01b0388611300610c4d610c1f878a610c476102ff8f9c8d8160019f8e6112e3610c1f848f8b90611b37565b15611309576102ff610c41938f936112fa93611b37565b16612371565b0390a201611286565b6102ff610c41938f9361131b93611b37565b166121eb565b346104a55760203660031901126104a55760043561136a336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163314611afa565b611382816001600160a01b0360055460081c16611ba9565b60055460405163a9059cbb60e01b815260089190911c6001600160a01b0316600482015260248101829052602081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107265761141e575b506040519081527f2bccc9c67b5a114aacc02e37dd4596d5aa81ee83a8f7a93e36dd0c901bc258c960203092a2005b6114369060203d6020116103b8576103a98183611ab3565b6113ef565b346104a5575f3660031901126104a557602060405160128152f35b346104a55760203660031901126104a5576001600160a01b036114776119bb565b165f52600c602052602060405f2054604051908152f35b346104a5575f3660031901126104a55760206040516113888152f35b346104a55760603660031901126104a5576114c36119bb565b6114cb6119d1565b604435906001600160a01b03831692835f52600160205260405f206001600160a01b0333165f5260205260405f20545f19810361150e575b50610a649350611fde565b8381106115a657841561157a57331561154e57610a64945f52600160205260405f206001600160a01b0333165f526020528360405f209103905584611503565b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b83907ffb8f41b2000000000000000000000000000000000000000000000000000000005f523360045260245260445260645ffd5b346104a5575f3660031901126104a5576020600254604051908152f35b346104a55760203660031901126104a557600435611613611b75565b8015610eb6576040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201528160448201526020816064815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af18015610726576116c8575b5061169a8133611dd7565b6040519081527fa428517b481b65176e7c35a57b564d5cf943c8462468b8a0f025fa689173f90160203392a2005b6116e09060203d6020116103b8576103a98183611ab3565b61168f565b346104a55760403660031901126104a5576116fe6119bb565b6001600160a01b0360243591165f52600c60205260405f2080548210156104a55760809161172b916119e7565b508054906001810154906003600282015491015491604051938452602084015260408301526060820152f35b346104a55760403660031901126104a5576117706119bb565b60243590331561157a576001600160a01b031690811561154e57335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346104a55760203660031901126104a5576004356117f5611b75565b8015610eb6576118058133611ba9565b335f908152600c602052604090208054904262ed4e00810191908210610a02576040519061183282611a97565b84825260208201924284526040830190815260608301918583528054680100000000000000008110156118c55761186e916001820181556119e7565b9490946118b25760039351855551600185015551600284015551910155337f7d9230ebb47980ddc758fe4e69ea83a89dafbceb45bd45934798477baa5776685f80a4005b634e487b7160e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b346104a5575f3660031901126104a5575f6003548060011c90600181168015611987575b602083108114610b5557828552908115610b31575060011461192957610acf83610ac381850382611ab3565b91905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b80821061196d57509091508101602001610ac3610ab3565b919260018160209254838588010152019101909291611955565b91607f16916118fd565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036104a557565b602435906001600160a01b03821682036104a557565b8054821015611a00575f5260205f209060021b01905f90565b634e487b7160e01b5f52603260045260245ffd5b9181601f840112156104a55782359167ffffffffffffffff83116104a5576020808501948460051b0101116104a557565b60406003198201126104a55760043567ffffffffffffffff81116104a55781611a7091600401611a14565b929092916024359067ffffffffffffffff82116104a557611a9391600401611a14565b9091565b6080810190811067ffffffffffffffff8211176118c557604052565b90601f8019910116810190811067ffffffffffffffff8211176118c557604052565b91908201809211610a0257565b908160209103126104a5575180151581036104a55790565b15611b025750565b6001600160a01b03907f2bc10c33000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b9190811015611a005760051b0190565b3580151581036104a55790565b356001600160a01b03811681036104a55790565b91908203918211610a0257565b60ff60055416611b8157565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091906001600160a01b03168015611dab575f815f52600760205260405f205415801590611da4575b8015611d9c575b8015611d6a575b15611c765750600160ff815b1603611c6457805f525f60205260405f2054838110611c4a576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587528684520360408620558060025403600255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b630b7b234960e01b5f5260045260245ffd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166040519063aa79979b60e01b8252836004830152602082602481845afa918215610726575f92611d49575b508115611cf5575b50611ce3575b60ff600191611bec565b50611ced816123cb565b506001611cd9565b6024915060209060405192838092635397401b60e01b82528760048301525afa908115610726575f91611d2a575b505f611cd3565b611d43915060203d6020116103b8576103a98183611ab3565b5f611d23565b611d6391925060203d6020116103b8576103a98183611ab3565b905f611ccb565b505f805260096020527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b541515611be0565b506001611bd9565b505f611bd2565b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b6001600160a01b0316908115611fb2575f80805260076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df5415801590611faa575b8015611fa3575b8015611f8e575b15611e9b5750600160ff815b1603611e88577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602082611e6c5f94600254611ad5565b60025584845283825260408420818154019055604051908152a3565b630b7b234960e01b5f525f60045260245ffd5b60405163aa79979b60e01b81525f60048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316602082602481845afa918215610726575f92611f6d575b508115611f19575b50611f07575b60ff600191611e35565b50611f115f6123cb565b506001611efd565b6024915060209060405192838092635397401b60e01b82525f60048301525afa908115610726575f91611f4e575b505f611ef7565b611f67915060203d6020116103b8576103a98183611ab3565b5f611f47565b611f8791925060203d6020116103b8576103a98183611ab3565b905f611eef565b50825f52600960205260405f20541515611e29565b505f611e22565b506001611e1b565b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b6001600160a01b0316908115611dab576001600160a01b0316918215611fb2575f825f52600760205260405f2054158015906121cf575b80156121c8575b80156121b3575b156120bf5750600160ff815b16036120ac57815f525f60205260405f205481811061209357817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b50630b7b234960e01b5f5260045260245ffd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166040519063aa79979b60e01b8252846004830152602082602481845afa918215610726575f92612192575b50811561213e575b5061212c575b60ff60019161202f565b50612136826123cb565b506001612122565b6024915060209060405192838092635397401b60e01b82528860048301525afa908115610726575f91612173575b505f61211c565b61218c915060203d6020116103b8576103a98183611ab3565b5f61216c565b6121ac91925060203d6020116103b8576103a98183611ab3565b905f612114565b50835f52600960205260405f20541515612023565b505f61201c565b505f612015565b8054821015611a00575f5260205f2001905f90565b5f8181526009602052604090205480156122c0575f198101818111610a02576008545f19810191908211610a0257818103612272575b505050600854801561225e575f190161223b8160086121d6565b8154905f199060031b1b191690556008555f5260096020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b6122aa6122836122949360086121d6565b90549060031b1c92839260086121d6565b819391549060031b91821b915f19901b19161790565b90555f52600960205260405f20555f8080612221565b50505f90565b5f8181526007602052604090205480156122c0575f198101818111610a02576006545f19810191908211610a0257818103612339575b505050600654801561225e575f19016123168160066121d6565b8154905f199060031b1b191690556006555f5260076020525f6040812055600190565b61235b61234a6122949360066121d6565b90549060031b1c92839260066121d6565b90555f52600760205260405f20555f80806122fc565b805f52600960205260405f2054155f146123c657600854680100000000000000008110156118c5576123af61229482600185940160085560086121d6565b9055600854905f52600960205260405f2055600190565b505f90565b805f52600760205260405f2054155f146123c657600654680100000000000000008110156118c55761240961229482600185940160065560066121d6565b9055600654905f52600760205260405f205560019056fea264697066735822122033595f69a48a1f1ea8c6345866f43e67e3772812dfa858a95d7a81f3689ccda464736f6c634300081c00330000000000000000000000003333b97138d4b086720b5ae8a7844b1345a333330000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f0000000000000000000000005be2e859d0c2453c9aa062860ca27711ff5534320000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b4000000000000000000000000c7022f359cd1bda8ab8a19d1f19d769cbf7f3765

    Deployed Bytecode

    0x6080806040526004361015610012575f80fd5b5f905f3560e01c90816306fdde03146118d95750806308b4bd63146117d9578063095ea7b31461175757806311147bd6146116e557806312e82674146115f757806318160ddd146115da57806323b872dd146114aa57806325d64f4b1461148e5780632cf53bd814611456578063313ce5671461143b57806332fef3cf14611321578063353140d0146112375780633f4ba83a1461118b57806349e821931461116e578063528cfa9814611152578063570ca735146111295780635a8aed661461107e5780635c975abb1461105c5780636379808f14610f5857806370a0823114610f2157806379248d94146107ef5780637dd51d7a14610ede5780637f8661a114610db95780638392331114610d9c5780638456cb5914610d165780638ebf2fd614610cd35780638f7b565b14610cb657806394126bb114610b7357806395d89b4114610a6f578063a9059cbb14610a3e578063ab95605414610832578063ac600a3c146107ef578063ad5dff73146107b5578063af14052c1461051f578063b7f045e914610501578063b989216a146104bd578063bacbf61b146103f2578063beb7dc341461026a578063dd62ed3e1461021c5763fe6d8124146101d6575f80fd5b3461021957806003193601126102195760206040516001600160a01b037f000000000000000000000000c7022f359cd1bda8ab8a19d1f19d769cbf7f3765168152f35b80fd5b5034610219576040366003190112610219576001600160a01b0360406102406119bb565b928261024a6119d1565b9416815260016020522091165f52602052602060405f2054604051908152f35b50346102195761027936611a45565b90916102b0336001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611afa565b7f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a333336001600160a01b031693855b8281106102e8578680f35b856001600160a01b036103046102ff848787611b37565b611b54565b16146103ca578060206001600160a01b036103266102ff610377958888611b37565b166001600160a01b0360055460081c169061034284898b611b37565b35918b60405180978195829463a9059cbb60e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af19182156103bf57600192610391575b50016102dd565b6103b19060203d81116103b8575b6103a98183611ab3565b810190611ae2565b505f61038a565b503d61039f565b6040513d8a823e3d90fd5b6004877f512428f9000000000000000000000000000000000000000000000000000000008152fd5b5034610219578060031936011261021957604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b037f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333165afa9081156104b1579061047a575b602090604051908152f35b506020813d6020116104a9575b8161049460209383611ab3565b810103126104a5576020905161046f565b5f80fd5b3d9150610487565b604051903d90823e3d90fd5b503461021957806003193601126102195760206040516001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f168152f35b50346102195780600319360112610219576020600a54604051908152f35b50346104a5575f3660031901126104a557610538611b75565b6001600160a01b037f000000000000000000000000c7022f359cd1bda8ab8a19d1f19d769cbf7f376516330361078e576040517f1ed241950000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f165afa908115610726575f9161075c575b50600a5481118061074e575b6105e2575080f35b600a55600b80545f9091556040517f095ea7b30000000000000000000000000000000000000000000000000000000081527f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b46001600160a01b038116600483015260248201839052602082806044810103815f6001600160a01b037f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333165af1918215610726576001600160a01b0392610731575b5016803b156104a5575f80916024604051809481937f3c6b16ab0000000000000000000000000000000000000000000000000000000083528760048401525af1801561072657610711575b506040519081527fcf0cf43969b3f0a08a20481cfa1fd31d1023ab827f0babb8d8125862a9c403f860203392a280f35b61071e9192505f90611ab3565b5f905f6106e1565b6040513d5f823e3d90fd5b6107499060203d6020116103b8576103a98183611ab3565b610696565b50612710600b5410156105da565b90506020813d602011610786575b8161077760209383611ab3565b810103126104a557515f6105ce565b3d915061076a565b7e914334000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a55760203660031901126104a5576001600160a01b036107d66119bb565b165f526007602052602060405f20541515604051908152f35b346104a5575f3660031901126104a55760206040516001600160a01b037f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333168152f35b346104a55760203660031901126104a55760043561084e611b75565b335f52600c6020526108638160405f206119e7565b508054908115610a16576001810154905f8155621275008201808311610a02574210156108c45750506108968133611dd7565b6040519081527fcda231b62bdbcfdebaec108470aea3eb3fcc5ebe00d79b6e252850d4bf5c60b560203392a3005b600201544210610978575060405163a9059cbb60e01b81523360048201526024810182905260208180604481015b03815f6001600160a01b037f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333165af180156107265761095b575b506040519081527f902061c3e3f4d419563154f2c22ef4847f185919d82ff921a64559c1dc83bb7660203392a3005b6109739060203d6020116103b8576103a98183611ab3565b61092c565b61138882029082820461138803610a02576109939042611b68565b9061138882840202918183041481151715610a02576109c36020916127108062ed4e006108f29604049104611ad5565b6109d86109d08286611b68565b600b54611ad5565b600b5560405163a9059cbb60e01b8152336004820152602481019190915291829081906044820190565b634e487b7160e01b5f52601160045260245ffd5b7f2b5d497a000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a55760403660031901126104a557610a64610a5a6119bb565b6024359033611fde565b602060405160018152f35b346104a5575f3660031901126104a5576040515f6004548060011c90600181168015610b69575b602083108114610b5557828552908115610b315750600114610ad3575b610acf83610ac381850382611ab3565b60405191829182611991565b0390f35b91905060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f905b808210610b1757509091508101602001610ac3610ab3565b919260018160209254838588010152019101909291610aff565b60ff191660208086019190915291151560051b84019091019150610ac39050610ab3565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610a96565b346104a557610b8136611a45565b610bb9939193336001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611afa565b808303610c8e575f5b818110610bcb57005b80837f0c26de26c21d52b9af1eae2bc6d3c4f03cf66cf139d32166af29b8aed71351926001600160a01b0388610c6d610c4d610c1f878a610c476102ff8f9c8d8160019f8e610c24610c1f848f8b90611b37565b611b47565b15610c76576102ff610c41938f93610c3b93611b37565b166123cb565b9c611b37565b95611b37565b946040519384931695839092916020906040830194151583521515910152565b0390a201610bc2565b6102ff610c41938f93610c8893611b37565b166122c6565b7f3d0084d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a5575f3660031901126104a5576020600b54604051908152f35b346104a5575f3660031901126104a55760206040516001600160a01b037f0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f168152f35b346104a5575f3660031901126104a557610d5b336001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611afa565b610d63611b75565b600160ff1960055416176005557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346104a5575f3660031901126104a557602060405162ed4e008152f35b346104a55760203660031901126104a557600435610dd5611b75565b8015610eb657611388810281810461138803610a0257612710610e0791046109d0610e008285611b68565b9333611ba9565b600b5560405163a9059cbb60e01b815233600482015260248101829052906020826044815f7f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a333336001600160a01b03165af191821561072657602092610e9b575b506040518181527fa8a63b0531e55ae709827fb089d01034e24a200ad14dc710dfa9e962005f629a833392a2604051908152f35b610eb190833d85116103b8576103a98183611ab3565b610e67565b7f58fa63ca000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a5575f3660031901126104a55760206040516001600160a01b037f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b4168152f35b346104a55760203660031901126104a5576001600160a01b03610f426119bb565b165f525f602052602060405f2054604051908152f35b346104a55760203660031901126104a557610f716119bb565b610fa6336001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611afa565b600554906001600160a01b038260081c166001600160a01b03821691828214611034577fffffffffffffffffffffff0000000000000000000000000000000000000000ff9274ffffffffffffffffffffffffffffffffffffffff00927ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c5f80a360081b169116176005555f80f35b7fff302aa0000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a5575f3660031901126104a557602060ff600554166040519015158152f35b346104a55760403660031901126104a5576001600160a01b0361109f6119bb565b5f60606040516110ae81611a97565b8281528260208201528260408201520152165f52600c60205260806110d860243560405f206119e7565b506040516110e581611a97565b815491828252600181015460208301908152606060036002840154936040860194855201549301928352604051938452516020840152516040830152516060820152f35b346104a5575f3660031901126104a55760206001600160a01b0360055460081c16604051908152f35b346104a5575f3660031901126104a55760206040516127108152f35b346104a5575f3660031901126104a5576020604051621275008152f35b346104a5575f3660031901126104a5576111d0336001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611afa565b60055460ff81161561120f5760ff19166005557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b346104a55761124536611a45565b61127d939193336001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611afa565b808303610c8e575f5b81811061128f57005b80837f0c26de26c21d52b9af1eae2bc6d3c4f03cf66cf139d32166af29b8aed71351926001600160a01b0388611300610c4d610c1f878a610c476102ff8f9c8d8160019f8e6112e3610c1f848f8b90611b37565b15611309576102ff610c41938f936112fa93611b37565b16612371565b0390a201611286565b6102ff610c41938f9361131b93611b37565b166121eb565b346104a55760203660031901126104a55760043561136a336001600160a01b037f0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f163314611afa565b611382816001600160a01b0360055460081c16611ba9565b60055460405163a9059cbb60e01b815260089190911c6001600160a01b0316600482015260248101829052602081806044810103815f6001600160a01b037f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333165af180156107265761141e575b506040519081527f2bccc9c67b5a114aacc02e37dd4596d5aa81ee83a8f7a93e36dd0c901bc258c960203092a2005b6114369060203d6020116103b8576103a98183611ab3565b6113ef565b346104a5575f3660031901126104a557602060405160128152f35b346104a55760203660031901126104a5576001600160a01b036114776119bb565b165f52600c602052602060405f2054604051908152f35b346104a5575f3660031901126104a55760206040516113888152f35b346104a55760603660031901126104a5576114c36119bb565b6114cb6119d1565b604435906001600160a01b03831692835f52600160205260405f206001600160a01b0333165f5260205260405f20545f19810361150e575b50610a649350611fde565b8381106115a657841561157a57331561154e57610a64945f52600160205260405f206001600160a01b0333165f526020528360405f209103905584611503565b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b83907ffb8f41b2000000000000000000000000000000000000000000000000000000005f523360045260245260445260645ffd5b346104a5575f3660031901126104a5576020600254604051908152f35b346104a55760203660031901126104a557600435611613611b75565b8015610eb6576040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201528160448201526020816064815f6001600160a01b037f0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333165af18015610726576116c8575b5061169a8133611dd7565b6040519081527fa428517b481b65176e7c35a57b564d5cf943c8462468b8a0f025fa689173f90160203392a2005b6116e09060203d6020116103b8576103a98183611ab3565b61168f565b346104a55760403660031901126104a5576116fe6119bb565b6001600160a01b0360243591165f52600c60205260405f2080548210156104a55760809161172b916119e7565b508054906001810154906003600282015491015491604051938452602084015260408301526060820152f35b346104a55760403660031901126104a5576117706119bb565b60243590331561157a576001600160a01b031690811561154e57335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346104a55760203660031901126104a5576004356117f5611b75565b8015610eb6576118058133611ba9565b335f908152600c602052604090208054904262ed4e00810191908210610a02576040519061183282611a97565b84825260208201924284526040830190815260608301918583528054680100000000000000008110156118c55761186e916001820181556119e7565b9490946118b25760039351855551600185015551600284015551910155337f7d9230ebb47980ddc758fe4e69ea83a89dafbceb45bd45934798477baa5776685f80a4005b634e487b7160e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b346104a5575f3660031901126104a5575f6003548060011c90600181168015611987575b602083108114610b5557828552908115610b31575060011461192957610acf83610ac381850382611ab3565b91905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b80821061196d57509091508101602001610ac3610ab3565b919260018160209254838588010152019101909291611955565b91607f16916118fd565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036104a557565b602435906001600160a01b03821682036104a557565b8054821015611a00575f5260205f209060021b01905f90565b634e487b7160e01b5f52603260045260245ffd5b9181601f840112156104a55782359167ffffffffffffffff83116104a5576020808501948460051b0101116104a557565b60406003198201126104a55760043567ffffffffffffffff81116104a55781611a7091600401611a14565b929092916024359067ffffffffffffffff82116104a557611a9391600401611a14565b9091565b6080810190811067ffffffffffffffff8211176118c557604052565b90601f8019910116810190811067ffffffffffffffff8211176118c557604052565b91908201809211610a0257565b908160209103126104a5575180151581036104a55790565b15611b025750565b6001600160a01b03907f2bc10c33000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b9190811015611a005760051b0190565b3580151581036104a55790565b356001600160a01b03811681036104a55790565b91908203918211610a0257565b60ff60055416611b8157565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091906001600160a01b03168015611dab575f815f52600760205260405f205415801590611da4575b8015611d9c575b8015611d6a575b15611c765750600160ff815b1603611c6457805f525f60205260405f2054838110611c4a576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587528684520360408620558060025403600255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b630b7b234960e01b5f5260045260245ffd5b6001600160a01b037f0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f166040519063aa79979b60e01b8252836004830152602082602481845afa918215610726575f92611d49575b508115611cf5575b50611ce3575b60ff600191611bec565b50611ced816123cb565b506001611cd9565b6024915060209060405192838092635397401b60e01b82528760048301525afa908115610726575f91611d2a575b505f611cd3565b611d43915060203d6020116103b8576103a98183611ab3565b5f611d23565b611d6391925060203d6020116103b8576103a98183611ab3565b905f611ccb565b505f805260096020527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b541515611be0565b506001611bd9565b505f611bd2565b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b6001600160a01b0316908115611fb2575f80805260076020527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df5415801590611faa575b8015611fa3575b8015611f8e575b15611e9b5750600160ff815b1603611e88577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602082611e6c5f94600254611ad5565b60025584845283825260408420818154019055604051908152a3565b630b7b234960e01b5f525f60045260245ffd5b60405163aa79979b60e01b81525f60048201527f0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f6001600160a01b0316602082602481845afa918215610726575f92611f6d575b508115611f19575b50611f07575b60ff600191611e35565b50611f115f6123cb565b506001611efd565b6024915060209060405192838092635397401b60e01b82525f60048301525afa908115610726575f91611f4e575b505f611ef7565b611f67915060203d6020116103b8576103a98183611ab3565b5f611f47565b611f8791925060203d6020116103b8576103a98183611ab3565b905f611eef565b50825f52600960205260405f20541515611e29565b505f611e22565b506001611e1b565b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b6001600160a01b0316908115611dab576001600160a01b0316918215611fb2575f825f52600760205260405f2054158015906121cf575b80156121c8575b80156121b3575b156120bf5750600160ff815b16036120ac57815f525f60205260405f205481811061209357817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b50630b7b234960e01b5f5260045260245ffd5b6001600160a01b037f0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f166040519063aa79979b60e01b8252846004830152602082602481845afa918215610726575f92612192575b50811561213e575b5061212c575b60ff60019161202f565b50612136826123cb565b506001612122565b6024915060209060405192838092635397401b60e01b82528860048301525afa908115610726575f91612173575b505f61211c565b61218c915060203d6020116103b8576103a98183611ab3565b5f61216c565b6121ac91925060203d6020116103b8576103a98183611ab3565b905f612114565b50835f52600960205260405f20541515612023565b505f61201c565b505f612015565b8054821015611a00575f5260205f2001905f90565b5f8181526009602052604090205480156122c0575f198101818111610a02576008545f19810191908211610a0257818103612272575b505050600854801561225e575f190161223b8160086121d6565b8154905f199060031b1b191690556008555f5260096020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b6122aa6122836122949360086121d6565b90549060031b1c92839260086121d6565b819391549060031b91821b915f19901b19161790565b90555f52600960205260405f20555f8080612221565b50505f90565b5f8181526007602052604090205480156122c0575f198101818111610a02576006545f19810191908211610a0257818103612339575b505050600654801561225e575f19016123168160066121d6565b8154905f199060031b1b191690556006555f5260076020525f6040812055600190565b61235b61234a6122949360066121d6565b90549060031b1c92839260066121d6565b90555f52600760205260405f20555f80806122fc565b805f52600960205260405f2054155f146123c657600854680100000000000000008110156118c5576123af61229482600185940160085560086121d6565b9055600854905f52600960205260405f2055600190565b505f90565b805f52600760205260405f2054155f146123c657600654680100000000000000008110156118c55761240961229482600185940160065560066121d6565b9055600654905f52600760205260405f205560019056fea264697066735822122033595f69a48a1f1ea8c6345866f43e67e3772812dfa858a95d7a81f3689ccda464736f6c634300081c0033

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

    0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a333330000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f0000000000000000000000005be2e859d0c2453c9aa062860ca27711ff5534320000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b4000000000000000000000000c7022f359cd1bda8ab8a19d1f19d769cbf7f3765

    -----Decoded View---------------
    Arg [0] : _shadow (address): 0x3333b97138D4b086720b5aE8A7844b1345a33333
    Arg [1] : _voter (address): 0x3aF1dD7A2755201F8e2D6dCDA1a61d9f54838f4f
    Arg [2] : _operator (address): 0x5Be2e859D0c2453C9aA062860cA27711ff553432
    Arg [3] : _accessHub (address): 0x5e7A9eea6988063A4dBb9CcDDB3E04C923E8E37f
    Arg [4] : _voteModule (address): 0xDCB5A24ec708cc13cee12bFE6799A78a79b666b4
    Arg [5] : _minter (address): 0xc7022F359cD1bDa8aB8a19d1F19d769cbf7F3765

    -----Encoded View---------------
    6 Constructor Arguments found :
    Arg [0] : 0000000000000000000000003333b97138d4b086720b5ae8a7844b1345a33333
    Arg [1] : 0000000000000000000000003af1dd7a2755201f8e2d6dcda1a61d9f54838f4f
    Arg [2] : 0000000000000000000000005be2e859d0c2453c9aa062860ca27711ff553432
    Arg [3] : 0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f
    Arg [4] : 000000000000000000000000dcb5a24ec708cc13cee12bfe6799a78a79b666b4
    Arg [5] : 000000000000000000000000c7022f359cd1bda8ab8a19d1f19d769cbf7f3765


    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.