📄️ AccessControl
Contract module that allows children to implement role-based access control mechanisms. This is a lightweight version that doesn't allow enumerating role members except through off-chain means by accessing the contract event logs. Some applications may benefit from on-chain enumerability, for those cases see . Roles are referred to by their bytes32 identifier. These should be exposed in the external API and be unique. The best way to achieve this is by using public constant hash digests function foo() public { require(hasRole(MYROLE, msg.sender)); ... } Roles can be granted and revoked dynamically via the {grantRole} and {revokeRole} functions. Each role has an associated admin role, and only accounts that have a role's admin role can call {grantRole} and {revokeRole}. By default, the admin role for all roles is DEFAULTADMINROLE, which means that only accounts with this role will be able to grant or revoke other roles. More complex role relationships can be created by using {\setRoleAdmin}. WARNING it has permission to grant and revoke this role. Extra precautions should be taken to secure accounts that have been granted it.
📄️ AccessControlEnumerable
Extension of that allows enumerating the members of each role.
📄️ AccessControlEnumerableUpgradeable
Extension of that allows enumerating the members of each role.
📄️ AccessControlUpgradeable
Contract module that allows children to implement role-based access control mechanisms. This is a lightweight version that doesn't allow enumerating role members except through off-chain means by accessing the contract event logs. Some applications may benefit from on-chain enumerability, for those cases see . Roles are referred to by their bytes32 identifier. These should be exposed in the external API and be unique. The best way to achieve this is by using public constant hash digests function foo() public { require(hasRole(MYROLE, msg.sender)); ... } Roles can be granted and revoked dynamically via the {grantRole} and {revokeRole} functions. Each role has an associated admin role, and only accounts that have a role's admin role can call {grantRole} and {revokeRole}. By default, the admin role for all roles is DEFAULTADMINROLE, which means that only accounts with this role will be able to grant or revoke other roles. More complex role relationships can be created by using {\setRoleAdmin}. WARNING it has permission to grant and revoke this role. Extra precautions should be taken to secure accounts that have been granted it.
📄️ Address
Collection of functions related to the address type
📄️ AddressUpgradeable
Collection of functions related to the address type
📄️ AirdropERC1155
Methods
📄️ AirdropERC1155Claimable
Methods
📄️ AirdropERC20
Methods
📄️ AirdropERC20Claimable
Methods
📄️ AirdropERC721
Methods
📄️ AirdropERC721Claimable
Methods
📄️ AppURI
Thirdweb's AppURI is a contract extension for any contract that wants to add an official App URI that follows the appUri spec
📄️ BatchMintMetadata
Batch-mint Metadata
📄️ BitMapsUpgradeable
Library for managing uint256 to bool mapping in a compact and efficient way, providing the keys are sequential. Largely inspired by Uniswap's https://github.com/Uniswap/merkle-distributor/blob/master/contracts/MerkleDistributor.sol.
📄️ CheckpointsUpgradeable
This library defines the History struct, for checkpointing values as they change at different points in time, and later looking up past values by block number. See as an example. To create a history of checkpoints define a variable type Checkpoints.History in your contract, and store a new checkpoint for the current transaction block using the {push} function. *Available since v4.5.*
📄️ Clones
https://eips.ethereum.org/EIPS/eip-1167 is a standard for deploying minimal proxy contracts, also known as "clones". > To simply and cheaply clone contract functionality in an immutable way, this standard specifies > a minimal bytecode implementation that delegates all calls to a known, fixed address. The library includes functions to deploy a proxy using either create (traditional deployment) or create2 (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the deterministic method. Available since v3.4.\\
📄️ Context
Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.
📄️ ContextUpgradeable
Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.
📄️ ContractMetadata
Contract Metadata
📄️ ContractMetadataLogic
thirdweb.com
📄️ ContractMetadataStorage
thirdweb.com
📄️ ContractPublisher
Methods
📄️ Counters
Matt Condon (@shrugs)
📄️ CountersUpgradeable
Matt Condon (@shrugs)
📄️ Create2
Helper to make usage of the CREATE2 EVM opcode easier and safer. CREATE2 can be used to compute in advance the address where a smart contract will be deployed, which allows for interesting new mechanisms known as 'counterfactual interactions'. See the https://eips.ethereum.org/EIPS/eip-1014#motivation for more information.
📄️ CurrencyTransferLib
Methods
📄️ DefaultExtensionSet
Methods
📄️ DefaultOperatorFilterer
DefaultOperatorFilterer
📄️ DefaultOperatorFiltererUpgradeable
Methods
📄️ DelayedReveal
Delayed Reveal
📄️ DirectListingsLogic
thirdweb.com
📄️ DirectListingsStorage
thirdweb.com
📄️ DoubleEndedQueueUpgradeable
A sequence of items with the ability to efficiently push and pop items (i.e. insert and remove) on both ends of the sequence (called front and back). Among other access patterns, it can be used to implement efficient LIFO and FIFO queues. Storage use is optimized, and all operations are O(1) constant time. This includes , given that the existing queue contents are left in storage. The struct is called Bytes32Deque. Other types can be cast to and from bytes32. This data structure can only be used in storage, and not in memory. DoubleEndedQueue.Bytes32Deque queue; *Available since v4.6.*
📄️ Drop
Methods
📄️ Drop1155
Methods
📄️ DropERC1155
Methods
📄️ DropERC1155_V2
Methods
📄️ DropERC20
Methods
📄️ DropERC20_V2
Methods
📄️ DropERC721
Methods
📄️ DropERC721_V3
Methods
📄️ DropSinglePhase
Methods
📄️ DropSinglePhase1155
Methods
📄️ DropSinglePhase1155_V1
Methods
📄️ DropSinglePhase_V1
Methods
📄️ ECDSA
Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.
📄️ ECDSAUpgradeable
Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.
📄️ EIP712
https This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method https://docs.metamask.io/guide/signing-data.html. \Available since v3.4.\\
📄️ EIP712ChainlessDomain
https This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method https://docs.metamask.io/guide/signing-data.html. \Available since v3.4.\\
📄️ EIP712Upgradeable
https This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method https://docs.metamask.io/guide/signing-data.html. \Available since v3.4.\\
📄️ ERC1155
Methods
📄️ ERC1155Base
The ERC1155Base smart contract implements the ERC1155 NFT standard. It includes the following additions to standard ERC1155 logic: - Ability to mint NFTs via the provided mintTo and batchMintTo functions. - Contract metadata for royalty support on platforms such as OpenSea that use off-chain information to distribute royalties. - Ownership of the contract, with the ability to restrict certain functions to only be called by the contract's owner. - Multicall capability to perform multiple actions atomically - EIP 2981 compliance for royalty support on NFT marketplaces.
📄️ ERC1155BurnableUpgradeable
Extension of that allows token holders to destroy both their own tokens and those that they have been approved to use. *Available since v3.1.*
📄️ ERC1155DelayedReveal
BASE DelayedReveal The ERC1155DelayedReveal contract uses the DelayedReveal extension. 'Lazy minting' means defining the metadata of NFTs without minting it to an address. Regular 'minting' of NFTs means actually assigning an owner to an NFT. As a contract admin, this lets you prepare the metadata for NFTs that will be minted by an external party, without paying the gas cost for actually minting the NFTs. 'Delayed reveal' is a mechanism by which you can distribute NFTs to your audience and reveal the metadata of the distributed NFTs, after the fact. You can read more about how the DelayedReveal extension works, here//blog.thirdweb.com/delayed-reveal-nfts
📄️ ERC1155Drop
BASE DropSinglePhase1155 The ERC1155Base smart contract implements the ERC1155 NFT standard. It includes the following additions to standard ERC1155 logic: - Contract metadata for royalty support on platforms such as OpenSea that use off-chain information to distribute royalties. - Ownership of the contract, with the ability to restrict certain functions to only be called by the contract's owner. - Multicall capability to perform multiple actions atomically - EIP 2981 compliance for royalty support on NFT marketplaces. The drop mechanism in the DropSinglePhase1155 extension is a distribution mechanism for lazy minted tokens. It lets you set restrictions such as a price to charge, an allowlist etc. when an address attempts to mint lazy minted tokens. The ERC721Drop contract lets you lazy mint tokens, and distribute those lazy minted tokens via the drop mechanism.
📄️ ERC1155Holder
Simple implementation of ERC1155Receiver that will allow a contract to hold ERC1155 tokens. IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be stuck.
📄️ ERC1155HolderUpgradeable
Simple implementation of ERC1155Receiver that will allow a contract to hold ERC1155 tokens. IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be stuck.
📄️ ERC1155LazyMint
BASE LazyMint The ERC1155LazyMint smart contract implements the ERC1155 NFT standard. It includes the following additions to standard ERC1155 logic: - Lazy minting - Ability to mint NFTs via the provided mintTo and batchMintTo functions. - Contract metadata for royalty support on platforms such as OpenSea that use off-chain information to distribute royalties. - Ownership of the contract, with the ability to restrict certain functions to only be called by the contract's owner. - Multicall capability to perform multiple actions atomically - EIP 2981 compliance for royalty support on NFT marketplaces. The ERC1155LazyMint contract uses the LazyMint extension. 'Lazy minting' means defining the metadata of NFTs without minting it to an address. Regular 'minting' of NFTs means actually assigning an owner to an NFT. As a contract admin, this lets you prepare the metadata for NFTs that will be minted by an external party, without paying the gas cost for actually minting the NFTs.
📄️ ERC1155PausableUpgradeable
ERC1155 token with pausable token transfers, minting and burning. Useful for scenarios such as preventing trades until the end of an evaluation period, or having an emergency switch for freezing all token transfers in the event of a large bug. *Available since v3.1.*
📄️ ERC1155PresetUpgradeable
token, including: - ability for holders to burn (destroy) their tokens - a minter role that allows for token minting (creation) - a pauser role that allows to stop all token transfers This contract uses {AccessControl} to lock permissioned functions using the different roles - head to its documentation for details. The account that deploys the contract will be granted the minter and pauser roles, as well as the default admin role, which will let it grant both minter and pauser roles to other accounts.
📄️ ERC1155Receiver
*Available since v3.1.*
📄️ ERC1155ReceiverUpgradeable
*Available since v3.1.*
📄️ ERC1155SignatureMint
BASE SignatureMintERC1155 The ERC1155SignatureMint contract uses the ERC1155Base contract, along with the SignatureMintERC1155 extension. The 'signature minting' mechanism in the SignatureMintERC1155 extension uses EIP 712, and is a way for a contract admin to authorize an external party's request to mint tokens on the admin's contract. At a high level, this means you can authorize some external party to mint tokens on your contract, and specify what exactly will be minted by that external party.
📄️ ERC1155Upgradeable
Implementation of the basic standard multi-token. See https https://github.com/enjin/erc-1155 *Available since v3.1.*
📄️ ERC165
Implementation of the interface. Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check for the additional interface id that will be supported. For example: solidity function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); } Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
📄️ ERC165Upgradeable
Implementation of the interface. Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check for the additional interface id that will be supported. For example: solidity function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); } Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
📄️ ERC1967Proxy
This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967, so that it doesn't conflict with the storage layout of the implementation behind the proxy.
📄️ ERC1967Upgrade
This abstract contract provides getters and event emitting update functions for EIP1967 slots. *Available since v4.1.*
📄️ ERC20
Implementation of the interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {\mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP//forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning false on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}._
📄️ ERC20Base
The ERC20Base smart contract implements the ERC20 standard. It includes the following additions to standard ERC20 logic See method, which can be used to change an account's ERC20 allowance by presenting a message signed by the account.
📄️ ERC20BurnableUpgradeable
Extension of that allows token holders to destroy both their own tokens and those that they have an allowance for, in a way that can be recognized off-chain (via event analysis).
📄️ ERC20Drop
BASE DropSinglePhase The ERC20Drop smart contract implements the ERC20 standard. It includes the following additions to standard ERC20 logic See method, which can be used to change an account's ERC20 allowance by presenting a message signed by the account. The drop mechanism in the DropSinglePhase extension is a distribution mechanism for tokens. It lets you set restrictions such as a price to charge, an allowlist etc. when an address attempts to mint tokens.
📄️ ERC20DropVote
BASE DropSinglePhase The ERC20Drop contract uses the DropSinglePhase extensions, along with ERC20Votes. It implements the ERC20 standard, along with the following additions to standard ERC20 logic See method, which can be used to change an account's ERC20 allowance by presenting a message signed by the account. The drop mechanism in the DropSinglePhase extension is a distribution mechanism tokens. It lets you set restrictions such as a price to charge, an allowlist etc. when an address attempts to mint tokens.
📄️ ERC20Permit
Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612. Adds the 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. *Available since v3.4.*
📄️ ERC20PermitUpgradeable
Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612. Adds the 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. *Available since v3.4.*
📄️ ERC20SignatureMint
BASE SignatureMintERC20 The ERC20SignatureMint contract uses the ERC20Base contract, along with the SignatureMintERC20 extension. The 'signature minting' mechanism in the SignatureMintERC20 extension uses EIP 712, and is a way for a contract admin to authorize an external party's request to mint tokens on the admin's contract. At a high level, this means you can authorize some external party to mint tokens on your contract, and specify what exactly will be minted by that external party.
📄️ ERC20SignatureMintVote
BASE SignatureMintERC20 The ERC20SignatureMint contract uses the ERC20Vote contract, along with the SignatureMintERC20 extension. The 'signature minting' mechanism in the SignatureMintERC20 extension uses EIP 712, and is a way for a contract admin to authorize an external party's request to mint tokens on the admin's contract. At a high level, this means you can authorize some external party to mint tokens on your contract, and specify what exactly will be minted by that external party.
📄️ ERC20Upgradeable
Implementation of the interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {\mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP//forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning false on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}._
📄️ ERC20Vote
The ERC20Vote smart contract implements the ERC20 standard and ERC20Votes. It includes the following additions to standard ERC20 logic See method, which can be used to change an account's ERC20 allowance by presenting a message signed by the account.
📄️ ERC20Votes
Extension of ERC20 to support Compound-like voting and delegation. This version is more generic than Compound's, and supports token supply up to 2^224^ - 1, while COMP is limited to 2^96^ - 1. NOTE: If exact COMP compatibility is required, use the variant of this module. This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting power can be queried through the public accessors {getVotes} and {getPastVotes}. By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked. *Available since v4.2.*
📄️ ERC20VotesUpgradeable
Extension of ERC20 to support Compound-like voting and delegation. This version is more generic than Compound's, and supports token supply up to 2^224^ - 1, while COMP is limited to 2^96^ - 1. NOTE: If exact COMP compatibility is required, use the variant of this module. This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting power can be queried through the public accessors {getVotes} and {getPastVotes}. By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked. *Available since v4.2.*
📄️ ERC2771Context
Context variant with ERC2771 support.
📄️ ERC2771ContextConsumer
Context variant with ERC2771 support.
📄️ ERC2771ContextLogic
Context variant with ERC2771 support.
📄️ ERC2771ContextStorage
thirdweb
📄️ ERC2771ContextUpgradeable
Context variant with ERC2771 support.
📄️ ERC2771ContextUpgradeableLogic
Context variant with ERC2771 support.
📄️ ERC2771ContextUpgradeableStorage
thirdweb
📄️ ERC721A
Implementation of https://eips.ethereum.org/EIPS/eip-721 Non-Fungible Token Standard, including the Metadata extension. Built to optimize for lower gas during batch mints. Assumes serials are sequentially minted starting at \startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). Assumes that an owner cannot have more than 264 - 1 (max value of uint64) of supply. Assumes that the maximum token id cannot exceed 2256 - 1 (max value of uint256)._
📄️ ERC721AUpgradeable
Implementation of https://eips.ethereum.org/EIPS/eip-721 Non-Fungible Token Standard, including the Metadata extension. Built to optimize for lower gas during batch mints. Assumes serials are sequentially minted starting at \startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). Assumes that an owner cannot have more than 264 - 1 (max value of uint64) of supply. Assumes that the maximum token id cannot exceed 2256 - 1 (max value of uint256)._
📄️ ERC721Base
The ERC721Base smart contract implements the ERC721 NFT standard, along with the ERC721A optimization to the standard. It includes the following additions to standard ERC721 logic: - Ability to mint NFTs via the provided mint function. - Contract metadata for royalty support on platforms such as OpenSea that use off-chain information to distribute royalties. - Ownership of the contract, with the ability to restrict certain functions to only be called by the contract's owner. - Multicall capability to perform multiple actions atomically - EIP 2981 compliance for royalty support on NFT marketplaces.
📄️ ERC721DelayedReveal
BASE DelayedReveal The ERC721DelayedReveal contract uses the ERC721LazyMint contract, along with DelayedReveal extension. 'Lazy minting' means defining the metadata of NFTs without minting it to an address. Regular 'minting' of NFTs means actually assigning an owner to an NFT. As a contract admin, this lets you prepare the metadata for NFTs that will be minted by an external party, without paying the gas cost for actually minting the NFTs. 'Delayed reveal' is a mechanism by which you can distribute NFTs to your audience and reveal the metadata of the distributed NFTs, after the fact. You can read more about how the DelayedReveal extension works, here//blog.thirdweb.com/delayed-reveal-nfts
📄️ ERC721Drop
BASE DropSinglePhase The ERC721Drop contract implements the ERC721 NFT standard, along with the ERC721A optimization to the standard. It includes the following additions to standard ERC721 logic: - Contract metadata for royalty support on platforms such as OpenSea that use off-chain information to distribute royalties. - Ownership of the contract, with the ability to restrict certain functions to only be called by the contract's owner. - Multicall capability to perform multiple actions atomically - EIP 2981 compliance for royalty support on NFT marketplaces. The drop mechanism in the DropSinglePhase extension is a distribution mechanism for lazy minted tokens. It lets you set restrictions such as a price to charge, an allowlist etc. when an address attempts to mint lazy minted tokens. The ERC721Drop contract lets you lazy mint tokens, and distribute those lazy minted tokens via the drop mechanism.
📄️ ERC721EnumerableUpgradeable
This implements an optional extension of defined in the EIP that adds enumerability of all the token ids in the contract as well as all token ids owned by each account.
📄️ ERC721Holder
Implementation of the interface. Accepts all token transfers. Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
📄️ ERC721HolderUpgradeable
Implementation of the interface. Accepts all token transfers. Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
📄️ ERC721LazyMint
BASE LazyMint The ERC721LazyMint smart contract implements the ERC721 NFT standard, along with the ERC721A optimization to the standard. It includes the following additions to standard ERC721 logic: - Lazy minting - Contract metadata for royalty support on platforms such as OpenSea that use off-chain information to distribute royalties. - Ownership of the contract, with the ability to restrict certain functions to only be called by the contract's owner. - Multicall capability to perform multiple actions atomically - EIP 2981 compliance for royalty support on NFT marketplaces. 'Lazy minting' means defining the metadata of NFTs without minting it to an address. Regular 'minting' of NFTs means actually assigning an owner to an NFT. As a contract admin, this lets you prepare the metadata for NFTs that will be minted by an external party, without paying the gas cost for actually minting the NFTs.
📄️ ERC721Multiwrap
BASE TokenStore, SoulboundERC721A The ERC721Multiwrap contract uses the ERC721Base contract, along with the TokenStore and SoulboundERC721A extension. The ERC721Multiwrap contract lets you wrap arbitrary ERC20, ERC721 and ERC1155 tokens you own into a single wrapped token / NFT. The SoulboundERC721A extension lets you make your NFTs 'soulbound' i.e. non-transferrable.
📄️ ERC721SignatureMint
BASE SignatureMintERC721 The ERC721SignatureMint contract uses the ERC721Base contract, along with the SignatureMintERC721 extension. The 'signature minting' mechanism in the SignatureMintERC721 extension uses EIP 712, and is a way for a contract admin to authorize an external party's request to mint tokens on the admin's contract. At a high level, this means you can authorize some external party to mint tokens on your contract, and specify what exactly will be minted by that external party.
📄️ ERC721Upgradeable
Implementation of https://eips.ethereum.org/EIPS/eip-721 Non-Fungible Token Standard, including the Metadata extension, but not including the Enumerable extension, which is available separately as .
📄️ EditionStake
Methods
📄️ EnglishAuctionsLogic
thirdweb.com
📄️ EnglishAuctionsStorage
thirdweb.com
📄️ EnumerableSet
Library for managing https - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. contract Example { // Add the library methods using EnumerableSet for EnumerableSet.AddressSet; // Declare a set state variable EnumerableSet.AddressSet private mySet; } As of v3.3.0, sets of type bytes32 (Bytes32Set), address (AddressSet) and uint256 (UintSet) are supported. [WARNING] ==== Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable. See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet. ====
📄️ EnumerableSetUpgradeable
Library for managing https - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. contract Example { // Add the library methods using EnumerableSet for EnumerableSet.AddressSet; // Declare a set state variable EnumerableSet.AddressSet private mySet; } As of v3.3.0, sets of type bytes32 (Bytes32Set), address (AddressSet) and uint256 (UintSet) are supported. [WARNING] ==== Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable. See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet. ====
📄️ ExtensionRegistry
Methods
📄️ ExtensionState
Events
📄️ ExtensionStateStorage
Methods
📄️ FeeType
thirdweb
📄️ Forwarder
Methods
📄️ ForwarderChainlessDomain
Simple minimal forwarder to be used together with an ERC2771 compatible contract. See .
📄️ ForwarderConsumer
Methods
📄️ ForwarderEOAOnly
Methods
📄️ GovernorCountingSimpleUpgradeable
Extension of for simple, 3 options, vote counting. *Available since v4.3.*
📄️ GovernorSettingsUpgradeable
Extension of for settings updatable through governance. *Available since v4.4.*
📄️ GovernorUpgradeable
Core of the governance system, designed to be extended though various modules. This contract is abstract and requires several function to be implemented in various modules: - A counting module must implement , {*quorumReached}, {\voteSucceeded} and {\countVote} - A voting module must implement {\getVotes} - Additionally, the {votingPeriod} must also be implemented \Available since v4.3.*
📄️ GovernorVotesQuorumFractionUpgradeable
Extension of for voting weight extraction from an {ERC20Votes} token and a quorum expressed as a fraction of the total supply. *Available since v4.3.*
📄️ GovernorVotesUpgradeable
Extension of for voting weight extraction from an {ERC20Votes} token, or since v4.5 an {ERC721Votes} token. *Available since v4.3.*
📄️ IAccessControl
External interface of AccessControl declared to support ERC165 detection.
📄️ IAccessControlEnumerable
External interface of AccessControlEnumerable declared to support ERC165 detection.
📄️ IAccessControlEnumerableUpgradeable
External interface of AccessControlEnumerable declared to support ERC165 detection.
📄️ IAccessControlUpgradeable
External interface of AccessControl declared to support ERC165 detection.
📄️ IAirdropERC1155
Thirdweb's Airdrop contracts provide a lightweight and easy to use mechanism to drop tokens. AirdropERC1155 contract is an airdrop contract for ERC1155 tokens. It follows a push mechanism for transfer of tokens to intended recipients.
📄️ IAirdropERC1155Claimable
Thirdweb's Airdrop contracts provide a lightweight and easy to use mechanism to drop tokens. AirdropERC1155Claimable contract is an airdrop contract for ERC1155 tokens. It follows a pull mechanism for transfer of tokens, where allowlisted recipients can claim tokens from the contract.
📄️ IAirdropERC20
Thirdweb's Airdrop contracts provide a lightweight and easy to use mechanism to drop tokens. AirdropERC20 contract is an airdrop contract for ERC20 tokens. It follows a push mechanism for transfer of tokens to intended recipients.
📄️ IAirdropERC20Claimable
Thirdweb's Airdrop contracts provide a lightweight and easy to use mechanism to drop tokens. AirdropERC20Claimable contract is an airdrop contract for ERC20 tokens. It follows a pull mechanism for transfer of tokens, where allowlisted recipients can claim tokens from the contract.
📄️ IAirdropERC721
Thirdweb's Airdrop contracts provide a lightweight and easy to use mechanism to drop tokens. AirdropERC721 contract is an airdrop contract for ERC721 tokens. It follows a push mechanism for transfer of tokens to intended recipients.
📄️ IAirdropERC721Claimable
Thirdweb's Airdrop contracts provide a lightweight and easy to use mechanism to drop tokens. AirdropERC721Claimable contract is an airdrop contract for ERC721 tokens. It follows a pull mechanism for transfer of tokens, where allowlisted recipients can claim tokens from the contract.
📄️ IAppURI
Thirdweb's AppURI is a contract extension for any base contracts. It lets you set a metadata URI for your contract.
📄️ IBeacon
This is the interface that expects of its beacon.
📄️ IBurnableERC1155
SignatureMint1155 is an ERC 1155 contract. It lets anyone mint NFTs by producing a mint request and a signature (produced by an account with MINTER_ROLE, signing the mint request).
📄️ IBurnableERC20
thirdweb
📄️ IBurnableERC721
thirdweb
📄️ IClaimCondition
The interface IClaimCondition is written for thirdweb's 'Drop' contracts, which are distribution mechanisms for tokens. A claim condition defines criteria under which accounts can mint tokens. Claim conditions can be overwritten or added to by the contract admin. At any moment, there is only one active claim condition.
📄️ IClaimConditionMultiPhase
The interface IClaimConditionMultiPhase is written for thirdweb's 'Drop' contracts, which are distribution mechanisms for tokens. An authorized wallet can set a series of claim conditions, ordered by their respective startTimestamp. A claim condition defines criteria under which accounts can mint tokens. Claim conditions can be overwritten or added to by the contract admin. At any moment, there is only one active claim condition.
📄️ IClaimCondition_V1
Thirdweb's 'Drop' contracts are distribution mechanisms for tokens. A contract admin (i.e. a holder of DEFAULTADMINROLE) can set a series of claim conditions, ordered by their respective startTimestamp. A claim condition defines criteria under which accounts can mint tokens. Claim conditions can be overwritten or added to by the contract admin. At any moment, there is only one active claim condition.
📄️ IClaimConditionsSinglePhase
Thirdweb's 'Drop' contracts are distribution mechanisms for tokens. A contract admin (i.e. a holder of DEFAULTADMINROLE) can set a series of claim conditions, ordered by their respective startTimestamp. A claim condition defines criteria under which accounts can mint tokens. Claim conditions can be overwritten or added to by the contract admin. At any moment, there is only one active claim condition.
📄️ IClaimableERC1155
thirdweb
📄️ IClaimableERC721
thirdweb
📄️ IContext
thirdweb
📄️ IContractDeployer
Methods
📄️ IContractFactory
thirdweb
📄️ IContractMetadata
Thirdweb's ContractMetadata is a contract extension for any base contracts. It lets you set a metadata URI for your contract. Additionally, ContractMetadata is necessary for NFT contracts that want royalties to get distributed on OpenSea.
📄️ IContractPublisher
Methods
📄️ IDefaultExtensionSet
Methods
📄️ IDelayedReveal
Thirdweb's DelayedReveal is a contract extension for base NFT contracts. It lets you create batches of 'delayed-reveal' NFTs. You can learn more about the usage of delayed reveal NFTs here - https://blog.thirdweb.com/delayed-reveal-nfts
📄️ IDelayedRevealDeprecated
Thirdweb's DelayedReveal is a contract extension for base NFT contracts. It lets you create batches of 'delayed-reveal' NFTs. You can learn more about the usage of delayed reveal NFTs here - https://blog.thirdweb.com/delayed-reveal-nfts
📄️ IDirectListings
thirdweb.com The DirectListings extension smart contract lets you buy and sell NFTs (ERC-721 or ERC-1155) for a fixed price.
📄️ IDrop
The interface IDrop is written for thirdweb's 'Drop' contracts, which are distribution mechanisms for tokens. An authorized wallet can set a series of claim conditions, ordered by their respective startTimestamp. A claim condition defines criteria under which accounts can mint tokens. Claim conditions can be overwritten or added to by the contract admin. At any moment, there is only one active claim condition.
📄️ IDrop1155
The interface IDrop1155 is written for thirdweb's 'Drop' contracts, which are distribution mechanisms for tokens. An authorized wallet can set a series of claim conditions, ordered by their respective startTimestamp. A claim condition defines criteria under which accounts can mint tokens. Claim conditions can be overwritten or added to by the contract admin. At any moment, there is only one active claim condition.
📄️ IDropClaimCondition
Thirdweb's 'Drop' contracts are distribution mechanisms for tokens. A contract admin (i.e. a holder of DEFAULTADMINROLE) can set a series of claim conditions, ordered by their respective startTimestamp. A claim condition defines criteria under which accounts can mint tokens. Claim conditions can be overwritten or added to by the contract admin. At any moment, there is only one active claim condition.
📄️ IDropClaimCondition_V2
Thirdweb's 'Drop' contracts are distribution mechanisms for tokens. A contract admin (i.e. a holder of DEFAULTADMINROLE) can set a series of claim conditions, ordered by their respective startTimestamp. A claim condition defines criteria under which accounts can mint tokens. Claim conditions can be overwritten or added to by the contract admin. At any moment, there is only one active claim condition.
📄️ IDropERC1155
Thirdweb's 'Drop' contracts are distribution mechanisms for tokens. The DropERC721 contract is a distribution mechanism for ERC721 tokens. A minter wallet (i.e. holder of MINTERROLE) can (lazy)mint 'n' tokens at once by providing a single base URI for all tokens being lazy minted. The URI for each of the 'n' tokens lazy minted is the provided base URI + of the respective token. (e.g. "ipfs://Qmece.../1"). A minter can choose to lazy mint 'delayed-reveal' tokens. More on 'delayed-reveal' tokens in this article. A contract admin (i.e. holder of DEFAULTADMIN_ROLE) can create claim conditions with non-overlapping time windows, and accounts can claim the tokens according to restrictions defined in the claim condition that is active at the time of the transaction.
📄️ IDropERC1155_V2
Thirdweb's 'Drop' contracts are distribution mechanisms for tokens. The DropERC721 contract is a distribution mechanism for ERC721 tokens. A minter wallet (i.e. holder of MINTERROLE) can (lazy)mint 'n' tokens at once by providing a single base URI for all tokens being lazy minted. The URI for each of the 'n' tokens lazy minted is the provided base URI + of the respective token. (e.g. "ipfs://Qmece.../1"). A minter can choose to lazy mint 'delayed-reveal' tokens. More on 'delayed-reveal' tokens in this article. A contract admin (i.e. holder of DEFAULTADMIN_ROLE) can create claim conditions with non-overlapping time windows, and accounts can claim the tokens according to restrictions defined in the claim condition that is active at the time of the transaction.
📄️ IDropERC20
Thirdweb's 'Drop' contracts are distribution mechanisms for tokens. The DropERC20 contract is a distribution mechanism for ERC20 tokens. A contract admin (i.e. holder of DEFAULTADMINROLE) can create claim conditions with non-overlapping time windows, and accounts can claim the tokens according to restrictions defined in the claim condition that is active at the time of the transaction.
📄️ IDropERC20_V2
Thirdweb's 'Drop' contracts are distribution mechanisms for tokens. The DropERC20 contract is a distribution mechanism for ERC20 tokens. A contract admin (i.e. holder of DEFAULTADMINROLE) can create claim conditions with non-overlapping time windows, and accounts can claim the tokens according to restrictions defined in the claim condition that is active at the time of the transaction.
📄️ IDropERC721
Thirdweb's 'Drop' contracts are distribution mechanisms for tokens. The DropERC721 contract is a distribution mechanism for ERC721 tokens. A minter wallet (i.e. holder of MINTERROLE) can (lazy)mint 'n' tokens at once by providing a single base URI for all tokens being lazy minted. The URI for each of the 'n' tokens lazy minted is the provided base URI + of the respective token. (e.g. "ipfs://Qmece.../1"). A minter can choose to lazy mint 'delayed-reveal' tokens. More on 'delayed-reveal' tokens in this article. A contract admin (i.e. holder of DEFAULTADMIN_ROLE) can create claim conditions with non-overlapping time windows, and accounts can claim the tokens according to restrictions defined in the claim condition that is active at the time of the transaction.
📄️ IDropERC721_V3
Thirdweb's 'Drop' contracts are distribution mechanisms for tokens. The DropERC721 contract is a distribution mechanism for ERC721 tokens. A minter wallet (i.e. holder of MINTERROLE) can (lazy)mint 'n' tokens at once by providing a single base URI for all tokens being lazy minted. The URI for each of the 'n' tokens lazy minted is the provided base URI + of the respective token. (e.g. "ipfs://Qmece.../1"). A minter can choose to lazy mint 'delayed-reveal' tokens. More on 'delayed-reveal' tokens in this article. A contract admin (i.e. holder of DEFAULTADMIN_ROLE) can create claim conditions with non-overlapping time windows, and accounts can claim the tokens according to restrictions defined in the claim condition that is active at the time of the transaction.
📄️ IDropSinglePhase
The interface IDropSinglePhase is written for thirdweb's 'DropSinglePhase' contracts, which are distribution mechanisms for tokens. An authorized wallet can set a claim condition for the distribution of the contract's tokens. A claim condition defines criteria under which accounts can mint tokens. Claim conditions can be overwritten or added to by the contract admin. At any moment, there is only one active claim condition.
📄️ IDropSinglePhase1155
The interface IDropSinglePhase1155 is written for thirdweb's 'DropSinglePhase' contracts, which are distribution mechanisms for tokens. An authorized wallet can set a claim condition for the distribution of the contract's tokens. A claim condition defines criteria under which accounts can mint tokens. Claim conditions can be overwritten or added to by the contract admin. At any moment, there is only one active claim condition.
📄️ IDropSinglePhase1155_V1
Methods
📄️ IDropSinglePhase_V1
Methods
📄️ IERC1155
ERC-1155 Multi Token Standard
📄️ IERC1155Enumerable
ERC1155 Non-Fungible Token Standard, optional enumeration extension
📄️ IERC1155Metadata
Note: The ERC-165 identifier for this interface is 0x0e89341c.
📄️ IERC1155MetadataURIUpgradeable
Interface of the optional ERC1155MetadataExtension interface, as defined in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions. *Available since v3.1.*
📄️ IERC1155Receiver
*Available since v3.1.*
📄️ IERC1155ReceiverUpgradeable
*Available since v3.1.*
📄️ IERC1155Supply
ERC1155S Non-Fungible Token Standard, optional supply extension
📄️ IERC1155Upgradeable
Required interface of an ERC1155 compliant contract, as defined in the https://eips.ethereum.org/EIPS/eip-1155. *Available since v3.1.*
📄️ IERC165
Methods
📄️ IERC165Upgradeable
Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165. Implementers can declare support of contract interfaces, which can then be queried by others (). For an implementation, see {ERC165}.
📄️ IERC1822Proxiable
ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.
📄️ IERC20
ERC20 interface
📄️ IERC20Metadata
ERC20Metadata interface
📄️ IERC20MetadataUpgradeable
Interface for the optional metadata functions from the ERC20 standard. *Available since v4.1.*
📄️ IERC20Permit
Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612. Adds the 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.
📄️ IERC20PermitUpgradeable
Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612. Adds the 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.
📄️ IERC20Upgradeable
Interface of the ERC20 standard as defined in the EIP.
📄️ IERC2771Context
Methods
📄️ IERC2981
Interface for the NFT Royalty Standard. A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal support for royalty payments across all NFT marketplaces and ecosystem participants. *Available since v4.5.*
📄️ IERC2981Upgradeable
Interface for the NFT Royalty Standard. A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal support for royalty payments across all NFT marketplaces and ecosystem participants. *Available since v4.5.*
📄️ IERC721
Required interface of an ERC721 compliant contract.
📄️ IERC721A
Interface of an ERC721A compliant contract.
📄️ IERC721AUpgradeable
Interface of an ERC721A compliant contract.
📄️ IERC721Enumerable
ERC-721 Non-Fungible Token Standard, optional enumeration extension
📄️ IERC721EnumerableUpgradeable
ERC-721 Non-Fungible Token Standard, optional enumeration extension
📄️ IERC721Metadata
ERC-721 Non-Fungible Token Standard, optional metadata extension
📄️ IERC721MetadataUpgradeable
ERC-721 Non-Fungible Token Standard, optional metadata extension
📄️ IERC721Receiver
ERC721 token receiver interface
📄️ IERC721ReceiverUpgradeable
ERC721 token receiver interface
📄️ IERC721Supply
ERC-721 Non-Fungible Token Standard, optional supply extension
📄️ IERC721Upgradeable
Required interface of an ERC721 compliant contract.
📄️ IEditionStake
Thirdweb's EditionStake smart contract allows users to stake their ERC-1155 NFTs and earn rewards in form of an ERC-20 token. note: - Reward token and staking token can't be changed after deployment. - ERC1155 tokens from only the specified contract can be staked. - All token/NFT transfers require approval on their respective contracts. - Admin must deposit reward tokens using the depositRewardTokens function only. Any direct transfers may cause unintended consequences, such as locking of tokens. - Users must stake NFTs using the stake function only. Any direct transfers may cause unintended consequences, such as locking of NFTs.
📄️ IEnglishAuctions
The EnglishAuctions extension smart contract lets you sell NFTs (ERC-721 or ERC-1155) in an english auction.
📄️ IExtension
Events
📄️ IExtensionRegistry
Methods
📄️ IFeeTierPlacementExtension
Methods
📄️ IGovernorUpgradeable
Interface of the core. *Available since v4.3.*
📄️ ILazyMint
Thirdweb's LazyMint is a contract extension for any base NFT contract. It lets you 'lazy mint' any number of NFTs at once. Here, 'lazy mint' means defining the metadata for particular tokenIds of your NFT contract, without actually minting a non-zero balance of NFTs of those tokenIds.
📄️ ILazyMintWithTier
Thirdweb's LazyMintWithTier is a contract extension for any base NFT contract. It lets you 'lazy mint' any number of NFTs at once, for a particular tier. Here, 'lazy mint' means defining the metadata for particular tokenIds of your NFT contract, without actually minting a non-zero balance of NFTs of those tokenIds.
📄️ IMarketplace
Methods
📄️ IMintableERC1155
SignatureMint1155 is an ERC 1155 contract. It lets anyone mint NFTs by producing a mint request and a signature (produced by an account with MINTER_ROLE, signing the mint request).
📄️ IMintableERC20
thirdweb
📄️ IMintableERC721
thirdweb
📄️ IMulticall
Provides a function to batch together multiple calls in a single external call. *Available since v4.1.*
📄️ IMultiwrap
Thirdweb's Multiwrap contract lets you wrap arbitrary ERC20, ERC721 and ERC1155 tokens you own into a single wrapped token / NFT. A wrapped NFT can be unwrapped i.e. burned in exchange for its underlying contents.
📄️ INFTStake
Thirdweb's NFTStake smart contract allows users to stake their ERC-721 NFTs and earn rewards in form of an ERC-20 token. note: - Reward token and staking token can't be changed after deployment. - ERC721 tokens from only the specified contract can be staked. - All token/NFT transfers require approval on their respective contracts. - Admin must deposit reward tokens using the depositRewardTokens function only. Any direct transfers may cause unintended consequences, such as locking of tokens. - Users must stake NFTs using the stake function only. Any direct transfers may cause unintended consequences, such as locking of NFTs.
📄️ IOffers
The Offers extension smart contract lets you make and accept offers made for NFTs (ERC-721 or ERC-1155).
📄️ IOperatorFilterRegistry
thirdweb
📄️ IOperatorFilterToggle
thirdweb
📄️ IOwnable
Thirdweb's Ownable is a contract extension to be used with any base contract. It exposes functions for setting and reading who the 'owner' of the inheriting smart contract is, and lets the inheriting contract perform conditional logic that uses information about who the contract's owner is.
📄️ IPack
The thirdweb Pack contract is a lootbox mechanism. An account can bundle up arbitrary ERC20, ERC721 and ERC1155 tokens into a set of packs. A pack can then be opened in return for a selection of the tokens in the pack. The selection of tokens distributed on opening a pack depends on the relative supply of all tokens in the packs.
📄️ IPackVRFDirect
The thirdweb Pack contract is a lootbox mechanism. An account can bundle up arbitrary ERC20, ERC721 and ERC1155 tokens into a set of packs. A pack can then be opened in return for a selection of the tokens in the pack. The selection of tokens distributed on opening a pack depends on the relative supply of all tokens in the packs.
📄️ IPermissions
External interface of AccessControl declared to support ERC165 detection.
📄️ IPermissionsEnumerable
External interface of AccessControlEnumerable declared to support ERC165 detection.
📄️ IPlatformFee
Thirdweb's PlatformFee is a contract extension to be used with any base contract. It exposes functions for setting and reading the recipient of platform fee and the platform fee basis points, and lets the inheriting contract perform conditional logic that uses information about platform fees, if desired.
📄️ IPluginMap
thirdweb
📄️ IPrimarySale
Thirdweb's Primary is a contract extension to be used with any base contract. It exposes functions for setting and reading the recipient of primary sales, and lets the inheriting contract perform conditional logic that uses information about primary sales, if desired.
📄️ IRouter
Methods
📄️ IRoyalty
Thirdweb's Royalty is a contract extension to be used with any base contract. It exposes functions for setting and reading the recipient of royalty fee and the royalty fee basis points, and lets the inheriting contract perform conditional logic that uses information about royalty fees, if desired. The Royalty contract is ERC2981 compliant.
📄️ ISignatureAction
thirdweb's SignatureAction extension smart contract can be used with any base smart contract. It provides a generic payload struct that can be signed by an authorized wallet and verified by the contract. The bytes data field provided in the payload can be abi encoded <-> decoded to use SignatureContract for any authorized signature action.
📄️ ISignatureMintERC1155
The 'signature minting' mechanism used in thirdweb Token smart contracts is a way for a contract admin to authorize an external party's request to mint tokens on the admin's contract. At a high level, this means you can authorize some external party to mint tokens on your contract, and specify what exactly will be minted by that external party.
📄️ ISignatureMintERC20
The 'signature minting' mechanism used in thirdweb Token smart contracts is a way for a contract admin to authorize an external party's request to mint tokens on the admin's contract. At a high level, this means you can authorize some external party to mint tokens on your contract, and specify what exactly will be minted by that external party.
📄️ ISignatureMintERC721
The 'signature minting' mechanism used in thirdweb Token smart contracts is a way for a contract admin to authorize an external party's request to mint tokens on the admin's contract. At a high level, this means you can authorize some external party to mint tokens on your contract, and specify what exactly will be minted by that external party.
📄️ ISignatureMintERC721_V1
Methods
📄️ IStaking1155
thirdweb
📄️ IStaking20
thirdweb
📄️ IStaking721
thirdweb
📄️ ITWFee
Methods
📄️ ITWMultichainRegistry
Methods
📄️ ITWRegistry
Methods
📄️ ITWRouter
Methods
📄️ IThirdwebContract
Methods
📄️ ITokenBundle
Group together arbitrary ERC20, ERC721 and ERC1155 tokens into a single bundle. The Token struct is a generic type that can describe any ERC20, ERC721 or ERC1155 token. The Bundle struct is a data structure to track a group/bundle of multiple assets i.e. ERC20, ERC721 and ERC1155 tokens, each described as a Token. Expressing tokens as the Token type, and grouping them as a Bundle allows for writing generic logic to handle any ERC20, ERC721 or ERC1155 tokens.
📄️ ITokenERC1155
SignatureMint1155 is an ERC 1155 contract. It lets anyone mint NFTs by producing a mint request and a signature (produced by an account with MINTER_ROLE, signing the mint request).
📄️ ITokenERC20
Methods
📄️ ITokenERC721
SignatureMint is an ERC 721 contract. It lets anyone mint NFTs by producing a mint request and a signature (produced by an account with MINTER_ROLE, signing the mint request).
📄️ ITokenStake
Thirdweb's TokenStake smart contract allows users to stake their ERC-20 Tokens and earn rewards in form of a different ERC-20 token. note: - Reward token and staking token can't be changed after deployment. Reward token contract can't be same as the staking token contract. - ERC20 tokens from only the specified contract can be staked. - All token transfers require approval on their respective token-contracts. - Admin must deposit reward tokens using the depositRewardTokens function only. Any direct transfers may cause unintended consequences, such as locking of tokens. - Users must stake tokens using the stake function only. Any direct transfers may cause unintended consequences, such as locking of tokens.
📄️ IVotes
Common interface for , {ERC721Votes}, and other {Votes}-enabled contracts. *Available since v4.5.*
📄️ IVotesUpgradeable
Common interface for , {ERC721Votes}, and other {Votes}-enabled contracts. *Available since v4.5.*
📄️ IWETH
Methods
📄️ InitStorage
thirdweb.com
📄️ Initializable
This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called initialize. It then becomes necessary to protect this initializer function so it can only be called once. The modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the data argument to {ERC1967Proxy-constructor}. CAUTION [.hljs-theme-light.nopadding] `
📄️ LazyMint
The LazyMint is a contract extension for any base NFT contract. It lets you 'lazy mint' any number of NFTs at once. Here, 'lazy mint' means defining the metadata for particular tokenIds of your NFT contract, without actually minting a non-zero balance of NFTs of those tokenIds.
📄️ LazyMintWithTier
The LazyMint is a contract extension for any base NFT contract. It lets you 'lazy mint' any number of NFTs at once. Here, 'lazy mint' means defining the metadata for particular tokenIds of your NFT contract, without actually minting a non-zero balance of NFTs of those tokenIds.
📄️ LinkTokenInterface
Methods
📄️ Marketplace
Methods
📄️ MarketplaceV3
thirdweb.com
📄️ Math
Standard math utilities missing in the Solidity language.
📄️ MathUpgradeable
Standard math utilities missing in the Solidity language.
📄️ MerkleProof
These functions deal with verification of Merkle Trees proofs. The proofs can be generated using the JavaScript library https the hashing algorithm should be keccak256 and pair sorting should be enabled. See test/utils/cryptography/MerkleProof.test.js for some examples. Source//github.com/ensdomains/governance/blob/master/contracts/MerkleProof.sol
📄️ MinimalForwarderEOAOnly
Simple minimal forwarder to be used together with an ERC2771 compatible contract. See .
📄️ Mock
Methods
📄️ MockContract
Methods
📄️ MockContractPublisher
Methods
📄️ Multicall
Provides a function to batch together multiple calls in a single external call. *Available since v4.1.*
📄️ MulticallUpgradeable
Provides a function to batch together multiple calls in a single external call. *Available since v4.1.*
📄️ Multiwrap
Methods
📄️ NFTStake
Methods
📄️ OffersLogic
thirdweb.com
📄️ OffersStorage
thirdweb.com
📄️ OperatorFilterToggle
Methods
📄️ OperatorFilterer
OperatorFilterer
📄️ OperatorFiltererUpgradeable
Methods
📄️ Ownable
Ownable
📄️ Pack
Methods
📄️ PackVRFDirect
NOTE: This contract is a work in progress.
📄️ PausableUpgradeable
Contract module which allows children to implement an emergency stop mechanism that can be triggered by an authorized account. This module is used through inheritance. It will make available the modifiers whenNotPaused and whenPaused, which can be applied to the functions of your contract. Note that they will not be pausable by simply including this module, only once the modifiers are put in place.
📄️ PaymentSplitterUpgradeable
PaymentSplitter
📄️ Permissions
Permissions
📄️ PermissionsEnumerable
PermissionsEnumerable
📄️ PermissionsEnumerableLogic
thirdweb.com
📄️ PermissionsEnumerableStorage
thirdweb.com
📄️ PermissionsLogic
thirdweb.com
📄️ PermissionsStorage
thirdweb.com
📄️ PlatformFee
Platform Fee
📄️ PlatformFeeLogic
thirdweb.com
📄️ PlatformFeeStorage
thirdweb.com
📄️ PluginMap
thirdweb.com
📄️ PrimarySale
Primary Sale
📄️ Proxy
This abstract contract provides a fallback function that delegates all calls to another contract using the EVM instruction delegatecall. We refer to the second contract as the *implementation* behind the proxy, and it has to be specified by overriding the virtual {\implementation} function. Additionally, delegation to the implementation can be triggered manually through the {\fallback} function, or to a different contract through the {\delegate} function. The success and return data of the delegated call will be returned back to the caller of the proxy._
📄️ ProxyForUpgradeable
This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by EIP1967, so that it doesn't conflict with the storage layout of the implementation behind the proxy.
📄️ ReentrancyGuard
📄️ ReentrancyGuardLogic
Contract module that helps prevent reentrant calls to a function. Inheriting from ReentrancyGuard will make the modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single nonReentrant guard, functions marked as nonReentrant may not call one another. This can be worked around by making those functions private, and then adding external nonReentrant entry points to them. TIP//blog.openzeppelin.com/reentrancy-after-istanbul/.
📄️ ReentrancyGuardStorage
thirdweb
📄️ ReentrancyGuardUpgradeable
Events
📄️ Router
Methods
📄️ RouterImmutable
thirdweb.com
📄️ RouterStorage
thirdweb.com
📄️ Royalty
Royalty
📄️ SafeCast
Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. SafeCast restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always. Can be combined with and {SignedSafeMath} to extend it to smaller types, by performing all math on uint256 and int256 and then downcasting.
📄️ SafeCastUpgradeable
Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. SafeCast restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always. Can be combined with and {SignedSafeMath} to extend it to smaller types, by performing all math on uint256 and int256 and then downcasting.
📄️ SafeERC20
SafeERC20
📄️ SafeERC20Upgradeable
SafeERC20
📄️ SafeMath
Wrappers over Solidity's arithmetic operations. NOTE: SafeMath is generally not needed starting with Solidity 0.8, since the compiler now has built in overflow checking.
📄️ SignatureAction
Methods
📄️ SignatureActionUpgradeable
Methods
📄️ SignatureDrop
Methods
📄️ SignatureDrop_V4
Methods
📄️ SignatureMintERC1155
Methods
📄️ SignatureMintERC1155Upgradeable
Methods
📄️ SignatureMintERC20
Methods
📄️ SignatureMintERC20Upgradeable
Methods
📄️ SignatureMintERC721
Methods
📄️ SignatureMintERC721Upgradeable
Methods
📄️ SoulboundERC721A
The SoulboundERC721A extension smart contract is meant to be used with ERC721A contracts as its base. It provides the appropriate before transfer hook for ERC721A, where it checks whether a given transfer is valid to go through or not. This contract uses the Permissions extension, and creates a role 'TRANSFER_ROLE'. - If address(0) holds the transfer role, then all transfers go through. - Else, a transfer goes through only if either the sender or recipient holds the transfer role.
📄️ Split
Methods
📄️ Staking1155
Methods
📄️ Staking1155Base
note: This contract is provided as a base contract.
📄️ Staking1155Upgradeable
Methods
📄️ Staking20
Methods
📄️ Staking20Base
note: This contract is provided as a base contract.
📄️ Staking20Upgradeable
Methods
📄️ Staking721
Methods
📄️ Staking721Base
note: This contract is provided as a base contract.
📄️ Staking721Upgradeable
Methods
📄️ StorageSlot
Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a value member that can be used to read or write. Example usage to set ERC1967 implementation slot new implementation is not a contract"); StorageSlot.getAddressSlot(IMPLEMENTATIONSLOT).value = newImplementation; } } *Available since v4.1 for address, bool, bytes32, and uint256.*
📄️ StringSet
📄️ Strings
String operations.
📄️ StringsUpgradeable
String operations.
📄️ TWAddress
Collection of functions related to the address type
📄️ TWBitMaps
Library for managing uint256 to bool mapping in a compact and efficient way, providing the keys are sequential. Largely inspired by Uniswap's (https://github.com/Uniswap/merkle-distributor/blob/master/contracts/MerkleDistributor.sol).
📄️ TWFactory
Methods
📄️ TWFee
Methods
📄️ TWMinimalFactory
📄️ TWMultichainRegistry
Methods
📄️ TWMultichainRegistryLogic
Methods
📄️ TWMultichainRegistryRouter
"Inherited by entrypoint" extensions. - PermissionsEnumerable - ERC2771Context - Multicall "NOT inherited by entrypoint" extensions. - TWMultichainRegistry
📄️ TWMultichainRegistryStorage
Methods
📄️ TWProxy
📄️ TWRegistry
Methods
📄️ TWRouter
Methods
📄️ TWStatelessFactory
Methods
📄️ TWStorageSlot
Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a value member that can be used to read or write. Example usage to set ERC1967 implementation slot new implementation is not a contract"); StorageSlot.getAddressSlot(IMPLEMENTATIONSLOT).value = newImplementation; } } *Available since v4.1 for address, bool, bytes32, and uint256.*
📄️ TWStringSet
thirdweb
📄️ TWStrings
String operations.
📄️ TieredDrop
Methods
📄️ TimersUpgradeable
Tooling for timepoints, timers and delays
📄️ TokenBundle
Token Bundle
📄️ TokenERC1155
Methods
📄️ TokenERC20
Methods
📄️ TokenERC721
Methods
📄️ TokenStake
Methods
📄️ TokenStore
Token Store
📄️ Upgradeable
An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an , when this contract is set as the implementation behind such a proxy. A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing UUPSUpgradeable with a custom implementation of upgrades. The {*authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism. \Available since v4.1.*_
📄️ VRFV2WrapperConsumerBase
\*\*\*\\\\*\*\*\\\\*\*\*\\\\*\*\*\\\\\*\*\*\\\\*\*\*\\\\*\*\*\\\\*\*\*\Interface for contracts using VRF randomness through the VRF V2 wrapper \\\\\*\\\\\\*\\\\\\*\\\\\\*\*\*\\\\\\*\\\\\\*\\\\\\*\\\\\
📄️ VRFV2WrapperInterface
Methods
📄️ VoteERC20
Methods
🗃️ design
7 items
📄️ Thirdweb Contracts
thirdweb Contracts