ETH Price: $2,617.95 (-0.27%)

Contract

0x8B20023accFC177D05E1c28157cEda9e49Fc51f1
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Update Route193882452024-03-08 5:04:35207 days ago1709874275IN
0x8B20023a...e49Fc51f1
0 ETH0.0015712852.23528746
Move To Chain191053792024-01-28 13:37:47246 days ago1706449067IN
0x8B20023a...e49Fc51f1
0.00023388 ETH0.0022739111.98542941
Move To Chain187427302023-12-08 16:27:47297 days ago1702052867IN
0x8B20023a...e49Fc51f1
0.00017443 ETH0.0133054759.19384719
Move To Chain187427292023-12-08 16:27:35297 days ago1702052855IN
0x8B20023a...e49Fc51f1
0.00017443 ETH0.0134181859.69529577
Move To Chain187427202023-12-08 16:25:47297 days ago1702052747IN
0x8B20023a...e49Fc51f1
0.00017443 ETH0.0133330859.31668632
Move To Chain187427192023-12-08 16:25:35297 days ago1702052735IN
0x8B20023a...e49Fc51f1
0.00017443 ETH0.0132808559.08432193
Move To Chain187427172023-12-08 16:25:11297 days ago1702052711IN
0x8B20023a...e49Fc51f1
0.00017443 ETH0.013251258.95557434
Move To Chain187184582023-12-05 6:48:23301 days ago1701758903IN
0x8B20023a...e49Fc51f1
0.00018152 ETH0.0076202840.16529726
Move To Chain187071282023-12-03 16:43:35302 days ago1701621815IN
0x8B20023a...e49Fc51f1
0.00018213 ETH0.0062459232.92128882
Move To Chain186960302023-12-02 3:27:47304 days ago1701487667IN
0x8B20023a...e49Fc51f1
0.00019005 ETH0.0055933829.4837094
Move To Chain186913752023-12-01 11:50:23305 days ago1701431423IN
0x8B20023a...e49Fc51f1
0.00018954 ETH0.006473731.30070434
Move To Chain186888672023-12-01 3:25:11305 days ago1701401111IN
0x8B20023a...e49Fc51f1
0.00019017 ETH0.0068077730.28829174
Move To Chain186888452023-12-01 3:20:47305 days ago1701400847IN
0x8B20023a...e49Fc51f1
0.00019017 ETH0.007775932.1496606
Move To Chain186860832023-11-30 18:03:59305 days ago1701367439IN
0x8B20023a...e49Fc51f1
0.00019389 ETH0.0172327776.95674689
Set Alow Chain185922722023-11-17 14:44:35318 days ago1700232275IN
0x8B20023a...e49Fc51f1
0 ETH0.0019533141.03952133
0x60806040185922712023-11-17 14:44:23318 days ago1700232263IN
 Create: Bridge
0 ETH0.0590441741.03801157

Latest 13 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
191053792024-01-28 13:37:47246 days ago1706449067
0x8B20023a...e49Fc51f1
0.00023388 ETH
187427302023-12-08 16:27:47297 days ago1702052867
0x8B20023a...e49Fc51f1
0.00017443 ETH
187427292023-12-08 16:27:35297 days ago1702052855
0x8B20023a...e49Fc51f1
0.00017443 ETH
187427202023-12-08 16:25:47297 days ago1702052747
0x8B20023a...e49Fc51f1
0.00017443 ETH
187427192023-12-08 16:25:35297 days ago1702052735
0x8B20023a...e49Fc51f1
0.00017443 ETH
187427172023-12-08 16:25:11297 days ago1702052711
0x8B20023a...e49Fc51f1
0.00017443 ETH
187184582023-12-05 6:48:23301 days ago1701758903
0x8B20023a...e49Fc51f1
0.00018152 ETH
187071282023-12-03 16:43:35302 days ago1701621815
0x8B20023a...e49Fc51f1
0.00018213 ETH
186960302023-12-02 3:27:47304 days ago1701487667
0x8B20023a...e49Fc51f1
0.00019005 ETH
186913752023-12-01 11:50:23305 days ago1701431423
0x8B20023a...e49Fc51f1
0.00018954 ETH
186888672023-12-01 3:25:11305 days ago1701401111
0x8B20023a...e49Fc51f1
0.00019017 ETH
186888452023-12-01 3:20:47305 days ago1701400847
0x8B20023a...e49Fc51f1
0.00019017 ETH
186860832023-11-30 18:03:59305 days ago1701367439
0x8B20023a...e49Fc51f1
0.00019389 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Bridge

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 13 : Bridge.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

import {Client} from "@chainlink/contracts-ccip/src/v0.8/ccip/libraries/Client.sol";
import {IRouterClient} from "@chainlink/contracts-ccip/src/v0.8/ccip/interfaces/IRouterClient.sol";
import {OwnerIsCreator} from "@chainlink/contracts-ccip/src/v0.8/shared/access/OwnerIsCreator.sol";
import "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol";
import "./interfaces/IERC20Token.sol";
import "./interfaces/ITicket.sol";
import "./CCIPReceiver.sol";

contract Bridge is CCIPReceiver, IERC1155Receiver, OwnerIsCreator {
    IERC20Token public token;
    ITicket public ticket;
    bool isMint;
    mapping(uint64 => bool) public allowChainSelector;
    event TokenMove(
        bytes32 indexed messageId,
        uint64 indexed destinationChainSelector,
        address receiver,
        bool isTicket,
        uint256 idOrAmount,
        uint256 fees
    );
    event SetAlowChain(uint64 chainSelector, bool allow);
    event UpdateRoute(address route);
    event CcipReceive(address user, bool isTicket, uint256 idOrAmount);

    constructor(
        address _router,
        address _token,
        address _ticket,
        bool _isMint
    ) CCIPReceiver(_router) {
        token = IERC20Token(_token);
        isMint = _isMint;
        ticket = ITicket(_ticket);
    }

    function updateRoute(address _route) external onlyOwner {
        i_router = _route;
        emit UpdateRoute(_route);
    }

    function _ccipReceive(
        Client.Any2EVMMessage memory any2EvmMessage
    ) internal override {
        address sender = abi.decode(any2EvmMessage.sender, (address));
        require(sender == address(this), "sender error");
        (address user, bool isTicket, uint256 idOrAmount) = abi.decode(
            any2EvmMessage.data,
            (address, bool, uint256)
        );
        emit CcipReceive(user, isTicket, idOrAmount);
        if (isTicket) {
            if (isMint) {
                ticket.mint(user, idOrAmount, 10);
            } else {
                ticket.safeTransferFrom(
                    address(this),
                    user,
                    idOrAmount,
                    10,
                    ""
                );
            }
        } else {
            if (isMint) {
                token.mint(user, idOrAmount);
            } else {
                token.transfer(user, idOrAmount);
            }
        }
    }

    function calculatedFees(
        uint64 destinationChainSelector,
        bool isTicket,
        uint256 idOrAmount
    ) external view returns (uint256) {
        Client.EVM2AnyMessage memory evm2AnyMessage = Client.EVM2AnyMessage({
            receiver: abi.encode(address(this)),
            data: abi.encode(msg.sender, isTicket, idOrAmount),
            tokenAmounts: new Client.EVMTokenAmount[](0),
            extraArgs: Client._argsToBytes(
                Client.EVMExtraArgsV1({gasLimit: 200_000, strict: false})
            ),
            feeToken: address(0)
        });
        return
            IRouterClient(i_router).getFee(
                destinationChainSelector,
                evm2AnyMessage
            );
    }

    function moveToChain(
        uint64 destinationChainSelector,
        bool isTicket,
        uint256 idOrAmount
    ) external payable returns (bytes32 messageId) {
        require(
            allowChainSelector[destinationChainSelector],
            "not allow chain"
        );
        if (isTicket) {
            ticket.safeTransferFrom(
                msg.sender,
                address(this),
                idOrAmount,
                10,
                ""
            );
            if (isMint) {
                ticket.burn(idOrAmount);
            }
        } else {
            token.transferFrom(msg.sender, address(this), idOrAmount);
            if (isMint) {
                token.burn(idOrAmount);
            }
        }
        Client.EVM2AnyMessage memory evm2AnyMessage = Client.EVM2AnyMessage({
            receiver: abi.encode(address(this)),
            data: abi.encode(msg.sender, isTicket, idOrAmount),
            tokenAmounts: new Client.EVMTokenAmount[](0),
            extraArgs: Client._argsToBytes(
                Client.EVMExtraArgsV1({gasLimit: 200_000, strict: false})
            ),
            feeToken: address(0)
        });
        uint256 fees = IRouterClient(i_router).getFee(
            destinationChainSelector,
            evm2AnyMessage
        );
        require(msg.value >= fees, "Insufficient funds");
        if (msg.value - fees > 0) {
            bool success = payable(msg.sender).send(msg.value - fees);
            require(success, "Transfer failed");
        }
        messageId = IRouterClient(i_router).ccipSend{value: fees}(
            destinationChainSelector,
            evm2AnyMessage
        );
        emit TokenMove(
            messageId,
            destinationChainSelector,
            msg.sender,
            isTicket,
            idOrAmount,
            fees
        );
        return messageId;
    }

    function setAlowChain(uint64 chainSelector, bool allow) external onlyOwner {
        allowChainSelector[chainSelector] = allow;
        emit SetAlowChain(chainSelector, allow);
    }

    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes calldata
    ) external pure returns (bytes4) {
        return IERC1155Receiver.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] calldata,
        uint256[] calldata,
        bytes calldata
    ) external pure returns (bytes4) {
        return IERC1155Receiver.onERC1155BatchReceived.selector;
    }
}

File 2 of 13 : IAny2EVMMessageReceiver.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {Client} from "../libraries/Client.sol";

/// @notice Application contracts that intend to receive messages from
/// the router should implement this interface.
interface IAny2EVMMessageReceiver {
  /// @notice Called by the Router to deliver a message.
  /// If this reverts, any token transfers also revert. The message
  /// will move to a FAILED state and become available for manual execution.
  /// @param message CCIP Message
  /// @dev Note ensure you check the msg.sender is the OffRampRouter
  function ccipReceive(Client.Any2EVMMessage calldata message) external;
}

File 3 of 13 : IRouterClient.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {Client} from "../libraries/Client.sol";

interface IRouterClient {
  error UnsupportedDestinationChain(uint64 destChainSelector);
  error InsufficientFeeTokenAmount();
  error InvalidMsgValue();

  /// @notice Checks if the given chain ID is supported for sending/receiving.
  /// @param chainSelector The chain to check.
  /// @return supported is true if it is supported, false if not.
  function isChainSupported(uint64 chainSelector) external view returns (bool supported);

  /// @notice Gets a list of all supported tokens which can be sent or received
  /// to/from a given chain id.
  /// @param chainSelector The chainSelector.
  /// @return tokens The addresses of all tokens that are supported.
  function getSupportedTokens(uint64 chainSelector) external view returns (address[] memory tokens);

  /// @param destinationChainSelector The destination chainSelector
  /// @param message The cross-chain CCIP message including data and/or tokens
  /// @return fee returns guaranteed execution fee for the specified message
  /// delivery to destination chain
  /// @dev returns 0 fee on invalid message.
  function getFee(
    uint64 destinationChainSelector,
    Client.EVM2AnyMessage memory message
  ) external view returns (uint256 fee);

  /// @notice Request a message to be sent to the destination chain
  /// @param destinationChainSelector The destination chain ID
  /// @param message The cross-chain CCIP message including data and/or tokens
  /// @return messageId The message ID
  /// @dev Note if msg.value is larger than the required fee (from getFee) we accept
  /// the overpayment with no refund.
  function ccipSend(
    uint64 destinationChainSelector,
    Client.EVM2AnyMessage calldata message
  ) external payable returns (bytes32);
}

File 4 of 13 : Client.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// End consumer library.
library Client {
  struct EVMTokenAmount {
    address token; // token address on the local chain.
    uint256 amount; // Amount of tokens.
  }

  struct Any2EVMMessage {
    bytes32 messageId; // MessageId corresponding to ccipSend on source.
    uint64 sourceChainSelector; // Source chain selector.
    bytes sender; // abi.decode(sender) if coming from an EVM chain.
    bytes data; // payload sent in original message.
    EVMTokenAmount[] destTokenAmounts; // Tokens and their amounts in their destination chain representation.
  }

  // If extraArgs is empty bytes, the default is 200k gas limit and strict = false.
  struct EVM2AnyMessage {
    bytes receiver; // abi.encode(receiver address) for dest EVM chains
    bytes data; // Data payload
    EVMTokenAmount[] tokenAmounts; // Token transfers
    address feeToken; // Address of feeToken. address(0) means you will send msg.value.
    bytes extraArgs; // Populate this with _argsToBytes(EVMExtraArgsV1)
  }

  // extraArgs will evolve to support new features
  // bytes4(keccak256("CCIP EVMExtraArgsV1"));
  bytes4 public constant EVM_EXTRA_ARGS_V1_TAG = 0x97a657c9;
  struct EVMExtraArgsV1 {
    uint256 gasLimit; // ATTENTION!!! MAX GAS LIMIT 4M FOR BETA TESTING
    bool strict; // See strict sequencing details below.
  }

  function _argsToBytes(EVMExtraArgsV1 memory extraArgs) internal pure returns (bytes memory bts) {
    return abi.encodeWithSelector(EVM_EXTRA_ARGS_V1_TAG, extraArgs);
  }
}

File 5 of 13 : ConfirmedOwner.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ConfirmedOwnerWithProposal.sol";

/**
 * @title The ConfirmedOwner contract
 * @notice A contract with helpers for basic contract ownership.
 */
contract ConfirmedOwner is ConfirmedOwnerWithProposal {
  constructor(address newOwner) ConfirmedOwnerWithProposal(newOwner, address(0)) {}
}

File 6 of 13 : ConfirmedOwnerWithProposal.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./interfaces/OwnableInterface.sol";

/**
 * @title The ConfirmedOwner contract
 * @notice A contract with helpers for basic contract ownership.
 */
contract ConfirmedOwnerWithProposal is OwnableInterface {
  address private s_owner;
  address private s_pendingOwner;

  event OwnershipTransferRequested(address indexed from, address indexed to);
  event OwnershipTransferred(address indexed from, address indexed to);

  constructor(address newOwner, address pendingOwner) {
    require(newOwner != address(0), "Cannot set owner to zero");

    s_owner = newOwner;
    if (pendingOwner != address(0)) {
      _transferOwnership(pendingOwner);
    }
  }

  /**
   * @notice Allows an owner to begin transferring ownership to a new address,
   * pending.
   */
  function transferOwnership(address to) public override onlyOwner {
    _transferOwnership(to);
  }

  /**
   * @notice Allows an ownership transfer to be completed by the recipient.
   */
  function acceptOwnership() external override {
    require(msg.sender == s_pendingOwner, "Must be proposed owner");

    address oldOwner = s_owner;
    s_owner = msg.sender;
    s_pendingOwner = address(0);

    emit OwnershipTransferred(oldOwner, msg.sender);
  }

  /**
   * @notice Get the current owner
   */
  function owner() public view override returns (address) {
    return s_owner;
  }

  /**
   * @notice validate, transfer ownership, and emit relevant events
   */
  function _transferOwnership(address to) private {
    require(to != msg.sender, "Cannot transfer to self");

    s_pendingOwner = to;

    emit OwnershipTransferRequested(s_owner, to);
  }

  /**
   * @notice validate access
   */
  function _validateOwnership() internal view {
    require(msg.sender == s_owner, "Only callable by owner");
  }

  /**
   * @notice Reverts if called by anyone other than the contract owner.
   */
  modifier onlyOwner() {
    _validateOwnership();
    _;
  }
}

File 7 of 13 : OwnableInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface OwnableInterface {
  function owner() external returns (address);

  function transferOwnership(address recipient) external;

  function acceptOwnership() external;
}

File 8 of 13 : OwnerIsCreator.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {ConfirmedOwner} from "../../ConfirmedOwner.sol";

/// @title The OwnerIsCreator contract
/// @notice A contract with helpers for basic contract ownership.
contract OwnerIsCreator is ConfirmedOwner {
  constructor() ConfirmedOwner(msg.sender) {}
}

File 9 of 13 : IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 10 of 13 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 11 of 13 : CCIPReceiver.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {IAny2EVMMessageReceiver} from "@chainlink/contracts-ccip/src/v0.8/ccip/interfaces/IAny2EVMMessageReceiver.sol";
import {Client} from "@chainlink/contracts-ccip/src/v0.8/ccip/libraries/Client.sol";
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";

abstract contract CCIPReceiver is IAny2EVMMessageReceiver, IERC165 {
    address i_router;

    constructor(address router) {
        if (router == address(0)) revert InvalidRouter(address(0));
        i_router = router;
    }

    function supportsInterface(
        bytes4 interfaceId
    ) public pure override returns (bool) {
        return
            interfaceId == type(IAny2EVMMessageReceiver).interfaceId ||
            interfaceId == type(IERC165).interfaceId;
    }

    function ccipReceive(
        Client.Any2EVMMessage calldata message
    ) external virtual override onlyRouter {
        _ccipReceive(message);
    }

    function _ccipReceive(
        Client.Any2EVMMessage memory message
    ) internal virtual;

    function getRouter() public view returns (address) {
        return address(i_router);
    }

    error InvalidRouter(address router);

    modifier onlyRouter() {
        if (msg.sender != address(i_router)) revert InvalidRouter(msg.sender);
        _;
    }
}

File 12 of 13 : IERC20Token.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

interface IERC20Token {
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    function mint(address _user, uint256 _amount) external;

    function burn(uint256 _amount) external;

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

File 13 of 13 : ITicket.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface ITicket {
    function mint(address to, uint256 tokenId, uint256 amount) external;

    function burn(uint256 tokenId) external;

    function use(address user, uint256 tokenId, uint256 expires) external;

    function recover(address user, uint256 tokenId) external;

    function frozeOf(uint256 id) external view returns (bool);

    function ticketCount(address user) external view returns (uint256);

    function freeze(uint256 tokenId, address from) external;

    function unfreeze(uint256 tokenId) external;

    function setVault(address _cds) external;

    function setMiner(address _miner) external;

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) external;
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_ticket","type":"address"},{"internalType":"bool","name":"_isMint","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"InvalidRouter","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"isTicket","type":"bool"},{"indexed":false,"internalType":"uint256","name":"idOrAmount","type":"uint256"}],"name":"CcipReceive","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"chainSelector","type":"uint64"},{"indexed":false,"internalType":"bool","name":"allow","type":"bool"}],"name":"SetAlowChain","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"messageId","type":"bytes32"},{"indexed":true,"internalType":"uint64","name":"destinationChainSelector","type":"uint64"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"bool","name":"isTicket","type":"bool"},{"indexed":false,"internalType":"uint256","name":"idOrAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fees","type":"uint256"}],"name":"TokenMove","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"route","type":"address"}],"name":"UpdateRoute","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"","type":"uint64"}],"name":"allowChainSelector","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"destinationChainSelector","type":"uint64"},{"internalType":"bool","name":"isTicket","type":"bool"},{"internalType":"uint256","name":"idOrAmount","type":"uint256"}],"name":"calculatedFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32","name":"messageId","type":"bytes32"},{"internalType":"uint64","name":"sourceChainSelector","type":"uint64"},{"internalType":"bytes","name":"sender","type":"bytes"},{"internalType":"bytes","name":"data","type":"bytes"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Client.EVMTokenAmount[]","name":"destTokenAmounts","type":"tuple[]"}],"internalType":"struct Client.Any2EVMMessage","name":"message","type":"tuple"}],"name":"ccipReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"destinationChainSelector","type":"uint64"},{"internalType":"bool","name":"isTicket","type":"bool"},{"internalType":"uint256","name":"idOrAmount","type":"uint256"}],"name":"moveToChain","outputs":[{"internalType":"bytes32","name":"messageId","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"chainSelector","type":"uint64"},{"internalType":"bool","name":"allow","type":"bool"}],"name":"setAlowChain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"ticket","outputs":[{"internalType":"contract ITicket","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20Token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_route","type":"address"}],"name":"updateRoute","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620019d5380380620019d5833981016040819052620000349162000221565b33806000866001600160a01b03811662000069576040516335fdcccd60e21b8152600060048201526024015b60405180910390fd5b600080546001600160a01b0319166001600160a01b039283161790558216620000d55760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f0000000000000000604482015260640162000060565b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200010857620001088162000158565b5050600380546001600160a01b039586166001600160a01b0319918216179091556004805494909516921515600160a01b02166001600160a81b0319909316929092171790915550620002849050565b336001600160a01b03821603620001b25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000060565b600280546001600160a01b0319166001600160a01b03838116918217909255600154604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b80516001600160a01b03811681146200021c57600080fd5b919050565b600080600080608085870312156200023857600080fd5b620002438562000204565b9350620002536020860162000204565b9250620002636040860162000204565b9150606085015180151581146200027957600080fd5b939692955090935050565b61174180620002946000396000f3fe6080604052600436106100e85760003560e01c8063bc197c811161008a578063f23a6e6111610059578063f23a6e61146102a6578063f2fde38b146102d3578063f9dab630146102f3578063fc0c546a1461031357600080fd5b8063bc197c81146101ed578063cc384ff914610235578063e74ac9dc14610265578063e7c600aa1461028557600080fd5b806379ba5097116100c657806379ba50971461017c57806385572ffb146101915780638da5cb5b146101b1578063b0f479a1146101cf57600080fd5b806301ffc9a7146100ed57806341c9a6f4146101225780636cc25db714610144575b600080fd5b3480156100f957600080fd5b5061010d610108366004610f89565b610333565b60405190151581526020015b60405180910390f35b34801561012e57600080fd5b5061014261013d366004610fe4565b61036a565b005b34801561015057600080fd5b50600454610164906001600160a01b031681565b6040516001600160a01b039091168152602001610119565b34801561018857600080fd5b506101426103d5565b34801561019d57600080fd5b506101426101ac36600461101b565b610488565b3480156101bd57600080fd5b506001546001600160a01b0316610164565b3480156101db57600080fd5b506000546001600160a01b0316610164565b3480156101f957600080fd5b5061021c6102083660046110f6565b63bc197c8160e01b98975050505050505050565b6040516001600160e01b03199091168152602001610119565b34801561024157600080fd5b5061010d6102503660046111b4565b60056020526000908152604090205460ff1681565b34801561027157600080fd5b506101426102803660046111cf565b6104c9565b6102986102933660046111ec565b610525565b604051908152602001610119565b3480156102b257600080fd5b5061021c6102c136600461122b565b63f23a6e6160e01b9695505050505050565b3480156102df57600080fd5b506101426102ee3660046111cf565b610a5a565b3480156102ff57600080fd5b5061029861030e3660046111ec565b610a6b565b34801561031f57600080fd5b50600354610164906001600160a01b031681565b60006001600160e01b031982166385572ffb60e01b148061036457506001600160e01b031982166301ffc9a760e01b145b92915050565b610372610bdf565b6001600160401b038216600081815260056020908152604091829020805460ff19168515159081179091558251938452908301527f8448c40fb1d6624264ad02e0e024112ed439c58fa311d59f8598fefc611d4a69910160405180910390a15050565b6002546001600160a01b0316331461042d5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b60448201526064015b60405180910390fd5b600180546001600160a01b0319808216339081179093556002805490911690556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b6000546001600160a01b031633146104b5576040516335fdcccd60e21b8152336004820152602401610424565b6104c66104c182611451565b610c34565b50565b6104d1610bdf565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527fe5f1cffb832786ba0fe71c16d4a6dc793c0fd634f29ec02e52de8e8f20db36169060200160405180910390a150565b6001600160401b03831660009081526005602052604081205460ff1661057f5760405162461bcd60e51b815260206004820152600f60248201526e3737ba1030b63637bb9031b430b4b760891b6044820152606401610424565b82156106635760048054604051637921219560e11b81526001600160a01b039091169163f242432a916105bb91339130918891600a91016114fd565b600060405180830381600087803b1580156105d557600080fd5b505af11580156105e9573d6000803e3d6000fd5b5050600454600160a01b900460ff1615915061065e90505760048054604051630852cd8d60e31b81529182018490526001600160a01b0316906342966c6890602401600060405180830381600087803b15801561064557600080fd5b505af1158015610659573d6000803e3d6000fd5b505050505b610750565b6003546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de9190611535565b50600454600160a01b900460ff161561075057600354604051630852cd8d60e31b8152600481018490526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561073757600080fd5b505af115801561074b573d6000803e3d6000fd5b505050505b6040805160a081019091523060c08201526000908060e0810160405160208183030381529060405281526020013386866040516020016107ae939291906001600160a01b039390931683529015156020830152604082015260600190565b60408051601f198184030181529190528152602001600060405190808252806020026020018201604052801561080a57816020015b60408051808201909152600080825260208201528152602001906001900390816107e35790505b50815260200160006001600160a01b03168152602001610843604051806040016040528062030d40815260200160001515815250610e95565b9052600080546040516320487ded60e01b815292935090916001600160a01b03909116906320487ded9061087d9089908690600401611598565b602060405180830381865afa15801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190611671565b9050803410156109055760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610424565b6000610911823461168a565b1115610981576000336108fc610927843461168a565b6040518115909202916000818181858888f1935050505090508061097f5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610424565b505b6000546040516396f4e9f960e01b81526001600160a01b03909116906396f4e9f99083906109b5908a908790600401611598565b60206040518083038185885af11580156109d3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109f89190611671565b604080513381528715156020820152908101869052606081018390529093506001600160401b0387169084907fc5a3560d3ddae7d1dfd83ad6472f7097105d75b76c7f896ffd5309981196b8759060800160405180910390a350509392505050565b610a62610bdf565b6104c681610edf565b6040805160a081019091523060c082015260009081908060e081016040516020818303038152906040528152602001338686604051602001610acb939291906001600160a01b039390931683529015156020830152604082015260600190565b60408051601f1981840301815291905281526020016000604051908082528060200260200182016040528015610b2757816020015b6040805180820190915260008082526020820152815260200190600190039081610b005790505b50815260200160006001600160a01b03168152602001610b60604051806040016040528062030d40815260200160001515815250610e95565b90526000546040516320487ded60e01b81529192506001600160a01b0316906320487ded90610b959088908590600401611598565b602060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190611671565b95945050505050565b6001546001600160a01b03163314610c325760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610424565b565b60008160400151806020019051810190610c4e91906116ab565b90506001600160a01b0381163014610c975760405162461bcd60e51b815260206004820152600c60248201526b39b2b73232b91032b93937b960a11b6044820152606401610424565b60008060008460600151806020019051810190610cb491906116c8565b604080516001600160a01b0385168152831515602082015290810182905292955090935091507fafba9a639e28cb81704d8050adbfc0ded6623aed00fe76af1b9e2654495998c09060600160405180910390a18115610dca57600454600160a01b900460ff1615610d945760048054604051630ab714fb60e11b81526001600160a01b038681169382019390935260248101849052600a604482015291169063156e29f6906064015b600060405180830381600087803b158015610d7757600080fd5b505af1158015610d8b573d6000803e3d6000fd5b50505050610e8e565b60048054604051637921219560e11b81526001600160a01b039091169163f242432a91610d5d91309188918791600a91016114fd565b600454600160a01b900460ff1615610e15576003546040516340c10f1960e01b81526001600160a01b03858116600483015260248201849052909116906340c10f1990604401610d5d565b60035460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610e68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8c9190611535565b505b5050505050565b6040805182516024820152602092830151151560448083019190915282518083039091018152606490910190915290810180516001600160e01b03166397a657c960e01b17905290565b336001600160a01b03821603610f375760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610424565b600280546001600160a01b0319166001600160a01b03838116918217909255600154604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b600060208284031215610f9b57600080fd5b81356001600160e01b031981168114610fb357600080fd5b9392505050565b80356001600160401b0381168114610fd157600080fd5b919050565b80151581146104c657600080fd5b60008060408385031215610ff757600080fd5b61100083610fba565b9150602083013561101081610fd6565b809150509250929050565b60006020828403121561102d57600080fd5b81356001600160401b0381111561104357600080fd5b820160a08185031215610fb357600080fd5b6001600160a01b03811681146104c657600080fd5b60008083601f84011261107c57600080fd5b5081356001600160401b0381111561109357600080fd5b6020830191508360208260051b85010111156110ae57600080fd5b9250929050565b60008083601f8401126110c757600080fd5b5081356001600160401b038111156110de57600080fd5b6020830191508360208285010111156110ae57600080fd5b60008060008060008060008060a0898b03121561111257600080fd5b883561111d81611055565b9750602089013561112d81611055565b965060408901356001600160401b038082111561114957600080fd5b6111558c838d0161106a565b909850965060608b013591508082111561116e57600080fd5b61117a8c838d0161106a565b909650945060808b013591508082111561119357600080fd5b506111a08b828c016110b5565b999c989b5096995094979396929594505050565b6000602082840312156111c657600080fd5b610fb382610fba565b6000602082840312156111e157600080fd5b8135610fb381611055565b60008060006060848603121561120157600080fd5b61120a84610fba565b9250602084013561121a81610fd6565b929592945050506040919091013590565b60008060008060008060a0878903121561124457600080fd5b863561124f81611055565b9550602087013561125f81611055565b9450604087013593506060870135925060808701356001600160401b0381111561128857600080fd5b61129489828a016110b5565b979a9699509497509295939492505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156112de576112de6112a6565b60405290565b60405160a081016001600160401b03811182821017156112de576112de6112a6565b604051601f8201601f191681016001600160401b038111828210171561132e5761132e6112a6565b604052919050565b600082601f83011261134757600080fd5b81356001600160401b03811115611360576113606112a6565b611373601f8201601f1916602001611306565b81815284602083860101111561138857600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126113b657600080fd5b813560206001600160401b038211156113d1576113d16112a6565b6113df818360051b01611306565b82815260069290921b840181019181810190868411156113fe57600080fd5b8286015b84811015611446576040818903121561141b5760008081fd5b6114236112bc565b813561142e81611055565b81528185013585820152835291830191604001611402565b509695505050505050565b600060a0823603121561146357600080fd5b61146b6112e4565b8235815261147b60208401610fba565b602082015260408301356001600160401b038082111561149a57600080fd5b6114a636838701611336565b604084015260608501359150808211156114bf57600080fd5b6114cb36838701611336565b606084015260808501359150808211156114e457600080fd5b506114f1368286016113a5565b60808301525092915050565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b60006020828403121561154757600080fd5b8151610fb381610fd6565b6000815180845260005b818110156115785760208185018101518683018201520161155c565b506000602082860101526020601f19601f83011685010191505092915050565b600060406001600160401b038516835260208181850152845160a0838601526115c460e0860182611552565b905081860151603f19808784030160608801526115e18383611552565b88860151888203830160808a01528051808352908601945060009350908501905b8084101561163457845180516001600160a01b0316835286015186830152938501936001939093019290860190611602565b5060608901516001600160a01b031660a08901526080890151888203830160c08a015295506116638187611552565b9a9950505050505050505050565b60006020828403121561168357600080fd5b5051919050565b8181038181111561036457634e487b7160e01b600052601160045260246000fd5b6000602082840312156116bd57600080fd5b8151610fb381611055565b6000806000606084860312156116dd57600080fd5b83516116e881611055565b60208501519093506116f981610fd6565b8092505060408401519050925092509256fea2646970667358221220bde0010175c11ee8287cfb2d240aef3fc2c3454e8983acb2a0d65fb4d56c9f7864736f6c63430008120033000000000000000000000000e561d5e02207fb5eb32cca20a699e0d8919a14760000000000000000000000006f6a40a7149b4b4f6568c46a0c5a98927a00e9f1000000000000000000000000f8522853bd9ae4d1215814d81e4f66dc34e444720000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106100e85760003560e01c8063bc197c811161008a578063f23a6e6111610059578063f23a6e61146102a6578063f2fde38b146102d3578063f9dab630146102f3578063fc0c546a1461031357600080fd5b8063bc197c81146101ed578063cc384ff914610235578063e74ac9dc14610265578063e7c600aa1461028557600080fd5b806379ba5097116100c657806379ba50971461017c57806385572ffb146101915780638da5cb5b146101b1578063b0f479a1146101cf57600080fd5b806301ffc9a7146100ed57806341c9a6f4146101225780636cc25db714610144575b600080fd5b3480156100f957600080fd5b5061010d610108366004610f89565b610333565b60405190151581526020015b60405180910390f35b34801561012e57600080fd5b5061014261013d366004610fe4565b61036a565b005b34801561015057600080fd5b50600454610164906001600160a01b031681565b6040516001600160a01b039091168152602001610119565b34801561018857600080fd5b506101426103d5565b34801561019d57600080fd5b506101426101ac36600461101b565b610488565b3480156101bd57600080fd5b506001546001600160a01b0316610164565b3480156101db57600080fd5b506000546001600160a01b0316610164565b3480156101f957600080fd5b5061021c6102083660046110f6565b63bc197c8160e01b98975050505050505050565b6040516001600160e01b03199091168152602001610119565b34801561024157600080fd5b5061010d6102503660046111b4565b60056020526000908152604090205460ff1681565b34801561027157600080fd5b506101426102803660046111cf565b6104c9565b6102986102933660046111ec565b610525565b604051908152602001610119565b3480156102b257600080fd5b5061021c6102c136600461122b565b63f23a6e6160e01b9695505050505050565b3480156102df57600080fd5b506101426102ee3660046111cf565b610a5a565b3480156102ff57600080fd5b5061029861030e3660046111ec565b610a6b565b34801561031f57600080fd5b50600354610164906001600160a01b031681565b60006001600160e01b031982166385572ffb60e01b148061036457506001600160e01b031982166301ffc9a760e01b145b92915050565b610372610bdf565b6001600160401b038216600081815260056020908152604091829020805460ff19168515159081179091558251938452908301527f8448c40fb1d6624264ad02e0e024112ed439c58fa311d59f8598fefc611d4a69910160405180910390a15050565b6002546001600160a01b0316331461042d5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b60448201526064015b60405180910390fd5b600180546001600160a01b0319808216339081179093556002805490911690556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b6000546001600160a01b031633146104b5576040516335fdcccd60e21b8152336004820152602401610424565b6104c66104c182611451565b610c34565b50565b6104d1610bdf565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527fe5f1cffb832786ba0fe71c16d4a6dc793c0fd634f29ec02e52de8e8f20db36169060200160405180910390a150565b6001600160401b03831660009081526005602052604081205460ff1661057f5760405162461bcd60e51b815260206004820152600f60248201526e3737ba1030b63637bb9031b430b4b760891b6044820152606401610424565b82156106635760048054604051637921219560e11b81526001600160a01b039091169163f242432a916105bb91339130918891600a91016114fd565b600060405180830381600087803b1580156105d557600080fd5b505af11580156105e9573d6000803e3d6000fd5b5050600454600160a01b900460ff1615915061065e90505760048054604051630852cd8d60e31b81529182018490526001600160a01b0316906342966c6890602401600060405180830381600087803b15801561064557600080fd5b505af1158015610659573d6000803e3d6000fd5b505050505b610750565b6003546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de9190611535565b50600454600160a01b900460ff161561075057600354604051630852cd8d60e31b8152600481018490526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561073757600080fd5b505af115801561074b573d6000803e3d6000fd5b505050505b6040805160a081019091523060c08201526000908060e0810160405160208183030381529060405281526020013386866040516020016107ae939291906001600160a01b039390931683529015156020830152604082015260600190565b60408051601f198184030181529190528152602001600060405190808252806020026020018201604052801561080a57816020015b60408051808201909152600080825260208201528152602001906001900390816107e35790505b50815260200160006001600160a01b03168152602001610843604051806040016040528062030d40815260200160001515815250610e95565b9052600080546040516320487ded60e01b815292935090916001600160a01b03909116906320487ded9061087d9089908690600401611598565b602060405180830381865afa15801561089a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108be9190611671565b9050803410156109055760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610424565b6000610911823461168a565b1115610981576000336108fc610927843461168a565b6040518115909202916000818181858888f1935050505090508061097f5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610424565b505b6000546040516396f4e9f960e01b81526001600160a01b03909116906396f4e9f99083906109b5908a908790600401611598565b60206040518083038185885af11580156109d3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109f89190611671565b604080513381528715156020820152908101869052606081018390529093506001600160401b0387169084907fc5a3560d3ddae7d1dfd83ad6472f7097105d75b76c7f896ffd5309981196b8759060800160405180910390a350509392505050565b610a62610bdf565b6104c681610edf565b6040805160a081019091523060c082015260009081908060e081016040516020818303038152906040528152602001338686604051602001610acb939291906001600160a01b039390931683529015156020830152604082015260600190565b60408051601f1981840301815291905281526020016000604051908082528060200260200182016040528015610b2757816020015b6040805180820190915260008082526020820152815260200190600190039081610b005790505b50815260200160006001600160a01b03168152602001610b60604051806040016040528062030d40815260200160001515815250610e95565b90526000546040516320487ded60e01b81529192506001600160a01b0316906320487ded90610b959088908590600401611598565b602060405180830381865afa158015610bb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd69190611671565b95945050505050565b6001546001600160a01b03163314610c325760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610424565b565b60008160400151806020019051810190610c4e91906116ab565b90506001600160a01b0381163014610c975760405162461bcd60e51b815260206004820152600c60248201526b39b2b73232b91032b93937b960a11b6044820152606401610424565b60008060008460600151806020019051810190610cb491906116c8565b604080516001600160a01b0385168152831515602082015290810182905292955090935091507fafba9a639e28cb81704d8050adbfc0ded6623aed00fe76af1b9e2654495998c09060600160405180910390a18115610dca57600454600160a01b900460ff1615610d945760048054604051630ab714fb60e11b81526001600160a01b038681169382019390935260248101849052600a604482015291169063156e29f6906064015b600060405180830381600087803b158015610d7757600080fd5b505af1158015610d8b573d6000803e3d6000fd5b50505050610e8e565b60048054604051637921219560e11b81526001600160a01b039091169163f242432a91610d5d91309188918791600a91016114fd565b600454600160a01b900460ff1615610e15576003546040516340c10f1960e01b81526001600160a01b03858116600483015260248201849052909116906340c10f1990604401610d5d565b60035460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610e68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8c9190611535565b505b5050505050565b6040805182516024820152602092830151151560448083019190915282518083039091018152606490910190915290810180516001600160e01b03166397a657c960e01b17905290565b336001600160a01b03821603610f375760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610424565b600280546001600160a01b0319166001600160a01b03838116918217909255600154604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b600060208284031215610f9b57600080fd5b81356001600160e01b031981168114610fb357600080fd5b9392505050565b80356001600160401b0381168114610fd157600080fd5b919050565b80151581146104c657600080fd5b60008060408385031215610ff757600080fd5b61100083610fba565b9150602083013561101081610fd6565b809150509250929050565b60006020828403121561102d57600080fd5b81356001600160401b0381111561104357600080fd5b820160a08185031215610fb357600080fd5b6001600160a01b03811681146104c657600080fd5b60008083601f84011261107c57600080fd5b5081356001600160401b0381111561109357600080fd5b6020830191508360208260051b85010111156110ae57600080fd5b9250929050565b60008083601f8401126110c757600080fd5b5081356001600160401b038111156110de57600080fd5b6020830191508360208285010111156110ae57600080fd5b60008060008060008060008060a0898b03121561111257600080fd5b883561111d81611055565b9750602089013561112d81611055565b965060408901356001600160401b038082111561114957600080fd5b6111558c838d0161106a565b909850965060608b013591508082111561116e57600080fd5b61117a8c838d0161106a565b909650945060808b013591508082111561119357600080fd5b506111a08b828c016110b5565b999c989b5096995094979396929594505050565b6000602082840312156111c657600080fd5b610fb382610fba565b6000602082840312156111e157600080fd5b8135610fb381611055565b60008060006060848603121561120157600080fd5b61120a84610fba565b9250602084013561121a81610fd6565b929592945050506040919091013590565b60008060008060008060a0878903121561124457600080fd5b863561124f81611055565b9550602087013561125f81611055565b9450604087013593506060870135925060808701356001600160401b0381111561128857600080fd5b61129489828a016110b5565b979a9699509497509295939492505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156112de576112de6112a6565b60405290565b60405160a081016001600160401b03811182821017156112de576112de6112a6565b604051601f8201601f191681016001600160401b038111828210171561132e5761132e6112a6565b604052919050565b600082601f83011261134757600080fd5b81356001600160401b03811115611360576113606112a6565b611373601f8201601f1916602001611306565b81815284602083860101111561138857600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126113b657600080fd5b813560206001600160401b038211156113d1576113d16112a6565b6113df818360051b01611306565b82815260069290921b840181019181810190868411156113fe57600080fd5b8286015b84811015611446576040818903121561141b5760008081fd5b6114236112bc565b813561142e81611055565b81528185013585820152835291830191604001611402565b509695505050505050565b600060a0823603121561146357600080fd5b61146b6112e4565b8235815261147b60208401610fba565b602082015260408301356001600160401b038082111561149a57600080fd5b6114a636838701611336565b604084015260608501359150808211156114bf57600080fd5b6114cb36838701611336565b606084015260808501359150808211156114e457600080fd5b506114f1368286016113a5565b60808301525092915050565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b60006020828403121561154757600080fd5b8151610fb381610fd6565b6000815180845260005b818110156115785760208185018101518683018201520161155c565b506000602082860101526020601f19601f83011685010191505092915050565b600060406001600160401b038516835260208181850152845160a0838601526115c460e0860182611552565b905081860151603f19808784030160608801526115e18383611552565b88860151888203830160808a01528051808352908601945060009350908501905b8084101561163457845180516001600160a01b0316835286015186830152938501936001939093019290860190611602565b5060608901516001600160a01b031660a08901526080890151888203830160c08a015295506116638187611552565b9a9950505050505050505050565b60006020828403121561168357600080fd5b5051919050565b8181038181111561036457634e487b7160e01b600052601160045260246000fd5b6000602082840312156116bd57600080fd5b8151610fb381611055565b6000806000606084860312156116dd57600080fd5b83516116e881611055565b60208501519093506116f981610fd6565b8092505060408401519050925092509256fea2646970667358221220bde0010175c11ee8287cfb2d240aef3fc2c3454e8983acb2a0d65fb4d56c9f7864736f6c63430008120033

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

000000000000000000000000e561d5e02207fb5eb32cca20a699e0d8919a14760000000000000000000000006f6a40a7149b4b4f6568c46a0c5a98927a00e9f1000000000000000000000000f8522853bd9ae4d1215814d81e4f66dc34e444720000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _router (address): 0xE561d5E02207fb5eB32cca20a699E0d8919a1476
Arg [1] : _token (address): 0x6F6A40a7149b4b4F6568c46A0C5A98927A00E9F1
Arg [2] : _ticket (address): 0xF8522853bD9Ae4D1215814D81e4f66dc34E44472
Arg [3] : _isMint (bool): False

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000e561d5e02207fb5eb32cca20a699e0d8919a1476
Arg [1] : 0000000000000000000000006f6a40a7149b4b4f6568c46a0c5a98927a00e9f1
Arg [2] : 000000000000000000000000f8522853bd9ae4d1215814d81e4f66dc34e44472
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
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.