📄️ 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
📄️ BatchMintMetadata
Batch-mint Metadata
📄️ BitMapsUpgradeable
Library for managing uint256 to bool mapping in a compact and efficient way, providing the keys are sequential. Largelly inspired by Uniswap's https://github.com/Uniswap/merkle-distributor/blob/master/contracts/MerkleDistributor.sol.
📄️ 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
📄️ 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
📄️ DelayedReveal
Delayed Reveal
📄️ Drop
Methods
📄️ DropERC1155
Methods
📄️ DropERC20
Methods
📄️ DropERC721
Methods
📄️ DropSinglePhase
Methods
📄️ DropSinglePhase1155
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.
📄️ 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 roaylties. - 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 LazyMint, DelayedReveal The ERC1155DelayedReveal contract uses the ERC1155Base contract, along with the LazyMint and 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 SignatureMintERC1155, DropSinglePhase1155 The ERC1155Drop contract uses the ERC1155Base contract, along with the SignatureMintERC1155 and DropSinglePhase1155 extension. The 'signature minting' mechanism in the SignatureMintERC1155 extension 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. 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 atttempts to mint lazy minted tokens. The ERC721Drop contract lets you lazy mint tokens, and distribute those lazy minted tokens via signature minting, or 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 contract uses the ERC1155Base contract, along with 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.
📄️ 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 SignatureMintERC20, DropSinglePhase The ERC20Drop contract uses the ERC20Base contract, along with the SignatureMintERC20 and DropSinglePhase extensions. The 'signature minting' mechanism in the SignatureMintERC20 extension 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. 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 atttempts to mint tokens.
📄️ ERC20DropVote
BASE SignatureMintERC20, DropSinglePhase The ERC20Drop contract uses the ERC20Vote contract, along with the SignatureMintERC20 and DropSinglePhase extensions. The 'signature minting' mechanism in the SignatureMintERC20 extension 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. 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 atttempts to mint tokens.
📄️ ERC20PausableUpgradeable
ERC20 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.
📄️ 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.
📄️ ERC2771ContextUpgradeable
Context variant with ERC2771 support.
📄️ 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 2^64 - 1 (max value of uint64) of supply. Assumes that the maximum token id cannot exceed 2^256 - 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 roaylties. - 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 LazyMint, DelayedReveal The ERC721DelayedReveal contract uses the ERC721Base contract, along with the LazyMint and 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 SignatureMintERC721, DropSinglePhase The ERC721Drop contract uses the ERC721Base contract, along with the SignatureMintERC721 and DropSinglePhase extension. The 'signature minting' mechanism in the SignatureMintERC721 extension 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. 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 atttempts to mint lazy minted tokens. The ERC721Drop contract lets you lazy mint tokens, and distribute those lazy minted tokens via signature minting, or 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 contract uses the ERC721Base contract, along with 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.
📄️ 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 .
📄️ 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._
📄️ 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._
📄️ FeeType
📄️ Forwarder
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} - Additionanly, 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.
📄️ 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
Methods
📄️ IBurnableERC721
Methods
📄️ IClaimCondition
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.
📄️ IClaimConditionMultiPhase
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.
📄️ IContractDeployer
Methods
📄️ IContractFactory
Methods
📄️ IContractMetadata
Thirdweb's ContractMetadata is a contract extension for any base contracts. It lets you set a metadata URI for you contract. Additionally, ContractMetadata is necessary for NFT contracts that want royalties to get distributed on OpenSea.
📄️ IContractMetadataRegistry
Methods
📄️ IContractPublisher
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
📄️ IDrop
Methods
📄️ 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.
📄️ 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. "ipsf://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.
📄️ 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. "ipsf://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
Methods
📄️ IDropSinglePhase1155
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}.
📄️ 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.
📄️ 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 supplu extension
📄️ IERC721Upgradeable
Required interface of an ERC721 compliant contract.
📄️ 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.
📄️ 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
Methods
📄️ IMintableERC721
Methods
📄️ 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.
📄️ 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.
📄️ 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.
📄️ 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.
📄️ 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.
📄️ 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.
📄️ ITWFee
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).
📄️ 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
📄️ 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. TIP When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed: [.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.
📄️ Marketplace
Methods
📄️ 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
📄️ MinimalForwarder
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
📄️ Ownable
Ownable
📄️ Pack
Methods
📄️ 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
📄️ PlatformFee
Platform Fee
📄️ 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._
📄️ ReentrancyGuardUpgradeable
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/.
📄️ 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
📄️ SignatureDrop
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 transfe role.
📄️ Split
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.*
📄️ 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
📄️ TWProxy
📄️ TWRegistry
Methods
📄️ TWStrings
String operations.
📄️ TimersUpgradeable
Tooling for timepoints, timers and delays
📄️ TokenBundle
Token Bundle
📄️ TokenERC1155
Methods
📄️ TokenERC20
Methods
📄️ TokenERC721
Methods
📄️ TokenStore
Token Store
📄️ VoteERC20
Methods
🗃️ design
6 items
📄️ Thirdweb Contracts
thirdweb Contracts