# thirdweb > Frontend, Backend, and Onchain tools to build complete web3 apps — on every EVM chain. ## Docs * [Batching transactions](/connect/account-abstraction/batching-transactions): Batching transactions allows sending multiple transactions in a single user operation. This can be useful to save on fees, reduce number of user confimations or to ensure that multiple transactions are executed atomically. * [ERC-20 Paymaster](/connect/account-abstraction/erc-20-paymaster): In traditional Ethereum transactions, users pay gas fees in the native cryptocurrency of the network, such as ETH. This requirement can create friction, especially for applications where users interact with smart contracts without holding native tokens. ERC-20 Paymaster enables users pay gas fees using ERC-20 tokens. [Learn more about ERC-20 Paymasters.](https://blog.thirdweb.com/account-abstraction-paymaster-pay-evm-gas-fees-with-usdt-usdc-or-any-other-erc-20-token/) * [Account Factories](/connect/account-abstraction/factories): By default, the SDK uses a global account factory deployed on most chains: * [Engine](/connect/account-abstraction/gasless/engine): Learn to setup gasless transactions using TransactionButton and Engine * [Biconomy](/connect/account-abstraction/gasless/biconomy): Learn to setup gasless transactions using TransactionButton and Biconomy's gasless relayers. * [OpenZeppelin](/connect/account-abstraction/gasless/openzeppelin): Learn to setup gasless transactions using TransactionButton and OpenZeppelin's gasless relayers. * [Getting Started](/connect/account-abstraction/get-started): Getting started to add ERC-4337 compatible smart accounts to your application easily. * [What is a Smart Account?](/connect/account-abstraction/how-it-works): A Smart account is a smart contract wallet that follows the [ERC-4337 specification](https://eips.ethereum.org/EIPS/eip-4337). * [Using Account abstraction in Typescript](/connect/account-abstraction/guides/typescript): By using the [TypeScript SDK](/typescript/v5), you can use smart accounts in your applications easily. * [Using Account Abstraction in React](/connect/account-abstraction/guides/react): By using the [TypeScript SDK](/typescript/v5), you can use smart accounts in your front-end applications easily. * [Bundler & Paymaster Infrastructure](/connect/account-abstraction/infrastructure): The thirdweb SDK handles all the heavy lifting of bundling operations and covering gas fees with a turn-key infrastructure. The thirdweb paymaster and bundler services are **stand alone** and can be used with any smart account contract without using the thirdweb SDKs. * [Account Abstraction](/connect/account-abstraction/overview): Everything you need to leverage account abstraction technology to enable seamless user experiences for your users. You get all the tools to integrate account abstraction into your app. This includes: * [Account Permissions & Session Keys](/connect/account-abstraction/permissions): All of the account contracts - [Simple](https://thirdweb.com/thirdweb.eth/AccountFactory) and [Managed](https://thirdweb.com/thirdweb.eth/ManagedAccountFactory) \- share the same permission model. In this section, we'll describe this permission model in detail. * [Sponsorship rules](/connect/account-abstraction/sponsorship-rules): You can easily define rules around which transactions (User Ops) the paymaster should sponsor. This can be used to prevent abuse, progressively onboard users, and incentivize specific in-app actions. * [Deploying Your App to Production](/connect/auth/deploying-to-production): Before you deploy your app to real users, you'll want to make sure your application is secure and ready to onboard users to your app. This involves separating some operations to the server and others to the client. * [FAQs](/connect/account-abstraction/faq): Yes, by using our Account factory contracts, it is possible to enable predictable addresses per user across all EVM chains. To do this, ensure that your **account factory** has the same address on every chain. You can accomplish this from the dashboard by enabling "Deterministic address" when deploying the account factory. * [Blockchain API](/connect/blockchain-api): Perfomant, reliable and type safe API to read write to any contract on any EVM chain through our [RPC Edge](/infrastructure/rpc-edge/overview) endpoints. * [Overview](/connect/auth): Auth allows anyone to integrate passwordless web3-native authentication and authorization into their applications. Users can then **login using any thirdweb wallet** (in-app, browser, or smart wallet). * [React + Express](/connect/auth/frameworks/react-express): If you want to interact with a working version of the Auth + React integration that we'll be building in this guide, you can check the following GitHub repository, or clone it with the command below: * [Create a Custom JWT Auth Server](/connect/in-app-wallet/custom-auth/custom-jwt-auth-server): Learn how to integrate your auth backend with our in-app wallets solution so you can onboard your users into web3 seamlessly. * [Overview](/connect/in-app-wallet/custom-auth/overview): In-App wallets already support most popular login methods out of the box, but we also give app developers the flexibility to use in-app wallets with any authentication method. If you have a valid authenticated user, you should be able to easily spin up an in-app wallet for them irrespective of how they got authenticated. * [Custom Auth Server](/connect/in-app-wallet/custom-auth/custom-auth-server): Learn how to integrate your auth backend with our in-app wallets solution so you can onboard your users into web3 seamlessly. * [Integrate Firebase Auth](/connect/in-app-wallet/custom-auth/firebase-auth): Learn how to obtain a JSON Web Token (JWT) from Firebase using Firebase's email provider and integrate it with In-App Wallet. * [Build your own UI](/connect/in-app-wallet/guides/build-your-own-ui): You have full control with the connection hooks and functions to build your own UI. To use in-app wallets, you first choose an authentication strategy and then connect. * [Connect Users](/connect/in-app-wallet/guides/connect-users): If you're building a [React website](/typescript/react/v5/ConnectButton), [React Native app](/react-native/v5), or [Unity game](/unity/ConnectWallet) you can use the prebuilt connect UI components to authenticate users and connect their wallets. * [Sponsor Transactions](/connect/in-app-wallet/guides/enable-gasless): By combining [Account abstraction](/connect/account-abstraction) and [In-App Wallet](/connect/in-app-wallet/overview), you can create a truly seamless user experience: * [Interact with the blockchain](/connect/in-app-wallet/guides/interact-blockchain): Once connected, in-app wallets can be used alongside the [Contract SDK](/contracts) to interact with the blockchain. * [Configuration](/connect/in-app-wallet/custom-auth/configuration): We offer two options to setup in-app wallets with custom auth, one that is based on the [OIDC (Open ID Connect)](https://openid.net/developers/how-connect-works/) standard, and a generic option that lets you bring your own auth server. You can also use both options together if needed. * [Interact with users](/connect/in-app-wallet/guides/interact-with-accounts): Once connected, you can interact with user accounts using the `thirdweb/wallets` specific methods. * [PayEmbed Customization](/connect/pay/customization/payembed): Learn how to customize the `PayEmbed`. You can find a selection of popular customizations below. For the full list of props, you can [view the full reference](/references/typescript/v5/PayEmbedProps). * [useSendTransaction Customization](/connect/pay/customization/send-transaction): Learn how to customize the Universal Bridge interface when executing a transaction with `useSendTransaction`. You can find a selection of popular customizations below. For the full list of props, you can [view the full reference](/references/typescript/v5/SendTransactionConfig). * [Customize ConnectButton](/connect/pay/customization/connectbutton): Learn how to customize Universal Bridge within the `ConnectButton` interface. You can find a selection of popular customizations below. For the full list of props, you can [view the full reference](/references/typescript/v5/ConnectButtonProps). * [Next.js](/connect/auth/frameworks/next): If you want to interact with a working version of the Auth + Next integration that we'll be building in this guide, you can check the following GitHub repository, or clone it with the command below: * [Fee Sharing](/connect/pay/fee-sharing): thirdweb collects a 1% fee per end user transaction. We share 70% of this fee with you. * [FAQs](/connect/pay/faqs): thirdweb does not charge any fees for buy with fiat. Any fees on onramping are based on the onramp provider. * [Overview](/connect/pay/overview): Universal Bridge allows your users to bridge, swap, and purchase cryptocurrencies and execute transactions with any fiat options or tokens via cross-chain routing. * [Supported Chains](/connect/pay/supported-chains): [View all supported chains with Universal Bridge](https://thirdweb.com/chainlist?service=pay). * [Build a Custom Fiat Experience](/connect/pay/guides/build-a-custom-experience): Learn how to enable your users to purchase your application’s token with any fiat payment method with our headless flow. * [Accept Direct Payments with Universal Bridge & Engine](/connect/pay/guides/accept-direct-payments): Learn how to accept fiat and crypto from your customers with Universal Bridge and trigger Engine actions, like minting NFTs or transferring tokens to user wallets. * [Webhooks](/connect/pay/webhooks): Pay can be configured to send webhook events to notify your application any time an event happens on your transaction. Pay sends a response, via a HTTP request, to any endpoint URLs that you have provided us in your Team > Project > Connect > Pay > Webhooks page in [thirdwe dashboard](https://thirdweb.com/team). * [Quickstart](/connect/quickstart): Learn how to add Connect SDK to your application, log in your users, and allow them to interact with your application. * [Customization Options](/connect/sign-in/customization): Our ConnectButton and ConnectEmbed components are highly customizable. You can find a selection of popular customizations below. For the full list of props, you can [view the full reference](https://portal.thirdweb.com/references/typescript/v5/ConnectButtonProps). * [Enable Test Mode](/connect/pay/testing-pay): Developers can turn on Test Mode to test both fiat-to-crypto transactions and crypto-to-crypto transactions on supported testnet chains. It is possible to test both at the same time or separately. * [Ecosystem Wallet Explorer Page](/connect/wallet/ecosystem/portal): Every Ecosystem Wallet deployment will also create a wallet management page that you can share with your partners and users. End users can visit this page to view tokens and assets in the in-app wallets they’ve created across your ecosystem. * [Integrating with Partners](/connect/wallet/ecosystem/integrating-partners): One of the key features of ecosystem wallets is the ability to enable other developers to spin up in-app wallets on your behalf. All partners that spin up in-app wallets using your ecosystem wallet will access the same account for your end users. You can create partners in the [Ecosystem Wallets dashboard](https://thirdweb.com/team/~/~/ecosystem). * [Managing Ecosystem Permissions](/connect/wallet/ecosystem/permissions): There are two permission options depending on whether you’d like an open or exclusive ecosystem wallet. You can manage these permissions from the Permissions page in your Ecosystem Wallet Dashboard. * [How to Register Your thirdweb Ecosystem Wallet with WalletConnect (now Reown)](/connect/wallet/ecosystem/register-walletconnect): **Note:** WalletConnect Inc. is now Reown. [Read more here](https://reown.com/blog/walletconnect-is-now-reown). * [General FAQs](/connect/wallet/faq): Our thirdweb In-App Wallet is fully EVM compatible and supports all EVM chains. * [Get Started](/connect/wallet/ecosystem/set-up): Learn how to spin up your first ecosystem wallet, brand your wallet, and integrate your first ecosystem partner. * [Get Users](/connect/wallet/get-users): Once you have users connecting to your app through in-app wallets, you can fetch all users through our REST API: * [Migration Guide](/connect/wallet/migrate-to-thirdweb): Migrating from another embedded wallet provider is possible even if your users have assets and funds on their existing wallets. * [Get Started](/connect/pay/get-started): Learn how to add onramps and crypto purchases to your application. To see which integration is right for you, refer to our [integrations overview](/connect/pay/overview#integration-options). * [Onramp Providers](/connect/pay/onramp-providers): thirdweb Universal Bridge integrates with Stripe, Kado and Transak to power our onramp. By default, we choose a recommended provider based on the location of the user, KYC status, and currency. * [Get Started](/connect/wallet/get-started): thirdweb offers multiple ways to add wallets to your application. Choose the method that best suits your needs: * [How it works](/connect/wallet/security/legacy): When a user signs into an application using their email or social logins for the first time, a wallet is generated on the user's device. The corresponding wallet key for this wallet is securely split into three shards using [Shamir's Secret Sharing](https://en.wikipedia.org/wiki/Shamir%27s%5Fsecret%5Fsharing) algorithm. * [Pregenerate Wallets](/connect/wallet/pregenerate-wallets): Wallet pregeneration is a technique where you create wallets for users before they actually sign up or authenticate. This allows you to: * [Overview](/connect/wallet/overview): A flexible sign-up flow that accommodates different preferences is critical when onboarding users. thirdweb offers multiple wallet solutions to meet various integration needs: * [thirdweb Wallet Security](/connect/wallet/security): If you are looking for the previous security documentation around the shamir secret sharing model, please refer to the [In-App Wallet Security](/connect/wallet/security/legacy) page. * [Export Private Key](/connect/wallet/user-management/export-private-key): Learn how to export the private key for a thirdweb wallet using the Connect modal. * [Sign-In Methods](/connect/wallet/sign-in-methods/configure): thirdweb supports a bunch of various traditional authentication methods. * [Guest Mode](/connect/wallet/sign-in-methods/guest): Sometimes users want to get started using your app without signing in. You can now give users an in-memory "guest account" that can then be converted into a standard account by linking another auth method. An example is if you want to wait til a user tries to make a transaction before forcing them to onboard. A guest mode account is not persisted durably and only exists in memory until linked to an Auth method. * [External wallets](/connect/wallet/sign-in-methods/external-wallets): thirdweb natively supports 500+ first-party wallets and all wallets that implement EIP-6963 (Multi-injected Provider Discovery). For the full list, please consult [this list](/typescript/v5/supported-wallets). * [Getting User Profiles](/connect/wallet/user-management/get-user-profiles): Once authenticated, you can retrieve the user profiles linked to a wallet. This allows you to access additional information about the user, such as their email address or phone number. * [Web3 Onboard](/connect/wallet/web3-onboard): thirdweb acquired Web3Onboard by Blocknative on 1/13/2025\. We will be quickly migrating the documentation over to thirdweb in the coming weeks. For now, please refer to [Web3 Onboard's documentation](https://onboard.blocknative.com/docs/overview/introduction) * [What is Connect?](/connect): Connect is the complete toolkit for connecting every user to your application. It features customizable onboarding flows, self-custodial in-app wallets, account abstraction, onramps, and a performant API to interact with the blockchain. * [Why thirdweb?](/connect/why-thirdweb): The thirdweb SDK comes with all the features you need to build production-grade client-side applications. Here's a comparison with other popular libraries. * [ERC1155DelayedReveal](/contracts/build/base-contracts/erc-1155/delayed-reveal): `ERC1155DelayedReveal` adds the [Delayed Reveal](/glossary/delayed-reveal) feature to the[ERC1155LazyMint](/contracts/build/base-contracts/erc-1155/lazy-mint) base contract. * [ERC1155Drop](/contracts/build/base-contracts/erc-1155/drop): The `ERC1155Drop` base contract is the foundation for an Edition (ERC1155) NFT Drop that other wallets can claim. * [ERC1155Base](/contracts/build/base-contracts/erc-1155/base): The `ERC1155Base` smart contract implements the [ERC1155](https://eips.ethereum.org/EIPS/eip-1155) NFT standard. It allows for minting NFTs to yourself (or to someone else) and selling those NFTs on a marketplace. * [ERC20Base](/contracts/build/base-contracts/erc-20/base): The `ERC20Base` smart contract implements the [ERC-20](https://eips.ethereum.org/EIPS/eip-20) standard. Additionally, it supports [EIP-2612](https://eips.ethereum.org/EIPS/eip-2612), allowing approvals to be made via signatures. * [ERC1155SignatureMint](/contracts/build/base-contracts/erc-1155/signature-mint): The `ERC1155SignatureMint` smart contract adds [Signature-Based Minting](/contracts/build/extensions/erc-1155/ERC1155SignatureMint)extensions to the [ERC1155Base](/contracts/build/base-contracts/erc-1155/base) contract. * [ERC20DropVote](/contracts/build/base-contracts/erc-20/drop-vote): The `ERC20Drop` base contract adds the [Drop Single Phase](/contracts/build/extensions/general/DropSinglePhase) extension to the [ERC20 base](/contracts/build/base-contracts/erc-20/base) contract to allow you to distribute your tokens under the criteria of claim conditions. It also implements the [ERC20Votes](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Votes.sol) contract, which provides voting and delegation functionality, along with delegation by signature. * [ERC20Drop](/contracts/build/base-contracts/erc-20/drop): The `ERC20Drop` base contract adds the [Drop Single Phase](/contracts/build/extensions/general/DropSinglePhase) extension contract to the [ERC20 base](/contracts/build/base-contracts/erc-20/base) contract to allow you to distribute your tokens under the criteria of claim conditions. * [ERC1155LazyMint](/contracts/build/base-contracts/erc-1155/lazy-mint): `ERC1155LazyMint` allows you to [Lazy Mint](/glossary/lazy-minting) NFTs on your contract. It exposes a `verifyClaim` function that you can override to add your claim-restriction logic. * [ERC20SignatureMintVote](/contracts/build/base-contracts/erc-20/signature-mint-vote): The `ERC20SignatureMintVote` smart contract adds [signature-based minting](/contracts/build/extensions/erc-20/ERC20signaturemint) extension to the [ERC20Vote](/contracts/build/base-contracts/erc-20/base) base contract. It also implements the [ERC20Votes](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Votes.sol) contract, which provides voting and delegation functionality, along with delegation by signature.[Signature minting](/glossary/signature-based-minting) uses [EIP-712](https://eips.ethereum.org/EIPS/eip-712), which enables the 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 others to mint tokens on your contract, and specify what exactly will be minted by that external party. * [ERC20SignatureMint](/contracts/build/base-contracts/erc-20/signature-mint): The `ERC20SignatureMint` smart contract adds the [signature-based minting extension](/contracts/build/extensions/erc-20/ERC20signaturemint)functionality to the [ERC20Base](/contracts/build/base-contracts/erc-20/base) contract. [Signature minting](/glossary/signature-based-minting) uses [EIP-712](https://eips.ethereum.org/EIPS/eip-712), which enables the 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 others to mint tokens on your contract, and specify what exactly will be minted by that external party. * [ERC20Vote](/contracts/build/base-contracts/erc-20/vote): The `ERC20Vote` smart contract implements the [ERC20](https://eips.ethereum.org/EIPS/eip-20) standard. It also supports [EIP-2612](https://eips.ethereum.org/EIPS/eip-2612); allowing approvals to be made via signatures, and the[ERC20Votes](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Votes.sol) contract; which provides voting and delegation functionality, along with delegation by signature. * [AccountFactory](/contracts/build/base-contracts/erc-4337/account-factory): This contract inherits from the [BaseAccountFactory](/contracts/build/extensions/erc-4337/SmartWalletFactory) contract. * [Managed Account](/contracts/build/base-contracts/erc-4337/managed-account): This contract inherits from the [BaseAccount](/contracts/build/extensions/erc-4337/SmartWallet) contract. * [Account](/contracts/build/base-contracts/erc-4337/account): This contract inherits from the [BaseAccount](/contracts/build/extensions/erc-4337/SmartWallet) contract * [Managed Account Factory](/contracts/build/base-contracts/erc-4337/managed-account-factory): This contract inherits from the [BaseAccountFactory](/contracts/build/extensions/erc-4337/SmartWallet-factory) contract. * [ERC-4337 Smart Accounts](/contracts/build/base-contracts/erc-4337): All of thirdweb's [smart accounts](/connect/account-abstraction) are [EIP-4337](https://eips.ethereum.org/EIPS/eip-4337) smart contract accounts with role-based permission control. * [ERC721Base](/contracts/build/base-contracts/erc-721/base): The `ERC721Base` smart contract implements the [ERC721](https://eips.ethereum.org/EIPS/eip-721) NFT standard, along with the [ERC721A](https://www.erc721a.org/) optimization to the standard. It allows you to mint NFTs to yourself (or to someone else) and selling those NFTs on a marketplace. * [ERC721DelayedReveal](/contracts/build/base-contracts/erc-721/delayed-reveal): `ERC721DelayedReveal` adds the [Delayed Reveal](/contracts/build/extensions/general/DelayedReveal) feature to the [ERC721LazyMint](/contracts/build/base-contracts/erc-721/lazy-mint) base contract. * [ERC721Drop](/contracts/build/base-contracts/erc-721/drop): The `ERC721Drop` base contract allows you to create an NFT Drop that other wallets can claim. * [Base Contracts](/contracts/build/base-contracts): Was this page helpful? * [ERC721LazyMint](/contracts/build/base-contracts/erc-721/lazy-mint): `ERC721LazyMint` allows you to lazy-mint ERC-721 tokens, which allows any wallet to claim a lazy-minted NFT. It exposes a `verifyClaim` function that you can override to add your claim-restriction logic. * [ERC721SignatureMint](/contracts/build/base-contracts/erc-721/signature-mint): The `ERC721SignatureMint` smart contract uses the[ERC721Base](/contracts/build/base-contracts/erc-721/base)base contract along with the [SignatureMintERC721](/contracts/build/extensions/erc-721/ERC721SignatureMint) contract extension. * [ERC1155](/contracts/build/extensions/erc-1155/ERC1155): ERC1155 is the standard for representing "Edition" NFTs where each NFT in the collection can have more than 1 quantity; also known as "semi-fungible" tokens. * [ERC1155BatchMintable](/contracts/build/extensions/erc-1155/ERC1155BatchMintable): Enable minting multiple NFTs at once in a single transaction by Implementing [ERC1155](/contracts/build/extensions/erc-1155/ERC1155), [IMintableERC1155](/contracts/build/extensions/erc-1155/ERC1155Mintable), and [Multicall](/contracts/build/extensions/general/Multicall) extensions. * [ERC1155Burnable](/contracts/build/extensions/erc-1155/ERC1155Burnable): ERC1155Burnable allows the NFTs in the contract to be burned (transferred to a non-recoverable address). * [ERC1155ClaimConditions](/contracts/build/extensions/erc-1155/ERC1155ClaimConditions): Allow other wallets to claim/mint tokens from the contract under the criteria of claim conditions by implementing [ERC1155](/contracts/build/extensions/erc-1155/ERC1155) and [DropSinglePhase](/contracts/build/extensions/general/DropSinglePhase) extensions. * [ERC1155Claimable](/contracts/build/extensions/erc-1155/ERC1155Claimable): Allow other wallets to **claim** NFTs that you have lazy-minted. * [ERC1155ClaimCustom](/contracts/build/extensions/erc-1155/ERC1155ClaimCustom): Allow other wallets to claim/mint tokens that you have Lazy Minted by implementing [ERC1155](/contracts/build/extensions/erc-1155/ERC1155) and [ERC1155Claimable](/contracts/build/extensions/erc-1155/ERC1155Claimable) extensions. * [ERC1155ClaimPhases](/contracts/build/extensions/erc-1155/ERC1155ClaimPhases): Allow other wallets to claim/mint tokens from the contract under the criteria of claim conditions by implementing [ERC1155](/contracts/build/extensions/erc-1155/ERC1155) and [Drop](/contracts/build/extensions/general/Drop). * [DropSinglePhase (ERC1155)](/contracts/build/extensions/erc-1155/ERC1155DropSinglePhase): The `DropSinglePhase1155` smart contract is an extension meant for distributing ERC1155 tokens. * [ERC1155Drop](/contracts/build/extensions/erc-1155/ERC1155Drop): The `Drop1155` smart contract is an extension meant for distributing [ERC1155](/contracts/build/extensions/erc-1155/ERC1155) tokens. It allows setting up multiple claim phases unlike [ERC1155DropSinglePhase](/contracts/build/extensions/erc-1155/ERC1155DropSinglePhase). This series of claim phases is ordered by their respective `startTimestamp`. * [ERC1155Mintable](/contracts/build/extensions/erc-1155/ERC1155Mintable): `ERC1155Mintable` allows you to mint new NFTs into your ERC1155 NFT collection contract. * [ERC1155Revealable](/contracts/build/extensions/erc-1155/ERC1155Revealable): Create batches of ['delayed-reveal'](/glossary/delayed-reveal) NFTs that can be revealed at a later date after they have been minted and claimed. * [Linking Multiple Identities](/connect/wallet/user-management/link-multiple-identity): thirdweb Wallets allow users to tie the same wallet address to multiple social identities. Developers can programmatically link additional identities at any point in their user journey. * [ERC1155SignatureMint](/contracts/build/extensions/erc-1155/ERC1155SignatureMint): The `SignatureMintERC1155` smart contract is an extension meant for distributing ERC1155 tokens. * [ERC1155Staking](/contracts/build/extensions/erc-1155/ERC1155Staking): The `Staking1155` smart contract extension implements NFT staking mechanism for ERC1155\. With this extension you can setup a staking contract for NFT holders of your ERC1155 Collection. Users can stake their NFTs and earn ERC20 tokens as rewards. * [ERC1155Supply](/contracts/build/extensions/erc-1155/ERC1155Supply): View all of the NFTs on the contract by implementing the `totalSupply` function in your ERC1155 contract. * [ERC20BatchMintable](/contracts/build/extensions/erc-20/ERC20BatchMintable): Enable minting multiple NFTs at once in a single transaction by Implementing [ERC20](/contracts/build/extensions/erc-20/ERC20), [IMintableERC20](/contracts/build/extensions/erc-20/ERC20BatchMintable), and [Multicall](/contracts/build/extensions/general/Multicall) extensions. * [ERC20](/contracts/build/extensions/erc-20/ERC20): ERC20 is the standard for representing fungible tokens; where each token is of equal valuable and interchangeable. * [ERC20ClaimConditions](/contracts/build/extensions/erc-20/ERC20ClaimConditions): Allow other wallets to claim/mint tokens from the contract under the criteria of claim conditions by implementing [ERC20](/contracts/build/extensions/erc-20/ERC20) and [DropSinglePhase](/contracts/build/extensions/general/DropSinglePhase) extensions. * [ERC20Burnable](/contracts/build/extensions/erc-20/ERC20Burnable): Support burning tokens by implementing the `IBurnableERC20` interface. * [ERC20Mintable](/contracts/build/extensions/erc-20/ERC20Mintable): Enable the minting of new tokens by implementing the `IMintableERC20` interface. * [ERC721Permit](/contracts/build/extensions/erc-20/ERC20Permit): Implementing the `ERC20Permit` extensions allows approvals to be made via signatures, as defined in[EIP-2612](https://eips.ethereum.org/EIPS/eip-2612%5BEIP-2612%5D). * [ERC20SignatureMint](/contracts/build/extensions/erc-20/ERC20SignatureMint): The `SignatureMintERC20` smart contract is an extension meant for distributing ERC20 tokens. * [ERC20Staking](/contracts/build/extensions/erc-20/ERC20Staking): The `Staking20` smart contract extension implements ERC20 staking mechanism. With this extension, you can set up a staking contract for holders of your ERC20 tokens. Users can stake their tokens and earn a different set of ERC20 tokens as rewards. * [BaseAccount](/contracts/build/extensions/erc-4337/SmartWallet): The `BaseAccount` smart contract is an extension that is intended to be used when creating your own smart account contract which does not use one of our ready-to-use base-contract account smart contracts. * [AccountExtension](/contracts/build/extensions/erc-4337/AccountExtension): The `AccountExtension` smart contract is the extension usable with the [Managed](/contracts/build/base-contracts/erc-4337/managed-account) Account smart contracts. It is the _default extension_ for these base contracts. It includes the default logic for creating a smart account smart contract including the ability to: * [ERC1155Enumerable](/contracts/build/extensions/erc-1155/ERC1155Enumerable): View all of the NFTs in the collection and all the NFTs owned by a specific wallet address by implementing the `IERC1155Enumerable` interface. * [BaseAccountFactory](/contracts/build/extensions/erc-4337/SmartWalletFactory): The `BaseAccountFactory` smart contract is an extension usable with the [Managed](/contracts/build/base-contracts/erc-4337/managed-account) and [Non-Upgradable](/contracts/build/base-contracts/erc-4337/account-factory) Account smart contracts. When creating your [Smart Account](/glossary/smart-wallet) account factory contract, inherit from this extension to include all of the base logic to create your factory. * [ERC721](/contracts/build/extensions/erc-721/ERC721): ERC721 is the standard for representing NFTs (non-fungible tokens). * [ERC721BatchMintable](/contracts/build/extensions/erc-721/ERC721BatchMintable): Enable minting multiple NFTs at once in a single transaction by Implementing [ERC721](/contracts/build/extensions/erc-721/ERC721), [IMintableERC721](/contracts/build/extensions/erc-721/ERC721Mintable), and [Multicall](/contracts/build/extensions/general/Multicall) extensions. * [ERC721ClaimCustom](/contracts/build/extensions/erc-721/ERC721ClaimCustom): Allow other wallets to claim/mint tokens that you have Lazy Minted by implementing [ERC721](/contracts/build/extensions/erc-721/ERC721) and [ERC721Claimable](/contracts/build/extensions/erc-721/ERC721Claimable) extensions. * [ERC721Burnable](/contracts/build/extensions/erc-721/ERC721Burnable): ERC721Burnable allows the NFTs in the contract to be burned (transferred to a non-recoverable address). * [ERC721ClaimConditions](/contracts/build/extensions/erc-721/ERC721ClaimConditions): Allow other wallets to claim/mint tokens from the contract under the criteria of claim conditions by implementing [ERC721](/contracts/build/extensions/erc-721/ERC721) and [DropSinglePhase](/contracts/build/extensions/general/DropSinglePhase) extensions. * [ERC721Claimable](/contracts/build/extensions/erc-721/ERC721Claimable): Allow other wallets to **claim** NFTs that you have lazy-minted. * [ERC721ClaimPhases](/contracts/build/extensions/erc-721/ERC721ClaimPhases): Allow other wallets to claim/mint tokens from the contract under the criteria of claim conditions by implementing [ERC721](/contracts/build/extensions/erc-721/ERC721) and [Drop](/contracts/build/extensions/general/Drop) extensions. * [ERC721Enumerable](/contracts/build/extensions/erc-721/ERC721Enumerable): View all of the NFTs owned by a specific wallet address by implementing the `IERC721Enumerable` interface. * [ERC721Mintable](/contracts/build/extensions/erc-721/ERC721Mintable): Enable new NFTs to be minted into the collection by implementing the `IMintableERC721` interface on your ERC721(A) contract. * [ERC721Revealable](/contracts/build/extensions/erc-721/ERC721Revealable): Create batches of ['delayed-reveal'](/glossary/delayed-reveal) NFTs that can be revealed at a later date after they have been minted and claimed. * [ERC721Supply](/contracts/build/extensions/erc-721/ERC721Supply): View all of the NFTs from the collection by implementing the `totalSupply` function on your ERC721(A) contract. * [ERC721Staking](/contracts/build/extensions/erc-721/ERC721Staking): The `Staking721` smart contract extension implements NFT staking mechanism. With this extension you can setup a staking contract for NFT holders of your ERC721 Collection. Users can stake their NFTs and earn ERC20 tokens as rewards. * [ERC721SignatureMint](/contracts/build/extensions/erc-721/ERC721SignatureMint): The `SignatureMintERC721` smart contract is an extension meant for distributing ERC721 tokens. * [ContractMetadata](/contracts/build/extensions/general/ContractMetadata): The `ContractMetadata` smart contract is an extension usable with any smart contract. It lets you define metadata for your smart contract. Additionally, `ContractMetadata` is necessary to enable [royalties](/contracts/build/extensions/general/Royalty) on NFT contracts on OpenSea. * [BatchMintMetadata (ERC1155 & ERC721)](/contracts/build/extensions/general/BatchMintMetadata): The `BatchMintMetadata` smart contract is an extension for any NFT contract. It lets the smart contract using this extension set the metadata for `n` number of NFTs in one transaction. A single base URI for a batch of `n` NFTs is defined, where the metadata URI for each NFT in a relevant batch is `baseURI/tokenId`. * [DelayedReveal](/contracts/build/extensions/general/DelayedReveal): The [DelayedReveal](/glossary/delayed-reveal) smart contract is an extension for any NFT contract. It lets you create batches of 'delayed-reveal' NFTs. * [Drop (ERC20 & ERC721)](/contracts/build/extensions/general/Drop): [Drop](/glossary/drop) is an extension meant for distributing ERC20 or ERC721 tokens. It allows setting up multiple claim phases unlike `DropSinglePhase`. This series of claim phases is ordered by their respective `startTimestamp`. * [LazyMint](/contracts/build/extensions/general/LazyMint): The `LazyMint` smart contract is an extension for any base NFT contract. It lets you 'lazy mint' any number of NFTs at once. * [DropSinglePhase (ERC20 & ERC721)](/contracts/build/extensions/general/DropSinglePhase): The `DropSinglePhase` smart contract is an extension meant for distributing ERC20 or ERC721 tokens. * [Multicall](/contracts/build/extensions/general/Multicall): The `Multicall` smart contract is an extension usable with any base smart contract. It provides a function `multicall` to batch together multiple calls in a single external call. * [Ownable](/contracts/build/extensions/general/Ownable): The `Ownable` smart contract extension is usable with any base smart contract. It lets you set an owner for your smart contract. * [PermissionsEnumerable](/contracts/build/extensions/general/PermissionsEnumerable): The `PermissionsEnumerable` extension provides role-based access control: you can create roles and write custom logic in your smart contract that depends on whether a given wallet holds a given role. The `Enumerable` part provides the capability to view all the addresses holding a specific role. * [Permissions](/contracts/build/extensions/general/Permissions): The `Permissions` extension provides role-based access control: you can create roles and write custom logic in your smart contract that depends on whether a given wallet holds a given role. * [PrimarySale](/contracts/build/extensions/general/PrimarySale): `PrimarySale` lets you set a recipient for any sale value you intend to collect in your smart contract. * [Extensions](/contracts/build/extensions): Was this page helpful? * [Getting Started](/contracts/build/get-started): To get started with the Solidity SDK, run the following command to create a new project: * [Modular Contracts](/contracts/build/modular-contracts): **Modular Contracts** are contracts for which you can add, remove, or upgrade the exact parts you want. * [Royalty](/contracts/build/extensions/general/Royalty): `Royalty` implements [EIP-2981](https://eips.ethereum.org/EIPS/eip-2981) NFT royalty standard for royalty support on NFT marketplaces, allowing you to take a percentage fee of secondary sales of your NFTs. * [Deploy Contract](/contracts/deploy/deploy-contract): To deploy a contract using Deploy: * [Build (Solidity SDK)](/contracts/build/overview): **Build** or **Solidity SDK** provides the tools needed to build custom smart contracts more efficiently by offering a set of pre-built base contracts and reusable components, better known as extensions. * [Deploy](/contracts/deploy/overview): Deployment tools allow you to deploy any contract to any EVM compatible chain through one simple command and an easy-to-use interface. Deploy reduces the complexities of deploying a contract by eliminating steps such as hardcoding private keys, managing RPC URLs, or running scripts to deploy your contracts. * [PlatformFee](/contracts/build/extensions/general/PlatformFee): `PlatformFee` allows you to charge a percentage fee wherever there is a transfer of currency (ERC20 tokens or native tokens) in your contract. * [CLI Reference](/contracts/deploy/reference): Use the CLI to deploy your contracts directly to any EVM compatible blockchain by running: * [Drop design document.](/contracts/design-docs/drop): This is a live document that explains what the [thirdweb](https://thirdweb.com/) `Drop` smart contracts are, how they work and can be used, and why they are written the way they are. * [Pack design document.](/contracts/design-docs/pack): This is a live document that explains what the [thirdweb](https://thirdweb.com/) `Pack` smart contract is, how it works and can be used, and why it is designed the way it is. * [Modular Contracts design document.](/contracts/design-docs/modular-contracts): _Modular Contracts_ is a framework for writing highly composable smart contracts. These are smart contracts for which you can add, remove, upgrade or switch out the exact parts you want. * [Account Factory](/contracts/explore/pre-built-contracts/account-factory): The **Account Factory** contract is used to deploy immutable [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) smart accounts with role based permission control. The `Account` contract is a simple smart account contract that comes with all the basic benefits of account abstraction, along with the mentioned default features. App developers can issue `Account` smart accounts programmatically by deploying an `AccountFactory` smart contract. The `Account` smart contract is non-upgradeable. Developers should use this wallet if they do not anticipate making any future upgrades to their users' wallets. * [Multiwrap design document.](/contracts/design-docs/multiwrap): This is a live document that explains what the [thirdweb](https://thirdweb.com/) `Multiwrap` smart contract is, how it works and can be used, and why it is designed the way it is. * [Signature minting design document.](/contracts/design-docs/signature-mint): This is a live document that explains the 'signature minting' mechanism used in [thirdweb](https://thirdweb.com/) `Token` smart contracts. * [Airdrop ERC1155 Claimable](/contracts/explore/pre-built-contracts/airdrop-erc1155-claimable): The `AirdropERC1155Claimable` contract is suitable to use when you want to airdrop ERC1155 NFTs to a list of recipient addresses, where these recipients are expected to individually claim their own airdrop. * [Explore (Pre-built Contracts)](/contracts/explore/overview): Pre-built contracts are proxy contracts created by the thirdweb team to cover most common use cases and patterns for smart contracts. Contracts cover various use cases across NFTs, airdrops, staking, marketplaces, memberships, and more. All pre-built contracts are available to deploy on [Explore](https://thirdweb.com/explore). * [Airdrop ERC-20 (Claimable)](/contracts/explore/pre-built-contracts/airdrop-erc20-claimable): The `AirdropERC20Claimable` contract is suitable to use when you want to airdrop ERC20 tokens to a list of recipient addresses, where these recipients are expected to individually claim their own airdrop. * [Airdrop ERC-20](/contracts/explore/pre-built-contracts/airdrop-erc20): Airdrop ERC-20 tokens or the chain's native token (e.g. ether for Ethereum mainnet) to a list of recipients. * [Airdrop ERC721 Claimable](/contracts/explore/pre-built-contracts/airdrop-erc721-claimable): The `AirdropERC721Claimable` contract is suitable to use when you want to airdrop ERC721 NFTs to a list of recipient addresses, where these recipients are expected to individually claim their own airdrop. * [Airdrop ERC1155](/contracts/explore/pre-built-contracts/airdrop-erc1155): Airdrop ERC1155 NFTs to a list of recipients. * [Airdrop ERC-721](/contracts/explore/pre-built-contracts/airdrop-erc721): Airdrop ERC721 NFTs to a list of recipients. * [Edition](/contracts/explore/pre-built-contracts/edition): The **Edition** contract is best used when you want to release many NFTs based on the same asset, but you **don't** want to "drop" or "release" them for your community to claim. * [Edition Drop](/contracts/explore/pre-built-contracts/edition-drop): The **Edition Drop** contract is best used when you want to release many NFTs with the same metadata that you want users to be able to claim. This contract follows the [ERC1155 extension](https://eips.ethereum.org/EIPS/eip-1155), also known as "Semi-Fungible Tokens". * [Multiwrap](/contracts/explore/pre-built-contracts/multiwrap): The Multiwrap contract lets you wrap [ERC20](https://eips.ethereum.org/EIPS/eip-20),[ERC721](https://eips.ethereum.org/EIPS/eip-721) and[ERC1155](https://eips.ethereum.org/EIPS/eip-1155)tokens into a **new** wrapped ERC721 NFT. The wrapped NFT can be unwrapped (burned) back into the underlying tokens. * [Managed Account Factory](/contracts/explore/pre-built-contracts/managed-account-factory): The **Managed Account Factory** contract is used to deploy upgradeable [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337s) smart wallets with role based permission control. * [NFT Collection](/contracts/explore/pre-built-contracts/nft-collection): The NFT Collection contract is suitable for when you want to have a collection of unique NFTs, but **not** "drop" or "release" them for your community to claim. * [Pack](/contracts/explore/pre-built-contracts/pack): The packs are ERC1155 NFTs themselves, which can have the metadata you'd expect of an NFT, such as a name, image, description, etc. * [Marketplace](/contracts/explore/pre-built-contracts/marketplace): A Marketplace is a contract where you can buy and sell NFTs, such as OpenSea or Rarible. * [NFT Drop](/contracts/explore/pre-built-contracts/nft-drop): NFT Drop enables users to release a collection of unique NFTs using the ERC721A standard. NFT Drop uses a “drop” mechanism intended for large collections to distribute NFTs. * [Open Edition ERC721](/contracts/explore/pre-built-contracts/open-edition): The `OpenEditionERC721` contract is an 'open edition' ERC721 NFT collection. The contract uses the [ERC-721A](/contracts/build/extensions/erc-721/ERC721) standard. * [Split](/contracts/explore/pre-built-contracts/split): The Split contract lets you specify multiple wallet addresses that are recipients of any revenue or royalty split. * [Stake ERC1155](/contracts/explore/pre-built-contracts/stake-erc1155): This contract allows users to stake their ERC-1155 NFTs and get ERC-20 tokens as staking rewards. Contract admin should set the NFT and Reward-token addresses during deployment. These can't be changed later. * [Stake ERC-20](/contracts/explore/pre-built-contracts/stake-erc20): This contract allows users to stake their ERC-20 tokens and get ERC-20 tokens as staking rewards (different from the staked tokens). Contract admin should set the Staking and Reward token addresses during deployment. These can't be changed later. * [Stake ERC-721](/contracts/explore/pre-built-contracts/stake-erc721): This contract allows users to stake their ERC-721 NFTs and get ERC-20 tokens as staking rewards. Contract admin should set the NFT and Reward-token addresses during deployment. These can't be changed later. * [Token Drop](/contracts/explore/pre-built-contracts/token-drop): The Token Drop contract is a way of releasing your [ERC20](https://eips.ethereum.org/EIPS/eip-20)tokens for a set price. * [Vote](/contracts/explore/pre-built-contracts/vote): The Vote contract is designed for groups such as DAOs to vote on proposals. * [Deploy a modular Edition Drop contract](/contracts/explore/pre-built-modular/edition-drop): The Edition Drop contract also known as “semi-fungible” or “multi” tokens create multiple NFTs from the same asset based on the [ERC-1155 standard](https://eips.ethereum.org/EIPS/eip-1155). * [Deploy a modular Edition Drop](/contracts/explore/pre-built-modular/edition): The Edition contract also known as “semi-fungible” or “multi” tokens create multiple NFTs from the same asset based on the [ERC-1155 standard](https://eips.ethereum.org/EIPS/eip-1155). NFTs are minted to the creator’s wallet as they are added to the collection. NFTs are still transferable, able to be sold on a marketplace, and perform any other actions as defined by ERC-1155. * [Token](/contracts/explore/pre-built-contracts/token): The Token contract is suited for creating a digital currency and is compliant with the [ERC20](https://eips.ethereum.org/EIPS/eip-20) standard. It can be purchased and traded between users on an exchange, utilized to buy and sell NFTs in a marketplace, etc. * [Deploy a modular NFT Collection contract](/contracts/explore/pre-built-modular/nft-collection): The NFT Collection contract creates a unique collection of NFTs based on the ERC-721A standard. NFTs are minted to the creator’s wallet as they are added to the collection. NFTs are still transferable, able to be sold on a marketplace, and perform any other actions as defined by ERC-721A. * [Deploy a modular Open Edition contract](/contracts/explore/pre-built-modular/open-edition): The Open Edition contract creates NFTs with shared metadata with unique token IDs appended to the NFTs name. Contrary to standard NFT contracts, Open Edition has an unlimited supply and users may continuously mint them increasing accessibility to a broader audience. The Open Edition contract is based on the ERC-721A contract. * [Deploy a modular NFT Drop contract](/contracts/explore/pre-built-modular/nft-drop): The NFT Drop contract creates a unique collection of NFTs based on the [ERC-721A](https://www.erc721a.org/) standard. NFT Drop allows you to define claim conditions or settings which define how a user can claim an NFT. * [Deploy a modular Token Drop Contract](/contracts/explore/pre-built-modular/token-drop): The Token Drop contract creates digital currencies that are released for a set price and is compliant with the [ERC-20](https://eips.ethereum.org/EIPS/eip-20) standard. This contract defines a common set of rules for tokens including how they can be transferred, how transactions are approved, and how data about token balances is accessed. * [ERC-1155 Core](/contracts/modular-contracts/core-contracts/erc-1155): Was this page helpful? * [Loyalty Card](/contracts/explore/pre-built-contracts/loyalty-card): The Loyalty Card contract is suitable for launching loyalty programs. Each NFT represents a loyalty card, and the NFT's metadata contains the loyalty card's information. * [Deploy a modular Token Contract](/contracts/explore/pre-built-modular/token): The modular Token contract creates digital currencies and is compliant with the ERC-20 standard. This contract defines a common set of rules for tokens including how they can be transferred, how transactions are approved, and how data about token balances is accessed. * [ERC-721 Core](/contracts/modular-contracts/core-contracts/erc-721): Was this page helpful? * [ERC-20 Core](/contracts/modular-contracts/core-contracts/erc-20): Was this page helpful? * [Create Core Contract](/contracts/modular-contracts/get-started/create-core-contract): Install Forge from Foundry and add the modular contract framework: * [How Do Modular Contracts Work](/contracts/modular-contracts/how-it-works): Modular contracts are composed of two core components: * [Get Started with Modular Contracts](/contracts/modular-contracts/get-started): The Get Started documentation for Modular Contracts guides you through building and deploying an example modular contract that increments a counter. It also shows you how to build an application using this contract. * [Deploy a Modular Contract](/contracts/modular-contracts/get-started/deploy-modular-contract): This guide will show you how to publish a Modular Contract that increments a counter. If you're interested in learning how modular contracts work, refer to [How it works](https://portal.thirdweb.com/contracts/modular-contracts/how-it-works). If you haven't read through [Create a Core Contract](https://portal.thirdweb.com/contracts/modular-contracts/get-started/create-core-contact) and [Create a Module Contract](https://portal.thirdweb.com/contracts/modular-contracts/get-started/create-module-contract), please do so before proceeding as this guide will build on top of those previous guides. * [Create Module Contract](/contracts/modular-contracts/get-started/create-module-contract): **Prerequisite:** Read “Create Core Contract” before creating a Module. * [Agglayer Module Contract](/contracts/modular-contracts/module-contracts/cross-chain/agglayer): We created a module which leverages Agglayer, an interoperability protocol. This module may be added to any ERC-20 modular contract to construct a cross-chain interoperable smart contract for trustless and secure transfers across any chain. [Learn more about Agglayer.](https://github.com/AggLayer) * [Modular Contracts](/contracts/modular-contracts/modular-contracts): **Modular Contracts** are contracts for which you can add, remove, or upgrade the exact parts you want. * [OpenEditionMetadataERC1155](/contracts/modular-contracts/module-contracts/erc-1155/metadata/openEditionMetadataERC1155): The `OpenEditionMetadataERC1155` contract is a module that provides metadata management for Open Edition ERC-1155 tokens. This module builds upon the functionalities of the `OpenEditionMetadataERC721` contract, adapting them for the ERC-1155 standard. * [BatchMetadataERC1155](/contracts/modular-contracts/module-contracts/erc-1155/metadata/batchMetadataERC1155): The `BatchMetadataERC1155` contract is a module that provides batch metadata management for ERC-1155 tokens. This module builds upon the functionalities of the `BatchMetadataERC721` contract, adapting them for the ERC-1155 standard. It includes functionalities for updating and managing metadata in batches efficiently. * [Simple Metadata ERC-1155](/contracts/modular-contracts/module-contracts/erc-1155/metadata/simpleMetadataERC1155): The `SimpleMetadataERC1155` contract is a module that provides simple metadata functionality for ERC-1155 tokens. It inherits from `SimpleMetadataERC721` to leverage the metadata management capabilities and adapt them for ERC-1155 tokens, allowing for easy setting and retrieval of token URIs. * [ClaimableERC1155](/contracts/modular-contracts/module-contracts/erc-1155/minting/claimableERC1155): The `ClaimableERC1155` contract is a module that provides claim-based minting functionality for ERC-1155 tokens. It includes features for setting claim conditions, validating claims via Merkle proofs, and handling signature-based claim requests. This contract ensures secure and controlled minting processes with the possibility of integrating primary sales. * [MintableERC1155](/contracts/modular-contracts/module-contracts/erc-1155/minting/mintableERC1155): The `MintableERC1155` contract is a module that provides minting functionalities for ERC-1155 tokens. This module includes features such as minting with and without signatures, and configuration for primary sales recipients. * [SequentialTokenIdERC1155](/contracts/modular-contracts/module-contracts/erc-1155/misc/sequentialTokenIdERC1155): The `SequentialTokenIdERC1155` contract is a module that provides sequential token ID generation for ERC-1155 tokens. This module ensures that each new token minted receives a unique, incrementing ID, preventing ID collisions and simplifying the token minting process. * [Transferable ERC-1155](/contracts/modular-contracts/module-contracts/erc-1155/misc/transferableERC1155): The `TransferableERC1155` contract is a module that provides transfer control functionality for ERC-1155 tokens. This contract allows enabling or disabling token transfers globally or for specific addresses, adding an extra layer of control over how tokens can be moved. * [RoyaltyERC1155](/contracts/modular-contracts/module-contracts/erc-1155/misc/royaltyERC1155): The `RoyaltyERC1155` contract is a module that integrates royalty management and validation functionalities for ERC-1155 token transfers. This module ensures that royalties are appropriately handled during token transfers, and allows for the validation of these transfers through a customizable transfer validator. * [ClaimableERC20](/contracts/modular-contracts/module-contracts/erc-20/minting/claimableERC20): The `ClaimableERC20` contract is a module that provides claim-based minting functionality for ERC-20 tokens. It includes features for setting claim conditions, validating claims via Merkle proofs, and handling signature-based claim requests. This contract ensures secure and controlled minting processes with the possibility of integrating primary sales. * [MintableERC20](/contracts/modular-contracts/module-contracts/erc-20/minting/mintableERC20): The `MintableERC20` contract is a module that provides minting functionalities for ERC-20 tokens. This module includes features such as minting with and without signatures, and configuration for primary sales recipients. * [Transferable ERC-20](/contracts/modular-contracts/module-contracts/erc-20/misc/transferableERC20): The `TransferableERC20` contract is a module that provides transfer control functionality for ERC-20 tokens. This contract allows enabling or disabling token transfers globally or for specific addresses, adding an extra layer of control over how tokens can be moved. * [BatchMetadataERC721](/contracts/modular-contracts/module-contracts/erc-721/metadata/batchMetadataERC721): The `BatchMetadataERC721` contract is a module that provides batch metadata management for ERC-721 tokens. It includes functionalities for uploading, updating, and retrieving metadata in batches efficiently. This contract helps manage metadata for large collections of tokens by organizing them in batches. * [CreatorTokenERC20](/contracts/modular-contracts/module-contracts/erc-20/misc/creatorTokenERC20): The `CreatorTokenERC20` contract is a module that builds upon the ERC-20 standard to offer additional functionality tailored for token creators. This module includes features such as transfer validation to ensure only approved transfers are processed, adding a layer of control and security for token transfers. * [OpenEditionMetadataERC721](/contracts/modular-contracts/module-contracts/erc-721/metadata/openEditionMetadataERC721): The `OpenEditionMetadataERC721` contract is a module that provides metadata management for Open Edition ERC-721 tokens. It includes functionalities for setting and retrieving shared metadata for tokens, making metadata management simple and efficient. * [Simple Metadata ERC-721](/contracts/modular-contracts/module-contracts/erc-721/metadata/simpleMetadataERC721): The `SimpleMetadataERC721` contract is a module that provides simple metadata functionality for ERC-721 tokens. It allows for easy setting and retrieval of token URIs, making it straightforward to manage metadata for individual tokens. * [Delayed Reveal Batch Metadata ERC-721](/contracts/modular-contracts/module-contracts/erc-721/metadata/delayedRevealBatchMetadataERC721): The `DelayedRevealBatchMetadataERC721` contract is a module that provides functionality for delayed reveal of metadata for ERC-721 tokens. It enables the uploading of metadata for ranges of token IDs with optional encryption, allowing tokens to be revealed at a later time with a decryption key. This is useful for scenarios where the token metadata needs to be kept secret until a specified time. * [MintableERC721](/contracts/modular-contracts/module-contracts/erc-721/minting/mintableERC721): The `MintableERC721` contract is a module that provides minting functionalities for ERC-721 tokens. This module includes features such as minting with and without signatures, and configuration for primary sales recipients. * [ClaimableERC721](/contracts/modular-contracts/module-contracts/erc-721/minting/claimableERC721): The `ClaimableERC721` contract is a module that provides claim-based minting functionality for ERC-721 tokens. It includes features for setting claim conditions, validating claims via Merkle proofs, and handling signature-based claim requests. This contract ensures secure and controlled minting processes with the possibility of integrating primary sales. * [RoyaltyERC721](/contracts/modular-contracts/module-contracts/erc-721/misc/royaltyERC721): The `RoyaltyERC721` contract is a module that integrates royalty management and validation functionalities for ERC-721 token transfers. This module ensures that royalties are appropriately handled during token transfers, and allows for the validation of these transfers through a customizable transfer validator. * [What are Modular Contracts?](/contracts/modular-contracts/overview): Modular contracts is a framework that enables the creation of highly customizable and upgradeable smart contracts. Modular contracts is designed to encompass a broad number of use cases without compromising on the ease and security of creating smart contracts with thirdweb. * [Transferable ERC-721](/contracts/modular-contracts/module-contracts/erc-721/misc/transferableERC721): The `TransferableERC721` contract is a module that provides transfer control functionality for ERC-721 tokens. This contract allows enabling or disabling token transfers globally or for specific addresses, adding an extra layer of control over how tokens can be moved. * [undefined](/contracts/modular-contracts/tutorials/deploy-erc721-core): Was this page helpful? * [Deploy ERC-20 Core Contract](/contracts/modular-contracts/tutorials/deploy-erc20-core): Learn how to deploy an ERC-20 Core Contract. This contract serves as the foundation for creating a modular contract with additional features and functionalities. * [Publish Options](/contracts/publish/publish-options): The deployment options you choose will determine how _users_ deploy your contract. * [Publish](/contracts/publish/overview): Publish allows developers to share their contract for others to deploy. Publishing a contract allows it to be shareable, verifiable, and deployable by other users. * [What are Contracts?](/contracts): Contracts is an end-to-end development suite which provides tools to develop, deploy, and manage smart contracts. * [ThirdwebContract.Create](/dotnet/contracts/create): Create an instance of `ThirdwebContract` to start interacting with a deployed smart contract. You can read data from and write data to the blockchain using this contract instance. If the ABI is not provided, it will attempt to fetch it automatically if available. * [Publish](/contracts/publish/publish-contract): Use the [CLI](/cli) to publish your contracts directly to **Any EVM compatible chain** using the [dashboard](https://thirdweb.com/team): * [Initializing a Thirdweb Client](/dotnet/client): The `ThirdwebClient` class is the main entry point for interacting with the Thirdweb SDK. * [Contract Extensions](/dotnet/contracts/extensions): Thirdweb's .NET SDK provides a set of useful type-safe extensions for calling smart contracts. These extensions simplify the process of interacting with smart contracts by providing a more intuitive and user-friendly API. * [ThirdwebContract.Read](/dotnet/contracts/read): Use `ThirdwebContract.Read` to fetch data from a smart contract without making any state changes to the blockchain. This method is primarily used for "view" and "pure" functions within the smart contract. * [ThirdwebContract.Prepare](/dotnet/contracts/prepare): Instantiate a low level [Transaction](/dotnet/transactions/create) object from a contract prepare call. * [Integrating into MAUI Projects](/dotnet/maui): Thirdweb's .NET SDK is fully compatible with .NET MAUI, allowing you to integrate wallets and blockchain functionality into your cross-platform applications. * [ThirdwebContract.Write](/dotnet/contracts/write): The `ThirdwebContract.Write` method allows you to execute transactions that alter the state of the blockchain via a smart contract. This is typically used for functions that create, modify, or delete data on the blockchain. * [Getting Started](/dotnet/getting-started): We recommend using an API key to use thirdweb’s default infrastructure services with the .NET SDK such as RPC, Storage, and Account Abstraction. If you haven’t created a key yet, you can do so for free from the [thirdweb dashboard](https://thirdweb.com/create-api-key). * [Integrating into Godot Projects](/dotnet/godot): To integrate the Thirdweb .NET SDK into your Godot projects, you will need to add the Thirdweb SDK package directly to your Godot project's `.csproj` file. This enables you to use the SDK's functionalities within your Godot application, allowing for blockchain interactions such as connecting to user's wallets, interacting with smart contracts, and more. * [Insight Indexer .NET Integration](/dotnet/insight/quickstart): Insight is an extremely useful and performant tool to query blockchain data and can decorate it quite nicely too. * [BuyWithFiat](/dotnet/pay/buywithfiat): Generate an onramp link to redirect users to. See [GetBuyWithFiatQuote](/dotnet/pay/getbuywithfiatquote) for more information on how to get an onramp quote. * [Nebula AI .NET Integration](/dotnet/nebula/quickstart): The last piece of the puzzle required to create .NET apps and games leveraging a blockchain-powered AI assistant or NPC that also has the power to fully execute transactions. * [BuyWithCrypto](/dotnet/pay/buywithcrypto): Send a quoted swap transaction. See [GetBuyWithCryptoQuote](/dotnet/pay/getbuywithcryptoquote) for more information on how to get a swap quote. * [GetBuyHistory](/dotnet/pay/getbuyhistory): Get buy history for a specific wallet that executed a [Buy With Crypto](/dotnet/pay/buywithcrypto) or [Buy With Fiat](/dotnet/pay/buywithfiat) swap, supports cursor and pagination. * [GetBuyWithCryptoQuote](/dotnet/pay/getbuywithcryptoquote): Get a quote containing a TransactionRequest for swapping any token pair. * [GetBuyWithCryptoStatus](/dotnet/pay/getbuywithcryptostatus): Get swap status for a transaction hash returned by [BuyWithCrypto](/dotnet/pay/buywithcrypto). * [GetBuyWithFiatCurrencies](/dotnet/pay/getbuywithfiatcurrencies): Returns a list of fiat currencies supported by Buy With Fiat that can be used when getting a quote using the [GetBuyWithFiatQuote](/dotnet/pay/getbuywithfiatquote) API. * [GetBuyWithFiatQuote](/dotnet/pay/getbuywithfiatquote): Get a quote containing an intent id and onramp link for a fiat to crypto swap. * [GetBuyWithFiatStatus](/dotnet/pay/getbuywithfiatstatus): Get onramp status for an intent id returned by [BuyWithFiat](/dotnet/pay/buywithfiat). * [Quickstart](/dotnet/pay/quickstart): Thirdweb Pay is a powerful service that allows you to easily integrate fiat onramps and cross-chain crypto purchases. * [ThirdwebStorage](/dotnet/storage): The `ThirdwebStorage` class provides methods to interact with any URL including IPFS, allowing you to download and upload data easily. * [ThirdwebTransaction Instance Methods](/dotnet/transactions/instance): The `ThirdwebTransaction` class provides a set of instance methods to set various properties of your transaction's input data and gas settings. * [Utils](/dotnet/utils): A collection of common utility functions that are useful for interacting with the Thirdweb .NET SDK or the blockchain in general. Full list available [here](https://thirdweb-dev.github.io/dotnet/docs/Thirdweb.Utils.html). * [IThirdwebWallet.Authenticate](/dotnet/wallets/actions/authenticate): Login to your [thirdweb Auth](https://portal.thirdweb.com/connect/auth)\-integrated backend. * [SmartWallet.CreateSessionKey](/dotnet/wallets/actions/createsessionkey): Grants restricted Smart Wallet access to a signer, otherwise known as session keys, allowing that signer to connect to this Smart Wallet and interact with it, alongside the original admin. * [SmartWallet.AddAmin](/dotnet/wallets/actions/addadmin): Add a new admin to the connected Smart Wallet. * [Publish CLI Reference](/contracts/publish/reference): Use the CLI to publish your contracts directly to Any EVM compatible chain using the dashboard: * [ThirdwebTransaction Static Methods](/dotnet/transactions/static): The `ThirdwebTransaction` class includes several static methods that provide functionality to estimate costs, simulate, send and poll transactions and user operations. * [IThirdwebWallet.Disconnect](/dotnet/wallets/actions/disconnect): This method cleanly disconnects the wallet instance from the blockchain network or any related services, effectively ending the session. * [EcosystemWallet.GenerateExternalLoginLink](/dotnet/wallets/actions/generateexternalloginlink): This method returns a URL that can be used to forward the logged-in session of In-App or Ecosystem Wallets from .NET to React apps built using thirdweb. * [IThirdwebWallet.ExecuteTransaction](/dotnet/wallets/actions/executetransaction): Sends a raw transaction from the connected wallet (if supported), waits for it to be mined and returns the receipt. It is recommended to use `ThirdwebContract.Write` instead. * [ThirdwebTransaction.Create](/dotnet/transactions/create): If you are interacting with a contract, it is best to use[ThirdwebContract.Prepare](/dotnet/contracts/prepare) to create a transaction. * [SmartWallet.GetAllActiveSigners](/dotnet/wallets/actions/getallactivesigners): This method retrieves a list of all active signers with their permissions for a smart wallet. * [IThirdwebWallet.GetAddress](/dotnet/wallets/actions/getaddress): This method retrieves the blockchain address associated with a Thirdweb wallet instance, enabling developers to easily identify and interact with the wallet on the blockchain. * [SmartWallet.GetAllAdmins](/dotnet/wallets/actions/getalladmins): This method retrieves a list of all admin addresses for a smart wallet. * [EcosystemWallet.GetEcosystemDetails](/dotnet/wallets/actions/getecosystemdetails): This method returns information about the Ecosystem the wallet is part of. * [IThirdwebWallet.GetBalance](/dotnet/wallets/actions/getbalance): This method allows getting either the native token balance or the balance of a specific token for a wallet. * [GetPersonalWallet](/dotnet/wallets/actions/getpersonalwallet): This method retrieves the current signer of the connected SmartWallet. * [EcosystemWallet.GetUserDetails](/dotnet/wallets/actions/getuserdetails): This method returns information about the connected user wallet and its linked accounts. * [EcosystemWallet.GetUserDetails](/dotnet/wallets/actions/getuserauthdetails): This method returns information about the connected user auth provider details, for instance Google or Github specific details. * [IThirdwebWallet.GetTransactionCount](/dotnet/wallets/actions/gettransactioncount): This method retrieves the transaction count (i.e., nonce) for a specified wallet address on a given chain. * [IThirdwebWallet.IsConnected](/dotnet/wallets/actions/isconnected): Determines whether the wallet instance is currently connected to the blockchain network and any related services. * [SmartWallet.RemoveAdmin](/dotnet/wallets/actions/removeadmin): Removes an admin from the connected Smart Wallet. * [SmartWallet.IsDeployed](/dotnet/wallets/actions/isdeployed): This method retrieves whether the connected Smart Wallet is deployed onchain. * [IThirdwebWallet.SendTransaction](/dotnet/wallets/actions/sendtransaction): Sends a raw transaction from the connected wallet (if supported) and returns the hash. It is recommended to use `ThirdwebContract.Write` instead. * [IThirdwebWallet.PersonalSign](/dotnet/wallets/actions/sign): This method allows signing a string message using the wallet's private key. The signed message proves the message's integrity and authenticity, demonstrating that the message was indeed created by the owner of the private key. * [IThirdwebWallet.SignTypedDataV4](/dotnet/wallets/actions/signtypeddatav4): Signs structured data according to EIP-712, enhancing the security and usability of signing structured data by providing a standardized user experience across Ethereum applications. * [SmartWallet.Create](/dotnet/wallets/providers/account-abstraction): Instantiate a `SmartWallet` to enable advanced blockchain interactions, including gasless transactions through account abstraction. This wallet type is especially useful for creating a user-friendly experience in decentralized applications. * [EIP-7702 Integration (Experimental)](/dotnet/wallets/actions/signauthorization): Integrates `authorizationList` for any transactions. This EIP essentially allows you to set code to an EOA, unlocking a world of possibilities to enhance their functionality. * [PrivateKeyWallet.Create](/dotnet/wallets/providers/private-key): Instantiate a `PrivateKeyWallet` with a given private key. This wallet is capable of signing transactions and messages, interacting with smart contracts, and performing other blockchain operations. **This wallet type is intended for backend applications only,** due to the sensitive nature of private keys. * [EngineWallet.Create](/dotnet/wallets/providers/engine-wallet): A .NET integration of thirdweb [Engine](https://thirdweb.com/engine). * [.NET SDK](/dotnet): Build decentralized .NET applications and create seamless user experiences using Thirdweb's .NET SDK. * [FAQ](/engine/faq): Engine supports reads and writes to any contract verified on the blockchain explorer, including any contract deployed via thirdweb._Note: Some endpoints allow providing the contract ABI to support any unverified contract._ * [InAppWallet.Create](/dotnet/wallets/providers/in-app-wallet): Create an instance of `InAppWallet` using a user's email, phone number or OAuth. This wallet type facilitates secure user authentication through OTP verification, making it suitable for client-facing applications where handling private keys directly is not ideal. * [Access Tokens](/engine/features/access-tokens): Manage API access to your Engine instance. Access tokens are valid until deleted. * [Admins](/engine/features/admins): Manage access to your Engine instance. * [Alert Notifications](/engine/features/alert-notifications): All cloud-hosted Engine instances (running `v2.0.10` or later) can now configure alert notifications to be notified when an issue is detected on your Engine instance. * [Account Abstraction](/engine/features/account-abstraction): Consider using [Smart Backend Wallets](/engine/features/backend-wallets#smart-backend-wallets) instead. They combine EOA and smart account management into a single wallet, with automatic deployment and simplified integration: * [EcosystemWallet.Create](/dotnet/wallets/providers/ecosystem-wallet): Create an instance of `EcosystemWallet` using a user's email, phone number or OAuth. This wallet type facilitates secure user authentication through OTP verification, making it suitable for client-facing applications where handling private keys directly is not ideal. * [Cancelling Transactions](/engine/features/cancelling-transactions): Engine submits transactions to the blockchain within 5-10 seconds of receiving a request. During gas or traffic spikes, transactions may take longer to be mined. * [Backend Wallets](/engine/features/backend-wallets): Engine performs blockchain actions using backend wallets that you own and manage. * [Contracts](/engine/features/contracts): Call or deploy contracts from your backend wallet to any EVM blockchain with one API call. * [Custom Chains](/engine/features/custom-chains): Engine supports all [public EVM chains](https://thirdweb.com/chainlist) and your own custom chains. * [Contract Subscriptions](/engine/features/contract-subscriptions): Receive webhooks for any transaction log or receipt on any contract. * [IThirdwebWallet.Transfer](/dotnet/wallets/actions/transfer): This method transfers a specified amount of Wei (smallest denomination of Ether) or ERC20s to a specified wallet address on a given chain. * [Gasless Transactions](/engine/features/gasless-transactions): Attract a broader audience by removing the need to have gas to use your application. Engine offers multiple options for developers looking to sponsor gas for their users' transactions. * [Keypair Authentication](/engine/features/keypair-authentication): Engine supports keypair authentication allowing your app to generate short-lived access tokens. * [Preventing Duplicate Transactions](/engine/features/preventing-duplicate-transactions): Your backend server may implement retries to handle when an HTTP response from Engine was not received successfully. In these cases, set an **idempotency key** to drop duplicate submissions of the same transaction. * [Relayers](/engine/features/relayers): Use Engine as a relayer to sponsor gas for transactions on behalf of your users. Users sign a transaction with their own wallet (no gas required), and pay [gas fees](/glossary/gas) with an Engine backend wallet. * [Security](/engine/features/security): Engine provides you with security features to configure and restrict access to sensitive operations. * [Wallet Credentials](/engine/features/wallet-credentials): Wallet credentials are authentication details required to interact with different cloud providers and wallet services. They enable secure access to wallet functionality across various platforms. * [Get Started](/engine/get-started): Once you have Engine set up, learn the basics of Engine. * [Webhooks](/engine/features/webhooks): Configure webhooks in Engine to notify your backend server of transaction or backend wallet events. * [Airdrop NFTs](/engine/guides/airdrop-nfts): Engine makes it effortless for any developer to airdrop NFTs at scale. You sponsor the gas so your users only need a wallet address! * [Production Checklist](/engine/production-checklist): Follow best practices when using Engine in a production environment. * [NFT Checkout](/engine/guides/nft-checkout): This guide uses thirdweb Engine to sell NFTs with credit card: * [Security](/engine/security): As of Jan 2024, Engine has received a thorough security audit and internal bug bounty program from HackerOne. A Letter of Attestation may be provided upon request. * [Typescript SDK](/engine/references/typescript): Update configuration, manage backend wallets, and call contracts in Typescript. All Engine APIs are accessible via SDK. * [Troubleshooting](/engine/troubleshooting): Here are helpful resources for debugging issues you may encounter while using thirdweb Engine. * [Self-Host Instructions](/engine/self-host): Self-host Engine on your own infrastructure for free and manage your self-hosted Engine from the [thirdweb dashboard](https://thirdweb.com/team/~/~/engine). * [Bundler](/glossary/bundler): A bundler is a node that monitors the alternative mempool of `UserOperations` and bundles multiple `UserOps` together to forward to the EntryPoint contract as a single transaction. These `UserOps` can be sent from different accounts and are bundled and sent to the `EntryPoint` contract via a `handleOps` call. * [Engine](/engine): Engine is an open-source, backend server that reads, writes, and deploys contracts at production scale. * [Claiming](/glossary/claiming): Claiming is the process of transferring token ownership to the claimer's wallet. Once a token has been [lazy minted](/glossary/lazy-minting), it can be claimed by a wallet. * [Claim Phases](/glossary/claim-phases): Claim phases or "claim conditions" allow you to configure various aspects of a [drop](/glossary/drop); such as who can claim tokens, how many tokens will be released, the price of each token, release date, etc. * [Delayed Reveal](/glossary/delayed-reveal): Delayed reveal is a feature that allows you to release NFTs in a [drop](/glossary/drop) with hidden content that can only be revealed at a later time. The owner of the smart contract (or a wallet with the appropriate permissions) can [lazy-mints](/glossary/lazy-minting) a batch of NFTs, along with placeholder metadata and a password. * [Drop](/glossary/drop): A drop smart contract allows the owner of the contract to [lazy mint](/glossary/lazy-minting) NFTs _(unless it is an ERC20 drop)_, and have other users mint them, typically under the conditions defined in the smart contract’s [claim phases](/glossary/claim-phases), although these are not required. * [Externally Owned Account](/glossary/externally-owned-account): An Externally Owned Account (EOA) is an account controlled by the owner of the account's private key usually through a wallet application. Examples include MetaMask, Coinbase Wallet, and Phantom. * [Factory contract](/glossary/factory-contract): A factory contract is a smart contract that is used to deploy other smart contracts. * [Entry Point](/glossary/entry-point): The EntryPoint is a singleton contract (a contract that has a predictable address that is the same on every chain and only one instance per chain). It has two methods that are used as entry points to execute bundles of UserOperations: `handleOps` and `handleAggregatedOps` which validate and execute user operation(s). * [Gas Fees](/glossary/gas): All transactions (operations that change information stored on the blockchain) require a gas fee, which is used to cover the costs of the computational resources to execute that transaction. * [Interoperability](/glossary/interoperability): Interoperability refers to the ability of different networks to share data or assets (like tokens) and interact with each other. * [Gasless Transactions](/glossary/gasless-transactions): Gasless Transactions, also known as meta-transactions, are transactions that have the [gas fee](/glossary/gas)paid for by a third party instead of the transaction sender. Typically, this means the dApp owner covers the gas costs of their users' transactions, providing a more seamless user experience. * [IPFS](/glossary/ipfs): IPFS (InterPlanetary File System) is a protocol to store files in a decentralized peer-to-peer network. * [Lazy Minting](/glossary/lazy-minting): Lazy minting is the preparation of NFT metadata without actually minting the NFT to a wallet address. * [Local Wallet](/glossary/local-wallet): A local wallet is a type of wallet that allows you to create wallets within your application or project. * [NFT](/glossary/nft): A Non-fungible token (NFT) is a type of cryptographic token that represents something unique; non-fungible tokens are thus not mutually interchangeable. It is defined by the [ERC-721 standard](https://eips.ethereum.org/EIPS/eip-721), which is a standard for creating NFTs on the Ethereum blockchain. This is in contrast to ERC-20 tokens, which are 1:1 exchangeable. * [Non-Custodial Wallet](/glossary/non-custodial-wallet): A non-custodial wallet (also known as a self-custody wallet) is a wallet where the user has full control of their security & assets. The user is solely responsible for the security of their private key and therefore their funds. Examples of non-custodial wallets are Coinbase Wallet, Electron, and Ledger. * [Paymaster](/glossary/paymaster): A paymaster is a smart contract that relays transactions. It provides a service that enables a third party to pay the transaction fee on behalf of the user by funding the paymaster in advance. The Paymaster acts as a gas reserve which then can be used during the call execution via the`EntryPoint` contract. * [Permissionless](/glossary/permissionless): On the context of smart contracts, permissionless means that anyone can interact with the contract without needing special permission or approval. Smart contracts can be deployed on public blockchains like Ethereum, promoting open access and transparency. While anyone can interact with a permissionless smart contract, the contract's code may still limit certain operations (like modifying the contract or accessing certain data) to specific roles, such as the contract's owner or creator. * [Composability](/glossary/composability): Composability refers to the ability for different protocols and smart contracts to interact and build upon each other. It allows for the creation of new products and services without having to build everything from scratch. * [Proxy Contracts](/glossary/proxy-contracts): A Proxy smart contract contains the [Storage](/storage) for an upgradable contract that allows you to modify its logic post-deployment. * [RPC URLs](/glossary/rpc): An RPC (Remote Procedure Call) URL is an endpoint that enables an application to communicate with a blockchain network. It is used to send requests (initiate transactions) and receive responses (read data) from the blockchain, enabling developers to build applications that interact with the blockchain. * [Minting](/glossary/minting): Minting is the process of creating new tokens on the blockchain. These tokens can be any type of asset, such as ERC-20, ERC-721 or ERC-1155 tokens. Minting is usually done by the creator of the token (the default admin), but can also be done by anyone who has been given [permission](/contracts/build/extensions/general/Permissions) to mint tokens by the creator. * [Signature-based Minting](/glossary/signature-based-minting): Signature-based minting, or "on-demand minting" allows a smart contract admin to generate signatures that can be used by other wallets to allow them to mint tokens on your smart contract in real-time. * [Smart Contract](/glossary/smart-contract): A smart contract is a computer program, stored on the blockchain. Smart contracts allow trustless transactions to be executed without third parties - the smart contract enforces the rules of the transaction automatically. These transactions are trackable and irreversible. * [Smart Account](/glossary/smart-wallet): A Smart Account is a wallet that is controlled by a smart contract following the [ERC-4337 specification](https://eips.ethereum.org/EIPS/eip-4337). * [Soulbound Tokens](/glossary/soulbound): Soulbound tokens refer to NFTs that are permanently attached to a specific wallet address on the blockchain. * [Token](/glossary/token): A token is a type of digital asset that represents a particular value or utility. Tokens are defined by smart contracts which follow a token standard such as the ERC-20, ERC-1155 or ERC-721 standards. * [Wallet](/glossary/wallet): A wallet is a user's way of interacting with the blockchain. Wallets can be used to store, send, and receive blockchain assets such as ERC-20 tokens and NFTS. * [Staking](/glossary/staking): Staking is the process of locking up tokens to support the operations of a blockchain network. In return for staking, users receive rewards in the form of additional tokens. Staking is a key element of Proof of Stake (PoS) consensus mechanisms, which are used by many blockchains to secure their networks. * [Glossary](/glossary): This section aims to guide you through web3 concepts, including [EIPs](https://eips.ethereum.org/) and thirdweb-specific innovations. * [Blueprints](/insight/blueprints): A blueprint is an API that provides access to on-chain data in a user-friendly format. There's no need for ABIs, decoding, RPC, or web3 knowledge to fetch blockchain data. Every chain exposes the default blueprints below * [Insight FAQs](/insight/faqs): More information coming soon. * [For Agents & LLMs](/insight/agents-and-llms): Insight is a powerful tool that can be used to power AI agents and LLMs with blockchain data. To use the API in your AI agent you can use the llms.txt file bellow. * [Thirdweb Insight](/insight/agents-and-llms/llmstxt): Insight is a powerful tool that lets you retrieve blockchain data from any EVM chain, enrich it with metadata, and transform it using custom logic. Whether you're building a gaming inventory system, tracking DeFi metrics, or analyzing NFT collections, Insight makes it easy to get the data you need with simple API calls. * [Insight Troubleshoot Guide](/insight/troubleshoot): More information coming soon. * [Insight](/insight): Insight is a tool that lets you retrieve blockchain data from any EVM chain, enrich it with metadata, and transform it using custom logic. * [Get Started](/insight/get-started): In this guide we will learn how to use the events blueprint in insight. * [Multichain Queries](/insight/multichain-queries): Insight now supports querying multiple blockchain networks in a single API call. This powerful feature allows you to retrieve and analyze data across different chains without making separate requests for each network. * [Insight Use Cases](/insight/use-cases): Insight offers versatile use cases for using blockchain data within applications, enabling developers to track and analyze a wide array of on-chain activities. With Insight, you can efficiently monitor transfer events, transactions, token ownership, NFT collections, and staking activities across multiple chains, and more, making it a powerful tool for building dynamic blockchain applications. * [Clear Session](/nebula/api-reference/clear-session): Clears all messages for a specific session using the session ID. * [Create Session](/nebula/api-reference/create-session): Creates a new session. * [Delete Session](/nebula/api-reference/delete-session): Deletes a session by ID * [Send Message](/nebula/api-reference/chat): Process a chat message and return the response * [Execute Action](/nebula/api-reference/execute): Executes a specified action. It is similar to /chat but it only handles transaction requests. It is designed to be used without history context. * [Get Session](/nebula/api-reference/get-session): Get details of a session by ID * [Update Session](/nebula/api-reference/update-session): Update session details like title, context, etc. * [IThirdwebWallet.SwitchNetwork](/dotnet/wallets/actions/switchnetwork): This method allows setting the active chain of the wallet if applicable. * [List Sessions](/nebula/api-reference/list-session): Fetches a list of all available sessions. * [Nebula API Reference](/nebula/api-reference): Nebula provides a conversational interface to interact with blockchain data and services, and access to thirdweb tools. * [Nebula FAQs](/nebula/faqs): We are rolling out Nebula approval in batches daily - stay tuned! * [Chat & Execute endpoints](/nebula/key-concepts/chat-execute): The `/chat` endpoint is used for **natural language interactions** with the AI. It allows users to ask questions, get explanations, or retrieve blockchain-related insights, and execute transactions. * [Context Filters](/nebula/key-concepts/context-filters): Context filters help control what blockchain data the AI uses to generate responses. * [Execute Configuration](/nebula/key-concepts/execute-configuration): Configure transaction execution behavior using the execute config: * [Get Started](/nebula/get-started): Learn how to get set up and started with the Nebula API to successfully prepare and enable a connected user to sign a transfer . * [Sessions](/nebula/key-concepts/sessions): Sessions are a way to maintain context across multiple interactions with a user. Since LLMs are stateless by default, sessions help simulate continuity. * [Eliza](/nebula/plugins/eliza): Eliza is a simple, fast, and lightweight AI agent framework to build flexible, scalable, and secure conversational agents. * [Response Handling](/nebula/key-concepts/response-handling): For `stream:true`, you'll need to handle the following event types: * [OpenAI](/nebula/plugins/openai): Compatible with OpenAI’s Chat Completion API to process chat history and generate context-aware responses. * [Nebula Troubleshoot Guide](/nebula/troubleshoot): For any issues you encounter while using Nebula, please [visit our support site](https://thirdweb.com/support). * [Plugins](/nebula/plugins): We are actively adding more integrations, for any specific requests please [contact us](https://thirdweb.com/contact). * [Prompt Guide](/nebula/prompt-guide): Maximize the potential of Nebula. Whether you’re new to blockchain development or an experienced user, this document will help you craft prompts that fully leverage Nebula’s blockchain specific features. * [Nebula](/nebula): Nebula is a natural language model with improved blockchain reasoning, autonomous transaction capabilities, and real-time access to the blockchain. [Learn more about Nebula.](https://blog.thirdweb.com/introducing-nebula-a-powerful-blockchain-model-to-read-write-and-reason-onchain/) * [Batching transactions](/react/v5/account-abstraction/batching-transactions): Batching transactions allows sending multiple transactions in a single user operation. This can be useful to save on fees, reduce number of user confimations or to ensure that multiple transactions are executed atomically. * [Build your own UI](/react/v5/account-abstraction/build-your-own-ui): You can also use the connection hooks and functions to connect to your smart accounts and build your fully custom UI. * [ERC-4337 Smart Accounts](/react/v5/account-abstraction/get-started): Convert any wallet to a ERC-4337 smart account to your application. * [Adapters](/react/v5/adapters): The thirdweb SDK can work side by side with: * [Account Permissions & Session Keys](/react/v5/account-abstraction/permissions): A [smart account](/react/v5/account-abstraction/get-started) can have two types of actors: _Session Keys_ and _Admins_. * [Sign in with Ethereum](/react/v5/auth): Authenticate users with your backend securely by proving they own a given Ethereum address. * [AutoConnect](/react/v5/components/AutoConnect): Automatically connects the last connected wallet in the case a user reloads the page or revisits the app at a later time. * [ConnectButton](/react/v5/components/ConnectButton): ConnectButton component renders a `