Sepolia Testnet

Contract

0xf66871C91952b09270d223cD3A1e5Dad57b14fbC

Overview

ETH Balance

0.9668 ETH

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Dispatch Blocks70241902024-11-06 14:58:4837 days ago1730905128IN
0xf66871C9...d57b14fbC
0 ETH0.0034189529.0007388
Dispatch Blocks64715992024-08-10 6:25:36126 days ago1723271136IN
0xf66871C9...d57b14fbC
0.002 ETH0.000617614.21222378
Dispatch Blocks64715512024-08-10 6:15:36126 days ago1723270536IN
0xf66871C9...d57b14fbC
0.002 ETH0.000818325.58113728
Dispatch Blocks64715472024-08-10 6:14:24126 days ago1723270464IN
0xf66871C9...d57b14fbC
0.002 ETH0.000753845.14134612
Dispatch Blocks64714992024-08-10 6:03:24126 days ago1723269804IN
0xf66871C9...d57b14fbC
0.002 ETH0.000487543.32514941
Dispatch Blocks64714922024-08-10 6:02:00126 days ago1723269720IN
0xf66871C9...d57b14fbC
0.002 ETH0.000549653.74872977
Dispatch Blocks64714432024-08-10 5:51:00126 days ago1723269060IN
0xf66871C9...d57b14fbC
0.002 ETH0.00070954.83895403
Dispatch Blocks64714392024-08-10 5:50:12126 days ago1723269012IN
0xf66871C9...d57b14fbC
0.002 ETH0.000745415.08383958
Dispatch Blocks64713912024-08-10 5:38:48126 days ago1723268328IN
0xf66871C9...d57b14fbC
0.002 ETH0.000575833.92730849
Dispatch Blocks64713862024-08-10 5:37:48126 days ago1723268268IN
0xf66871C9...d57b14fbC
0.002 ETH0.000579313.95104059
Dispatch Blocks64713432024-08-10 5:27:48126 days ago1723267668IN
0xf66871C9...d57b14fbC
0.002 ETH0.000322152.19715448
Dispatch Blocks64713322024-08-10 5:25:36126 days ago1723267536IN
0xf66871C9...d57b14fbC
0.002 ETH0.000370622.52770709
Dispatch Blocks64712842024-08-10 5:15:12126 days ago1723266912IN
0xf66871C9...d57b14fbC
0.002 ETH0.000271321.85046729
Dispatch Blocks64712802024-08-10 5:14:24126 days ago1723266864IN
0xf66871C9...d57b14fbC
0.002 ETH0.000280481.66700874
Dispatch Blocks64712272024-08-10 5:03:00126 days ago1723266180IN
0xf66871C9...d57b14fbC
0.002 ETH0.000344432.34910425
Dispatch Blocks64712212024-08-10 5:01:48126 days ago1723266108IN
0xf66871C9...d57b14fbC
0.002 ETH0.000389432.65602641
Dispatch Blocks64711172024-08-10 4:38:12126 days ago1723264692IN
0xf66871C9...d57b14fbC
0.002 ETH0.000566333.86252234
Dispatch Blocks64711142024-08-10 4:37:36126 days ago1723264656IN
0xf66871C9...d57b14fbC
0.002 ETH0.00055653.79543982
Dispatch Blocks64710662024-08-10 4:26:24126 days ago1723263984IN
0xf66871C9...d57b14fbC
0.002 ETH0.000454283.09830231
Dispatch Blocks64710632024-08-10 4:25:36126 days ago1723263936IN
0xf66871C9...d57b14fbC
0.002 ETH0.000386022.63278655
Dispatch Blocks64710152024-08-10 4:14:48126 days ago1723263288IN
0xf66871C9...d57b14fbC
0.002 ETH0.000598394.08117737
Dispatch Blocks64710092024-08-10 4:13:36126 days ago1723263216IN
0xf66871C9...d57b14fbC
0.002 ETH0.000668934.56226491
Dispatch Blocks64709822024-08-10 4:06:12126 days ago1723262772IN
0xf66871C9...d57b14fbC
0.002 ETH0.000359422.45131671
Dispatch Blocks64709082024-08-10 3:50:12126 days ago1723261812IN
0xf66871C9...d57b14fbC
0.002 ETH0.000405132.76307414
Dispatch Blocks64709062024-08-10 3:49:36126 days ago1723261776IN
0xf66871C9...d57b14fbC
0.002 ETH0.000431262.94133283
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
70241902024-11-06 14:58:4837 days ago1730905128
0xf66871C9...d57b14fbC
0.0002 ETH
69173212024-10-21 16:26:4853 days ago1729528008
0xf66871C9...d57b14fbC
0.0002 ETH
66267782024-09-03 18:41:12101 days ago1725388872
0xf66871C9...d57b14fbC
0.0002 ETH
66265732024-09-03 17:51:24101 days ago1725385884
0xf66871C9...d57b14fbC
0.0002 ETH
66264182024-09-03 17:14:00101 days ago1725383640
0xf66871C9...d57b14fbC
0.0002 ETH
66262542024-09-03 16:37:00101 days ago1725381420
0xf66871C9...d57b14fbC
0.0002 ETH
66260802024-09-03 15:56:12101 days ago1725378972
0xf66871C9...d57b14fbC
0.0002 ETH
66259232024-09-03 15:20:24101 days ago1725376824
0xf66871C9...d57b14fbC
0.0002 ETH
66257132024-09-03 14:31:36101 days ago1725373896
0xf66871C9...d57b14fbC
0.0002 ETH
66254962024-09-03 13:42:12101 days ago1725370932
0xf66871C9...d57b14fbC
0.0002 ETH
66253032024-09-03 12:56:24102 days ago1725368184
0xf66871C9...d57b14fbC
0.0002 ETH
66247552024-09-03 10:53:12102 days ago1725360792
0xf66871C9...d57b14fbC
0.0002 ETH
66245802024-09-03 10:14:12102 days ago1725358452
0xf66871C9...d57b14fbC
0.0002 ETH
66244192024-09-03 9:36:12102 days ago1725356172
0xf66871C9...d57b14fbC
0.0002 ETH
66242142024-09-03 8:48:00102 days ago1725353280
0xf66871C9...d57b14fbC
0.0002 ETH
66240072024-09-03 8:01:24102 days ago1725350484
0xf66871C9...d57b14fbC
0.0002 ETH
66238502024-09-03 7:24:48102 days ago1725348288
0xf66871C9...d57b14fbC
0.0002 ETH
66236902024-09-03 6:46:12102 days ago1725345972
0xf66871C9...d57b14fbC
0.0002 ETH
66234792024-09-03 5:59:12102 days ago1725343152
0xf66871C9...d57b14fbC
0.0002 ETH
66233182024-09-03 5:22:00102 days ago1725340920
0xf66871C9...d57b14fbC
0.0002 ETH
66231182024-09-03 4:35:00102 days ago1725338100
0xf66871C9...d57b14fbC
0.0002 ETH
66229152024-09-03 3:49:12102 days ago1725335352
0xf66871C9...d57b14fbC
0.0002 ETH
66227412024-09-03 3:10:12102 days ago1725333012
0xf66871C9...d57b14fbC
0.0002 ETH
66223832024-09-03 1:48:36102 days ago1725328116
0xf66871C9...d57b14fbC
0.0002 ETH
66221982024-09-03 1:05:24102 days ago1725325524
0xf66871C9...d57b14fbC
0.0002 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CCIPReporter

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 10000 runs

Other Settings:
paris EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 9 : CCIPReporter.sol
// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity ^0.8.20;

import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
import { IRouterClient } from "@chainlink/contracts-ccip/src/v0.8/ccip/interfaces/IRouterClient.sol";
import { Client } from "@chainlink/contracts-ccip/src/v0.8/ccip/libraries/Client.sol";
import { Reporter } from "../Reporter.sol";

contract CCIPReporter is Reporter, Ownable {
    string public constant PROVIDER = "ccip";

    IRouterClient public immutable CCIP_ROUTER;

    uint256 public fee;
    mapping(uint256 => uint64) public chainSelectors;

    error ChainSelectorNotAvailable();

    event ChainSelectorSet(uint256 indexed chainId, uint64 indexed chainSelector);
    event FeeSet(uint256 fee);

    constructor(address headerStorage, address yaho, address ccipRouter) Reporter(headerStorage, yaho) {
        CCIP_ROUTER = IRouterClient(ccipRouter);
    }

    function setChainSelectorByChainId(uint256 chainId, uint64 chainSelector) external onlyOwner {
        chainSelectors[chainId] = chainSelector;
        emit ChainSelectorSet(chainId, chainSelector);
    }

    function setFee(uint256 fee_) external onlyOwner {
        fee = fee_;
        emit FeeSet(fee_);
    }

    function _dispatch(
        uint256 targetChainId,
        address adapter,
        uint256[] memory ids,
        bytes32[] memory hashes
    ) internal override returns (bytes32) {
        uint64 targetChainSelector = chainSelectors[targetChainId];
        if (targetChainSelector == 0) revert ChainSelectorNotAvailable();
        bytes memory payload = abi.encode(ids, hashes);
        Client.EVM2AnyMessage memory message = Client.EVM2AnyMessage({
            receiver: abi.encode(adapter),
            data: payload,
            tokenAmounts: new Client.EVMTokenAmount[](0), // Empty array - no tokens are transferred
            extraArgs: Client._argsToBytes(Client.EVMExtraArgsV1({ gasLimit: 200_000, strict: false })),
            feeToken: address(0) // Pay fees with native
        });
        CCIP_ROUTER.ccipSend{ value: fee }(targetChainSelector, message);
        return bytes32(0);
    }
}

File 2 of 9 : 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 3 of 9 : 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 4 of 9 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 5 of 9 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

File 6 of 9 : Reporter.sol
// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity ^0.8.20;

import { IHeaderStorage } from "../interfaces/IHeaderStorage.sol";
import { IReporter } from "../interfaces/IReporter.sol";
import { IAdapter } from "../interfaces/IAdapter.sol";

abstract contract Reporter is IReporter {
    address public immutable HEADER_STORAGE;
    address public immutable YAHO;

    modifier onlyYaho() {
        if (msg.sender != YAHO) revert NotYaho(msg.sender, YAHO);
        _;
    }

    constructor(address headerStorage, address yaho) {
        HEADER_STORAGE = headerStorage;
        YAHO = yaho;
    }

    /// @inheritdoc IReporter
    function dispatchBlocks(
        uint256 targetChainId,
        IAdapter adapter,
        uint256[] memory blockNumbers
    ) external payable returns (bytes32) {
        bytes32[] memory blockHeaders = IHeaderStorage(HEADER_STORAGE).storeBlockHeaders(blockNumbers);
        for (uint256 i = 0; i < blockNumbers.length; ) {
            emit BlockDispatched(targetChainId, adapter, blockNumbers[i], blockHeaders[i]);
            unchecked {
                ++i;
            }
        }
        return _dispatch(targetChainId, address(adapter), blockNumbers, blockHeaders);
    }

    /// @inheritdoc IReporter
    function dispatchMessages(
        uint256 targetChainId,
        IAdapter adapter,
        uint256[] memory messageIds,
        bytes32[] memory messageHashes
    ) external payable onlyYaho returns (bytes32) {
        for (uint256 i = 0; i < messageIds.length; ) {
            emit MessageDispatched(targetChainId, adapter, messageIds[i], messageHashes[i]);
            unchecked {
                ++i;
            }
        }
        return _dispatch(targetChainId, address(adapter), messageIds, messageHashes);
    }

    function _dispatch(
        uint256 targetChainId,
        address adapter,
        uint256[] memory ids,
        bytes32[] memory hashes
    ) internal virtual returns (bytes32);
}

File 7 of 9 : IAdapter.sol
// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity ^0.8.0;

/**
 * @title IAdapter
 */
interface IAdapter {
    error ConflictingBlockHeader(uint256 blockNumber, bytes32 blockHash, bytes32 storedBlockHash);
    error InvalidBlockHeaderLength(uint256 length);
    error InvalidBlockHeaderRLP();

    /**
     * @dev Emitted when a hash is stored.
     * @param id - The ID of the stored hash.
     * @param hash - The stored hash as bytes32 values.
     */
    event HashStored(uint256 indexed id, bytes32 indexed hash);

    /**
     * @dev Returns the hash for a given ID.
     * @param domain - Identifier for the domain to query.
     * @param id - Identifier for the ID to query.
     * @return hash Bytes32 hash for the given ID on the given domain.
     * @notice MUST return bytes32(0) if the hash is not present.
     */
    function getHash(uint256 domain, uint256 id) external view returns (bytes32 hash);
}

File 8 of 9 : IHeaderStorage.sol
// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity ^0.8.0;

/**
 * @title IHeaderStorage
 */
interface IHeaderStorage {
    error HeaderOutOfRange(uint256 blockNumber);

    /**
     * @dev Emitted when a block header is stored.
     * @param blockNumber - The block number associated with the stored header.
     * @param blockHeader - The stored block header as a bytes32 value.
     */
    event HeaderStored(uint256 indexed blockNumber, bytes32 indexed blockHeader);

    /**
     * @dev Retrieves the stored block header for a specific block number.
     * @param blockNumber - The block number as a uint256 value.
     * @return The block header as a bytes32 value.
     */
    function headers(uint256 blockNumber) external view returns (bytes32);

    /**
     * @dev Stores and returns the header for the given block.
     * @param blockNumber - Block number.
     * @return blockHeader - Block header stored.
     * @notice Reverts if the given block header was not previously stored and is now out of range.
     */
    function storeBlockHeader(uint256 blockNumber) external returns (bytes32);

    /**
     * @dev Stores and returns the header for an array of given blocks.
     * @param blockNumbers - Array of block numbers.
     * @return blockHeaders - Array of block headers stored.
     * @notice Reverts if the given block header was not previously stored and is now out of range.
     */
    function storeBlockHeaders(uint256[] memory blockNumbers) external returns (bytes32[] memory);
}

File 9 of 9 : IReporter.sol
// SPDX-License-Identifier: LGPL-3.0-only
pragma solidity ^0.8.0;

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

interface IReporter {
    error NotYaho(address sender, address expectedYaho);

    /**
     * @dev Emitted when a block is dispatched to another chain.
     * @param targetChainId - The target chain's identifier associated with the dispatched block.
     * @param adapter - The adapter address associated with the dispatched block.
     * @param blockNumber - The block number associated with the dispatched block.
     * @param blockHeader - The dispatched block header as a bytes32 value.
     */
    event BlockDispatched(
        uint256 indexed targetChainId,
        IAdapter adapter,
        uint256 indexed blockNumber,
        bytes32 blockHeader
    );

    /**
     * @dev Emitted when a message is dispatched to another chain.
     * @param targetChainId - The target chain's identifier associated with the dispatched message.
     * @param adapter - The adapter address associated with the dispatched message.
     * @param messageId - The message identifier associated with the dispatched message.
     * @param messageHash - The dispatched message hash as a bytes32 value.
     */
    event MessageDispatched(
        uint256 indexed targetChainId,
        IAdapter adapter,
        uint256 indexed messageId,
        bytes32 messageHash
    );

    /**
     * @dev Dispatches blocks to a given adapter on the target chaib.
     * @param targetChainId - The target chain's Uint256 identifier.
     * @param adapter - The adapter instance to use.
     * @param blockNumbers - An array of Uint256 block numbers to dispatch.
     * @notice blockNumbers must include block numbers that are greater than or equal to (currentBlock - 256) due to EVM limitations.
     * @return result - The result returned by the adapter as bytes.
     */
    function dispatchBlocks(
        uint256 targetChainId,
        IAdapter adapter,
        uint256[] memory blockNumbers
    ) external payable returns (bytes32);

    /**
     * @dev Dispatches messages to a target chain using the specified adapter.
     * @param targetChainId - The target chain's Uint256 identifier.
     * @param adapter - The adapter instance to use.
     * @param messageIds - An array of Uint256 message identifiers.
     * @param messageHashes - An array of bytes32 message hashes.
     * @notice This function can be called only by Yaho
     * @return result - The result returned by the adapter as bytes.
     */
    function dispatchMessages(
        uint256 targetChainId,
        IAdapter adapter,
        uint256[] memory messageIds,
        bytes32[] memory messageHashes
    ) external payable returns (bytes32);
}

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"headerStorage","type":"address"},{"internalType":"address","name":"yaho","type":"address"},{"internalType":"address","name":"ccipRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ChainSelectorNotAvailable","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"expectedYaho","type":"address"}],"name":"NotYaho","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"targetChainId","type":"uint256"},{"indexed":false,"internalType":"contract IAdapter","name":"adapter","type":"address"},{"indexed":true,"internalType":"uint256","name":"blockNumber","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"blockHeader","type":"bytes32"}],"name":"BlockDispatched","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"chainId","type":"uint256"},{"indexed":true,"internalType":"uint64","name":"chainSelector","type":"uint64"}],"name":"ChainSelectorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"FeeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"targetChainId","type":"uint256"},{"indexed":false,"internalType":"contract IAdapter","name":"adapter","type":"address"},{"indexed":true,"internalType":"uint256","name":"messageId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"messageHash","type":"bytes32"}],"name":"MessageDispatched","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"CCIP_ROUTER","outputs":[{"internalType":"contract IRouterClient","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HEADER_STORAGE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVIDER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"YAHO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"chainSelectors","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"targetChainId","type":"uint256"},{"internalType":"contract IAdapter","name":"adapter","type":"address"},{"internalType":"uint256[]","name":"blockNumbers","type":"uint256[]"}],"name":"dispatchBlocks","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"targetChainId","type":"uint256"},{"internalType":"contract IAdapter","name":"adapter","type":"address"},{"internalType":"uint256[]","name":"messageIds","type":"uint256[]"},{"internalType":"bytes32[]","name":"messageHashes","type":"bytes32[]"}],"name":"dispatchMessages","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"uint64","name":"chainSelector","type":"uint64"}],"name":"setChainSelectorByChainId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee_","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e0346100f257601f610fb538819003918201601f19168301916001600160401b038311848410176100f7578084926060946040528339810103126100f2576100478161010d565b9061006060406100596020840161010d565b920161010d565b60809290925260a05260008054336001600160a01b0319821681178355604051936001600160a01b039390928416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a31660c052610e93908161012282396080518181816104ea01526107f9015260a0518181816102f80152610431015260c05181818160de0152610d400152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036100f25756fe608060408181526004918236101561001657600080fd5b600092833560e01c918262d344111461081d575081631073f93d146107cc5781632bf34fbd1461079a57816369fe0e2d1461074c578163715018a6146106ce5781638c09f0e5146106445781638da5cb5b146106115781639ac41b98146104555781639e83334b14610404578163b4a90ff714610248578163ddca3f4314610229578163f2fde38b14610106575063fe5f42ca146100b357600080fd5b346101025781600319360112610102576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b919050346102255760206003193601126102255781359173ffffffffffffffffffffffffffffffffffffffff9182841680940361022157610145610a04565b831561019e5750508254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b90602060849251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b8480fd5b8280fd5b5050346101025781600319360112610102576020906001549051908152f35b9050826080600319360112610401578135610261610966565b67ffffffffffffffff926044358481116101025761028290369087016109a6565b9060643594851161040157366023860112156104015784860135906102a68261098e565b956102b3895197886108c7565b82875260209260248489019160051b830101913683116103fd576024859101915b8383106103ed575050505073ffffffffffffffffffffffffffffffffffffffff96877f0000000000000000000000000000000000000000000000000000000000000000168033036103b75750505b825181101561039f578061033860019285610ab7565b51867fd05d8e0013365e4d441d98e6459477af9dd142c5cf590e87ca927921993b6c62610396610368858c610ab7565b518d5173ffffffffffffffffffffffffffffffffffffffff8b16815260208101919091529081906040820190565b0390a301610322565b5095946103b0949391921690610afa565b9051908152f35b604492508951917fce98f81500000000000000000000000000000000000000000000000000000000835233908301526024820152fd5b82358152918101918591016102d4565b8380fd5b80fd5b5050346101025781600319360112610102576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b839150606060031936011261010257803561046e610966565b67ffffffffffffffff9260443584811161060d5761048f90369083016109a6565b908651957fceee6e5500000000000000000000000000000000000000000000000000000000875260208092880152866104cb6024820185610a83565b0396818173ffffffffffffffffffffffffffffffffffffffff9981838c7f0000000000000000000000000000000000000000000000000000000000000000165af196871561060357829761056c575b50505b825181101561039f578061053360019285610ab7565b51867fdfde4db189423e6f919a3d3cb1306e03dc18b4e72bc0c6c13fe07c58b395335c610563610368858c610ab7565b0390a30161051d565b909196503d8088843e61057f81846108c7565b82019183818403126105ff5780519182116105ff57019080601f830112156105fb5781516105ac8161098e565b926105b98b5194856108c7565b818452848085019260051b8201019283116105f75784809101915b8383106105e7575050505094888061051a565b82518152918101918591016105d4565b8880fd5b8680fd5b8780fd5b89513d84823e3d90fd5b8580fd5b50503461010257816003193601126101025773ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b905034610225578160031936011261022557356024359167ffffffffffffffff83168093036103fd57610675610a04565b81845260026020528320827fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161790557fb791570583b562de90557c30a4aa1697096764d7627f1b2e3029be46a867defb8380a380f35b83346104015780600319360112610401576106e7610a04565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b905034610225576020600319360112610225577f20461e09b8e557b77e107939f9ce6544698123aad0fc964ac5cc59b7df2e608f91602091359061078e610a04565b8160015551908152a180f35b905034610225576020600319360112610225578160209367ffffffffffffffff92358152600285522054169051908152f35b5050346101025781600319360112610102576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b929150346103fd57836003193601126103fd57610878935061083e8361087c565b82527f6363697000000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610908565b0390f35b6040810190811067ffffffffffffffff82111761089857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761089857604052565b919082519283825260005b8481106109525750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b602081830181015184830182015201610913565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361098957565b600080fd5b67ffffffffffffffff81116108985760051b60200190565b81601f82011215610989578035916109bd8361098e565b926109cb60405194856108c7565b808452602092838086019260051b820101928311610989578301905b8282106109f5575050505090565b813581529083019083016109e7565b73ffffffffffffffffffffffffffffffffffffffff600054163303610a2557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b90815180825260208080930193019160005b828110610aa3575050505090565b835185529381019392810192600101610a95565b8051821015610acb5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b92909160009384526020926002845267ffffffffffffffff604092818488205416948515610e3457610b3785519286898501526060840190610a83565b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0918282820301888301528980855192838152019401908b5b8b828210610e1d5750505050610b8d92039081018352826108c7565b83519073ffffffffffffffffffffffffffffffffffffffff80941687830152868252610bb88261087c565b84519187830183811085821117610df0578652888352855190610bda8261087c565b62030d4082528882018a81528751927f97a657c9000000000000000000000000000000000000000000000000000000008b850152516024840152511515604483015260448252608082019482861081871117610dc357610120830190811186821017610dc357908996949293918899969952885260a0830190815260c0830191825260e08301928a845261010081019081526001938b855495610cf2610cbe8c519d8e9b7f96f4e9f9000000000000000000000000000000000000000000000000000000008d5260048d01528d60248d01525160a060448d015260e48c0190610908565b9551957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc96878c83030160648d0152610908565b955195858a82030160848b01528a80885192838152019701925b8c828210610da15750505050509286949392610d3c92878795511660a486015251908483030160c4850152610908565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1908115610d985750610d7357505090565b813d8311610d91575b610d8681836108c7565b810103126104015790565b503d610d7c565b513d85823e3d90fd5b845180518c168a528d0151898e01528f9c8f9c50980197909301928201610d0c565b60248b7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b835187529586019587945090920191600101610b71565b600485517f4210af62000000000000000000000000000000000000000000000000000000008152fdfea2646970667358221220f67de1f4e504b47d2982f4b9a095ac85d3886e82f206774be9d5cfd98339dc1564736f6c6343000814003300000000000000000000000048800ebef4491c65b2172d3628ddddc9c47fe43000000000000000000000000021eab033c7d2df6a67aef6c5bda9a7f151eb9f520000000000000000000000000bf3de8c5d3e8a2b34d2beeb17abfcebaf363a59

Deployed Bytecode

0x608060408181526004918236101561001657600080fd5b600092833560e01c918262d344111461081d575081631073f93d146107cc5781632bf34fbd1461079a57816369fe0e2d1461074c578163715018a6146106ce5781638c09f0e5146106445781638da5cb5b146106115781639ac41b98146104555781639e83334b14610404578163b4a90ff714610248578163ddca3f4314610229578163f2fde38b14610106575063fe5f42ca146100b357600080fd5b346101025781600319360112610102576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000bf3de8c5d3e8a2b34d2beeb17abfcebaf363a59168152f35b5080fd5b919050346102255760206003193601126102255781359173ffffffffffffffffffffffffffffffffffffffff9182841680940361022157610145610a04565b831561019e5750508254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b90602060849251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b8480fd5b8280fd5b5050346101025781600319360112610102576020906001549051908152f35b9050826080600319360112610401578135610261610966565b67ffffffffffffffff926044358481116101025761028290369087016109a6565b9060643594851161040157366023860112156104015784860135906102a68261098e565b956102b3895197886108c7565b82875260209260248489019160051b830101913683116103fd576024859101915b8383106103ed575050505073ffffffffffffffffffffffffffffffffffffffff96877f00000000000000000000000021eab033c7d2df6a67aef6c5bda9a7f151eb9f52168033036103b75750505b825181101561039f578061033860019285610ab7565b51867fd05d8e0013365e4d441d98e6459477af9dd142c5cf590e87ca927921993b6c62610396610368858c610ab7565b518d5173ffffffffffffffffffffffffffffffffffffffff8b16815260208101919091529081906040820190565b0390a301610322565b5095946103b0949391921690610afa565b9051908152f35b604492508951917fce98f81500000000000000000000000000000000000000000000000000000000835233908301526024820152fd5b82358152918101918591016102d4565b8380fd5b80fd5b5050346101025781600319360112610102576020905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000021eab033c7d2df6a67aef6c5bda9a7f151eb9f52168152f35b839150606060031936011261010257803561046e610966565b67ffffffffffffffff9260443584811161060d5761048f90369083016109a6565b908651957fceee6e5500000000000000000000000000000000000000000000000000000000875260208092880152866104cb6024820185610a83565b0396818173ffffffffffffffffffffffffffffffffffffffff9981838c7f00000000000000000000000048800ebef4491c65b2172d3628ddddc9c47fe430165af196871561060357829761056c575b50505b825181101561039f578061053360019285610ab7565b51867fdfde4db189423e6f919a3d3cb1306e03dc18b4e72bc0c6c13fe07c58b395335c610563610368858c610ab7565b0390a30161051d565b909196503d8088843e61057f81846108c7565b82019183818403126105ff5780519182116105ff57019080601f830112156105fb5781516105ac8161098e565b926105b98b5194856108c7565b818452848085019260051b8201019283116105f75784809101915b8383106105e7575050505094888061051a565b82518152918101918591016105d4565b8880fd5b8680fd5b8780fd5b89513d84823e3d90fd5b8580fd5b50503461010257816003193601126101025773ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b905034610225578160031936011261022557356024359167ffffffffffffffff83168093036103fd57610675610a04565b81845260026020528320827fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161790557fb791570583b562de90557c30a4aa1697096764d7627f1b2e3029be46a867defb8380a380f35b83346104015780600319360112610401576106e7610a04565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b905034610225576020600319360112610225577f20461e09b8e557b77e107939f9ce6544698123aad0fc964ac5cc59b7df2e608f91602091359061078e610a04565b8160015551908152a180f35b905034610225576020600319360112610225578160209367ffffffffffffffff92358152600285522054169051908152f35b5050346101025781600319360112610102576020905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000048800ebef4491c65b2172d3628ddddc9c47fe430168152f35b929150346103fd57836003193601126103fd57610878935061083e8361087c565b82527f6363697000000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190610908565b0390f35b6040810190811067ffffffffffffffff82111761089857604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761089857604052565b919082519283825260005b8481106109525750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b602081830181015184830182015201610913565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361098957565b600080fd5b67ffffffffffffffff81116108985760051b60200190565b81601f82011215610989578035916109bd8361098e565b926109cb60405194856108c7565b808452602092838086019260051b820101928311610989578301905b8282106109f5575050505090565b813581529083019083016109e7565b73ffffffffffffffffffffffffffffffffffffffff600054163303610a2557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b90815180825260208080930193019160005b828110610aa3575050505090565b835185529381019392810192600101610a95565b8051821015610acb5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b92909160009384526020926002845267ffffffffffffffff604092818488205416948515610e3457610b3785519286898501526060840190610a83565b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0918282820301888301528980855192838152019401908b5b8b828210610e1d5750505050610b8d92039081018352826108c7565b83519073ffffffffffffffffffffffffffffffffffffffff80941687830152868252610bb88261087c565b84519187830183811085821117610df0578652888352855190610bda8261087c565b62030d4082528882018a81528751927f97a657c9000000000000000000000000000000000000000000000000000000008b850152516024840152511515604483015260448252608082019482861081871117610dc357610120830190811186821017610dc357908996949293918899969952885260a0830190815260c0830191825260e08301928a845261010081019081526001938b855495610cf2610cbe8c519d8e9b7f96f4e9f9000000000000000000000000000000000000000000000000000000008d5260048d01528d60248d01525160a060448d015260e48c0190610908565b9551957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc96878c83030160648d0152610908565b955195858a82030160848b01528a80885192838152019701925b8c828210610da15750505050509286949392610d3c92878795511660a486015251908483030160c4850152610908565b03927f0000000000000000000000000bf3de8c5d3e8a2b34d2beeb17abfcebaf363a59165af1908115610d985750610d7357505090565b813d8311610d91575b610d8681836108c7565b810103126104015790565b503d610d7c565b513d85823e3d90fd5b845180518c168a528d0151898e01528f9c8f9c50980197909301928201610d0c565b60248b7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b835187529586019587945090920191600101610b71565b600485517f4210af62000000000000000000000000000000000000000000000000000000008152fdfea2646970667358221220f67de1f4e504b47d2982f4b9a095ac85d3886e82f206774be9d5cfd98339dc1564736f6c63430008140033

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

00000000000000000000000048800ebef4491c65b2172d3628ddddc9c47fe43000000000000000000000000021eab033c7d2df6a67aef6c5bda9a7f151eb9f520000000000000000000000000bf3de8c5d3e8a2b34d2beeb17abfcebaf363a59

-----Decoded View---------------
Arg [0] : headerStorage (address): 0x48800eBEf4491C65b2172d3628DdDDC9c47fe430
Arg [1] : yaho (address): 0x21eAB033C7D2DF6A67AeF6C5Bda9A7F151eB9f52
Arg [2] : ccipRouter (address): 0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000048800ebef4491c65b2172d3628ddddc9c47fe430
Arg [1] : 00000000000000000000000021eab033c7d2df6a67aef6c5bda9a7f151eb9f52
Arg [2] : 0000000000000000000000000bf3de8c5d3e8a2b34d2beeb17abfcebaf363a59


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.