Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
20161518 | 170 days ago | 0.0002 ETH | ||||
20161518 | 170 days ago | 0.0002 ETH | ||||
19992870 | 194 days ago | 0.00044948 ETH | ||||
19992870 | 194 days ago | 0.00044948 ETH | ||||
19877206 | 210 days ago | 0.00051261 ETH | ||||
19877206 | 210 days ago | 0.00051261 ETH | ||||
19877115 | 210 days ago | 0.00064949 ETH | ||||
19877115 | 210 days ago | 0.00064949 ETH | ||||
19863220 | 212 days ago | 0.0002 ETH | ||||
19863220 | 212 days ago | 0.0002 ETH | ||||
19863212 | 212 days ago | 0.00088836 ETH | ||||
19863212 | 212 days ago | 0.00088836 ETH | ||||
19862802 | 212 days ago | 0.0015 ETH | ||||
19862802 | 212 days ago | 0.0015 ETH | ||||
19812700 | 219 days ago | 0.00054549 ETH | ||||
19812700 | 219 days ago | 0.00054549 ETH | ||||
19794059 | 221 days ago | 0.00047216 ETH | ||||
19794059 | 221 days ago | 0.00047216 ETH | ||||
19747743 | 228 days ago | 0.00060215 ETH | ||||
19747743 | 228 days ago | 0.00060215 ETH | ||||
19662869 | 240 days ago | 0.0015 ETH | ||||
19662869 | 240 days ago | 0.0015 ETH | ||||
19658250 | 240 days ago | 0.00053378 ETH | ||||
19658250 | 240 days ago | 0.00053378 ETH | ||||
19632838 | 244 days ago | 0.0015 ETH |
Loading...
Loading
Contract Name:
Messenger
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
Yes with 10000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// 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; } }
// 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); }
// 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; }
// 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); }
// 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)); } }
// 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; }
// 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; }
// 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'; }
{ "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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.