ETH Price: $2,454.27 (+1.14%)

Contract

0xf6A66b137B993A4571329cdC9F2523AC8da01649
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60c06040187172302023-12-05 2:40:35307 days ago1701744035IN
 Create: Messenger
0 ETH0.0319254362.08879056

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
201615182024-06-24 12:23:35104 days ago1719231815
0xf6A66b13...C8da01649
0.0002 ETH
201615182024-06-24 12:23:35104 days ago1719231815
0xf6A66b13...C8da01649
0.0002 ETH
199928702024-05-31 22:43:47128 days ago1717195427
0xf6A66b13...C8da01649
0.00044948 ETH
199928702024-05-31 22:43:47128 days ago1717195427
0xf6A66b13...C8da01649
0.00044948 ETH
198772062024-05-15 18:34:35144 days ago1715798075
0xf6A66b13...C8da01649
0.00051261 ETH
198772062024-05-15 18:34:35144 days ago1715798075
0xf6A66b13...C8da01649
0.00051261 ETH
198771152024-05-15 18:16:23144 days ago1715796983
0xf6A66b13...C8da01649
0.00064949 ETH
198771152024-05-15 18:16:23144 days ago1715796983
0xf6A66b13...C8da01649
0.00064949 ETH
198632202024-05-13 19:35:47146 days ago1715628947
0xf6A66b13...C8da01649
0.0002 ETH
198632202024-05-13 19:35:47146 days ago1715628947
0xf6A66b13...C8da01649
0.0002 ETH
198632122024-05-13 19:34:11146 days ago1715628851
0xf6A66b13...C8da01649
0.00088836 ETH
198632122024-05-13 19:34:11146 days ago1715628851
0xf6A66b13...C8da01649
0.00088836 ETH
198628022024-05-13 18:10:59146 days ago1715623859
0xf6A66b13...C8da01649
0.0015 ETH
198628022024-05-13 18:10:59146 days ago1715623859
0xf6A66b13...C8da01649
0.0015 ETH
198127002024-05-06 18:02:35153 days ago1715018555
0xf6A66b13...C8da01649
0.00054549 ETH
198127002024-05-06 18:02:35153 days ago1715018555
0xf6A66b13...C8da01649
0.00054549 ETH
197940592024-05-04 3:28:23156 days ago1714793303
0xf6A66b13...C8da01649
0.00047216 ETH
197940592024-05-04 3:28:23156 days ago1714793303
0xf6A66b13...C8da01649
0.00047216 ETH
197477432024-04-27 16:05:11162 days ago1714233911
0xf6A66b13...C8da01649
0.00060215 ETH
197477432024-04-27 16:05:11162 days ago1714233911
0xf6A66b13...C8da01649
0.00060215 ETH
196628692024-04-15 19:02:59174 days ago1713207779
0xf6A66b13...C8da01649
0.0015 ETH
196628692024-04-15 19:02:59174 days ago1713207779
0xf6A66b13...C8da01649
0.0015 ETH
196582502024-04-15 3:31:11175 days ago1713151871
0xf6A66b13...C8da01649
0.00053378 ETH
196582502024-04-15 3:31:11175 days ago1713151871
0xf6A66b13...C8da01649
0.00053378 ETH
196328382024-04-11 14:01:23178 days ago1712844083
0xf6A66b13...C8da01649
0.0015 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Messenger

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 10000 runs

Other Settings:
paris EvmVersion
File 1 of 8 : Messenger.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.17;

import { IStarknetCore } from './interfaces/IStarknetCore.sol';
import { IMessenger } from './interfaces/IMessenger.sol';
import { IPropHouse } from './interfaces/IPropHouse.sol';
import { Uint256 } from './lib/utils/Uint256.sol';

contract Messenger is IMessenger {
    using { Uint256.toUint256 } for address;

    /// @notice The Starknet Core contract
    IStarknetCore public immutable starknet;

    /// @notice The Prop House contract
    IPropHouse public immutable propHouse;

    /// @notice Require that the caller is a valid round
    modifier onlyRound() {
        if (!propHouse.isRound(msg.sender)) {
            revert ONLY_ROUND();
        }
        _;
    }

    /// @param _starknet The Starknet core contract address
    /// @param _propHouse The Prop House contract address
    constructor(address _starknet, address _propHouse) {
        starknet = IStarknetCore(_starknet);
        propHouse = IPropHouse(_propHouse);
    }

    /// @notice Send a message to an L2 contract and return the hash of the message
    /// @param toAddress The callee address
    /// @param selector The function selector
    /// @param payload The message payload
    function sendMessageToL2(
        uint256 toAddress,
        uint256 selector,
        uint256[] calldata payload
    ) external payable onlyRound returns (bytes32) {
        return starknet.sendMessageToL2{ value: msg.value }(toAddress, selector, _insertCaller(payload));
    }

    /// @notice Starts the cancellation of an L1 to L2 message
    /// @param toAddress The callee address
    /// @param selector The function selector
    /// @param payload The message payload
    /// @param nonce The message cancellation nonce
    function startL1ToL2MessageCancellation(
        uint256 toAddress,
        uint256 selector,
        uint256[] calldata payload,
        uint256 nonce
    ) external onlyRound {
        return starknet.startL1ToL2MessageCancellation(toAddress, selector, _insertCaller(payload), nonce);
    }

    /// @notice Cancels an L1 to L2 message, this function should be called `messageCancellationDelay` seconds
    /// after the call to startL1ToL2MessageCancellation()
    /// @param selector The function selector
    /// @param payload The message payload
    /// @param nonce The message cancellation nonce
    function cancelL1ToL2Message(
        uint256 toAddress,
        uint256 selector,
        uint256[] calldata payload,
        uint256 nonce
    ) external onlyRound {
        return starknet.cancelL1ToL2Message(toAddress, selector, _insertCaller(payload), nonce);
    }

    /// @notice Insert the `msg.sender` address to the first index of the payload.
    /// This is used to prevent spoofing in the event of a malicious manager.
    /// @param payload The message payload
    function _insertCaller(uint256[] memory payload) internal view returns (uint256[] memory) {
        payload[0] = msg.sender.toUint256();
        return payload;
    }
}

File 2 of 8 : IStarknetCore.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.17;

interface IStarknetCore {
    /// @notice Send a message to an L2 contract and return the hash of the message
    /// @param toAddress The callee address
    /// @param selector The function selector
    /// @param payload The message payload
    function sendMessageToL2(
        uint256 toAddress,
        uint256 selector,
        uint256[] calldata payload
    ) external payable returns (bytes32);

    /// @notice Starts the cancellation of an L1 to L2 message
    /// @param toAddress The callee address
    /// @param selector The function selector
    /// @param payload The message payload
    /// @param nonce The message nonce
    function startL1ToL2MessageCancellation(
        uint256 toAddress,
        uint256 selector,
        uint256[] calldata payload,
        uint256 nonce
    ) external;

    /// @notice Cancels an L1 to L2 message, this function should be called messageCancellationDelay() seconds
    /// after the call to startL1ToL2MessageCancellation()
    /// @param selector The function selector
    /// @param payload The message payload
    /// @param nonce The message nonce
    function cancelL1ToL2Message(
        uint256 toAddress,
        uint256 selector,
        uint256[] calldata payload,
        uint256 nonce
    ) external;

    /// @notice Consume a message that was sent from an L2 contract and return the hash of the message
    /// @param fromAddress The caller address
    /// @param payload The message payload
    function consumeMessageFromL2(uint256 fromAddress, uint256[] calldata payload) external returns (bytes32);
}

File 3 of 8 : IMessenger.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.17;

import { IStarknetCore } from './IStarknetCore.sol';

interface IMessenger {
    /// @notice Thrown when the caller of a guarded function is not a valid round
    error ONLY_ROUND();

    /// @notice Returns the Starknet core contract instance
    function starknet() external view returns (IStarknetCore);

    /// @notice Send a message to an L2 contract and return the hash of the message
    /// @param toAddress The callee address
    /// @param selector The function selector
    /// @param payload The message payload
    function sendMessageToL2(
        uint256 toAddress,
        uint256 selector,
        uint256[] calldata payload
    ) external payable returns (bytes32);

    /// @notice Starts the cancellation of an L1 to L2 message
    /// @param toAddress The callee address
    /// @param selector The function selector
    /// @param payload The message payload
    /// @param nonce The message cancellation nonce
    function startL1ToL2MessageCancellation(
        uint256 toAddress,
        uint256 selector,
        uint256[] calldata payload,
        uint256 nonce
    ) external;

    /// @notice Cancels an L1 to L2 message, this function should be called messageCancellationDelay() seconds
    /// after the call to startL1ToL2MessageCancellation()
    /// @param selector The function selector
    /// @param payload The message payload
    /// @param nonce The message cancellation nonce
    function cancelL1ToL2Message(
        uint256 toAddress,
        uint256 selector,
        uint256[] calldata payload,
        uint256 nonce
    ) external;
}

File 4 of 8 : IPropHouse.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.17;

import { Asset } from '../lib/types/Common.sol';
import { IERC721 } from './IERC721.sol';

/// @notice Interface implemented by the Prop House entry contract
interface IPropHouse is IERC721 {
    /// @notice House creation data, including the implementation contract and config
    struct House {
        address impl;
        bytes config;
    }

    /// @notice Round creation data, including the implementation contract, config, and other metadata
    struct Round {
        address impl;
        bytes config;
        string title;
        string description;
    }

    /// @notice Thrown when an insufficient amount of ether is provided to `msg.value`
    error INSUFFICIENT_ETHER_SUPPLIED();

    /// @notice Thrown when a provided house is invalid
    error INVALID_HOUSE();

    /// @notice Thrown when a provided round is invalid
    error INVALID_ROUND();

    /// @notice Thrown when a provided house implementation is invalid
    error INVALID_HOUSE_IMPL();

    /// @notice Thrown when a round implementation contract is invalid for a house
    error INVALID_ROUND_IMPL_FOR_HOUSE();

    /// @notice Thrown when a house attempts to pull tokens from a user who has not approved it
    error HOUSE_NOT_APPROVED_BY_USER();

    /// @notice Emitted when a house is created
    /// @param creator The house creator
    /// @param house The house contract address
    /// @param kind The house contract type
    event HouseCreated(address indexed creator, address indexed house, bytes32 kind);

    /// @notice Emitted when a round is created
    /// @param creator The round creator
    /// @param house The house that the round was created on
    /// @param round The round contract address
    /// @param kind The round contract type
    /// @param title The round title
    /// @param description The round description
    event RoundCreated(
        address indexed creator,
        address indexed house,
        address indexed round,
        bytes32 kind,
        string title,
        string description
    );

    /// @notice Emitted when an asset is deposited to a round
    /// @param from The user who deposited the asset
    /// @param round The round that received the asset
    /// @param asset The asset information
    event DepositToRound(address from, address round, Asset asset);

    /// @notice Emitted when one or more assets are deposited to a round
    /// @param from The user who deposited the asset(s)
    /// @param round The round that received the asset(s)
    /// @param assets The asset information
    event BatchDepositToRound(address from, address round, Asset[] assets);

    /// @notice Returns `true` if the passed `house` address is valid
    /// @param house The house address
    function isHouse(address house) external view returns (bool);

    /// @notice Returns `true` if the passed `round` address is valid on any house
    /// @param round The round address
    function isRound(address round) external view returns (bool);
}

File 5 of 8 : Uint256.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.17;

import { MAX_250_BIT_UNSIGNED } from '../../Constants.sol';

library Uint256 {
    /// @notice Split a uint256 into a high and low value
    /// @param value The uint256 value to split
    /// @dev This is useful for passing uint256 values to Starknet, whose felt
    /// type only supports 251 bits.
    function split(uint256 value) internal pure returns (uint256, uint256) {
        uint256 low = value & ((1 << 128) - 1);
        uint256 high = value >> 128;
        return (low, high);
    }

    /// Mask the passed `value` to 250 bits
    /// @param value The value to mask
    function mask250(bytes32 value) internal pure returns (uint256) {
        return uint256(value) & MAX_250_BIT_UNSIGNED;
    }

    /// @notice Convert an address to a uint256
    /// @param addr The address to convert
    function toUint256(address addr) internal pure returns (uint256) {
        return uint256(uint160(addr));
    }
}

File 6 of 8 : Common.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.17;

/// @notice Supported asset types
enum AssetType {
    Native,
    ERC20,
    ERC721,
    ERC1155
}

/// @notice Common struct for all supported asset types
struct Asset {
    AssetType assetType;
    address token;
    uint256 identifier;
    uint256 amount;
}

/// @notice Packed asset information, which consists of an asset ID and amount
struct PackedAsset {
    uint256 assetId;
    uint256 amount;
}

/// @notice Merkle proof information for an incremental tree
struct IncrementalTreeProof {
    bytes32[] siblings;
    uint8[] pathIndices;
}

/// @notice A meta-transaction relayer address and deposit amount
struct MetaTransaction {
    address relayer;
    uint256 deposit;
}

File 7 of 8 : IERC721.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.17;

/// @title IERC721
/// @notice The external ERC721 events, errors, and functions
interface IERC721 {
    /// @dev Thrown when a caller is not authorized to approve or transfer a token
    error INVALID_APPROVAL();

    /// @dev Thrown when a transfer is called with the incorrect token owner
    error INVALID_OWNER();

    /// @dev Thrown when a transfer is attempted to address(0)
    error INVALID_RECIPIENT();

    /// @dev Thrown when an existing token is called to be minted
    error ALREADY_MINTED();

    /// @dev Thrown when a non-existent token is called to be burned
    error NOT_MINTED();

    /// @dev Thrown when address(0) is incorrectly provided
    error ADDRESS_ZERO();

    /// @notice Emitted when a token is transferred from sender to recipient
    /// @param from The sender address
    /// @param to The recipient address
    /// @param tokenId The ERC-721 token id
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /// @notice Emitted when an owner approves an account to manage a token
    /// @param owner The owner address
    /// @param approved The account address
    /// @param tokenId The ERC-721 token id
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /// @notice Emitted when an owner sets an approval for a spender to manage all tokens
    /// @param owner The owner address
    /// @param operator The spender address
    /// @param approved If the approval is being set or removed
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /// @notice Emitted when the contract URI is updated
    /// @param uri The updated contract URI
    event ContractURIUpdated(string uri);

    /// @notice Contract-level metadata
    function contractURI() external view returns (string memory);

    /// @notice The number of tokens owned
    /// @param owner The owner address
    function balanceOf(address owner) external view returns (uint256);

    /// @notice The owner of a token
    /// @param tokenId The ERC-721 token id
    function ownerOf(uint256 tokenId) external view returns (address);

    /// @notice The account approved to manage a token
    /// @param tokenId The ERC-721 token id
    function getApproved(uint256 tokenId) external view returns (address);

    /// @notice If an operator is authorized to manage all of an owner's tokens
    /// @param owner The owner address
    /// @param operator The operator address
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /// @notice Authorizes an account to manage a token
    /// @param to The account address
    /// @param tokenId The ERC-721 token id
    function approve(address to, uint256 tokenId) external;

    /// @notice Authorizes an account to manage all tokens
    /// @param operator The account address
    /// @param approved If permission is being given or removed
    function setApprovalForAll(address operator, bool approved) external;

    /// @notice Safe transfers a token from sender to recipient with additional data
    /// @param from The sender address
    /// @param to The recipient address
    /// @param tokenId The ERC-721 token id
    /// @param data The additional data sent in the call to the recipient
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;

    /// @notice Safe transfers a token from sender to recipient
    /// @param from The sender address
    /// @param to The recipient address
    /// @param tokenId The ERC-721 token id
    function safeTransferFrom(address from, address to, uint256 tokenId) external;

    /// @notice Transfers a token from sender to recipient
    /// @param from The sender address
    /// @param to The recipient address
    /// @param tokenId The ERC-721 token id
    function transferFrom(address from, address to, uint256 tokenId) external;
}

File 8 of 8 : Constants.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.17;

// ETH pseudo-token address
address constant ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;

// The maximum value that can be represented as an unsigned 250-bit integer
uint256 constant MAX_250_BIT_UNSIGNED = 0x03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

/// @notice Starknet function selector constants
library Selector {
    // print(get_selector_from_name("register_round"))
    uint256 constant REGISTER_ROUND = 0x26490f901ea8ad5a245d987479919f1d20fbb0c164367e33ef09a9ea4ba8d04;

    // print(get_selector_from_name("cancel_round"))
    uint256 constant CANCEL_ROUND = 0x8af3ea41808c9515720e56add54a2d8008458a8bc5e347b791c6d75cd0e407;

    // print(get_selector_from_name("finalize_round"))
    uint256 constant FINALIZE_ROUND = 0x2445872c1b7a1219e1e75f2a60719ce0a68a8442fee1bdbee6c3c649340e6f3;

    // print(get_selector_from_name("route_call_to_round"))
    uint256 constant ROUTE_CALL_TO_ROUND = 0x24931ca109ce0ffa87913d91f12d6ac327550c015a573c7b17a187c29ed8c1a;
}

/// @notice Prop House metadata constants
library PHMetadata {
    // The Prop House NFT name
    string constant NAME = 'Prop House';

    // The Prop House entrypoint NFT symbol
    string constant SYMBOL = 'PROP';

    // The Prop House entrypoint NFT contract URI
    string constant URI = 'ipfs://bafkreiagexn2wbv5t63y2xbf6mmcx3rktrqxrsyzf5gl5l7c2lm3bkqjc4';
}

/// @notice Community house metadata constants
library CHMetadata {
    // The Community House type
    bytes32 constant TYPE = 'COMMUNITY';

    // The Community House NFT name
    string constant NAME = 'Community House';

    // The Community House NFT symbol
    string constant SYMBOL = 'COMM';
}

/// @notice Round type constants
library RoundType {
    // The Timed Round type
    bytes32 constant TIMED = 'TIMED';

    // The Infinite Round type
    bytes32 constant INFINITE = 'INFINITE';
}

Settings
{
  "remappings": [
    "@ensdomains/=/Users/prop_house/node_modules/@ensdomains/",
    "@openzeppelin/=/Users/prop_house/node_modules/@openzeppelin/",
    "@prophouse/=/Users/prop_house/node_modules/@prophouse/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "hardhat/=/Users/prop_house/node_modules/hardhat/",
    "solady/=/Users/prop_house/node_modules/solady/",
    "solmate/=/Users/prop_house/node_modules/solmate/",
    "token/=/Users/prop_house/node_modules/@prophouse/protocol/contracts/ethereum/lib/token/",
    "types/=/Users/prop_house/node_modules/@prophouse/protocol/contracts/ethereum/lib/types/",
    "utils/=/Users/prop_house/node_modules/@prophouse/protocol/contracts/ethereum/lib/utils/",
    "lib/forge-std:ds-test/=lib/forge-std/lib/ds-test/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 10000
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "none",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_starknet","type":"address"},{"internalType":"address","name":"_propHouse","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ONLY_ROUND","type":"error"},{"inputs":[{"internalType":"uint256","name":"toAddress","type":"uint256"},{"internalType":"uint256","name":"selector","type":"uint256"},{"internalType":"uint256[]","name":"payload","type":"uint256[]"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"cancelL1ToL2Message","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"propHouse","outputs":[{"internalType":"contract IPropHouse","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"toAddress","type":"uint256"},{"internalType":"uint256","name":"selector","type":"uint256"},{"internalType":"uint256[]","name":"payload","type":"uint256[]"}],"name":"sendMessageToL2","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"starknet","outputs":[{"internalType":"contract IStarknetCore","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"toAddress","type":"uint256"},{"internalType":"uint256","name":"selector","type":"uint256"},{"internalType":"uint256[]","name":"payload","type":"uint256[]"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"startL1ToL2MessageCancellation","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c060405234801561001057600080fd5b5060405161093f38038061093f83398101604081905261002f91610062565b6001600160a01b039182166080521660a052610095565b80516001600160a01b038116811461005d57600080fd5b919050565b6000806040838503121561007557600080fd5b61007e83610046565b915061008c60208401610046565b90509250929050565b60805160a05161085c6100e3600039600081816071015281816101850152818161034e01526105050152600081816101320152818161023d0152818161040601526105bd015261085c6000f3fe60806040526004361061005a5760003560e01c80636170ff1b116100435780636170ff1b146100de5780637a98660b14610100578063bb903eea1461012057600080fd5b80633b8a83a61461005f5780633e3aa6c5146100bd575b600080fd5b34801561006b57600080fd5b506100937f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100d06100cb3660046106a6565b610154565b6040519081526020016100b4565b3480156100ea57600080fd5b506100fe6100f93660046106f9565b610320565b005b34801561010c57600080fd5b506100fe61011b3660046106f9565b6104d7565b34801561012c57600080fd5b506100937f000000000000000000000000000000000000000000000000000000000000000081565b6040517f8c1fc0bb0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690638c1fc0bb90602401602060405180830381865afa1580156101e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102059190610754565b61023b576040517f78c41f0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633e3aa6c53487876102b688888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061063592505050565b6040518563ffffffff1660e01b81526004016102d4939291906107b8565b60206040518083038185885af11580156102f2573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061031791906107d7565b95945050505050565b6040517f8c1fc0bb0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690638c1fc0bb90602401602060405180830381865afa1580156103aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ce9190610754565b610404576040517f78c41f0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636170ff1b868661047e87878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061063592505050565b856040518563ffffffff1660e01b815260040161049e94939291906107f0565b600060405180830381600087803b1580156104b857600080fd5b505af11580156104cc573d6000803e3d6000fd5b505050505050505050565b6040517f8c1fc0bb0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690638c1fc0bb90602401602060405180830381865afa158015610561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105859190610754565b6105bb576040517f78c41f0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637a98660b868661047e87878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061063592505050565b6060338260008151811061064b5761064b610820565b60209081029190910101525090565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b6020830191508360208260051b850101111561069f57600080fd5b9250929050565b600080600080606085870312156106bc57600080fd5b8435935060208501359250604085013567ffffffffffffffff8111156106e157600080fd5b6106ed8782880161065a565b95989497509550505050565b60008060008060006080868803121561071157600080fd5b8535945060208601359350604086013567ffffffffffffffff81111561073657600080fd5b6107428882890161065a565b96999598509660600135949350505050565b60006020828403121561076657600080fd5b8151801515811461077657600080fd5b9392505050565b600081518084526020808501945080840160005b838110156107ad57815187529582019590820190600101610791565b509495945050505050565b838152826020820152606060408201526000610317606083018461077d565b6000602082840312156107e957600080fd5b5051919050565b84815283602082015260806040820152600061080f608083018561077d565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c6343000815000a000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c4000000000000000000000000000000002c93cad6f9cfd00c603aef62458d8a48

Deployed Bytecode

0x60806040526004361061005a5760003560e01c80636170ff1b116100435780636170ff1b146100de5780637a98660b14610100578063bb903eea1461012057600080fd5b80633b8a83a61461005f5780633e3aa6c5146100bd575b600080fd5b34801561006b57600080fd5b506100937f000000000000000000000000000000002c93cad6f9cfd00c603aef62458d8a4881565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100d06100cb3660046106a6565b610154565b6040519081526020016100b4565b3480156100ea57600080fd5b506100fe6100f93660046106f9565b610320565b005b34801561010c57600080fd5b506100fe61011b3660046106f9565b6104d7565b34801561012c57600080fd5b506100937f000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c481565b6040517f8c1fc0bb0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000002c93cad6f9cfd00c603aef62458d8a4873ffffffffffffffffffffffffffffffffffffffff1690638c1fc0bb90602401602060405180830381865afa1580156101e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102059190610754565b61023b576040517f78c41f0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c473ffffffffffffffffffffffffffffffffffffffff16633e3aa6c53487876102b688888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061063592505050565b6040518563ffffffff1660e01b81526004016102d4939291906107b8565b60206040518083038185885af11580156102f2573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061031791906107d7565b95945050505050565b6040517f8c1fc0bb0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000002c93cad6f9cfd00c603aef62458d8a4873ffffffffffffffffffffffffffffffffffffffff1690638c1fc0bb90602401602060405180830381865afa1580156103aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ce9190610754565b610404576040517f78c41f0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c473ffffffffffffffffffffffffffffffffffffffff16636170ff1b868661047e87878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061063592505050565b856040518563ffffffff1660e01b815260040161049e94939291906107f0565b600060405180830381600087803b1580156104b857600080fd5b505af11580156104cc573d6000803e3d6000fd5b505050505050505050565b6040517f8c1fc0bb0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000002c93cad6f9cfd00c603aef62458d8a4873ffffffffffffffffffffffffffffffffffffffff1690638c1fc0bb90602401602060405180830381865afa158015610561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105859190610754565b6105bb576040517f78c41f0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c473ffffffffffffffffffffffffffffffffffffffff16637a98660b868661047e87878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061063592505050565b6060338260008151811061064b5761064b610820565b60209081029190910101525090565b60008083601f84011261066c57600080fd5b50813567ffffffffffffffff81111561068457600080fd5b6020830191508360208260051b850101111561069f57600080fd5b9250929050565b600080600080606085870312156106bc57600080fd5b8435935060208501359250604085013567ffffffffffffffff8111156106e157600080fd5b6106ed8782880161065a565b95989497509550505050565b60008060008060006080868803121561071157600080fd5b8535945060208601359350604086013567ffffffffffffffff81111561073657600080fd5b6107428882890161065a565b96999598509660600135949350505050565b60006020828403121561076657600080fd5b8151801515811461077657600080fd5b9392505050565b600081518084526020808501945080840160005b838110156107ad57815187529582019590820190600101610791565b509495945050505050565b838152826020820152606060408201526000610317606083018461077d565b6000602082840312156107e957600080fd5b5051919050565b84815283602082015260806040820152600061080f608083018561077d565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c6343000815000a

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

000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c4000000000000000000000000000000002c93cad6f9cfd00c603aef62458d8a48

-----Decoded View---------------
Arg [0] : _starknet (address): 0xc662c410C0ECf747543f5bA90660f6ABeBD9C8c4
Arg [1] : _propHouse (address): 0x000000002C93CAD6F9cFD00C603aEf62458d8A48

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c662c410c0ecf747543f5ba90660f6abebd9c8c4
Arg [1] : 000000000000000000000000000000002c93cad6f9cfd00c603aef62458d8a48


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.