Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 8 internal transactions
Advanced mode:
Loading...
Loading
Minimal Proxy Contract for 0x43c015df7f3868b287ad94d88b1e05f596bba453
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xB9d91900...577F4B400 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
TimedRound
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)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { AssetRound } from './base/AssetRound.sol';import { Asset, PackedAsset } from '../lib/types/Common.sol';import { ITimedRound } from '../interfaces/ITimedRound.sol';import { AssetHelper } from '../lib/utils/AssetHelper.sol';import { MerkleProof } from '../lib/utils/MerkleProof.sol';import { Selector, RoundType } from '../Constants.sol';import { Uint256 } from '../lib/utils/Uint256.sol';contract TimedRound is ITimedRound, AssetRound {using { Uint256.mask250 } for bytes32;using { AssetHelper.pack } for Asset;using { AssetHelper.packMany } for Asset[];/// @notice The amount of time before an asset provider can reclaim unclaimed assetsuint256 public constant RECLAIM_UNCLAIMED_ASSETS_AFTER = 4 weeks;/// @notice The amount of time before the security council can emergency withdraw assetsuint256 public constant EMERGENCY_WITHDRAW_ASSETS_AFTER = 8 weeks;/// @notice Maximum winner count for this strategyuint256 public constant MAX_WINNER_COUNT = 25;/// @notice The minimum proposal submission period duration
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { Round } from './Round.sol';import { IERC165 } from '../../interfaces/IERC165.sol';import { AssetHelper } from '../../lib/utils/AssetHelper.sol';import { IAssetRound } from '../../interfaces/IAssetRound.sol';import { AssetController } from '../../lib/utils/AssetController.sol';import { DepositReceiver } from '../../lib/utils/DepositReceiver.sol';import { TokenHolder } from '../../lib/utils/TokenHolder.sol';import { IManager } from '../../interfaces/IManager.sol';import { ERC1155 } from '../../lib/token/ERC1155.sol';import { Asset } from '../../lib/types/Common.sol';abstract contract AssetRound is IAssetRound, Round, AssetController, TokenHolder, ERC1155, DepositReceiver {using { AssetHelper.toID } for Asset;/// @notice The Prop House manager contractIManager public immutable manager;/// @notice Determine if a winner has claimed their award asset/// @dev Proposal IDs map to bits in the uint256 mappingmapping(uint256 => uint256) private _assetClaimStatus;/// @notice The round implementation contract addressaddress private immutable _implementation;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;/// @notice Supported asset typesenum AssetType {Native,ERC20,ERC721,ERC1155}/// @notice Common struct for all supported asset typesstruct Asset {AssetType assetType;address token;uint256 identifier;uint256 amount;}/// @notice Packed asset information, which consists of an asset ID and amountstruct PackedAsset {uint256 assetId;uint256 amount;}/// @notice Merkle proof information for an incremental tree
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { Asset, MetaTransaction } from '../lib/types/Common.sol';/// @notice Interface implemented by the timed roundinterface ITimedRound {/// @notice All possible round statesenum RoundState {Active,Cancelled,Finalized}/// @notice The timed round configurationstruct RoundConfig {Asset[] awards;MetaTransaction metaTx;uint248 proposalThreshold;uint256[] proposingStrategies;uint256[] proposingStrategyParamsFlat;uint256[] votingStrategies;uint256[] votingStrategyParamsFlat;uint40 proposalPeriodStartTimestamp;uint40 proposalPeriodDuration;uint40 votePeriodDuration;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { Asset, AssetType, PackedAsset } from '../types/Common.sol';library AssetHelper {/// @notice Returns the packed asset information for a single asset/// @param asset The asset informationfunction pack(Asset memory asset) internal pure returns (PackedAsset memory packed) {unchecked {packed = PackedAsset({ assetId: toID(asset), amount: asset.amount });}}/// @notice Returns the packed asset information for the provided assets/// @param assets The asset informationfunction packMany(Asset[] memory assets) internal pure returns (PackedAsset[] memory packed) {unchecked {uint256 assetCount = assets.length;packed = new PackedAsset[](assetCount);for (uint256 i = 0; i < assetCount; ++i) {packed[i] = pack(assets[i]);}}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;/// @notice Gas optimized merkle proof verification librarylibrary MerkleProof {function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool isValid) {/// @solidity memory-safe-assemblyassembly {if mload(proof) {// Initialize `offset` to the offset of `proof` elements in memory.let offset := add(proof, 0x20)// Left shift by 5 is equivalent to multiplying by 0x20.let end := add(offset, shl(5, mload(proof)))// Iterate over proof elements to compute root hash.for {} 1 {} {// Slot of `leaf` in scratch space.// If the condition is true: 0x20, otherwise: 0x00.let scratch := shl(5, gt(leaf, mload(offset)))// Store elements to hash contiguously in scratch space.// Scratch space is 64 bytes (0x00 - 0x3f) and both elements are 32 bytes.mstore(scratch, leaf)mstore(xor(scratch, 0x20), mload(offset))// Reuse `leaf` to store the hash to reduce stack operations.leaf := keccak256(0x00, 0x40)offset := add(offset, 0x20)if iszero(lt(offset, end)) { break }
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;// ETH pseudo-token addressaddress constant ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;// The maximum value that can be represented as an unsigned 250-bit integeruint256 constant MAX_250_BIT_UNSIGNED = 0x03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;/// @notice Starknet function selector constantslibrary 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 constantslibrary PHMetadata {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma 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 maskfunction 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 convertfunction toUint256(address addr) internal pure returns (uint256) {return uint256(uint160(addr));
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { Clone } from 'solady/src/utils/Clone.sol';import { IHouse } from '../../interfaces/IHouse.sol';import { IRound } from '../../interfaces/IRound.sol';import { IPropHouse } from '../../interfaces/IPropHouse.sol';import { IStarknetCore } from '../../interfaces/IStarknetCore.sol';import { IMessenger } from '../../interfaces/IMessenger.sol';import { Uint256 } from '../../lib/utils/Uint256.sol';import { Selector } from '../../Constants.sol';abstract contract Round is IRound, Clone {using { Uint256.toUint256 } for address;/// @notice The round typebytes32 public immutable kind;/// @notice The hash of the Starknet round contractuint256 public immutable classHash;/// @notice The entrypoint for all house and round creationIPropHouse public immutable propHouse;/// @notice The Starknet Core contractIStarknetCore public immutable starknet;
12345678910111213// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;/// @title IERC165/// @notice Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP].interface IERC165 {/// @dev Returns true if this contract implements the interface defined by/// `interfaceId`. See the corresponding/// https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]/// to learn more about how these ids are created./// This function call must use less than 30000 gas.function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { IRound } from './IRound.sol';import { PackedAsset } from '../lib/types/Common.sol';interface IAssetRound is IRound {/// @notice Thrown when an asset has already been claimederror ALREADY_CLAIMED();/// @notice Thrown when the provided merkle proof is invaliderror INVALID_MERKLE_PROOF();/// @notice Thrown when the caller of a guarded function is not the security councilerror ONLY_SECURITY_COUNCIL();/// @notice Emitted when an asset is claimed by a winner/// @param proposalId The ID of the winning proposal/// @param claimer The address of the claimer (winner)/// @param recipient The recipient of the asset/// @param asset The ID and amount of the asset being claimedevent AssetClaimed(uint256 proposalId, address claimer, address recipient, PackedAsset asset);/// @notice Emitted when an asset is claimed by a winner/// @param proposalId The ID of the winning proposal/// @param claimer The address of the claimer (winner)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { IERC20 } from '@openzeppelin/contracts/token/ERC20/IERC20.sol';import { IERC721 } from '@openzeppelin/contracts/token/ERC721/IERC721.sol';import { IERC1155 } from '@openzeppelin/contracts/token/ERC1155/IERC1155.sol';import { SafeERC20 } from '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';import { AssetType, Asset } from '../types/Common.sol';abstract contract AssetController {using SafeERC20 for IERC20;/// @notice Thrown when unused asset parameters are populatederror UNUSED_ASSET_PARAMETERS();/// @notice Thrown when an ether transfer does not succeederror ETHER_TRANSFER_FAILED();/// @notice Thrown when the ERC721 transfer amount is not equal to oneerror INVALID_ERC721_TRANSFER_AMOUNT();/// @notice Thrown when an unknown asset type is providederror INVALID_ASSET_TYPE();/// @notice Thrown when no asset amount is providederror MISSING_ASSET_AMOUNT();
12345678910// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { IDepositReceiver } from '../../interfaces/IDepositReceiver.sol';abstract contract DepositReceiver is IDepositReceiver {function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {return interfaceId == type(IDepositReceiver).interfaceId;}}
123456789101112131415161718// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { ERC165 } from './ERC165.sol';import { IERC165 } from '../../interfaces/IERC165.sol';import { ERC721TokenReceiver, ERC1155TokenReceiver } from './TokenReceiver.sol';/// @notice A contract which properly accepts and holds ERC721 & ERC1155 tokens.abstract contract TokenHolder is ERC721TokenReceiver, ERC1155TokenReceiver, ERC165 {/// @notice If the contract implements an interface/// @param interfaceId The interface idfunction supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {returninterfaceId == type(ERC721TokenReceiver).interfaceId ||interfaceId == type(ERC1155TokenReceiver).interfaceId ||super.supportsInterface(interfaceId);}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { ITokenMetadataRenderer } from './ITokenMetadataRenderer.sol';/// @notice Interface for the Manager contractinterface IManager {/// @notice Emitted when a house implementation is registered/// @param houseImpl The house implementation address/// @param houseType The house implementation typeevent HouseRegistered(address houseImpl, bytes32 houseType);/// @notice Emitted when a house implementation is unregistered/// @param houseImpl The house implementation addressevent HouseUnregistered(address houseImpl);/// @notice Emitted when a round implementation is registered on a house/// @param houseImpl The house implementation address/// @param roundImpl The round implementation address/// @param roundType The round implementation typeevent RoundRegistered(address houseImpl, address roundImpl, bytes32 roundType);/// @notice Emitted when a round implementation is unregistered on a house/// @param houseImpl The house implementation address/// @param roundImpl The round implementation addressevent RoundUnregistered(address houseImpl, address roundImpl);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: AGPL-3.0-onlypragma solidity >=0.8.17;import { ERC1155TokenReceiver } from '../utils/TokenReceiver.sol';import { IERC1155 } from '../../interfaces/IERC1155.sol';/// @notice Minimalist and gas efficient standard ERC1155 implementation./// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC1155.sol)/// - Uses custom errors/// - Does not revert on `_mint` & `_batchMint` if the receiver is a contract and does NOT implement the ERC1155TokenReceiver rulesabstract contract ERC1155 is IERC1155 {mapping(address => mapping(uint256 => uint256)) public balanceOf;mapping(address => mapping(address => bool)) public isApprovedForAll;function uri(uint256 id) external view virtual returns (string memory);function setApprovalForAll(address operator, bool approved) public virtual {isApprovedForAll[msg.sender][operator] = approved;emit ApprovalForAll(msg.sender, operator, approved);}function safeTransferFrom(address from,address to,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Class with helper read functions for clone with immutable args./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/Clone.sol)/// @author Adapted from clones with immutable args by zefram.eth, Saw-mon & Natalie/// (https://github.com/Saw-mon-and-Natalie/clones-with-immutable-args)abstract contract Clone {/// @dev Reads an immutable arg with type bytes.function _getArgBytes(uint256 argOffset, uint256 length)internalpurereturns (bytes memory arg){uint256 offset = _getImmutableArgsOffset();/// @solidity memory-safe-assemblyassembly {// Grab the free memory pointer.arg := mload(0x40)// Store the array length.mstore(arg, length)// Copy the array.calldatacopy(add(arg, 0x20), add(offset, argOffset), length)// Allocate the memory, rounded up to the next 32 byte boudnary.mstore(0x40, and(add(add(arg, 0x3f), length), not(0x1f)))}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { IERC721 } from './IERC721.sol';/// @notice Common House interfaceinterface IHouse is IERC721 {/// @notice Thrown when the caller is not the prop house contracterror ONLY_PROP_HOUSE();/// @notice Thrown when the caller does not hold the house ownership tokenerror ONLY_HOUSE_OWNER();/// @notice Thrown when the provided value does not fit into 8 bitserror VALUE_DOES_NOT_FIT_IN_8_BITS();/// @notice The house typefunction kind() external view returns (bytes32);/// @notice Initialize the house/// @param data Initialization datafunction initialize(bytes calldata data) external;/// @notice Returns `true` if the provided address is a valid round on the house/// @param round The round to validatefunction isRound(address round) external view returns (bool);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { IERC165 } from './IERC165.sol';/// @notice Interface that must be implemented by all round typesinterface IRound is IERC165 {/// @notice Thrown when the caller of a guarded function is not the prop house contracterror ONLY_PROP_HOUSE();/// @notice Thrown when the caller of a guarded function is not the round managererror ONLY_ROUND_MANAGER();/// @notice Thrown when the address of a provided strategy is zero/// @param strategy The address of the strategyerror INVALID_STRATEGY(uint256 strategy);/// @notice The round typefunction kind() external view returns (bytes32);/// @notice Get the round titlefunction title() external pure returns (string memory);/// @notice Initialize the round/// @param data The optional round data. If empty, round registration is deferred.function initialize(bytes calldata data) external payable;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { Asset } from '../lib/types/Common.sol';import { IERC721 } from './IERC721.sol';/// @notice Interface implemented by the Prop House entry contractinterface IPropHouse is IERC721 {/// @notice House creation data, including the implementation contract and configstruct House {address impl;bytes config;}/// @notice Round creation data, including the implementation contract, config, and other metadatastruct 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
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma 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 payloadfunction 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 noncefunction startL1ToL2MessageCancellation(uint256 toAddress,uint256 selector,uint256[] calldata payload,uint256 nonce) external;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { IStarknetCore } from './IStarknetCore.sol';interface IMessenger {/// @notice Thrown when the caller of a guarded function is not a valid rounderror ONLY_ROUND();/// @notice Returns the Starknet core contract instancefunction 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 payloadfunction 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
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC20 standard as defined in the EIP.*/interface IERC20 {/*** @dev Emitted when `value` tokens are moved from one account (`from`) to* another (`to`).** Note that `value` may be zero.*/event Transfer(address indexed from, address indexed to, uint256 value);/*** @dev Emitted when the allowance of a `spender` for an `owner` is set by* a call to {approve}. `value` is the new allowance.*/event Approval(address indexed owner, address indexed spender, uint256 value);/*** @dev Returns the amount of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)pragma solidity ^0.8.0;import "../../utils/introspection/IERC165.sol";/*** @dev Required interface of an ERC721 compliant contract.*/interface IERC721 is IERC165 {/*** @dev Emitted when `tokenId` token is transferred from `from` to `to`.*/event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);/*** @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.*/event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);/*** @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.*/event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC1155/IERC1155.sol)pragma solidity ^0.8.0;import "../../utils/introspection/IERC165.sol";/*** @dev Required interface of an ERC1155 compliant contract, as defined in the* https://eips.ethereum.org/EIPS/eip-1155[EIP].** _Available since v3.1._*/interface IERC1155 is IERC165 {/*** @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.*/event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);/*** @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all* transfers.*/event TransferBatch(address indexed operator,address indexed from,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)pragma solidity ^0.8.0;import "../IERC20.sol";import "../extensions/IERC20Permit.sol";import "../../../utils/Address.sol";/*** @title SafeERC20* @dev Wrappers around ERC20 operations that throw on failure (when the token* contract returns false). Tokens that return no value (and instead revert or* throw on failure) are also supported, non-reverting calls are assumed to be* successful.* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.*/library SafeERC20 {using Address for address;/*** @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,* non-reverting calls are assumed to be successful.*/function safeTransfer(IERC20 token, address to, uint256 value) internal {
12345678910111213// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { IRound } from './IRound.sol';/// @notice Interface that can be implemented by rounds that receive depositsinterface IDepositReceiver is IRound {/// @notice A callback that is called when a deposit is receivedfunction onDepositReceived(address depositor, uint256 id, uint256 amount) external;/// @notice A callback that is called when a batch of deposits is receivedfunction onDepositsReceived(address depositor, uint256[] calldata ids, uint256[] calldata amounts) external;}
1234567891011// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { IERC165 } from '../../interfaces/IERC165.sol';abstract contract ERC165 is IERC165 {/// @dev See {IERC165-supportsInterface}.function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {return interfaceId == type(IERC165).interfaceId;}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;import { IERC165 } from '../../interfaces/IERC165.sol';/// @notice A generic interface for a contract which properly accepts ERC721 tokens.abstract contract ERC721TokenReceiver {function onERC721Received(address, address, uint256, bytes calldata) external virtual returns (bytes4) {return this.onERC721Received.selector;}}/// @notice A generic interface for a contract which properly accepts ERC1155 tokens.abstract contract ERC1155TokenReceiver is IERC165 {function onERC1155Received(address,address,uint256,uint256,bytes calldata) external view virtual returns (bytes4) {return ERC1155TokenReceiver.onERC1155Received.selector;}function onERC1155BatchReceived(address,
12345678// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;interface ITokenMetadataRenderer {/// @notice Returns metadata for `tokenId` as a Base64-JSON blob/// @param tokenId The token IDfunction tokenURI(uint256 tokenId) external view returns (string memory);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;/// @title IERC1155/// @notice The external ERC1155 events, errors, and functionsinterface IERC1155 {/// @notice Thrown when the caller is not authorizederror NOT_AUTHORIZED();/// @notice Thrown when the receiver is the zero address or fails to accept the transfererror UNSAFE_RECIPIENT();/// @notice Thrown when provided array lengths are not equalerror LENGTH_MISMATCH();/// @notice Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);/// @notice Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all transfersevent TransferBatch(address indexed operator,address indexed from,address indexed to,uint256[] ids,uint256[] values);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.8.17;/// @title IERC721/// @notice The external ERC721 events, errors, and functionsinterface IERC721 {/// @dev Thrown when a caller is not authorized to approve or transfer a tokenerror INVALID_APPROVAL();/// @dev Thrown when a transfer is called with the incorrect token ownererror 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 mintederror ALREADY_MINTED();/// @dev Thrown when a non-existent token is called to be burnederror NOT_MINTED();/// @dev Thrown when address(0) is incorrectly providederror ADDRESS_ZERO();/// @notice Emitted when a token is transferred from sender to recipient/// @param from The sender address
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC165 standard, as defined in the* https://eips.ethereum.org/EIPS/eip-165[EIP].** Implementers can declare support of contract interfaces, which can then be* queried by others ({ERC165Checker}).** For an implementation, see {ERC165}.*/interface IERC165 {/*** @dev Returns true if this contract implements the interface defined by* `interfaceId`. See the corresponding* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]* to learn more about how these ids are created.** This function call must use less than 30 000 gas.*/function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.4) (token/ERC20/extensions/IERC20Permit.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].** Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't* need to send a transaction, and thus is not required to hold Ether at all.** ==== Security Considerations** There are two important considerations concerning the use of `permit`. The first is that a valid permit signature* expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be* considered as an intention to spend the allowance in any specific way. The second is that because permits have* built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should* take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be* generally recommended is:** ```solidity* function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {* try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}* doThing(..., value);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)pragma solidity ^0.8.1;/*** @dev Collection of functions related to the address type*/library Address {/*** @dev Returns true if `account` is a contract.** [IMPORTANT]* ====* It is unsafe to assume that an address for which this function returns* false is an externally-owned account (EOA) and not a contract.** Among others, `isContract` will return false for the following* types of addresses:** - an externally-owned account* - a contract in construction* - an address where a contract will be created* - an address where a contract lived, but was destroyed** Furthermore, `isContract` will also return true if the target contract within
1234567891011121314151617181920212223242526{"remappings": ["ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","@ensdomains/=/Users/prop-house/node_modules/@ensdomains/","@openzeppelin/=/Users/prop-house/node_modules/@openzeppelin/","@prophouse/=/Users/prop-house/node_modules/@prophouse/","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/"],"optimizer": {"enabled": true,"runs": 10000},"metadata": {"useLiteralContent": false,"bytecodeHash": "none","appendCBOR": true},"outputSelection": {"*": {"*": [
[{"inputs":[{"internalType":"uint256","name":"_classHash","type":"uint256"},{"internalType":"address","name":"_propHouse","type":"address"},{"internalType":"address","name":"_starknet","type":"address"},{"internalType":"address","name":"_messenger","type":"address"},{"internalType":"uint256","name":"_roundFactory","type":"uint256"},{"internalType":"uint256","name":"_executionRelayer","type":"uint256"},{"internalType":"address","name":"_manager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ALREADY_CLAIMED","type":"error"},{"inputs":[],"name":"AWARD_AMOUNT_NOT_MULTIPLE_OF_WINNER_COUNT","type":"error"},{"inputs":[],"name":"AWARD_LENGTH_MISMATCH","type":"error"},{"inputs":[],"name":"CANCELLATION_NOT_AVAILABLE","type":"error"},{"inputs":[],"name":"EMERGENCY_WITHDRAWAL_NOT_AVAILABLE","type":"error"},{"inputs":[],"name":"ETHER_TRANSFER_FAILED","type":"error"},{"inputs":[],"name":"FINALIZATION_NOT_AVAILABLE","type":"error"},{"inputs":[],"name":"INSUFFICIENT_ETHER_SUPPLIED","type":"error"},{"inputs":[],"name":"INVALID_ASSET_TYPE","type":"error"},{"inputs":[],"name":"INVALID_ERC721_TRANSFER_AMOUNT","type":"error"},{"inputs":[],"name":"INVALID_MERKLE_PROOF","type":"error"},{"inputs":[{"internalType":"uint256","name":"strategy","type":"uint256"}],"name":"INVALID_STRATEGY","type":"error"},{"inputs":[],"name":"LENGTH_MISMATCH","type":"error"},{"inputs":[],"name":"MISSING_ASSET_AMOUNT","type":"error"},{"inputs":[],"name":"NOT_AUTHORIZED","type":"error"},{"inputs":[],"name":"NO_META_TX_RELAYER_PROVIDED","type":"error"},{"inputs":[],"name":"NO_PROPOSING_STRATEGIES_PROVIDED","type":"error"},{"inputs":[],"name":"NO_VOTING_STRATEGIES_PROVIDED","type":"error"},{"inputs":[],"name":"ONLY_PROP_HOUSE","type":"error"},{"inputs":[],"name":"ONLY_ROUND_MANAGER","type":"error"},{"inputs":[],"name":"ONLY_SECURITY_COUNCIL","type":"error"},{"inputs":[],"name":"PROPOSAL_PERIOD_DURATION_TOO_SHORT","type":"error"},{"inputs":[],"name":"RECLAMATION_NOT_AVAILABLE","type":"error"},{"inputs":[],"name":"UNSAFE_RECIPIENT","type":"error"},{"inputs":[],"name":"UNUSED_ASSET_PARAMETERS","type":"error"},{"inputs":[],"name":"VOTE_PERIOD_DURATION_TOO_SHORT","type":"error"},{"inputs":[],"name":"WINNER_COUNT_OUT_OF_RANGE","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"claimer","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct PackedAsset","name":"asset","type":"tuple"}],"name":"AssetClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"claimer","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct PackedAsset[]","name":"assets","type":"tuple[]"}],"name":"AssetsClaimed","type":"event"},{"anonymous":false,"inputs":[],"name":"RoundCancelled","type":"event"},{"anonymous":false,"inputs":[],"name":"RoundEmergencyCancelled","type":"event"},{"anonymous":false,"inputs":[],"name":"RoundFinalized","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"enum AssetType","name":"assetType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct Asset[]","name":"awards","type":"tuple[]"},{"components":[{"internalType":"address","name":"relayer","type":"address"},{"internalType":"uint256","name":"deposit","type":"uint256"}],"indexed":false,"internalType":"struct MetaTransaction","name":"metaTx","type":"tuple"},{"indexed":false,"internalType":"uint248","name":"proposalThreshold","type":"uint248"},{"indexed":false,"internalType":"uint256[]","name":"proposingStrategies","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"proposingStrategyParamsFlat","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"votingStrategies","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"votingStrategyParamsFlat","type":"uint256[]"},{"indexed":false,"internalType":"uint40","name":"proposalPeriodStartTimestamp","type":"uint40"},{"indexed":false,"internalType":"uint40","name":"proposalPeriodDuration","type":"uint40"},{"indexed":false,"internalType":"uint40","name":"votePeriodDuration","type":"uint40"},{"indexed":false,"internalType":"uint16","name":"winnerCount","type":"uint16"}],"name":"RoundRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"EMERGENCY_WITHDRAW_ASSETS_AFTER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WINNER_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_PROPOSAL_PERIOD_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_VOTE_PERIOD_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RECLAIM_UNCLAIMED_ASSETS_AFTER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancel","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint256","name":"position","type":"uint256"},{"components":[{"internalType":"enum AssetType","name":"assetType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Asset","name":"asset","type":"tuple"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint256","name":"position","type":"uint256"},{"components":[{"internalType":"enum AssetType","name":"assetType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Asset","name":"asset","type":"tuple"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"claimTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"classHash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyCancel","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum AssetType","name":"assetType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Asset[]","name":"assets","type":"tuple[]"}],"name":"emergencyWithdrawTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executionRelayer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"merkleRootLow","type":"uint256"},{"internalType":"uint256","name":"merkleRootHigh","type":"uint256"}],"name":"finalize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalizedAt","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"enum AssetType","name":"assetType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Asset[]","name":"awards","type":"tuple[]"},{"components":[{"internalType":"address","name":"relayer","type":"address"},{"internalType":"uint256","name":"deposit","type":"uint256"}],"internalType":"struct MetaTransaction","name":"metaTx","type":"tuple"},{"internalType":"uint248","name":"proposalThreshold","type":"uint248"},{"internalType":"uint256[]","name":"proposingStrategies","type":"uint256[]"},{"internalType":"uint256[]","name":"proposingStrategyParamsFlat","type":"uint256[]"},{"internalType":"uint256[]","name":"votingStrategies","type":"uint256[]"},{"internalType":"uint256[]","name":"votingStrategyParamsFlat","type":"uint256[]"},{"internalType":"uint40","name":"proposalPeriodStartTimestamp","type":"uint40"},{"internalType":"uint40","name":"proposalPeriodDuration","type":"uint40"},{"internalType":"uint40","name":"votePeriodDuration","type":"uint40"},{"internalType":"uint16","name":"winnerCount","type":"uint16"}],"internalType":"struct ITimedRound.RoundConfig","name":"config","type":"tuple"}],"name":"getRegistrationPayload","outputs":[{"internalType":"uint256[]","name":"payload","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"house","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"id","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint256","name":"position","type":"uint256"},{"components":[{"internalType":"enum AssetType","name":"assetType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Asset","name":"asset","type":"tuple"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"isAssetWinner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"isClaimed","outputs":[{"internalType":"bool","name":"claimed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"isWinner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kind","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"contract IManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"messenger","outputs":[{"internalType":"contract IMessenger","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"depositor","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"onDepositReceived","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"depositor","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"onDepositsReceived","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"propHouse","outputs":[{"internalType":"contract IPropHouse","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalPeriodDuration","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalPeriodStartTimestamp","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum AssetType","name":"assetType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Asset[]","name":"assets","type":"tuple[]"}],"name":"reclaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum AssetType","name":"assetType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Asset[]","name":"assets","type":"tuple[]"}],"name":"reclaimTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"starknet","outputs":[{"internalType":"contract IStarknetCore","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"state","outputs":[{"internalType":"enum ITimedRound.RoundState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"title","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"votePeriodDuration","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"winnerCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"winnerMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.