POL Price: $0.123445 (-3.01%)
 

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Buy Tickets With...820437332026-01-23 22:30:3834 hrs ago1769207438IN
0xcB0bf54f...2723fe4F3
6.9488858 POL0.129811217.71931561
Buy Tickets With...820356322026-01-23 18:00:3638 hrs ago1769191236IN
0xcB0bf54f...2723fe4F3
0.93006137 POL0.18625376312.95842073
Buy Tickets820326422026-01-23 16:20:5640 hrs ago1769185256IN
0xcB0bf54f...2723fe4F3
0 POL0.195178031,077.90287877
Buy Tickets820326012026-01-23 16:19:3440 hrs ago1769185174IN
0xcB0bf54f...2723fe4F3
0 POL0.204808011,102.13753173
Buy Tickets820214672026-01-23 10:08:2646 hrs ago1769162906IN
0xcB0bf54f...2723fe4F3
0 POL0.09699352535.66272379
Buy Tickets820213602026-01-23 10:04:5246 hrs ago1769162692IN
0xcB0bf54f...2723fe4F3
0 POL0.11552393638
Buy Tickets With...820070912026-01-23 2:09:142 days ago1769134154IN
0xcB0bf54f...2723fe4F3
26.78677116 POL0.25447372256
Buy Tickets With...819954812026-01-22 19:42:142 days ago1769110934IN
0xcB0bf54f...2723fe4F3
6.69669279 POL0.15314542248.10601242
Buy Tickets819925182026-01-22 18:03:282 days ago1769105008IN
0xcB0bf54f...2723fe4F3
0 POL0.06391841353
Buy Tickets With...819757182026-01-22 8:43:283 days ago1769071408IN
0xcB0bf54f...2723fe4F3
6.67207383 POL0.3792964636
Buy Tickets819614922026-01-22 0:49:163 days ago1769042956IN
0xcB0bf54f...2723fe4F3
0 POL0.0749638414
Buy Tickets With...819535452026-01-21 20:24:223 days ago1769027062IN
0xcB0bf54f...2723fe4F3
0.9061766 POL0.20216875339
Buy Tickets819352492026-01-21 10:14:303 days ago1768990470IN
0xcB0bf54f...2723fe4F3
0 POL0.08718635312.81432196
Buy Tickets819349982026-01-21 10:06:083 days ago1768989968IN
0xcB0bf54f...2723fe4F3
0 POL0.2095491442
Buy Tickets With...819155102026-01-20 23:16:324 days ago1768950992IN
0xcB0bf54f...2723fe4F3
6.86697637 POL0.0591295599.6374621
Buy Tickets819141702026-01-20 22:31:524 days ago1768948312IN
0xcB0bf54f...2723fe4F3
0 POL0.0136169729.01594021
Buy Tickets With...819140092026-01-20 22:26:304 days ago1768947990IN
0xcB0bf54f...2723fe4F3
6.929937 POL0.0173024629.01594021
Buy Tickets With...819041552026-01-20 16:58:024 days ago1768928282IN
0xcB0bf54f...2723fe4F3
0.95697086 POL0.31905024536
Buy Tickets With...818824002026-01-20 4:52:525 days ago1768884772IN
0xcB0bf54f...2723fe4F3
7.10381047 POL0.0362407560.93299257
Buy Tickets With...818807312026-01-20 3:57:145 days ago1768881434IN
0xcB0bf54f...2723fe4F3
0.96468948 POL0.0541727591
Buy Tickets818755532026-01-20 1:04:385 days ago1768871078IN
0xcB0bf54f...2723fe4F3
0 POL0.0174678394
Buy Tickets With...818601092026-01-19 16:29:505 days ago1768840190IN
0xcB0bf54f...2723fe4F3
50.48984992 POL0.37503668377.29441321
Buy Tickets With...818600342026-01-19 16:27:205 days ago1768840040IN
0xcB0bf54f...2723fe4F3
50.48984992 POL0.47345114476.11165934
Buy Tickets With...818590162026-01-19 15:53:245 days ago1768838004IN
0xcB0bf54f...2723fe4F3
0.97946386 POL0.25266623424.53995987
Buy Tickets With...818520662026-01-19 12:01:445 days ago1768824104IN
0xcB0bf54f...2723fe4F3
21.32297456 POL0.08410392104.8802888
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
820437332026-01-23 22:30:3834 hrs ago1769207438
0xcB0bf54f...2723fe4F3
0.60453644 POL
820437332026-01-23 22:30:3834 hrs ago1769207438
0xcB0bf54f...2723fe4F3
0.60453644 POL
820437332026-01-23 22:30:3834 hrs ago1769207438
0xcB0bf54f...2723fe4F3
6.9488858 POL
820356322026-01-23 18:00:3638 hrs ago1769191236
0xcB0bf54f...2723fe4F3
0.07205868 POL
820356322026-01-23 18:00:3638 hrs ago1769191236
0xcB0bf54f...2723fe4F3
0.07205868 POL
820356322026-01-23 18:00:3638 hrs ago1769191236
0xcB0bf54f...2723fe4F3
0.93006137 POL
820070912026-01-23 2:09:142 days ago1769134154
0xcB0bf54f...2723fe4F3
2.376129 POL
820070912026-01-23 2:09:142 days ago1769134154
0xcB0bf54f...2723fe4F3
2.376129 POL
820070912026-01-23 2:09:142 days ago1769134154
0xcB0bf54f...2723fe4F3
26.78677116 POL
819954812026-01-22 19:42:142 days ago1769110934
0xcB0bf54f...2723fe4F3
0.60855685 POL
819954812026-01-22 19:42:142 days ago1769110934
0xcB0bf54f...2723fe4F3
0.60855685 POL
819954812026-01-22 19:42:142 days ago1769110934
0xcB0bf54f...2723fe4F3
6.69669279 POL
819757182026-01-22 8:43:283 days ago1769071408
0xcB0bf54f...2723fe4F3
0.55953277 POL
819757182026-01-22 8:43:283 days ago1769071408
0xcB0bf54f...2723fe4F3
0.55953277 POL
819757182026-01-22 8:43:283 days ago1769071408
0xcB0bf54f...2723fe4F3
6.67207383 POL
819535452026-01-21 20:24:223 days ago1769027062
0xcB0bf54f...2723fe4F3
0.08002383 POL
819535452026-01-21 20:24:223 days ago1769027062
0xcB0bf54f...2723fe4F3
0.08002383 POL
819535452026-01-21 20:24:223 days ago1769027062
0xcB0bf54f...2723fe4F3
0.9061766 POL
819155102026-01-20 23:16:324 days ago1768950992
0xcB0bf54f...2723fe4F3
0.69615807 POL
819155102026-01-20 23:16:324 days ago1768950992
0xcB0bf54f...2723fe4F3
0.69615807 POL
819155102026-01-20 23:16:324 days ago1768950992
0xcB0bf54f...2723fe4F3
6.86697637 POL
819140092026-01-20 22:26:304 days ago1768947990
0xcB0bf54f...2723fe4F3
0.66966319 POL
819140092026-01-20 22:26:304 days ago1768947990
0xcB0bf54f...2723fe4F3
0.66966319 POL
819140092026-01-20 22:26:304 days ago1768947990
0xcB0bf54f...2723fe4F3
6.929937 POL
819041552026-01-20 16:58:024 days ago1768928282
0xcB0bf54f...2723fe4F3
0.09670626 POL
View All Internal Transactions
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TicketRouterV3

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 999999 runs

Other Settings:
shanghai EvmVersion
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

import "./Interfaces/IERC20V.sol";
import "./Interfaces/IWETH.sol";
import "./Interfaces/ISwapRouter.sol";
import "./Interfaces/IQuoter.sol";
import "./Interfaces/IScratchContract.sol";

contract TicketRouterV3 {

    address public immutable WETH;
    address public immutable VERSE_TOKEN;
    address public immutable SWAP_ROUTER;
    address public immutable QUOTER;

    uint24 public constant DEFAULT_POOL_FEE = 3000;
    uint24 public constant VERSE_WETH_POOL_FEE = 3000;

    mapping(address => uint24) public customPoolFees;
    address public constant WMATIC = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270;

    receive()
        external
        payable {}

    fallback()
        external
        payable {}

    modifier onlyOwner() {
        require(
            msg.sender == owner,
            "TicketRouterV3: NOT_OWNER"
        );
        _;
    }

    address private owner;

    event TokenPurchase(
        address indexed buyer,
        address indexed token,
        uint256 amount,
        uint256 receivedAmount
    );

    event FeeUpdated(
        address indexed token,
        uint24 fee
    );

    constructor(
        address _weth,
        address _verseToken,
        address _swapRouter,
        address _quoter
    ) {
        WETH = _weth;
        VERSE_TOKEN = _verseToken;
        SWAP_ROUTER = _swapRouter;
        QUOTER = _quoter;
        owner = msg.sender;
    }

    function setCustomPoolFee(
        address _token,
        uint24 _fee
    )
        external
        onlyOwner
    {
        customPoolFees[_token] = _fee;
        emit FeeUpdated(
            _token,
            _fee
        );
    }

    function getPoolFee(
        address _token
    )
        public
        view
        returns (uint24)
    {
        uint24 customFee = customPoolFees[
            _token
        ];

        return customFee > 0
            ? customFee
            : DEFAULT_POOL_FEE;
    }

    function encodePath(
        address _tokenIn,
        address _tokenMid,
        address _tokenOut,
        uint24 _fee1,
        uint24 _fee2
    )
        internal
        pure
        returns (bytes memory)
    {
        return abi.encodePacked(
            _tokenOut,
            _fee2,
            _tokenMid,
            _fee1,
            _tokenIn
        );
    }

    function _encodeDirectPath(
        address _tokenIn,
        address _tokenOut,
        uint24 _fee
    )
        internal
        pure
        returns (bytes memory)
    {
        return abi.encodePacked(
            _tokenOut,
            _fee,
            _tokenIn
        );
    }

    function getNativePriceForTickets(
        address _scratcherContract,
        uint256 _ticketCount
    )
        public
        returns (uint256 nativeAmount)
    {
        // Get the base cost of a ticket from the scratcher contract
        IScratchContract scratcher = IScratchContract(
            _scratcherContract
        );

        // Calculate total VERSE tokens needed for all tickets
        uint256 totalVerseNeeded = scratcher.baseCost() * _ticketCount;

        // Step 1: Get WETH needed for VERSE
        bytes memory pathStep1 = abi.encodePacked(
            VERSE_TOKEN,
            VERSE_WETH_POOL_FEE,
            WETH
        );

        // Get WETH amount needed for VERSE tokens
        uint256 wethNeeded = IQuoter(QUOTER).quoteExactOutput(
            pathStep1,
            totalVerseNeeded
        );

        // Step 2: Get WMATIC needed for WETH
        bytes memory pathStep2 = abi.encodePacked(
            WETH,
            getPoolFee(WMATIC),
            WMATIC
        );

        // Get the final WMATIC amount needed
        return IQuoter(QUOTER).quoteExactOutput(
            pathStep2,
            wethNeeded
        );
    }

    function buyTicketsWithNative(
        address _scratcherContract,
        uint256 _ticketCount
    )
        external
        payable
    {
        _buyTicketsWithNative(
            _scratcherContract,
            _ticketCount,
            msg.sender
        );
    }

    function giftTicketsWithNative(
        address _scratcherContract,
        uint256 _ticketCount,
        address _recipient
    )
        external
        payable
    {
        _buyTicketsWithNative(
            _scratcherContract,
            _ticketCount,
            _recipient
        );
    }

    function _buyTicketsWithNative(
        address _scratcherContract,
        uint256 _ticketCount,
        address _recipient
    )
        internal
    {
        require(
            _ticketCount > 0,
            "TicketRouterV3: INVALID_COUNT"
        );

        IScratchContract scratcher = IScratchContract(
            _scratcherContract
        );

        uint256 totalVerseNeeded = scratcher.baseCost()
            * _ticketCount;

        // On Polygon, native currency is MATIC, but VERSE pairs with WETH
        // So we need to:
        // 1. First wrap MATIC to WMATIC
        // 2. Then swap WMATIC for WETH
        // 3. Then swap WETH for VERSE

        // First wrap native MATIC to WMATIC
        IWETH(WMATIC).deposit{
            value: msg.value
        }();

        uint256 nativeRequired = getNativePriceForTickets(
            _scratcherContract,
            _ticketCount
        );

        require(
            msg.value >= nativeRequired,
            "TicketRouterV3: INSUFFICIENT_NATIVE_CURRENCY"
        );

        // Approve WMATIC for swapping
        IERC20V(WMATIC).approve(
            SWAP_ROUTER,
            msg.value
        );

        bytes memory wethToVersePath = abi.encodePacked(
            VERSE_TOKEN,
            VERSE_WETH_POOL_FEE,
            WETH
        );

        // Quote how much WETH is needed
        uint256 wethNeeded = IQuoter(QUOTER).quoteExactOutput(
            wethToVersePath,
            totalVerseNeeded
        );

        // Step 1: Convert WMATIC to WETH
        ISwapRouter.ExactOutputSingleParams memory wmaticToWethParams = ISwapRouter.ExactOutputSingleParams({
            tokenIn: WMATIC,
            tokenOut: WETH,
            fee: getPoolFee(WMATIC),
            recipient: address(this),
            deadline: block.timestamp,
            amountOut: wethNeeded,
            amountInMaximum: msg.value,
            sqrtPriceLimitX96: 0
        });

        // Get WETH from WMATIC
        uint256 wmaticUsed = ISwapRouter(SWAP_ROUTER).exactOutputSingle(
            wmaticToWethParams
        );

        // Approve WETH for second swap
        IERC20V(WETH).approve(
            SWAP_ROUTER,
            wethNeeded
        );

        // Step 2: Convert WETH to VERSE
        ISwapRouter.ExactOutputSingleParams memory wethToVerseParams = ISwapRouter.ExactOutputSingleParams({
            tokenIn: WETH,
            tokenOut: VERSE_TOKEN,
            fee: VERSE_WETH_POOL_FEE,
            recipient: address(this),
            deadline: block.timestamp,
            amountOut: totalVerseNeeded,
            amountInMaximum: wethNeeded,
            sqrtPriceLimitX96: 0
        });

        // Get VERSE from WETH
        ISwapRouter(SWAP_ROUTER).exactOutputSingle(
            wethToVerseParams
        );

        // Refund unused WMATIC
        if (msg.value > wmaticUsed) {
            uint256 refundAmount = msg.value - wmaticUsed;

            // Withdraw WMATIC back to native MATIC
            IWETH(WMATIC).withdraw(
                refundAmount
            );

            // Send the refund to the user
            payable(msg.sender).transfer(
                refundAmount
            );
        }

        // Approve VERSE for the scratcher contract
        IERC20V(VERSE_TOKEN).approve(
            _scratcherContract,
            totalVerseNeeded
        );

        // Purchase tickets
        scratcher.bulkPurchase(
            _recipient,
            _ticketCount
        );

        emit TokenPurchase(
            _recipient,
            WMATIC,
            wmaticUsed,
            totalVerseNeeded
        );
    }

    function buyTickets(
        address scratcherContract,
        uint256 _ticketCount
    )
        public
    {
        _buyTickets(
            scratcherContract,
            _ticketCount,
            msg.sender
        );
    }

    function giftTickets(
        address scratcherContract,
        uint256 _ticketCount,
        address _recipient
    )
        public
    {
        _buyTickets(
            scratcherContract,
            _ticketCount,
            _recipient
        );
    }

    function _buyTickets(
        address scratcherContract,
        uint256 _ticketCount,
        address _recipient
    )
        internal
    {
        require(
            _ticketCount > 0,
            "TicketRouterV3: INVALID_COUNT"
        );

        IScratchContract scratcher = IScratchContract(
            scratcherContract
        );

        uint256 totalCost = scratcher.baseCost()
            * _ticketCount;

        IERC20V(VERSE_TOKEN).transferFrom(
            msg.sender,
            address(this),
            totalCost
        );

        IERC20V(VERSE_TOKEN).approve(
            scratcherContract,
            totalCost
        );

        scratcher.bulkPurchase(
            _recipient,
            _ticketCount
        );

        emit TokenPurchase(
            _recipient,
            VERSE_TOKEN,
            totalCost,
            totalCost
        );
    }

    function getTokenPriceForTickets(
        address _scratcherContract,
        uint256 _ticketCount,
        address _inputToken
    )
        public
        returns (uint256 tokenAmount)
    {
        IScratchContract scratcher = IScratchContract(
            _scratcherContract
        );

        uint256 totalVerseNeeded = scratcher.baseCost()
            * _ticketCount;

        // If the input token is VERSE, return the exact amount
        if (_inputToken == VERSE_TOKEN) {
            return totalVerseNeeded;
        }

        // If the input token is WETH, use direct swap path
        if (_inputToken == WETH) {

            bytes memory pathWeth = abi.encodePacked(
                VERSE_TOKEN,
                VERSE_WETH_POOL_FEE,
                WETH
            );

            return IQuoter(QUOTER).quoteExactOutput(
                pathWeth,
                totalVerseNeeded
            );
        }

        uint24 tokenWethFee = getPoolFee(
            _inputToken
        );

        bytes memory path = encodePath(
            _inputToken,
            WETH,
            VERSE_TOKEN,
            tokenWethFee,
            VERSE_WETH_POOL_FEE
        );

        return IQuoter(QUOTER).quoteExactOutput(
            path,
            totalVerseNeeded
        );
    }

    function testEncodePath(
        address _tokenIn,
        address _tokenMid,
        address _tokenOut,
        uint24 _fee1,
        uint24 _fee2
    )
        public
        pure
        returns (bytes memory)
    {
        return encodePath(
            _tokenIn,
            _tokenMid,
            _tokenOut,
            _fee1,
            _fee2
        );
    }

    function testEncodeDirectPath(
        address _tokenIn,
        address _tokenOut,
        uint24 _fee
    )
        public
        pure
        returns (bytes memory)
    {
        return _encodeDirectPath(
            _tokenIn,
            _tokenOut,
            _fee
        );
    }

    function _buyWithToken(
        address _scratcherContract,
        uint256 _ticketCount,
        address _inputToken,
        uint256 _maxTokenAmount,
        address _recipient
    )
        internal
    {
        require(
            _ticketCount > 0,
            "TicketRouterV3: INVALID_COUNT"
        );

        // Special case for VERSE token to skip swapping
        if (_inputToken == VERSE_TOKEN) {
            buyTickets(
                _scratcherContract,
                _ticketCount
            );

            return;
        }

        IScratchContract scratcher = IScratchContract(
            _scratcherContract
        );

        uint256 totalVerseNeeded = scratcher.baseCost()
            * _ticketCount;

        // Get required token amount
        uint256 tokenRequired = getTokenPriceForTickets(
            _scratcherContract,
            _ticketCount,
            _inputToken
        );

        require(
            _maxTokenAmount >= tokenRequired,
            "TicketRouterV3: INVALID_COUNT"
        );

        // Transfer tokens from user to this contract
        IERC20V(_inputToken).transferFrom(
            msg.sender,
            address(this),
            _maxTokenAmount
        );

        // Approve tokens for router
        IERC20V(_inputToken).approve(
            SWAP_ROUTER,
            _maxTokenAmount
        );

        uint256 amountIn;

        if (_inputToken == WETH) {
            ISwapRouter.ExactOutputSingleParams memory params = ISwapRouter.ExactOutputSingleParams({
                tokenIn: WETH,
                tokenOut: VERSE_TOKEN,
                fee: VERSE_WETH_POOL_FEE,
                recipient: address(this),
                deadline: block.timestamp,
                amountOut: totalVerseNeeded,
                amountInMaximum: _maxTokenAmount,
                sqrtPriceLimitX96: 0
            });

            amountIn = ISwapRouter(SWAP_ROUTER).exactOutputSingle(
                params
            );

        } else {

            uint24 tokenWethFee = getPoolFee(
                _inputToken
            );

            bytes memory wethToVersePath = abi.encodePacked(
                VERSE_TOKEN,
                VERSE_WETH_POOL_FEE,
                WETH
            );

            uint256 wethNeeded = IQuoter(QUOTER).quoteExactOutput(
                wethToVersePath,
                totalVerseNeeded
            );

            // Step 2: Swap input token to WETH
            ISwapRouter.ExactOutputSingleParams memory tokenToWethParams = ISwapRouter.ExactOutputSingleParams({
                tokenIn: _inputToken,
                tokenOut: WETH,
                fee: tokenWethFee,
                recipient: address(this),
                deadline: block.timestamp,
                amountOut: wethNeeded,
                amountInMaximum: _maxTokenAmount,
                sqrtPriceLimitX96: 0
            });

            amountIn = ISwapRouter(SWAP_ROUTER).exactOutputSingle(
                tokenToWethParams
            );

            // Step 3: Swap WETH to VERSE
            IERC20V(WETH).approve(
                SWAP_ROUTER,
                wethNeeded
            );

            ISwapRouter.ExactOutputSingleParams memory wethToVerseParams = ISwapRouter.ExactOutputSingleParams({
                tokenIn: WETH,
                tokenOut: VERSE_TOKEN,
                fee: VERSE_WETH_POOL_FEE,
                recipient: address(this),
                deadline: block.timestamp,
                amountOut: totalVerseNeeded,
                amountInMaximum: wethNeeded,
                sqrtPriceLimitX96: 0
            });

            ISwapRouter(SWAP_ROUTER).exactOutputSingle(
                wethToVerseParams
            );
        }

        // Refund unused tokens
        if (_maxTokenAmount > amountIn) {
            IERC20V(_inputToken).transfer(
                msg.sender,
                _maxTokenAmount - amountIn
            );
        }

        // Approve VERSE for the scratcher contract
        IERC20V(VERSE_TOKEN).approve(
            _scratcherContract,
            totalVerseNeeded
        );

        // Purchase tickets
        scratcher.bulkPurchase(
            _recipient,
            _ticketCount
        );

        emit TokenPurchase(
            _recipient,
            _inputToken,
            amountIn,
            totalVerseNeeded
        );
    }

    function buyWithToken(
        address _scratcherContract,
        uint256 _ticketCount,
        address _inputToken,
        uint256 _maxTokenAmount
    )
        public
    {
        _buyWithToken(
            _scratcherContract,
            _ticketCount,
            _inputToken,
            _maxTokenAmount,
            msg.sender
        );
    }

    function giftWithToken(
        address _scratcherContract,
        uint256 _ticketCount,
        address _inputToken,
        uint256 _maxTokenAmount,
        address _recipient
    )
        public
    {
        _buyWithToken(
            _scratcherContract,
            _ticketCount,
            _inputToken,
            _maxTokenAmount,
            _recipient
        );
    }
}

// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

interface IERC20V {

    function balanceOf(address account)
        external
        view
        returns (uint256);

    function approve(
        address spender,
        uint256 amount
    )
        external
        returns (bool);

    function transfer(
        address recipient,
        uint256 amount
    )
        external
        returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    )
        external
        returns (bool);
}

// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

import "./IERC20V.sol";

interface IWETH is IERC20V {

    function deposit()
        external
        payable;

    function withdraw(uint256)
        external;
}

// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

interface ISwapRouter {

    struct ExactInputSingleParams {
        address tokenIn;
        address tokenOut;
        uint24 fee;
        address recipient;
        uint256 deadline;
        uint256 amountIn;
        uint256 amountOutMinimum;
        uint160 sqrtPriceLimitX96;
    }

    struct ExactInputParams {
        bytes path;
        address recipient;
        uint256 deadline;
        uint256 amountIn;
        uint256 amountOutMinimum;
    }

    struct ExactOutputSingleParams {
        address tokenIn;
        address tokenOut;
        uint24 fee;
        address recipient;
        uint256 deadline;
        uint256 amountOut;
        uint256 amountInMaximum;
        uint160 sqrtPriceLimitX96;
    }

    struct ExactOutputParams {
        bytes path;
        address recipient;
        uint256 deadline;
        uint256 amountOut;
        uint256 amountInMaximum;
    }

    function exactInputSingle(
        ExactInputSingleParams calldata params
    )
        external
        payable
        returns (uint256 amountOut);

    function exactInput(
        ExactInputParams calldata params
    )
        external
        payable
        returns (uint256 amountOut);

    function exactOutputSingle(
        ExactOutputSingleParams calldata params
    )
        external
        payable
        returns (uint256 amountIn);

    function exactOutput(
        ExactOutputParams calldata params
    )
        external
        payable
        returns (uint256 amountIn);
}

// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

interface IQuoter {

    function quoteExactOutput(
        bytes memory path,
        uint256 amountOut
    )
        external
        returns (uint256 amountIn);
}

// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

interface IScratchContract {

    function bulkPurchase(
        address _receiver,
        uint256 _ticketCount
    )
        external;

    function baseCost()
        external
        view
        returns (uint256);
}

Settings
{
  "remappings": [
    "@ensdomains/=node_modules/@ensdomains/",
    "@ethereum-waffle/=node_modules/@ethereum-waffle/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "eth-gas-reporter/=node_modules/eth-gas-reporter/",
    "forge-std/=lib/forge-std/src/",
    "hardhat/=node_modules/hardhat/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "shanghai",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_verseToken","type":"address"},{"internalType":"address","name":"_swapRouter","type":"address"},{"internalType":"address","name":"_quoter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint24","name":"fee","type":"uint24"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedAmount","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DEFAULT_POOL_FEE","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QUOTER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SWAP_ROUTER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSE_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSE_WETH_POOL_FEE","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WMATIC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"scratcherContract","type":"address"},{"internalType":"uint256","name":"_ticketCount","type":"uint256"}],"name":"buyTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_scratcherContract","type":"address"},{"internalType":"uint256","name":"_ticketCount","type":"uint256"}],"name":"buyTicketsWithNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_scratcherContract","type":"address"},{"internalType":"uint256","name":"_ticketCount","type":"uint256"},{"internalType":"address","name":"_inputToken","type":"address"},{"internalType":"uint256","name":"_maxTokenAmount","type":"uint256"}],"name":"buyWithToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"customPoolFees","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_scratcherContract","type":"address"},{"internalType":"uint256","name":"_ticketCount","type":"uint256"}],"name":"getNativePriceForTickets","outputs":[{"internalType":"uint256","name":"nativeAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getPoolFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_scratcherContract","type":"address"},{"internalType":"uint256","name":"_ticketCount","type":"uint256"},{"internalType":"address","name":"_inputToken","type":"address"}],"name":"getTokenPriceForTickets","outputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"scratcherContract","type":"address"},{"internalType":"uint256","name":"_ticketCount","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"giftTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_scratcherContract","type":"address"},{"internalType":"uint256","name":"_ticketCount","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"giftTicketsWithNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_scratcherContract","type":"address"},{"internalType":"uint256","name":"_ticketCount","type":"uint256"},{"internalType":"address","name":"_inputToken","type":"address"},{"internalType":"uint256","name":"_maxTokenAmount","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"giftWithToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint24","name":"_fee","type":"uint24"}],"name":"setCustomPoolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"uint24","name":"_fee","type":"uint24"}],"name":"testEncodeDirectPath","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenMid","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"uint24","name":"_fee1","type":"uint24"},{"internalType":"uint24","name":"_fee2","type":"uint24"}],"name":"testEncodePath","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"stateMutability":"payable","type":"receive"}]

610100604052348015610010575f80fd5b50604051612fd6380380612fd683398101604081905261002f9161007e565b6001600160a01b0393841660805291831660a052821660c0521660e052600180546001600160a01b031916331790556100cf565b80516001600160a01b0381168114610079575f80fd5b919050565b5f805f8060808587031215610091575f80fd5b61009a85610063565b93506100a860208601610063565b92506100b660408601610063565b91506100c460608601610063565b905092959194509250565b60805160a05160c05160e051612d9961023d5f395f818161044f015281816107fe015281816109b001528181610bdf01528181610d85015281816112f4015261202801525f81816104f3015281816111580152818161145a015281816115a40152818161174c01528181611cbe01528181611e95015281816121410152818161226b015261241301525f818161028b0152818161064201528181610715015281816108b001528181610af1015281816112090152818161168a015281816118c201528181611a8f01528181611dd301528181611f3a015281816123510152818161259501528181612807015281816128d301526129e401525f81816104a10152818161069e015281816107670152818161090201528181610b4301528181610c5b0152818161125b015281816113ac015281816115d60152818161166501528181611d3b01528181611dae01528181611f8c015281816120c60152818161229d015261232c0152612d995ff3fe60806040526004361061014a575f3560e01c80637d1ca330116100b3578063b17419c51161006d578063c622cd8311610055578063c622cd8314610515578063e50ccd6d1461052a578063ed4df86e1461051557005b8063b17419c5146104c3578063c6005893146104e257005b80638dae88c21161009b5780638dae88c21461043e578063a301808614610471578063ad5c46481461049057005b80637d1ca3301461040c57806388f577671461041f57005b80634a144f5a116101045780634d95cad9116100ec5780634d95cad91461039957806356ff096e146103c05780636ba63846146103df57005b80634a144f5a146102d25780634ccf405b1461030257005b80633ae66b5c116101325780633ae66b5c1461022857806342fcc6fb1461024757806347c0127e1461027a57005b80630f2269c01461015357806333d7a4351461016657005b3661015157005b005b610151610161366004612a65565b610549565b348015610171575f80fd5b50610212610180366004612ab0565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606095861b811660208301527fffffff000000000000000000000000000000000000000000000000000000000060e894851b8116603484015296861b811660378301529390921b909416604b8201529390911b16604e830152805180830360420181526062909201905290565b60405161021f9190612b72565b60405180910390f35b348015610233575f80fd5b50610151610242366004612b84565b610559565b348015610252575f80fd5b50610266610261366004612bc5565b61056c565b60405162ffffff909116815260200161021f565b348015610285575f80fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161021f565b3480156102dd575f80fd5b506102666102ec366004612bc5565b5f6020819052908152604090205462ffffff1681565b34801561030d575f80fd5b5061021261031c366004612bde565b60408051606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602083015260e89390931b7fffffff00000000000000000000000000000000000000000000000000000000001660348201529390921b1660378301528051808303602b018152604b909201905290565b3480156103a4575f80fd5b506102ad730d500b1d8e8ef31e21c99d1db9a6444d3adf127081565b3480156103cb575f80fd5b506101516103da366004612c15565b6105ac565b3480156103ea575f80fd5b506103fe6103f9366004612a65565b6105c0565b60405190815260200161021f565b61015161041a366004612c5c565b610a33565b34801561042a575f80fd5b50610151610439366004612c5c565b610a42565b348015610449575f80fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b34801561047c575f80fd5b506103fe61048b366004612c5c565b610a4d565b34801561049b575f80fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ce575f80fd5b506101516104dd366004612c84565b610e0a565b3480156104ed575f80fd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b348015610520575f80fd5b50610266610bb881565b348015610535575f80fd5b50610151610544366004612a65565b610f1a565b610554838383610f25565b505050565b6105668484848433611a24565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205462ffffff16806105a357610bb86105a5565b805b9392505050565b6105b98585858585611a24565b5050505050565b5f808490505f848273ffffffffffffffffffffffffffffffffffffffff1663938225576040518163ffffffff1660e01b8152600401602060405180830381865afa158015610610573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106349190612cb5565b61063e9190612cf9565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361069c5791506105a59050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361087f576040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000606090811b821660208401527e0bb8000000000000000000000000000000000000000000000000000000000060348401527f0000000000000000000000000000000000000000000000000000000000000000901b1660378201525f90604b01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f2f80bb1d000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632f80bb1d906108359084908690600401612d10565b6020604051808303815f875af1158015610851573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108759190612cb5565b93505050506105a5565b5f6108898561056c565b604080517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000606090811b821660208401527e0bb8000000000000000000000000000000000000000000000000000000000060348401527f0000000000000000000000000000000000000000000000000000000000000000811b8216603784015260e885901b7fffffff000000000000000000000000000000000000000000000000000000000016604b84015289901b16604e8201528151808203604201815260628201928390527f2f80bb1d000000000000000000000000000000000000000000000000000000009092529192509073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632f80bb1d906109e79084908790606601612d10565b6020604051808303815f875af1158015610a03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a279190612cb5565b98975050505050505050565b610a3e828233610f25565b5050565b610a3e8282336126e3565b5f808390505f838273ffffffffffffffffffffffffffffffffffffffff1663938225576040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac19190612cb5565b610acb9190612cf9565b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000606090811b821660208401527e0bb8000000000000000000000000000000000000000000000000000000000060348401527f0000000000000000000000000000000000000000000000000000000000000000901b1660378201529091505f90604b01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f2f80bb1d00000000000000000000000000000000000000000000000000000000825291505f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632f80bb1d90610c169085908790600401612d10565b6020604051808303815f875af1158015610c32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c569190612cb5565b90505f7f0000000000000000000000000000000000000000000000000000000000000000610c97730d500b1d8e8ef31e21c99d1db9a6444d3adf127061056c565b60405160609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602083015260e81b7fffffff00000000000000000000000000000000000000000000000000000000001660348201527f0d500b1d8e8ef31e21c99d1db9a6444d3adf12700000000000000000000000006037820152604b01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f2f80bb1d000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632f80bb1d90610dbc9084908690600401612d10565b6020604051808303815f875af1158015610dd8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dfc9190612cb5565b955050505050505b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610e90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5469636b6574526f7574657256333a204e4f545f4f574e45520000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f818152602081815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000001662ffffff861690811790915591519182527f424fce24d091d223a7a9fc24c28898d088a75d9d20d30ffef7f2a252ff440967910160405180910390a25050565b6105548383836126e3565b5f8211610f8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5469636b6574526f7574657256333a20494e56414c49445f434f554e540000006044820152606401610e87565b5f8390505f838273ffffffffffffffffffffffffffffffffffffffff1663938225576040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fdd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110019190612cb5565b61100b9190612cf9565b9050730d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015611067575f80fd5b505af1158015611079573d5f803e3d5ffd5b50505050505f6110898686610a4d565b90508034101561111b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f5469636b6574526f7574657256333a20494e53554646494349454e545f4e415460448201527f4956455f43555252454e435900000000000000000000000000000000000000006064820152608401610e87565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152346024820152730d500b1d8e8ef31e21c99d1db9a6444d3adf12709063095ea7b3906044016020604051808303815f875af11580156111be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e29190612d31565b506040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000606090811b821660208401527e0bb8000000000000000000000000000000000000000000000000000000000060348401527f0000000000000000000000000000000000000000000000000000000000000000901b1660378201525f90604b01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f2f80bb1d00000000000000000000000000000000000000000000000000000000825291505f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632f80bb1d9061132b9085908890600401612d10565b6020604051808303815f875af1158015611347573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136b9190612cb5565b90505f604051806101000160405280730d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001611403730d500b1d8e8ef31e21c99d1db9a6444d3adf127061056c565b62ffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1681526020014281526020018381526020013481526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663db3e2198836040518263ffffffff1660e01b815260040161152791905f6101008201905073ffffffffffffffffffffffffffffffffffffffff80845116835280602085015116602084015262ffffff60408501511660408401528060608501511660608401526080840151608084015260a084015160a084015260c084015160c08401528060e08501511660e08401525092915050565b6020604051808303815f875af1158015611543573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115679190612cb5565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690529192507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303815f875af115801561161e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116429190612d31565b50604080516101008101825273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811682527f0000000000000000000000000000000000000000000000000000000000000000811660208301908152610bb88385019081523060608501908152426080860190815260a086018d815260c087018b81525f60e0890190815298517fdb3e2198000000000000000000000000000000000000000000000000000000008152885188166004820152955187166024870152935162ffffff1660448601529151851660648501525160848401525160a48301525160c48201529251811660e484015290917f00000000000000000000000000000000000000000000000000000000000000009091169063db3e219890610104016020604051808303815f875af1158015611795573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117b99190612cb5565b5081341115611876575f6117cd8334612d50565b6040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101829052909150730d500b1d8e8ef31e21c99d1db9a6444d3adf127090632e1a7d4d906024015f604051808303815f87803b158015611833575f80fd5b505af1158015611845573d5f803e3d5ffd5b505060405133925083156108fc02915083905f818181858888f19350505050158015611873573d5f803e3d5ffd5b50505b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018990527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611908573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061192c9190612d31565b506040517f6cd6b5e700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152602482018c9052891690636cd6b5e7906044015f604051808303815f87803b15801561199a575f80fd5b505af11580156119ac573d5f803e3d5ffd5b505060408051858152602081018b9052730d500b1d8e8ef31e21c99d1db9a6444d3adf1270935073ffffffffffffffffffffffffffffffffffffffff8d1692507f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18910160405180910390a35050505050505050505050565b5f8411611a8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5469636b6574526f7574657256333a20494e56414c49445f434f554e540000006044820152606401610e87565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aef57611aea8585610a42565b6105b9565b5f8590505f858273ffffffffffffffffffffffffffffffffffffffff1663938225576040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b629190612cb5565b611b6c9190612cf9565b90505f611b7a8888886105c0565b905080851015611be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5469636b6574526f7574657256333a20494e56414c49445f434f554e540000006044820152606401610e87565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810186905273ffffffffffffffffffffffffffffffffffffffff8716906323b872dd906064016020604051808303815f875af1158015611c5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c809190612d31565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905287169063095ea7b3906044016020604051808303815f875af1158015611d13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d379190612d31565b505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603611f0a57604080516101008101825273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811682527f0000000000000000000000000000000000000000000000000000000000000000811660208301908152610bb88385019081523060608501908152426080860190815260a086018a815260c087018e81525f60e0890190815298517fdb3e2198000000000000000000000000000000000000000000000000000000008152885188166004820152955187166024870152935162ffffff1660448601529151851660648501525160848401525160a48301525160c48201529251811660e484015290917f00000000000000000000000000000000000000000000000000000000000000009091169063db3e219890610104016020604051808303815f875af1158015611ede573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f029190612cb5565b915050612487565b5f611f148861056c565b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000606090811b821660208401527e0bb8000000000000000000000000000000000000000000000000000000000060348401527f0000000000000000000000000000000000000000000000000000000000000000901b1660378201529091505f90604b01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f2f80bb1d00000000000000000000000000000000000000000000000000000000825291505f9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632f80bb1d9061205f9085908a90600401612d10565b6020604051808303815f875af115801561207b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209f9190612cb5565b604080516101008101825273ffffffffffffffffffffffffffffffffffffffff808e1682527f00000000000000000000000000000000000000000000000000000000000000008116602083015262ffffff87168284015230606083015242608083015260a0820184905260c082018d90525f60e083015291517fdb3e2198000000000000000000000000000000000000000000000000000000008152929350917f00000000000000000000000000000000000000000000000000000000000000009091169063db3e2198906121ee9084906004015f6101008201905073ffffffffffffffffffffffffffffffffffffffff80845116835280602085015116602084015262ffffff60408501511660408401528060608501511660608401526080840151608084015260a084015160a084015260c084015160c08401528060e08501511660e08401525092915050565b6020604051808303815f875af115801561220a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061222e9190612cb5565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018590529196507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303815f875af11580156122e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123099190612d31565b50604080516101008101825273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811682527f0000000000000000000000000000000000000000000000000000000000000000811660208301908152610bb88385019081523060608501908152426080860190815260a086018e815260c087018a81525f60e0890190815298517fdb3e2198000000000000000000000000000000000000000000000000000000008152885188166004820152955187166024870152935162ffffff1660448601529151851660648501525160848401525160a48301525160c48201529251811660e484015290917f00000000000000000000000000000000000000000000000000000000000000009091169063db3e219890610104016020604051808303815f875af115801561245c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124809190612cb5565b5050505050505b808611156125495773ffffffffffffffffffffffffffffffffffffffff871663a9059cbb336124b6848a612d50565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303815f875af1158015612523573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125479190612d31565b505b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156125db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125ff9190612d31565b506040517f6cd6b5e700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018a9052851690636cd6b5e7906044015f604051808303815f87803b15801561266d575f80fd5b505af115801561267f573d5f803e3d5ffd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff808c169450891692507f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18910160405180910390a3505050505050505050565b5f821161274c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5469636b6574526f7574657256333a20494e56414c49445f434f554e540000006044820152606401610e87565b5f8390505f838273ffffffffffffffffffffffffffffffffffffffff1663938225576040518163ffffffff1660e01b8152600401602060405180830381865afa15801561279b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127bf9190612cb5565b6127c99190612cf9565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290529091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303815f875af1158015612862573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128869190612d31565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015612919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061293d9190612d31565b506040517f6cd6b5e700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201869052831690636cd6b5e7906044015f604051808303815f87803b1580156129ab575f80fd5b505af11580156129bd573d5f803e3d5ffd5b5050604080518481526020810185905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169450871692507f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18910160405180910390a35050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612a60575f80fd5b919050565b5f805f60608486031215612a77575f80fd5b612a8084612a3d565b925060208401359150612a9560408501612a3d565b90509250925092565b803562ffffff81168114612a60575f80fd5b5f805f805f60a08688031215612ac4575f80fd5b612acd86612a3d565b9450612adb60208701612a3d565b9350612ae960408701612a3d565b9250612af760608701612a9e565b9150612b0560808701612a9e565b90509295509295909350565b5f81518084525f5b81811015612b3557602081850181015186830182015201612b19565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6105a56020830184612b11565b5f805f8060808587031215612b97575f80fd5b612ba085612a3d565b935060208501359250612bb560408601612a3d565b9396929550929360600135925050565b5f60208284031215612bd5575f80fd5b6105a582612a3d565b5f805f60608486031215612bf0575f80fd5b612bf984612a3d565b9250612c0760208501612a3d565b9150612a9560408501612a9e565b5f805f805f60a08688031215612c29575f80fd5b612c3286612a3d565b945060208601359350612c4760408701612a3d565b925060608601359150612b0560808701612a3d565b5f8060408385031215612c6d575f80fd5b612c7683612a3d565b946020939093013593505050565b5f8060408385031215612c95575f80fd5b612c9e83612a3d565b9150612cac60208401612a9e565b90509250929050565b5f60208284031215612cc5575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610e0457610e04612ccc565b604081525f612d226040830185612b11565b90508260208301529392505050565b5f60208284031215612d41575f80fd5b815180151581146105a5575f80fd5b81810381811115610e0457610e04612ccc56fea2646970667358221220217361d571341738f17123d7ed2a91da25016ca95484be7adf7bd6e27144eea264736f6c634300081900330000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564000000000000000000000000b27308f9f90d607463bb33ea1bebb41c27ce5ab6

Deployed Bytecode

0x60806040526004361061014a575f3560e01c80637d1ca330116100b3578063b17419c51161006d578063c622cd8311610055578063c622cd8314610515578063e50ccd6d1461052a578063ed4df86e1461051557005b8063b17419c5146104c3578063c6005893146104e257005b80638dae88c21161009b5780638dae88c21461043e578063a301808614610471578063ad5c46481461049057005b80637d1ca3301461040c57806388f577671461041f57005b80634a144f5a116101045780634d95cad9116100ec5780634d95cad91461039957806356ff096e146103c05780636ba63846146103df57005b80634a144f5a146102d25780634ccf405b1461030257005b80633ae66b5c116101325780633ae66b5c1461022857806342fcc6fb1461024757806347c0127e1461027a57005b80630f2269c01461015357806333d7a4351461016657005b3661015157005b005b610151610161366004612a65565b610549565b348015610171575f80fd5b50610212610180366004612ab0565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606095861b811660208301527fffffff000000000000000000000000000000000000000000000000000000000060e894851b8116603484015296861b811660378301529390921b909416604b8201529390911b16604e830152805180830360420181526062909201905290565b60405161021f9190612b72565b60405180910390f35b348015610233575f80fd5b50610151610242366004612b84565b610559565b348015610252575f80fd5b50610266610261366004612bc5565b61056c565b60405162ffffff909116815260200161021f565b348015610285575f80fd5b506102ad7f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec81565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161021f565b3480156102dd575f80fd5b506102666102ec366004612bc5565b5f6020819052908152604090205462ffffff1681565b34801561030d575f80fd5b5061021261031c366004612bde565b60408051606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602083015260e89390931b7fffffff00000000000000000000000000000000000000000000000000000000001660348201529390921b1660378301528051808303602b018152604b909201905290565b3480156103a4575f80fd5b506102ad730d500b1d8e8ef31e21c99d1db9a6444d3adf127081565b3480156103cb575f80fd5b506101516103da366004612c15565b6105ac565b3480156103ea575f80fd5b506103fe6103f9366004612a65565b6105c0565b60405190815260200161021f565b61015161041a366004612c5c565b610a33565b34801561042a575f80fd5b50610151610439366004612c5c565b610a42565b348015610449575f80fd5b506102ad7f000000000000000000000000b27308f9f90d607463bb33ea1bebb41c27ce5ab681565b34801561047c575f80fd5b506103fe61048b366004612c5c565b610a4d565b34801561049b575f80fd5b506102ad7f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f61981565b3480156104ce575f80fd5b506101516104dd366004612c84565b610e0a565b3480156104ed575f80fd5b506102ad7f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156481565b348015610520575f80fd5b50610266610bb881565b348015610535575f80fd5b50610151610544366004612a65565b610f1a565b610554838383610f25565b505050565b6105668484848433611a24565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604081205462ffffff16806105a357610bb86105a5565b805b9392505050565b6105b98585858585611a24565b5050505050565b5f808490505f848273ffffffffffffffffffffffffffffffffffffffff1663938225576040518163ffffffff1660e01b8152600401602060405180830381865afa158015610610573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106349190612cb5565b61063e9190612cf9565b90507f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361069c5791506105a59050565b7f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f61973ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361087f576040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec606090811b821660208401527e0bb8000000000000000000000000000000000000000000000000000000000060348401527f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619901b1660378201525f90604b01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f2f80bb1d000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b27308f9f90d607463bb33ea1bebb41c27ce5ab61690632f80bb1d906108359084908690600401612d10565b6020604051808303815f875af1158015610851573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108759190612cb5565b93505050506105a5565b5f6108898561056c565b604080517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec606090811b821660208401527e0bb8000000000000000000000000000000000000000000000000000000000060348401527f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619811b8216603784015260e885901b7fffffff000000000000000000000000000000000000000000000000000000000016604b84015289901b16604e8201528151808203604201815260628201928390527f2f80bb1d000000000000000000000000000000000000000000000000000000009092529192509073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b27308f9f90d607463bb33ea1bebb41c27ce5ab61690632f80bb1d906109e79084908790606601612d10565b6020604051808303815f875af1158015610a03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a279190612cb5565b98975050505050505050565b610a3e828233610f25565b5050565b610a3e8282336126e3565b5f808390505f838273ffffffffffffffffffffffffffffffffffffffff1663938225576040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac19190612cb5565b610acb9190612cf9565b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec606090811b821660208401527e0bb8000000000000000000000000000000000000000000000000000000000060348401527f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619901b1660378201529091505f90604b01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f2f80bb1d00000000000000000000000000000000000000000000000000000000825291505f9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b27308f9f90d607463bb33ea1bebb41c27ce5ab61690632f80bb1d90610c169085908790600401612d10565b6020604051808303815f875af1158015610c32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c569190612cb5565b90505f7f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619610c97730d500b1d8e8ef31e21c99d1db9a6444d3adf127061056c565b60405160609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602083015260e81b7fffffff00000000000000000000000000000000000000000000000000000000001660348201527f0d500b1d8e8ef31e21c99d1db9a6444d3adf12700000000000000000000000006037820152604b01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f2f80bb1d000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b27308f9f90d607463bb33ea1bebb41c27ce5ab61690632f80bb1d90610dbc9084908690600401612d10565b6020604051808303815f875af1158015610dd8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dfc9190612cb5565b955050505050505b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610e90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5469636b6574526f7574657256333a204e4f545f4f574e45520000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f818152602081815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000001662ffffff861690811790915591519182527f424fce24d091d223a7a9fc24c28898d088a75d9d20d30ffef7f2a252ff440967910160405180910390a25050565b6105548383836126e3565b5f8211610f8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5469636b6574526f7574657256333a20494e56414c49445f434f554e540000006044820152606401610e87565b5f8390505f838273ffffffffffffffffffffffffffffffffffffffff1663938225576040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fdd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110019190612cb5565b61100b9190612cf9565b9050730d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015611067575f80fd5b505af1158015611079573d5f803e3d5ffd5b50505050505f6110898686610a4d565b90508034101561111b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f5469636b6574526f7574657256333a20494e53554646494349454e545f4e415460448201527f4956455f43555252454e435900000000000000000000000000000000000000006064820152608401610e87565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564166004820152346024820152730d500b1d8e8ef31e21c99d1db9a6444d3adf12709063095ea7b3906044016020604051808303815f875af11580156111be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e29190612d31565b506040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec606090811b821660208401527e0bb8000000000000000000000000000000000000000000000000000000000060348401527f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619901b1660378201525f90604b01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f2f80bb1d00000000000000000000000000000000000000000000000000000000825291505f9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b27308f9f90d607463bb33ea1bebb41c27ce5ab61690632f80bb1d9061132b9085908890600401612d10565b6020604051808303815f875af1158015611347573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136b9190612cb5565b90505f604051806101000160405280730d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff1681526020017f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f61973ffffffffffffffffffffffffffffffffffffffff168152602001611403730d500b1d8e8ef31e21c99d1db9a6444d3adf127061056c565b62ffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1681526020014281526020018381526020013481526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090505f7f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156473ffffffffffffffffffffffffffffffffffffffff1663db3e2198836040518263ffffffff1660e01b815260040161152791905f6101008201905073ffffffffffffffffffffffffffffffffffffffff80845116835280602085015116602084015262ffffff60408501511660408401528060608501511660608401526080840151608084015260a084015160a084015260c084015160c08401528060e08501511660e08401525092915050565b6020604051808303815f875af1158015611543573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115679190612cb5565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156481166004830152602482018690529192507f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f6199091169063095ea7b3906044016020604051808303815f875af115801561161e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116429190612d31565b50604080516101008101825273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619811682527f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec811660208301908152610bb88385019081523060608501908152426080860190815260a086018d815260c087018b81525f60e0890190815298517fdb3e2198000000000000000000000000000000000000000000000000000000008152885188166004820152955187166024870152935162ffffff1660448601529151851660648501525160848401525160a48301525160c48201529251811660e484015290917f000000000000000000000000e592427a0aece92de3edee1f18e0157c058615649091169063db3e219890610104016020604051808303815f875af1158015611795573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117b99190612cb5565b5081341115611876575f6117cd8334612d50565b6040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101829052909150730d500b1d8e8ef31e21c99d1db9a6444d3adf127090632e1a7d4d906024015f604051808303815f87803b158015611833575f80fd5b505af1158015611845573d5f803e3d5ffd5b505060405133925083156108fc02915083905f818181858888f19350505050158015611873573d5f803e3d5ffd5b50505b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152602482018990527f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec169063095ea7b3906044016020604051808303815f875af1158015611908573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061192c9190612d31565b506040517f6cd6b5e700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152602482018c9052891690636cd6b5e7906044015f604051808303815f87803b15801561199a575f80fd5b505af11580156119ac573d5f803e3d5ffd5b505060408051858152602081018b9052730d500b1d8e8ef31e21c99d1db9a6444d3adf1270935073ffffffffffffffffffffffffffffffffffffffff8d1692507f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18910160405180910390a35050505050505050505050565b5f8411611a8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5469636b6574526f7574657256333a20494e56414c49445f434f554e540000006044820152606401610e87565b7f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aef57611aea8585610a42565b6105b9565b5f8590505f858273ffffffffffffffffffffffffffffffffffffffff1663938225576040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b629190612cb5565b611b6c9190612cf9565b90505f611b7a8888886105c0565b905080851015611be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5469636b6574526f7574657256333a20494e56414c49445f434f554e540000006044820152606401610e87565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810186905273ffffffffffffffffffffffffffffffffffffffff8716906323b872dd906064016020604051808303815f875af1158015611c5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c809190612d31565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564811660048301526024820187905287169063095ea7b3906044016020604051808303815f875af1158015611d13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d379190612d31565b505f7f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f61973ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603611f0a57604080516101008101825273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619811682527f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec811660208301908152610bb88385019081523060608501908152426080860190815260a086018a815260c087018e81525f60e0890190815298517fdb3e2198000000000000000000000000000000000000000000000000000000008152885188166004820152955187166024870152935162ffffff1660448601529151851660648501525160848401525160a48301525160c48201529251811660e484015290917f000000000000000000000000e592427a0aece92de3edee1f18e0157c058615649091169063db3e219890610104016020604051808303815f875af1158015611ede573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f029190612cb5565b915050612487565b5f611f148861056c565b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec606090811b821660208401527e0bb8000000000000000000000000000000000000000000000000000000000060348401527f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619901b1660378201529091505f90604b01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f2f80bb1d00000000000000000000000000000000000000000000000000000000825291505f9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000b27308f9f90d607463bb33ea1bebb41c27ce5ab61690632f80bb1d9061205f9085908a90600401612d10565b6020604051808303815f875af115801561207b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209f9190612cb5565b604080516101008101825273ffffffffffffffffffffffffffffffffffffffff808e1682527f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f6198116602083015262ffffff87168284015230606083015242608083015260a0820184905260c082018d90525f60e083015291517fdb3e2198000000000000000000000000000000000000000000000000000000008152929350917f000000000000000000000000e592427a0aece92de3edee1f18e0157c058615649091169063db3e2198906121ee9084906004015f6101008201905073ffffffffffffffffffffffffffffffffffffffff80845116835280602085015116602084015262ffffff60408501511660408401528060608501511660608401526080840151608084015260a084015160a084015260c084015160c08401528060e08501511660e08401525092915050565b6020604051808303815f875af115801561220a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061222e9190612cb5565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156481166004830152602482018590529196507f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f6199091169063095ea7b3906044016020604051808303815f875af11580156122e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123099190612d31565b50604080516101008101825273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619811682527f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec811660208301908152610bb88385019081523060608501908152426080860190815260a086018e815260c087018a81525f60e0890190815298517fdb3e2198000000000000000000000000000000000000000000000000000000008152885188166004820152955187166024870152935162ffffff1660448601529151851660648501525160848401525160a48301525160c48201529251811660e484015290917f000000000000000000000000e592427a0aece92de3edee1f18e0157c058615649091169063db3e219890610104016020604051808303815f875af115801561245c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124809190612cb5565b5050505050505b808611156125495773ffffffffffffffffffffffffffffffffffffffff871663a9059cbb336124b6848a612d50565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303815f875af1158015612523573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125479190612d31565b505b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152602482018590527f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec169063095ea7b3906044016020604051808303815f875af11580156125db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125ff9190612d31565b506040517f6cd6b5e700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018a9052851690636cd6b5e7906044015f604051808303815f87803b15801561266d575f80fd5b505af115801561267f573d5f803e3d5ffd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff808c169450891692507f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18910160405180910390a3505050505050505050565b5f821161274c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5469636b6574526f7574657256333a20494e56414c49445f434f554e540000006044820152606401610e87565b5f8390505f838273ffffffffffffffffffffffffffffffffffffffff1663938225576040518163ffffffff1660e01b8152600401602060405180830381865afa15801561279b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127bf9190612cb5565b6127c99190612cf9565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290529091507f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec73ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303815f875af1158015612862573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128869190612d31565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018390527f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec169063095ea7b3906044016020604051808303815f875af1158015612919573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061293d9190612d31565b506040517f6cd6b5e700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201869052831690636cd6b5e7906044015f604051808303815f87803b1580156129ab575f80fd5b505af11580156129bd573d5f803e3d5ffd5b5050604080518481526020810185905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec81169450871692507f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18910160405180910390a35050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612a60575f80fd5b919050565b5f805f60608486031215612a77575f80fd5b612a8084612a3d565b925060208401359150612a9560408501612a3d565b90509250925092565b803562ffffff81168114612a60575f80fd5b5f805f805f60a08688031215612ac4575f80fd5b612acd86612a3d565b9450612adb60208701612a3d565b9350612ae960408701612a3d565b9250612af760608701612a9e565b9150612b0560808701612a9e565b90509295509295909350565b5f81518084525f5b81811015612b3557602081850181015186830182015201612b19565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6105a56020830184612b11565b5f805f8060808587031215612b97575f80fd5b612ba085612a3d565b935060208501359250612bb560408601612a3d565b9396929550929360600135925050565b5f60208284031215612bd5575f80fd5b6105a582612a3d565b5f805f60608486031215612bf0575f80fd5b612bf984612a3d565b9250612c0760208501612a3d565b9150612a9560408501612a9e565b5f805f805f60a08688031215612c29575f80fd5b612c3286612a3d565b945060208601359350612c4760408701612a3d565b925060608601359150612b0560808701612a3d565b5f8060408385031215612c6d575f80fd5b612c7683612a3d565b946020939093013593505050565b5f8060408385031215612c95575f80fd5b612c9e83612a3d565b9150612cac60208401612a9e565b90509250929050565b5f60208284031215612cc5575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082028115828204841417610e0457610e04612ccc565b604081525f612d226040830185612b11565b90508260208301529392505050565b5f60208284031215612d41575f80fd5b815180151581146105a5575f80fd5b81810381811115610e0457610e04612ccc56fea2646970667358221220217361d571341738f17123d7ed2a91da25016ca95484be7adf7bd6e27144eea264736f6c63430008190033

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

0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564000000000000000000000000b27308f9f90d607463bb33ea1bebb41c27ce5ab6

-----Decoded View---------------
Arg [0] : _weth (address): 0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619
Arg [1] : _verseToken (address): 0xc708D6F2153933DAA50B2D0758955Be0A93A8FEc
Arg [2] : _swapRouter (address): 0xE592427A0AEce92De3Edee1F18E0157C05861564
Arg [3] : _quoter (address): 0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000007ceb23fd6bc0add59e62ac25578270cff1b9f619
Arg [1] : 000000000000000000000000c708d6f2153933daa50b2d0758955be0a93a8fec
Arg [2] : 000000000000000000000000e592427a0aece92de3edee1f18e0157c05861564
Arg [3] : 000000000000000000000000b27308f9f90d607463bb33ea1bebb41c27ce5ab6


Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.