ETH Price: $2,707.26 (+2.35%)

Contract

0x20827008C4B7104332CfFF86CcBc50e9043Ec704
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Send Exact Paren...217730662025-02-04 12:14:236 days ago1738671263IN
0x20827008...9043Ec704
0.00004743 ETH0.000321244.36629022
Send Exact Paren...217730492025-02-04 12:10:596 days ago1738671059IN
0x20827008...9043Ec704
0.00004733 ETH0.000326664.43984611
Send Exact Paren...217380772025-01-30 14:53:5911 days ago1738248839IN
0x20827008...9043Ec704
0.00009984 ETH0.000646168.78233097
Send Exact Paren...213718022024-12-10 11:27:3562 days ago1733830055IN
0x20827008...9043Ec704
0.00027905 ETH0.0012697117.25743648
Send Exact Paren...213441002024-12-06 14:37:5966 days ago1733495879IN
0x20827008...9043Ec704
0.00038065 ETH0.001834624.93523259
Send Exact Paren...213440822024-12-06 14:34:2366 days ago1733495663IN
0x20827008...9043Ec704
0.00038528 ETH0.0016854222.90752519
Send Exact Paren...213230052024-12-03 15:55:1169 days ago1733241311IN
0x20827008...9043Ec704
0.00085845 ETH0.0027748337.71439241
Send Exact Paren...213148802024-12-02 12:39:3570 days ago1733143175IN
0x20827008...9043Ec704
0.00026618 ETH0.0013626618.52070386
Send Exact Paren...212926602024-11-29 10:08:5973 days ago1732874939IN
0x20827008...9043Ec704
0.00016592 ETH0.0008524511.5862266
Send Exact Paren...212894162024-11-28 23:16:1174 days ago1732835771IN
0x20827008...9043Ec704
0.00014928 ETH0.000706389.60084202
Send Exact Paren...212865322024-11-28 13:35:3574 days ago1732800935IN
0x20827008...9043Ec704
0.00020782 ETH0.0008199911.14508105
Send Exact Paren...212853682024-11-28 9:41:1174 days ago1732786871IN
0x20827008...9043Ec704
0.00016236 ETH0.000698589.49486976
Send Exact Paren...212853602024-11-28 9:39:3574 days ago1732786775IN
0x20827008...9043Ec704
0.00016346 ETH0.0007438610.1102699
Send Exact Paren...212781992024-11-27 9:29:2375 days ago1732699763IN
0x20827008...9043Ec704
0.00016858 ETH0.0008531211.5952654
Send Exact Paren...212423002024-11-22 9:13:1180 days ago1732266791IN
0x20827008...9043Ec704
0.00020294 ETH0.0009673813.14832495
Send Exact Paren...212116672024-11-18 2:39:1185 days ago1731897551IN
0x20827008...9043Ec704
0.00020325 ETH0.0009931113.49796787
Send Exact Paren...211933592024-11-15 13:21:3587 days ago1731676895IN
0x20827008...9043Ec704
0.00030789 ETH0.0015061720.4713535
Send Exact Paren...211846382024-11-14 8:07:3589 days ago1731571655IN
0x20827008...9043Ec704
0.00061179 ETH0.0027832937.82941065
Send Exact Paren...211846112024-11-14 8:02:1189 days ago1731571331IN
0x20827008...9043Ec704
0.00060811 ETH0.002694836.62662217
Send Exact Paren...211700202024-11-12 7:10:1191 days ago1731395411IN
0x20827008...9043Ec704
0.00048789 ETH0.001906325.90966731
Send Exact Paren...211698272024-11-12 6:31:2391 days ago1731393083IN
0x20827008...9043Ec704
0.00046996 ETH0.0020233427.50039411
Send Exact Paren...211280482024-11-06 10:35:2396 days ago1730889323IN
0x20827008...9043Ec704
0.00025795 ETH0.0012727617.29891107
Send Exact Paren...211280222024-11-06 10:30:1196 days ago1730889011IN
0x20827008...9043Ec704
0.00026163 ETH0.0011203315.22712667
Send Exact Paren...211280142024-11-06 10:28:3596 days ago1730888915IN
0x20827008...9043Ec704
0.00026163 ETH0.0011448615.56057555
Send Exact Paren...211230322024-11-05 17:46:4797 days ago1730828807IN
0x20827008...9043Ec704
0.00027023 ETH0.0009923913.48822206
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
217730662025-02-04 12:14:236 days ago1738671263
0x20827008...9043Ec704
0.00004743 ETH
217730492025-02-04 12:10:596 days ago1738671059
0x20827008...9043Ec704
0.00004733 ETH
217380772025-01-30 14:53:5911 days ago1738248839
0x20827008...9043Ec704
0.00009984 ETH
213718022024-12-10 11:27:3562 days ago1733830055
0x20827008...9043Ec704
0.00027905 ETH
213441002024-12-06 14:37:5966 days ago1733495879
0x20827008...9043Ec704
0.00038065 ETH
213440822024-12-06 14:34:2366 days ago1733495663
0x20827008...9043Ec704
0.00038528 ETH
213230052024-12-03 15:55:1169 days ago1733241311
0x20827008...9043Ec704
0.00085845 ETH
213148802024-12-02 12:39:3570 days ago1733143175
0x20827008...9043Ec704
0.00026618 ETH
212926602024-11-29 10:08:5973 days ago1732874939
0x20827008...9043Ec704
0.00016592 ETH
212918572024-11-29 7:27:2374 days ago1732865243
0x20827008...9043Ec704
0.00014356 ETH
212918572024-11-29 7:27:2374 days ago1732865243
0x20827008...9043Ec704
0.00014356 ETH
212918572024-11-29 7:27:2374 days ago1732865243
0x20827008...9043Ec704
0.00014356 ETH
212918572024-11-29 7:27:2374 days ago1732865243
0x20827008...9043Ec704
0.00014356 ETH
212894162024-11-28 23:16:1174 days ago1732835771
0x20827008...9043Ec704
0.00014928 ETH
212894092024-11-28 23:14:4774 days ago1732835687
0x20827008...9043Ec704
0.00014928 ETH
212894092024-11-28 23:14:4774 days ago1732835687
0x20827008...9043Ec704
0.00014928 ETH
212894092024-11-28 23:14:4774 days ago1732835687
0x20827008...9043Ec704
0.00014928 ETH
212894092024-11-28 23:14:4774 days ago1732835687
0x20827008...9043Ec704
0.00014928 ETH
212865322024-11-28 13:35:3574 days ago1732800935
0x20827008...9043Ec704
0.00020782 ETH
212853682024-11-28 9:41:1174 days ago1732786871
0x20827008...9043Ec704
0.00016236 ETH
212853602024-11-28 9:39:3574 days ago1732786775
0x20827008...9043Ec704
0.00016346 ETH
212781992024-11-27 9:29:2375 days ago1732699763
0x20827008...9043Ec704
0.00016858 ETH
212423002024-11-22 9:13:1180 days ago1732266791
0x20827008...9043Ec704
0.00020294 ETH
212116672024-11-18 2:39:1185 days ago1731897551
0x20827008...9043Ec704
0.00020325 ETH
211933592024-11-15 13:21:3587 days ago1731676895
0x20827008...9043Ec704
0.00030789 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
L1MessagesSender

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 20000 runs

Other Settings:
paris EvmVersion
File 1 of 7 : L1MessagesSender.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.21;

import {Ownable} from "openzeppelin/access/Ownable.sol";

import {IStarknetCore} from "./interfaces/IStarknetCore.sol";

import {IAggregatorsFactory} from "./interfaces/IAggregatorsFactory.sol";
import {IAggregator} from "./interfaces/IAggregator.sol";

import {Uint256Splitter} from "./lib/Uint256Splitter.sol";

contract L1MessagesSender is Ownable {
    using Uint256Splitter for uint256;

    IStarknetCore public immutable starknetCore;

    uint256 public l2RecipientAddr;

    IAggregatorsFactory public aggregatorsFactory;

    /// @dev L2 "receive_commitment" L1 handler selector
    uint256 constant RECEIVE_COMMITMENT_L1_HANDLER_SELECTOR =
        0x3fa70707d0e831418fb142ca8fb7483611b84e89c0c42bf1fc2a7a5c40890ad;

    /// @dev L2 "receive_mmr" L1 handler selector
    uint256 constant RECEIVE_MMR_L1_HANDLER_SELECTOR =
        0x36c76e67f1d589956059cbd9e734d42182d1f8a57d5876390bb0fcfe1090bb4;

    /// @param starknetCore_ a StarknetCore address to send and consume messages on/from L2
    /// @param l2RecipientAddr_ a L2 recipient address that is the recipient contract on L2.
    /// @param aggregatorsFactoryAddr_ Herodotus aggregators factory address (where MMR trees are referenced)
    constructor(
        IStarknetCore starknetCore_,
        uint256 l2RecipientAddr_,
        address aggregatorsFactoryAddr_
    ) {
        starknetCore = starknetCore_;
        l2RecipientAddr = l2RecipientAddr_;
        aggregatorsFactory = IAggregatorsFactory(aggregatorsFactoryAddr_);
    }

    /// @notice Send an exact L1 parent hash to L2
    /// @param blockNumber_ the child block of the requested parent hash
    function sendExactParentHashToL2(uint256 blockNumber_) external payable {
        bytes32 parentHash = blockhash(blockNumber_ - 1);
        require(parentHash != bytes32(0), "ERR_INVALID_BLOCK_NUMBER");

        _sendBlockHashToL2(parentHash, blockNumber_);
    }

    /// @notice Send the L1 latest parent hash to L2
    function sendLatestParentHashToL2() external payable {
        bytes32 parentHash = blockhash(block.number - 1);
        _sendBlockHashToL2(parentHash, block.number);
    }

    /// @param aggregatorId The id of a tree previously created by the aggregators factory
    function sendPoseidonMMRTreeToL2(uint256 aggregatorId) external payable {
        address existingAggregatorAddr = aggregatorsFactory.aggregatorsById(
            aggregatorId
        );

        require(existingAggregatorAddr != address(0), "Unknown aggregator");

        IAggregator aggregator = IAggregator(existingAggregatorAddr);
        bytes32 poseidonMMRRoot = aggregator.getMMRPoseidonRoot();
        uint256 mmrSize = aggregator.getMMRSize();

        require(mmrSize >= 1, "Invalid tree size");
        require(poseidonMMRRoot != bytes32(0), "Invalid root (Poseidon)");

        _sendPoseidonMMRTreeToL2(poseidonMMRRoot, mmrSize, aggregatorId);
    }

    function _sendBlockHashToL2(
        bytes32 parentHash_,
        uint256 blockNumber_
    ) internal {
        uint256[] memory message = new uint256[](4);
        (uint256 parentHashLow, uint256 parentHashHigh) = uint256(parentHash_)
            .split128();
        (uint256 blockNumberLow, uint256 blockNumberHigh) = blockNumber_
            .split128();
        message[0] = parentHashLow;
        message[1] = parentHashHigh;
        message[2] = blockNumberLow;
        message[3] = blockNumberHigh;

        starknetCore.sendMessageToL2{value: msg.value}(
            l2RecipientAddr,
            RECEIVE_COMMITMENT_L1_HANDLER_SELECTOR,
            message
        );
    }

    function _sendPoseidonMMRTreeToL2(
        bytes32 poseidonMMRRoot,
        uint256 mmrSize,
        uint256 aggregatorId
    ) internal {
        uint256[] memory message = new uint256[](3);

        message[0] = uint256(poseidonMMRRoot);
        message[1] = mmrSize;
        message[2] = aggregatorId;

        // Pass along msg.value
        starknetCore.sendMessageToL2{value: msg.value}(
            l2RecipientAddr,
            RECEIVE_MMR_L1_HANDLER_SELECTOR,
            message
        );
    }

    /// @notice Set the L2 recipient address
    /// @param newL2RecipientAddr_ The new L2 recipient address
    function setL2RecipientAddr(
        uint256 newL2RecipientAddr_
    ) external onlyOwner {
        l2RecipientAddr = newL2RecipientAddr_;
    }

    /// @notice Set the aggregators factory address
    /// @param newAggregatorsFactoryAddr_ The new aggregators factory address
    function setAggregatorsFactoryAddr(
        address newAggregatorsFactoryAddr_
    ) external onlyOwner {
        aggregatorsFactory = IAggregatorsFactory(newAggregatorsFactoryAddr_);
    }
}

File 2 of 7 : 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 3 of 7 : IStarknetCore.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.21;

interface IStarknetCore {
    /**
      Sends a message to an L2 contract.
      This function is payable, the payed amount is the message fee.

      Returns the hash of the message and the nonce of the message.
    */
    function sendMessageToL2(
        uint256 toAddress,
        uint256 selector,
        uint256[] calldata payload
    ) external payable returns (bytes32, uint256);

    /**
      Consumes a message that was sent from an L2 contract.

      Returns the hash of the message.
    */
    function consumeMessageFromL2(
        uint256 fromAddress,
        uint256[] calldata payload
    ) external returns (bytes32);

    /**
      Starts the cancellation of an L1 to L2 message.
      A message can be canceled messageCancellationDelay() seconds after this function is called.

      Note: This function may only be called for a message that is currently pending and the caller
      must be the sender of the that message.
    */
    function startL1ToL2MessageCancellation(
        uint256 toAddress,
        uint256 selector,
        uint256[] calldata payload,
        uint256 nonce
    ) external returns (bytes32);

    /**
      Cancels an L1 to L2 message, this function should be called at least
      messageCancellationDelay() seconds after the call to startL1ToL2MessageCancellation().
      A message may only be cancelled by its sender.
      If the message is missing, the call will revert.

      Note that the message fee is not refunded.
    */
    function cancelL1ToL2Message(
        uint256 toAddress,
        uint256 selector,
        uint256[] calldata payload,
        uint256 nonce
    ) external returns (bytes32);
}

File 4 of 7 : IAggregatorsFactory.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.21;

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

interface IAggregatorsFactory {
    function aggregatorsById(uint256 id) external view returns (address);
}

File 5 of 7 : IAggregator.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.21;

interface IAggregator {
    /// @notice Returns the current root hash of the Keccak Merkle Mountain Range (MMR) tree
    function getMMRKeccakRoot() external view returns (bytes32);

    /// @notice Returns the current root hash of the Poseidon Merkle Mountain Range (MMR) tree
    function getMMRPoseidonRoot() external view returns (bytes32);

    /// @notice Returns the current size of the Merkle Mountain Range (MMR) trees
    function getMMRSize() external view returns (uint256);
}

File 6 of 7 : Uint256Splitter.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

library Uint256Splitter {
    uint256 constant _MASK = type(uint128).max;

    /// @notice Splits a uint256 into two uint128s (low, high) represented as uint256s.
    /// @param a The uint256 to split.
    function split128(
        uint256 a
    ) internal pure returns (uint256 lower, uint256 upper) {
        return (a & _MASK, a >> 128);
    }

    /// @notice Merges two uint128s (low, high) into one uint256.
    /// @param lower The lower uint256. The caller is required to pass a value that is less than 2^128 - 1.
    /// @param upper The upper uint256.
    function merge128(
        uint256 lower,
        uint256 upper
    ) internal pure returns (uint256 a) {
        require(lower <= _MASK, "Uint256Splitter: lower exceeds uint128");
        // return (upper << 128) | lower;
        assembly {
            a := or(shl(128, upper), lower)
        }
    }
}

File 7 of 7 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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;
    }
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin/=lib/openzeppelin-contracts/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 20000
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IStarknetCore","name":"starknetCore_","type":"address"},{"internalType":"uint256","name":"l2RecipientAddr_","type":"uint256"},{"internalType":"address","name":"aggregatorsFactoryAddr_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"aggregatorsFactory","outputs":[{"internalType":"contract IAggregatorsFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2RecipientAddr","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":"blockNumber_","type":"uint256"}],"name":"sendExactParentHashToL2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"sendLatestParentHashToL2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"aggregatorId","type":"uint256"}],"name":"sendPoseidonMMRTreeToL2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newAggregatorsFactoryAddr_","type":"address"}],"name":"setAggregatorsFactoryAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newL2RecipientAddr_","type":"uint256"}],"name":"setL2RecipientAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"starknetCore","outputs":[{"internalType":"contract IStarknetCore","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b50604051610de4380380610de483398101604081905261002f916100ce565b61003833610066565b6001600160a01b03928316608052600191909155600280546001600160a01b03191691909216179055610111565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100cb57600080fd5b50565b6000806000606084860312156100e357600080fd5b83516100ee816100b6565b602085015160408601519194509250610106816100b6565b809150509250925092565b608051610caa61013a6000396000818161012a015281816107b20152610a510152610caa6000f3fe6080604052600436106100bc5760003560e01c8063715018a611610074578063a28730321161004e578063a287303214610205578063f2fde38b1461020d578063fda70f201461022d57600080fd5b8063715018a6146101a557806384ceb32c146101ba5780638da5cb5b146101da57600080fd5b80634573e7fc116100a55780634573e7fc1461014c5780636c41ecf1146101705780636cc1b95b1461018557600080fd5b806323a31e57146100c157806339e730ab14610118575b600080fd5b3480156100cd57600080fd5b506002546100ee9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561012457600080fd5b506100ee7f000000000000000000000000000000000000000000000000000000000000000081565b34801561015857600080fd5b5061016260015481565b60405190815260200161010f565b61018361017e366004610af7565b610240565b005b34801561019157600080fd5b506101836101a0366004610b32565b610527565b3480156101b157600080fd5b50610183610576565b3480156101c657600080fd5b506101836101d5366004610af7565b61058a565b3480156101e657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100ee565b610183610597565b34801561021957600080fd5b50610183610228366004610b32565b6105b4565b61018361023b366004610af7565b610668565b6002546040517f7b8269220000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690637b82692290602401602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d49190610b56565b905073ffffffffffffffffffffffffffffffffffffffff8116610358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6b6e6f776e2061676772656761746f72000000000000000000000000000060448201526064015b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663b13c7cde6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ce9190610b73565b905060008273ffffffffffffffffffffffffffffffffffffffff166365ff47ee6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561041d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104419190610b73565b905060018110156104ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420747265652073697a65000000000000000000000000000000604482015260640161034f565b81610515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c696420726f6f742028506f736569646f6e29000000000000000000604482015260640161034f565b6105208282876106ed565b5050505050565b61052f610855565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61057e610855565b61058860006108d6565b565b610592610855565b600155565b60006105a4600143610b8c565b4090506105b1814361094b565b50565b6105bc610855565b73ffffffffffffffffffffffffffffffffffffffff811661065f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161034f565b6105b1816108d6565b6000610675600183610b8c565b409050806106df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552525f494e56414c49445f424c4f434b5f4e554d4245520000000000000000604482015260640161034f565b6106e9818361094b565b5050565b60408051600380825260808201909252600091602082016060803683370190505090508360001c8160008151811061072757610727610bcc565b602002602001018181525050828160018151811061074757610747610bcc565b602002602001018181525050818160028151811061076757610767610bcc565b60209081029190910101526001546040517f3e3aa6c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691633e3aa6c591349161080b917f036c76e67f1d589956059cbd9e734d42182d1f8a57d5876390bb0fcfe1090bb4908790600401610bfb565b604080518083038185885af1158015610828573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061084d9190610c50565b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034f565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051600480825260a082019092526000916020820160808036833750508151919250506fffffffffffffffffffffffffffffffff84811691608086811c928616919086901c90849086906000906109a6576109a6610bcc565b60200260200101818152505082856001815181106109c6576109c6610bcc565b60200260200101818152505081856002815181106109e6576109e6610bcc565b6020026020010181815250508085600381518110610a0657610a06610bcc565b60209081029190910101526001546040517f3e3aa6c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691633e3aa6c5913491610aaa917f03fa70707d0e831418fb142ca8fb7483611b84e89c0c42bf1fc2a7a5c40890ad908b90600401610bfb565b604080518083038185885af1158015610ac7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610aec9190610c50565b505050505050505050565b600060208284031215610b0957600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146105b157600080fd5b600060208284031215610b4457600080fd5b8135610b4f81610b10565b9392505050565b600060208284031215610b6857600080fd5b8151610b4f81610b10565b600060208284031215610b8557600080fd5b5051919050565b81810381811115610bc6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000606082018583526020858185015260606040850152818551808452608086019150828701935060005b81811015610c4257845183529383019391830191600101610c26565b509098975050505050505050565b60008060408385031215610c6357600080fd5b50508051602090910151909290915056fea26469706673582212208e2e3ba78f8fd1ad07da7b37d20fae4a54177f319719cdb8a548932564cb9e3264736f6c63430008150033000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c4033ccf9558480bb06843d47e9582e1c16e17a71229ae28bdc89a5d0c93f32c6d0000000000000000000000005c189aedecbc07830b64ec8cae51ce38e4365286

Deployed Bytecode

0x6080604052600436106100bc5760003560e01c8063715018a611610074578063a28730321161004e578063a287303214610205578063f2fde38b1461020d578063fda70f201461022d57600080fd5b8063715018a6146101a557806384ceb32c146101ba5780638da5cb5b146101da57600080fd5b80634573e7fc116100a55780634573e7fc1461014c5780636c41ecf1146101705780636cc1b95b1461018557600080fd5b806323a31e57146100c157806339e730ab14610118575b600080fd5b3480156100cd57600080fd5b506002546100ee9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561012457600080fd5b506100ee7f000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c481565b34801561015857600080fd5b5061016260015481565b60405190815260200161010f565b61018361017e366004610af7565b610240565b005b34801561019157600080fd5b506101836101a0366004610b32565b610527565b3480156101b157600080fd5b50610183610576565b3480156101c657600080fd5b506101836101d5366004610af7565b61058a565b3480156101e657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100ee565b610183610597565b34801561021957600080fd5b50610183610228366004610b32565b6105b4565b61018361023b366004610af7565b610668565b6002546040517f7b8269220000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690637b82692290602401602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d49190610b56565b905073ffffffffffffffffffffffffffffffffffffffff8116610358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6b6e6f776e2061676772656761746f72000000000000000000000000000060448201526064015b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663b13c7cde6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ce9190610b73565b905060008273ffffffffffffffffffffffffffffffffffffffff166365ff47ee6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561041d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104419190610b73565b905060018110156104ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420747265652073697a65000000000000000000000000000000604482015260640161034f565b81610515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c696420726f6f742028506f736569646f6e29000000000000000000604482015260640161034f565b6105208282876106ed565b5050505050565b61052f610855565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61057e610855565b61058860006108d6565b565b610592610855565b600155565b60006105a4600143610b8c565b4090506105b1814361094b565b50565b6105bc610855565b73ffffffffffffffffffffffffffffffffffffffff811661065f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161034f565b6105b1816108d6565b6000610675600183610b8c565b409050806106df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552525f494e56414c49445f424c4f434b5f4e554d4245520000000000000000604482015260640161034f565b6106e9818361094b565b5050565b60408051600380825260808201909252600091602082016060803683370190505090508360001c8160008151811061072757610727610bcc565b602002602001018181525050828160018151811061074757610747610bcc565b602002602001018181525050818160028151811061076757610767610bcc565b60209081029190910101526001546040517f3e3aa6c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c41691633e3aa6c591349161080b917f036c76e67f1d589956059cbd9e734d42182d1f8a57d5876390bb0fcfe1090bb4908790600401610bfb565b604080518083038185885af1158015610828573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061084d9190610c50565b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161034f565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051600480825260a082019092526000916020820160808036833750508151919250506fffffffffffffffffffffffffffffffff84811691608086811c928616919086901c90849086906000906109a6576109a6610bcc565b60200260200101818152505082856001815181106109c6576109c6610bcc565b60200260200101818152505081856002815181106109e6576109e6610bcc565b6020026020010181815250508085600381518110610a0657610a06610bcc565b60209081029190910101526001546040517f3e3aa6c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c41691633e3aa6c5913491610aaa917f03fa70707d0e831418fb142ca8fb7483611b84e89c0c42bf1fc2a7a5c40890ad908b90600401610bfb565b604080518083038185885af1158015610ac7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610aec9190610c50565b505050505050505050565b600060208284031215610b0957600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146105b157600080fd5b600060208284031215610b4457600080fd5b8135610b4f81610b10565b9392505050565b600060208284031215610b6857600080fd5b8151610b4f81610b10565b600060208284031215610b8557600080fd5b5051919050565b81810381811115610bc6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000606082018583526020858185015260606040850152818551808452608086019150828701935060005b81811015610c4257845183529383019391830191600101610c26565b509098975050505050505050565b60008060408385031215610c6357600080fd5b50508051602090910151909290915056fea26469706673582212208e2e3ba78f8fd1ad07da7b37d20fae4a54177f319719cdb8a548932564cb9e3264736f6c63430008150033

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

000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c4033ccf9558480bb06843d47e9582e1c16e17a71229ae28bdc89a5d0c93f32c6d0000000000000000000000005c189aedecbc07830b64ec8cae51ce38e4365286

-----Decoded View---------------
Arg [0] : starknetCore_ (address): 0xc662c410C0ECf747543f5bA90660f6ABeBD9C8c4
Arg [1] : l2RecipientAddr_ (uint256): 1464382057459460809554074554286138003603108906878236079583274491394512858221
Arg [2] : aggregatorsFactoryAddr_ (address): 0x5C189aEdEcBc07830B64Ec8CAE51ce38E4365286

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c4
Arg [1] : 033ccf9558480bb06843d47e9582e1c16e17a71229ae28bdc89a5d0c93f32c6d
Arg [2] : 0000000000000000000000005c189aedecbc07830b64ec8cae51ce38e4365286


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.