Changelog
With the introduction of modular contracts, we are improving the contract management experience on our dashboard to accompany this new development paradigm.
A modular contract has a core contract and module contracts that compose the entire modular contract. With this development in mind, we want to encourage users to add and remove modules with direct support on dashboard.
The following pre-built modules now have special component support on dashboard to enable users to interact with these modules without depending on the Contract Explorer or SDK.
- Transferable
- Royalty
- OpenEdition
- BatchMetadata
To check out these changes, deploy a modular contract on dashboard or view your existing contracts with the aforementioned modules installed.
More module UIs will be released in the coming weeks for the remaining modules- stay tuned. We'd love to hear your feedback on these new changes!
We've made yet another improvement to our dashboard analytics, adding both a project and team-based analytics overview page. Now, you can browse analytics for:
- Weekly and daily active Users
- All-time users
- New users by week or day
- Returning users by week or day
- Distribution of wallets connected
- Total wallets connected
- Distribution of in-app wallet sign-in methods
- Total in-app wallet logins
- Total gas sponsored for your users over time
- ...and more
But there's a catch! You can't see these analytics until you've connected the thirdweb SDK to your app. So start building and your charts can look as amazing as these. 🫡
New chains: Metis Sepolia, Metis Andromeda, Donatuz Testnet, Zero Sepolia, Blast Mainnet, Pivotal Sepolia, Skopje Testnet, GPT, Superseed & Geist
We've added new chains to the platform this week!
Every chain comes out of the box with SDK support RPC, Engine and Account Abstraction capabilities. All you need is the chain id to get going.
For testnets, you'll also find a faucet in each chain page.
Happy building! 🛠️
We've previously sped up in app wallet authentication.
Today, we've dramatically improved our in-app wallet generation speeds. It's now around 40% faster!
In app wallets now get to benefit from the updated security model that ecosystem wallets enjoy.
In particular, we've moved to an enclave model allowing for verifiable code execution. This way, you'll know exactly what the private keys are being used for at all times.
This sets us up to use in app wallets in places where we couldn't before. Think CLIs, backend float wallets, etc.
Migration for existing users on the sharded model happens automatically and requires no work on your end.
We've written a more in depth security overview of the new model here.
To enjoy all the latest goodies, simply update to the latest thirdweb SDK version 5.67.0
!
We are introducing a massive change to thirdweb dashboard with a focus on Teams and Projects
By default all your API keys are converted to projects under a single team as shown below
You can click on your project to view analytics, configure thirdweb services and manage settings.
You can quickly switch between teams and projects directly from dashboard header
Manage your team's general settings, team members, billing, gas credits and notification alerts in team settings dashboard
We now have an entire dashboard dedicated to Account management. You can manage your teams, view all your contracts and manage authorized devices.
- Create multiple teams
- Invite and manage team members
- Account settings
- Link Engines and Contracts with Projects
- Link Projects to Ecosystems
- Having an incorrect or slightly off system time would produce errors when logging in with In-App Wallets in some cases, we have added a fallback in this scenario that will work around this issue.
IThirdwebWallet.Transfer
now has an optionaltokenAddress
override to transfer ERC20 tokens using said function; this is an alternative toThirdwebContract.ERC20_Transfer
.- ERC1155 transfer-related functions'
data
bytes parameter has now been made optional. - The inability to fetch
NFTMetadata
when calling an NFT-related method no longer throws, and instead returnsNFTMetadata
with a description containing the error message. - Enables custom implementation for OTP Verification Modal by @Vingator in https://github.com/thirdweb-dev/unity-sdk/pull/218
- Introduces abstract OTP verification modal so you can customize it more easily.
- Shared by In-App and Ecosystem Wallets.
Exciting new tools and refinements are here with the latest release! Track transactions effortlessly with new nodes for status and receipts, and take advantage of the Blueprint Screenshot Debug feature added directly to your Editor Toolbar. We’ve enhanced security by masking sensitive logs and streamlined configuration with a global PartnerID setting. Plus, enjoy smoother Android authentication and cleaner session key creation. These updates make for a more secure and streamlined experience, so dive in and explore what's new!
- Get Transaction Status node
- Get Transaction Receipt nodes
- Add Blueprint Screenshot Debug Functionality to Editor Toolbar as Button
- Mask sensitive strings in logging
- Migrate
PartnerID
to global configuration, removing from all nodes
- Use JSI-bound custom tabs to fix android external auth
- Formatting string on Read Contract
- Reduce inputs on
CreateSessionKey
- Per node
PartnerID
- In-App Wallets now use the same infrastructure as Ecosystem Wallets.
- Up to 90% performance increase, specially on lower end devices or web platforms.
- Much less cryptography done client side, using secure enclaves over shamir's secret sharing.
- If you were using In-App Wallets previously, they will be automatically migrated to the new infrastructure upon first login.
- If you were using custom auth with In-App Wallets before this release, you may pass your legacy encryption key during the creation of your wallet - it will be used to migrate your wallets to the new infrastructure upon first login.
- Encryption keys are no longer required for In-App Wallets when logging in with JWT (OIDC Compatible Custom Auth) or AuthEndpoint (Generic Custom Auth).
- Added
GetUserDetails
method to In-App/Ecosystem Wallets that returns more information about your logged in user.GetEmail
andGetPhoneNumber
have been deprecated in favor ofGetUserDetails
- Added
GetEcosystemDetails
method to return general information about your Ecosystem Wallet, can be used for dynamic branding, etc. - Fixes
TokenERC721_MintTo
functions failing with invalid signature; the token id parameter has also been removed.
Engine v2.1.0 introduces Smart Backend Wallets, powered by account abstraction. Key benefits include:
- No more gas management
- No need to hold crypto
- Fewer stuck transactions
- Backward-compatible interface
- One-step setup
Smart backend wallets send all transactions as user operations from a smart wallet using thirdweb's paymaster. Your wallets no longer need to hold or top-up gas funds, and thirdweb sends you a bill for your gas used.
No more top-ups also means your business no longer needs to hold crypto. This is great news for any business that must avoid holding cryptocurrency tokens for regulatory or financial reasons.
Use a smart backend wallet with an AWS KMS or GCP KMS wallet for enterprise-grade security for the signer.
While Engine v2 processes transactions very fast, some chains or nodes may throttle transactions submitted from a single backend wallet. Smart backend wallets circumvent this limitation because transactions (or "user operations") are sent from a large fleet of bundler wallet addresses.
Smart backend wallets behave like existing (EOA) backend wallets. Simply update your app's x-backend-wallet-address
header with the smart backend wallet address. All of Engine's endpoints are supported.
Engine creates an EOA signer wallet and deploys a smart account using thirdweb's battle-tested account factory, or your own.
The EOA signer wallet may be a local wallet, AWS KMS, or GCP KMS. You don't need to keep track of this wallet, Engine manages it behind the scenes.
The thirdweb account that deployed Engine (cloud-hosted) or tied to the thirdweb secret key (self-hosted) will be billed for gas usage. A valid payment method must be on file to send transactions on mainnet chains.
Smart backend wallets are enabled on all Engine tiers (Standard, Premium, Enterprise, and self-hosted) for no added cost.
User operations on testnet are free, and thirdweb charges a 10% fee for gas used on mainnet chains. See Pricing for more details.
See the list of chains that support account abstraction on thirdweb. Don't see your chain? Reach out to us!
The existing Create Backend Wallet endpoint now supports new types: smart:local
, smart:aws-kms
, and smart:gcp-kms
:
(Dashboard support coming soon.)
Now provide the backend wallet address to any Engine API that accepts a backend wallet to start using it. We can't wait to see what you build with these new capabilities!
This update represents a major step forward in making web3 infrastructure more accessible and manageable for teams. Whether you're building a game, marketplace, or DeFi app, smart backend wallets provide the foundation for scalable, secure, and efficient blockchain operations.
The benefits mentioned above address the top pain points we heard from customers, and we believe account abstraction-based wallets are the ideal solution.
Account abstraction is complex, but thirdweb (Engine, SDK, infrastructure, contracts) handles the full stack:
- Manage smart accounts
- Deploy and manage smart account factory contracts
- Initialize EntryPoint contract connections
- Handle complex account deployment logic
- Manage deterministic address computation
- Send user operations
- Build UserOperation
- Calculate gas parameters (verification gas, pre-verification gas)
- Handle signature schemes and validation
- Manage nonces across operations
- Bundler infrastructure
- Run or connect to ERC-4337 bundlers
- Handle bundler connections and failovers
- Monitor bundle status and handle failures
- Manage complex retry mechanisms
- Gas management
- Maintain gas balance
- Alert and top-up wallets
- Handle gas price fluctuations
- Manage paymaster integrations
The small team at thirdweb is on a mission to build the most intuitive and complete web3 platform. Our products empower over 70,000 developers each month including Shopify, AWS, Coinbase, Rarible, Animoca Brands, and InfiniGods.
See our open roles. We’d love to work with you!
We are excited to announce the release of Insight v0.0.6-beta! This version brings significant improvements to enhance your blockchain data analysis experience.
You can now perform aggregate functions and use GROUP BY
clauses in your queries. This enhancement allows for more sophisticated data analysis, enabling you to summarise and categorise blockchain data effectively.
We've added the ability to look up transactions based on their function signatures. This feature simplifies filtering and analysing transactions that invoke specific smart contract functions.
- Fixed an issue where bytes were incorrectly truncated from non-address topics and ensured proper handling of empty topics.
- Strip and normalise Solidity function and event signatures for consistent querying.
- Added options for Clickhouse TLS and API basic authentication to enhance security.
- Implemented a whitelist for allowed Clickhouse functions to control query executions.
- Updated Docker image tagging in the release workflow for streamlined deployments.
Minor Insight v0.0.5-beta has been released previously without receiving its own changelog, and here are the main takes from it:
- Added Clickhouse and poller settings for better configuration management.
- Implemented skipping of unmerged blocks in the reorg handler to enhance stability.
- Skipped duplicate blocks in the committer to prevent redundant data processing.
- Introduced missing block polling in the gap handler and committer to ensure data completeness.
If you encounter any issues or have suggestions, please feel free to open an issue in our GitHub repository.
Your project's dashboard just became more useful with a new set of metrics to track the growth of your apps!
Login to your account, select your project and head over to the Connect tab to see an overview of your aggregated metrics for connections, in-app wallets, account abstraction and pay. You can also dive deeper into each individual section for more detailed metrics.
This is just scratching the surface of all the insights Connect can give you about how your app is performing. Keep an eye out on your dashboards for more stats and metrics.
Happy Building! 🛠️
Our latest release introduces even more control and functionality to your workflow! With new raw contract read/write capabilities, enhanced mobile URL redirects, and automated deeplink registration on Android, you’re set up for seamless integration. Improved organization and logging, situationally-enforced external OAuth for added compatibility, and optimized async task handling all work together to keep your development smooth and efficient. Dive in to experience these enhancements and fine-tune your projects like never before!
- Generic Raw Read/Write Contract via Engine
- Mobile AppURL redirect override
- Engine Base URL + Access Token added to settings
- Automatic Deeplink registration on android devices
- GetLinkedAccounts automatically converted to data struct
- Rust Core updated
- Async Tasks grouped into folder structure
- Imports cleaned up
- Logging cleaned up to Verbose/VeryVerbose
- Enforced external auth for some OAuth providers
- .h/.cpp split out for some files
- Async Tasks now check for game thread and use weakThis refs
We just released a new version of the thirdweb Connect SDK which comes with a refreshed prebuilt UI components for executing transactions, onramping, bridging and swapping any token.
The new UI brings a simpler onramping flow showing you all your available balances up front, easy way to pay with another wallet and with a credit card.
We also upgraded the transaction flow to make it clearer for when your users don't hold enough funds in their wallets to complete a transaction.
Try it out live on the playground: https://playground.thirdweb.com/connect/pay
Happy building! 🛠️
- Upgraded base project/examples to Unity 6 and Playground from In-App to Ecosystem Wallet.
- Much faster on platforms like WebGL and lower end devices.
- Ecosystem Wallets are shareable with third parties.
- Added a
link.xml
to cover Thirdweb's .NET Core assemblies. Minimal stripping is no longer a hard requirement unless using WalletConnect as one of your wallet provider options. - Updated base project Android settings to target Min API 34 to match latest store policies.
- Upgraded EDM4U (External Dependency Manager) - contains various improvements.
We've added new chains to the platform this week!
Every chain comes out of the box with SDK support RPC, Engine and Account Abstraction capabilities. All you need is the chain id to get going.
For testnets, you'll also find a faucet in each chain page.
Happy building! 🛠️
- Added
AuthProvider.Twitch
as a new auth provider option for logging in with In-App or Ecosystem Wallets. - Upgrading an
EcosystemWallet
to aSmartWallet
without passing optional parameters will now attempt to use defaults from your dashboard Account Abstraction settings if any.- Create a
SmartWallet
with anEcosystemWallet
as a signer and no additional conflicting overrides to make use of this feature. - Explicitly passed SDK overrides will always take priority over dashboard options.
- If dashboard options are unavailable/unset, we revert to previous default values for gas sponsorship and account factories.
- Create a
This comes after a couple patches worth noting:
- Added
AuthProvider.Github
as a new auth provider option for logging in with In-App or Ecosystem Wallets. MetaMaskWallet
: GetAddress now enforces returning correctly checksummed address.WalletConnectWallet
: Closing the modal now throws and interrupts the connection process properly.- WalletConnect and MetaMask wallet providers now hexify messages passed to
IThirdwebWallet.PersonalSign
before signing.- If you were signing a hash or a string starting with 0x before, nothing changes.
- If you were signing a raw message like "Hello World" UTF8 String, we'd hexify it before sending it over to the wallet.
- This fixes display issues on the latest version of MetaMask (specially mobile) which no longer supports plain text parameters for personal_sign.
- Removes
latest
parameter frometh_estimateGas
being used in ThirdwebTransaction.EstimateGasLimit on non-zk chains and methods that use it by extension, fixing issues on chains that do not support that parameter such as Binance Testnet. - When using WalletConnect, attempts to fetch current active chain if applicable by corresponding wallet and avoid the additional requests to ensure correct network upon connection if unnecessary.
We just released an update for ecosystem owners. You can now setup custom authentication, and enable smart account options right from the dashboard.
When enabling account abstraction options, ecosystem wallets will automatically be converted to smart accounts without any code change, allowing for sponsored transactions, session keys, batched transactions and more. Make sure to use the latest version of the SDK.
Custom authentication allows to specify your own endpoint to handle auth verification yourself, opening up for any authentication you can think of.
Let us know what you think!
We've added new chains to the platform this week!
Every chain comes out of the box with SDK support RPC, Engine and Account Abstraction capabilities. All you need is the chain id to get going.
For testnets, you'll also find a faucet in each chain page.
Happy building! 🛠️
- Introduced a
fromBlock
configuration option for the committer, allowing users to specify a custom starting block. This enhancement provides flexibility in data processing by starting committing from a specific block height. - Added support for
eth_getBlockReceipts
RPC method, enhancing transaction data storage and providing additional transaction fields likecontract_address
,gas_used
, andstatus
. The configuration now supports enabling block receipts, improving data collection efficiency.
- Improved poller initialization with enhanced handling of
ForceFromBlock
configuration. - Updated storage interfaces to include a range start parameter for precise block range handling, with adjustments made to ClickHouse, memory storage, and mock storage implementations.
- Optimized ClickHouse table schemas for better query performance. Changes include ordering by block number and introducing a
function_selector
column in the transactions table, along with indexing every log topic to facilitate query-based filtering. - Removed the
FINAL
keyword from ClickHouse queries where it was deemed unnecessary.
Learn more about Insight at https://github.com/thirdweb-dev/insight
We've added Twitch as an authentication strategy for all in-app and ecosystem wallets with thirdweb SDK v5.63.0.
Include Twitch in the <ConnectButton />
like any other strategy.
- Treasure Topaz has been added to the support ZK chains
- Storage improvements for PWA reliability
Say hello to seamless wallet linking and streamlined development with our latest release! We've consolidated key functionality for wallet creation, sign-ins, and message signing, making it easier than ever to build with dynamic K2Nodes. With enhanced asynchronous task handling and updated examples to match the new blueprint nodes, you’ll experience a smoother, more efficient workflow. Plus, we’ve cleaned up unused code, ensuring a leaner and more optimized system for your projects. Dive in and explore the new possibilities!
- Ecosystem Wallet Linking
- Dynamic K2Nodes to consolidate functionality for Creating Wallets, Signing in, and signing messages
AsyncTaskThirdweb{Purpose}Base
files to standardize codeK2Node_ThirdwebBase
to standardize K2Node creation- Static CountryCode convenience definitions for Phone OTP
- ThirdwebUncookedOnly module to house all K2Node related code
- Examples updated to match changed blueprint nodes
- All networked C++ Functions migrated to UE::Tasks threads with delegate return types
- All Blueprint functions mapped to now-delegate C++ functions converted to AsyncTasks
EThirdwebAuthenticationMethod
dangling unused enum
We're excited to announce a significant performance upgrade to thirdweb Engine's AWS and GCP Key Management Service (KMS) support. Engine v2.0.22 dramatically improves transaction processing speed and simplifies KMS workflow.
- Massive performance boost: transaction sending time reduced from 5+ minutes (for very high volumes) to sub-seconds
- Internally we removed an ethers dependency, in favour of a native integration with the v5 thirdweb SDK for improved efficiency
- Use multiple wallet types simultaneously within the same Engine instance
- Create different wallet types using the new
type
parameter in the create backend wallet endpoint
- Simplified
import
endpoint for AWS KMS - Only ARN (Amazon Resource Name) required;
keyId
no longer necessary
- Override global KMS credentials on a per-key basis
- Optionally specify credentials when importing wallets for granular security management
- Lightning-Fast Transactions: Send KMS transactions in seconds instead of minutes regardless of volume, allowing for more responsive dApps.
- Simplified Workflow: Easier setup and management of KMS wallets within Engine.
- Enhanced Flexibility: Multi-wallet support and fine-grained credential control offer more options for managing your blockchain operations.
- Improved Scalability: Handle higher transaction volumes with ease, perfect for high-traffic dApps.
thirdweb Engine is an open-source server for your app to read, write, and deploy contracts at production scale. Self-host for free or get a cloud-hosted Engine for $99/month.
The small team at thirdweb is on a mission to build the most intuitive and complete web3 platform. Our products empower over 70,000 developers each month including Shopify, AWS, Coinbase, Rarible, Animoca Brands, and InfiniGods.
See our open roles. We’d love to work with you!
Engine has been updated to v2.0.25 which brings a handful of improvements.
First what is an account salt? The account salt is a unique ID that deterministically predicts a wallet address for a given admin + smart account factory.
This means your backend can provide a unique ID (like your dApp's user ID) as an account salt to Engine, and Engine will consistently reference and/or deploy the same smart account address each time (for the same admin + factory).
Here's an example:
My game has user IDsuid1
,uid2
, anduid3
.
When a user signs up, the user's smart account calls my game contract.
Steps without account salt
1. User signs up.
2. Backend calls Engine to create a smart account.
3. Backend waits for the transaction to be mined.
4. Backend calls Engine with x-account-address: <address from step 2>
to call the contract on behalf of the account.
Steps with account salt
1. User signs up.
2. Backend calls Engine with x-account-salt: uid1
to call the contract on behalf of the account.
💡 Bonus: The account is not deployed until a write transaction, deferring gas fees until the account is actually used!
The following endpoints now accept the x-account-salt
header (more to come!):
/contract/:chain/:contractAddress/write
/contract/:chain/:contractAddress/erc20/claim-to
/contract/:chain/:contractAddress/erc721/claim-to
To deploy a smart account from the account salt, call Create Smart Account and set the extraData
arg to the salt.
To predict a smart account address from the account salt without deploying it, call Predict Address and set the extraData
arg to the salt.
Our API reference page has moved! 👉 engine-api.thirdweb.com
This new API reference docs make it easier to search for endpoints (try CTRL/⌘+K), see path/query/body params, and view sample code.
You can even test requests right in the API docs page! Select Test Request and provide the following details:
The Send Retry (Synchronous) endpoint now allows retrying any transaction that was sent (either still waiting to be mined or "timed out"). This commonly occurs when a transaction is stuck because of gas spikes or other network congestion.
If a transaction appears stuck, try to resend with aggressive (3-10x) gas fees:
- Fixed issue signing messages with Google Cloud KMS and AWS KMS wallets.
- Fixed import of Google Cloud KMS wallets. (Thanks @yukia3e !)
- Fixed 500 response when using an unrecognized backend wallet.
- Updated userOp code to the latest thirdweb SDK -> simpler code and performance optimizations.
- Fix nonce resync worker exiting early when there are multiple wallets sending transactions concurrently.
- Handle errors of different types better to avoid "empty" error messages.
- Fallback if the contract write call is provided an incomplete ABI (missing
inputs
oroutputs
fields). - Updated log lines to be single-line for improved debuggability.
- Added lots of new route tests around signMessage, contract write, and userOps.
The small team at thirdweb is on a mission to build the most intuitive and complete web3 platform. Our products empower over 70,000 developers each month including Shopify, AWS, Coinbase, Rarible, Animoca Brands, and InfiniGods.
See our open roles. We’d love to work with you!
Version v0.0.3-beta focuses on data accuracy by introducing handling for reorgs. Other changes include refactoring the RPC component for easier reuse, creating a test setup with initial tests and improving the setup for running Insight locally.
- Reorganization Handling and Storage Enhancements
- Introduced a new `ReorgHandler` component to detect and handle blockchain reorganizations, with updated metrics to track performance.
- Added storage support for chain reorganization
- Configurable reorg handler settings to manage detection intervals and block scans.
- Refactored RPC Client and Modularity Improvements
- Created an `IRPCClient` interface for better abstraction and testability of the RPC client.
- Refactored RPC-related functionality into a dedicated `rpc` package to improve code structure and performance.
- Updated orchestrator components to utilize the enhanced RPC client setup.
- Simplified RPC interactions with utility functions for data serialization.
- Data Insertion Refactoring
- Overhauled data insertion logic in the storage layer for configurable batching strategy, enhancing transaction handling across different storage systems.
- Introduced `InsertDataForBlocks` method in storage interfaces, streamlining data insertion processes.
- API Configuration and Documentation
- Made the API host configurable, enhancing deployment flexibility across environments.
- Updated Swagger documentation handling to dynamically generate API docs at the `/openapi.json` endpoint.
- CORS Support
- Added CORS middleware to API routes, improving cross-origin request handling and enhancing API accessibility.
- Continuous Integration and Testing Setup
- Established a testing framework using Testify and Mockery, and integrated CI workflows.
- Local Development Enhancements
- Added an option to disable TLS for ClickHouse and included a Docker Compose setup for easier local development and testing.
Learn more about Insight at https://github.com/thirdweb-dev/insight
It's been a long time coming, but now we're finally here. With the completion of the audit of the refactor of Modular Contracts and the Token Paymaster Gateway, Modular Contracts have officially been released under version v1.0.0
The audit was completed by 0xMacro under the git commit tagged macro-audit-9
.
You can read about the full report here and you can read about all the changes introduced from the refactor here
As always, with security being top of mind and with the completion of the audit, modular contracts are now finally in a state ready for production.
So stay tuned for our official release of modular contracts!
We shipped an update to the Connect UI in react native that allows users to select any of the 300+ mobile wallets to connect to.
This is enabled by default when you use the ConnectButton
and ConnectEmbed
in React Native. You can turn off this behavior by passing showAllWallets: false
As always, you can also connect to any of these wallets headlessly using the react hooks and TypeScript core functions.
Happy building! 🛠️
- Adds MarketplaceV3 extensions.
- Supports
IDirectListings
,IEnglishAuctions
andIOffers
- Easier to use than direct
ThirdwebContract.Write
calls as the extensions are type safe and able to automatically handle approvals and more (opt-in). - Full reference here - accessible using
contract.Marketplace
extensions.
- Supports
- New Utilities
- Adds standalone
Utils.FetchGasPrice
(legacy tx) andUtils.FetchGasFees
(eip-1559) functions to retrieve chain gas info if needed. - Adds
Utils.HexToBigInt
converting hex strings toBigInteger
directly.
- Adds standalone
We are introducing a massive change to thirdweb dashboard with a focus on Teams and Projects - currently in Beta and available for preview on thirdweb.com/team - Try it out!
The new dashboard adds the following features:
- Organize projects within teams to keep your initiatives organized and secure.
- Invite and Manage team members
- Assign permissions to team members
This new team dashboard will replace the current dashboard by October 21st, 2024.
We shipped an update to make it easier to link multiple identities to the same in-app or ecosystem account on React web and native.
You can now use the useLinkProfiles()
to easily link a new identity to the connected account. A great use case for this is to onboard users with strategy: "guest"
to reduce friction, then when they've engaged with your app, prompt them to link an email or social account.
Once a user has linked an identity, they can use that identity to login back to the same account later. So in the example above, the user can now login with google next time they need to login to your app.
Another great feature is linking web3 wallets to the account:
This will require a signature, ensuring the user owns that wallet. A great use case is doing read only operations on the linked wallets, like checking social profiles, ownership of an NFT or onchain history.
You can fetch all the linked profiles using the useProfiles()
hook.
We also update the playground site, see it in action here: https://playground.thirdweb.com/connect/in-app-wallet
You can also view more detailed documentation on our developer portal.
Happy building! 🛠️
The latest updates to Insight API lay the foundation for a scalable API. This release introduces a switch to a more mature web framework, along with significant improvements to API documentation. Here’s a summary of what’s new in this version:
Switch from Chi to Gin Web Framework
To enhance performance and streamline our development, Insight has transitioned from the Chi web framework to Gin. This change sets the foundation for better scalability and more responsive APIs.
Swagger Documentation Integration
Insight now features full Swagger integration! We’ve added Swagger documentation to help developers better understand and interact with Insight’s APIs. Swagger provides an intuitive and interactive user interface for exploring API endpoints, which streamlines the development process. Navigate to /swagger/index.html#
to start exploring the swagger documentation and interacting with the API.
New Swagger JSON Endpoint
To further improve Swagger’s functionality, we’ve introduced a dedicated Swagger JSON endpoint. This allows developers to directly fetch the OpenAPI specification in JSON format, making it easier to integrate and generate client code. Navigate to /openapi.json
to fetch the openAPI json spec.
learn more about insight at https://github.com/thirdweb-dev/insight
We're continuing to ship further improvements across the board with a focus on enhancing contract metadata retrieval and verification. Before diving into this release’s updates, here’s a quick reminder of this part of the thirdweb platform:
Our contract service is a crucial backend tool for managing smart contracts and contracts-related off-chain interactions within the thirdweb platform and beyond. It streamlines key tasks such as fetching and aggregating comprehensive contract metadata (including ABIs and compilation details) and automates the publishing and verification of contracts on popular blockchain explorers.
By removing the often complex, manual steps involved in contract verification, the service makes it far easier for developers to interact with and deploy smart contracts. We'll be unveiling more information about this service in the future, as we consider making this logic a public good, if you know what we mean ;)
But back to our updates:
- Fix parsing issues with dynamic contracts: Resolved issues with parsing complex dynamic contracts, particularly those utilising the Diamond pattern, improving ABI resolution accuracy.
- Correct propagation of internal 4XX errors: Improved inter-service communication and correct handling of errors caused by , ensuring proper communication of errors to clients.
- Fix logging error messages: Corrected logging issues to enhance observability, ensuring more accurate error tracking and monitoring.
- XrpLedger explorers update: Addressed verification issues on the XrpLedger chain by updating the explorer configurations.
- Clean up tests: Improved the test suite for better reliability and maintainability of the codebase.
- Introduce versioning: Implemented versioning to enhance transparency and accountability, paving the way for future open-source contributions.
As for the remarkable highlight, due to the changes made in recent weeks, this service has witnessed drastic improvements in Service Level Objectives (SLOs):
- Error rate when resolving metadata improved from 62.4% to 97.9%.
- Latency improved from 70.2% to 93.2%.
Stay tuned as we continue refining and expanding features for contract metadata retrievals and verifications.
Version v0.0.2-beta brings with it many reliability improvements to make it more robust and fault-tolerant.
- Added the `poller_last_triggered_block` metric to enhance visibility into poller activity and ensure better progress tracking.
- Enhanced poller logging to report the number of blocks being polled and improved robustness with dynamic slice allocation in serialization.
- Changed the `logs` table engine to `ReplacingMergeTree` for broader compatibility.
- Refined gap detection and handling by introducing a new `handleGap` function, enhancing logging for better gap visibility, and ensuring block failures are recorded for missing blocks.
- Fixed an issue with incorrect poll gaps when `pollUntilBlock` is configured.
- Fixed block number handling to improve metric precision, eliminating the need for temporary division workarounds.
- Removed database prefixes from table creation scripts to allow flexible database organization.
Next release will introduce reorg handling which will ensure data reliability for Insight.
Engine v2.0.19 improves handling of maximum gas fee overrides and introduces timeouts.
- Smarter max gas fees: When the gas prices are high and your backend specifies a maximum gas fee, Engine delays the transaction until prices fall below your override.
- Timeouts: Engine will drop your transaction if it isn't sent within your specified timeout.
- Save gas when sending periodic updates to your onchain database that can tolerate higher latency.
- Set a timeout on your DeFi trades to avoid large changes in token prices.
To specify a transfer transaction that spends up to 30 gwei of gas and tries up to 48 hours, add the following fields:
💡 Tip: It is highly recommended to set a timeout when setting a maxFeePerGas. Otherwise if gas prices don't fall, transactions may be in your queue indefinitely.
For details, see Overriding Gas Settings.
The small team at thirdweb is on a mission to build the most intuitive and complete web3 platform. Our products empower over 70,000 developers each month including Shopify, AWS, Coinbase, Rarible, Animoca Brands, and InfiniGods.
See our open roles. We’d love to work with you!
We've sped up SmartWallet
transactions and optimized various internal flows, resulting in up to 50% speed increases from transaction creation to estimation to a receipt being returned. This applies for all flows
Furthermore, we've added an internal feature to automatically detect if a chain is built on the zkSync stack and unlock zkSync specific functionality such as zkSync specific transaction input or Native Account Abstraction automatically.
Added Utils.GetSocialProfiles
- fetch ENS, Farcaster and Lens profiles given a wallet address or ENS as well as their metadata and more.
A single line of code to fetch metadata about a wallet address and display it in game as you please!
Example returned object
- Exposes Account Linking functionality (LinkAccount & GetLinkedAccounts) at the
IThirdwebWallet
level. - You may now link accounts directly to a
SmartWallet
signer i.e. personal wallet without needing to fetch the signer withSmartWallet.GetPersonalWallet
or deal with casting to the right types. - External wallets or external wallets being used as SmartWallet signers do not support this feature.
Unlock a world of new possibilities with the latest enhancements to our plugin! From a streamlined settings toolbar and external OAuth browser to expanded support for popular platforms like Discord, Telegram, and Coinbase, this release brings powerful tools right to your fingertips. With ecosystem wallet integration, guest login options, and enhanced mobile OAuth support, you're equipped to create dynamic, secure experiences with ease. Plus, enjoy a cleaner setup with updated examples and safer client enforcement!
- Plugin Icon
- Editor Toolbar Button for Settings Quick Access
- ThirdwebEditor Module for editor-only functionality
- External OAuth Browser
- Per-provider OAuth settings config
- Ecosystem Wallets
- Phone Option to OTP auth methods
- JWT, Auth Endpoint, and Guest Sign In methods
- Discord, Farcaster, Telegram, Line, X, and Coinbase OAuth methods
- External OAuth Complete screen
- Static accessors to all Runtime settings
- Google Auth on mobile via external OAuth
- Updated rust core libs
- InApp / Ecosystem Wallets to child structs
- Examples to match changed structs / functions
- Private Key functionality (Superseded by guest login)
- Secret Key runtime setting - Safer to enforce client + bundle
Engine has been updated to v2.0.18. Here are some notable changes in the past few versions:
For cloud-hosted Engine customers, the primary account* for an Engine can trigger an version update from the dashboard UI.
⚠️ We recommend pausing critical traffic during this time as there may be up to a minute of downtime.
*The account that owns the subscription. We're working on better Engine management for teams in the near future!
All endpoints that accept an EVM address or transaction hash now enforce the type on input, returning a clearer message before the request fails further with a less obvious error (like "Contract not found" when provided a malformed address).
Docker build times have been reduced ~85% down to 7 minutes! This mostly impacts developers building Engine from source.
- Gas withdrawals from a backend wallet are more reliable by calculating the max amount of funds that can be withdrawn with the current gas settings.
- Reduced Redis usage when many jobs that fail to mine.
- More reliable "stuck nonce" health checks that alert our on-call. (Cloud-hosted only)
The team's focus is on internal alerting and deeper observability into all the dependencies of Engine.
Upcoming product improvements include smart accounts capabilities, more granular options to handle gas spikes, API performance improvements with the v5 SDK, improvements to Alert Notifications, and more. Stay tuned for more changelog updates!
The small team at thirdweb is on a mission to build the most intuitive and complete web3 platform. Our products empower over 70,000 developers each month including Shopify, AWS, Coinbase, Rarible, Animoca Brands, and InfiniGods.
See our open roles. We’d love to work with you!
We are excited to announce the initial release of Thirdweb Insight - an open source indexer and API for any EVM.
Provide an RPC URL and index the whole blockchain (or choose a range), including all blocks, transactions, logs and traces. It will keep up with the chain in real time and keep indexing as the chain progresses.
During our internal testing we achieved a indexing speed of up to 65k blocks per minute. However, this speed depends on the performance of the RPC and heaviness of the chain.
The service is built with the requirement of only serving complete and correct data. Once the block range is indexed, you can be sure that it contains all the transactions and logs that there are without missing any gaps. This is especially important for querying data aggregations like token balances.
The indexer is designed to recover itself in case of any failures or an unreachable RPC. It will not serve incomplete data and will continue from where the error occurred, once the error has been solved.
The service exposes an HTTP API to query transactions and logs complete with aggregations. Here are just a few examples of what you can query using the API:
- Current and historic token balances
- Historic transactions of a specific wallet
- Transactions to a specific contract
- and much more
This initial release of Thirdweb Insight lays the groundwork for a performant indexing service and API. We look forward to your feedback and contributions as we continue to enhance and expand the functionality of it. Thank you for your support!
https://github.com/thirdweb-dev/insight
We just released a new version of the thirdweb
package which unlocks ecosystem wallet support for React Native applications.
You can now connect to any ecosystem wallet from native mobile apps with the same API as the web:
This means you can now build up a network of web AND mobile apps that all share the same user identity, all while staying within your ecosystem.
Happy building!
In this release, we’ve introduced key enhancements to ABI resolution for composite contracts, improved functionality for managing contract metadata, and made updates to our persistence layer to ensure more robust performance.
We've refactored the ABI resolution process, focusing on better handling of composite contracts like plugin-pattern, base router, and diamond pattern contracts. This included ensuring extra stability by introducing checks to prevent recursive calls and other redundant resources-heavy mechanics.
- Improved the schema for better handling of proxy contracts.
- Added functionality to refresh contract metadata across all persistence layers, simplifying data management.
- Updated persistence-related functions for better error handling and performance, especially in scenarios involving proxies and non-proxy contracts.
- Improved build times and dependency management (could this hint at something bigger, perhaps even... open-sourcing the project s00n? 👀)
With these updates rolling out we get faster ABI resolutions and even more reliable contract data persistence!
- ThirdwebManager inspector is a little more interactive now.
- Improved default redirect page visuals when logging in with OAuth from desktop platforms.
- Added option to override said html with your own.
- Option to bypass WalletConnect context checks by @BoysheO in https://github.com/thirdweb-dev/unity-sdk/pull/216
- You now have the option to bypass WalletConnect Unity default synchronization context check as needed by setting
- You now have the option to bypass WalletConnect Unity default synchronization context check as needed by setting
ThirdwebClient.Create
no longer takes in raw headers, now only takes in general sdk information optionally. This should not affect most users.- Improved http client cloning when needed in external modules.
- Added
CrossPlatformUnityHttpClient
class which encompasses default .NET and WebGL ones.
We have made some improvements with respect to prebuilt contract deployments on ZkSync chains.
While it doesn't change the deployment process and experience for most users, there are some key changes as described below:
- All thirdweb contracts can now be deployed on any ZkSync chain without any intervention from us, for existing and new ZkSync chains in the future
- All contracts deployed that way are auto verified using standard solc metadata, which means you can view source and interact with them on the dashboard even if they're not verified on block explorers
We've added a new endpoint to Engine that retrieves and parses transaction logs.
- Get Transaction Logs Endpoint: Retrieve logs for mined transactions using a queue ID or transaction hash.
- Automatic Log Parsing: Raw logs are parsed into structured event data by default.
- ABI Inference: The endpoint infers the ABI for verified contracts or those with similar available sources.
- Instant Insights: Get quick information like token transfer amounts or minted NFT IDs without manual log parsing.
- Less Boilerplate: Say goodbye to writing repetitive ABI handling and log parsing code.
Make a GET
request to the new endpoint with the following parameters:
chain
: The chain ID or name (required)queueId
ortransactionHash
: Identifier for the mined transactionparseLogs
: Set totrue
to receive parsed event data (default: true)
For more information, you can check our API Reference.
- Works with verified contracts or those with inferable ABIs, can be overridden back to user provided ABI.
- Parsing is attempted for all logs, providing structured data when possible.
- Falls back to raw log data when parsing is not feasible.
- Easily retrieve information like how many ERC20 tokens were transferred in a transaction.
- Quickly find out the tokenId of an NFT you just minted using Engine.
- Anywhere else you've wanted to quickly access transaction logs without 100 lines of boilerplate code!
thirdweb Engine is an open-source server for your app to read, write, and deploy contracts at production scale. Self-host for free or get a cloud-hosted Engine for $99/month.
The small team at thirdweb is on a mission to build the most intuitive and complete web3 platform. Our products empower over 70,000 developers each month including Shopify, AWS, Coinbase, Rarible, Animoca Brands, and InfiniGods.
See our open roles. We’d love to work with you!
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.
- Navigate to the new Alerts tab on the Engine dashboard.
- Select Create Alert.
- If the button is disabled, see below.
- Select the type of alert and how to be notified. Currently the following are supported:
- Alert types: Elevated 5xx rate, stuck nonce
- Notification types: Webhook, Slack, Email
- Select Add Alert.
At this time only the original admin (the account which deployed the cloud-hosted Engine) can view and manage alerts. This is usually the first admin address listed on the Admins tab. We plan to expand alert management to all admins in the near future.
You can also view recently fired/resolved alerts on the Alerts tab.
This feature lays the groundwork for advanced notifications for any type of error or event that Engine can emit.
For instance, in the future Engine can monitor the balance of a wallet and alert when it drops below a specified threshold. Or alert when it detects unusual transfer activity from a backend wallet.
The small team at thirdweb is on a mission to build the most intuitive and complete web3 platform. Our products empower over 70,000 developers each month including Shopify, AWS, Coinbase, Rarible, Animoca Brands, and InfiniGods.
See our open roles. We’d love to work with you!
TypeScript SDK
All Ecosystem Wallets are now stored and accessed within AWS Nitro Enclaves. This evolution of wallets provides improved security, speed, and capabilities. The migration to enclaves happens behind the scenes and without any changes necessary.
Upgrade to the latest version of the thirdweb SDK and each ecosystem wallet will be upgraded on next login. In the coming days and weeks we'll be adding additional capabilities that are unlocked by enclaves, the first of which is pregeneration.
You can now pregenerate user accounts via the in-app wallet backend APIs. This allows for interacting with accounts before their owner has logged in. For example, you might send some funds to a user's email, and pregenerate their account if they don't have one yet.
Response format:
Learn more about pregenerating user accounts here.
Coinbase is now supported as an in-app and ecosystem wallet authentication method.
With v5.45, we introduced linking multiple authentication methods to an in-app wallet to create a unified identity. Ecosystem wallets now support this same functionality across all platforms.
isGetNFTSupported
checks forgetNFT
support on an ERC-1155 contract- Ecosystem wallets now support guest mode
React SDK
- The details modal now displays the currently logged in auth provider
- The details modal now shows user info such as email when logged into an ecosystem wallet
- The social icon arrangement in the Connect UI now overflows to a new line when using more than 5 auth methods
- Guest accounts are now hidden from the details modal linked profiles screen
Get ready for an upgraded experience with our latest release! We’ve exposed key functions for smoother OAuth workflows, enhanced analytics, and provided custom UI examples to supercharge your development process. Plus, with helpful new tools and fixes, creating seamless OAuth flows and managing your game data has never been easier. Dive in and explore the possibilities!
- Expose SecretKey->ClientID function from rust and update rust libs
- Create and send analytics for connect, with opt-out in settings
- OAuthBrowserUserWidget events for custom OAuth UI Scenarios
- Custom OAuth Browser Overlay example with Circular Throbber and Back button
- Set world override on Level_Thirdweb for GameMode to help new devs
- Set EditiorCustomVirtualPath on plugin to help data segregation
- Various helper functions
- Expose FWalletHandle to external access in C++
- Fix White-screen OAuth Scenario in Examples
- Hide OAuthBrowserWidget from editor
- Ecosystem Wallets implementation in .NET is now compatible with our previous JS implementation of Ecosystem Wallets.
- If you had created accounts or had a user base from web sharded Ecosystem Wallets, they will automatically be migrated to the new performant enclave system upon first login.
- No breaking API changes here, this change detects if an authenticated user requires migration and performs it.
- ERC721 and ERC1155 NFT Contract Extensions such as _GetAll and _GetOwned now have default pagination (100 first token ids).
- This is to avoid fetching an entire collection at once by mistake.
- If the contract is ERC721A,
tokensOfOwnerIn
will be used before falling back to other extensions. - If the contract is ERC721Enumerable,
tokensOfOwnerByIndex
will be used before falling back to single fetching. - Improved batching of such calls.
- Implemented ConcurrentQueue for RPC and improved batching/caching logic
- If you do end up making large calls, such as fetching an entire collection, it should be handled gracefully
- Avoid a lot more 429s
- Speed up Smart Wallet user operations
- No longer estimates the entire user operation gas and simulates prior to sending it.
- This does not affect errors being caught.
- This means if you are estimating gas using ThirdwebTransaction, you will only be returned the internal call gas limit rather than the entire op.
- Less API calls at runtime, 30% faster execution.
- If you still want to estimate the actual user operation gas costs, you can use SmartWallet.EstimateUserOperationGas
- Fixed issue with
_MintWithSignature
extensions where the expected signature bytes would be passed as hex. - [Unity Only] Added
ToQRTexture
helper extension for converting any text to aTexture2D
and potentially display it in a UI Image.
An exciting update is rolling out to improve how contract data is handled on our platform, bringing greater efficiency and scalability!
Faster contract-related SDK calls and dashboards
First and foremost, we enhanced the retrieval process for contract bytecodes, proxy implementations, and metadata by introducing an additional persistence layer. This improvement allows us to serve previously processed data much faster without querying external sources.
This leads to reduced routing and quicker response times. Meaning... 👀 better performance when calling your favourite SDK v5 functions like resolveContractAbi()
and getBytecode()
or when loading a contract's dashboard (e.g. USDC contract) to see ABI, sources and etc.!
Additional Improvements
- Overall stability enhancements through better error logging and improved dependency management.
- Performance boosts through more efficient caching and database query optimizations.
- Codebase refactoring to meet modern standards, enhancing maintainability and scalability.
We are starting to roll out this update incrementally, continuing to prioritise data accuracy while significantly boosting speed!
postscriptum - what is this service about?
Our contract service is a crucial backend tool for managing smart contracts and contracts-related off-chain interactions within the thirdweb platform and beyond. It streamlines key tasks such as fetching and aggregating comprehensive contract metadata (including ABIs and compilation details) and automates the publishing and verification of contracts on popular blockchain explorers.
By removing the often complex, manual steps involved in contract verification, the service makes it far easier for developers to interact with and deploy smart contracts. We'll be unveiling more information about this service in the future, as we consider making this logic a public good, iykwim ;)
As active development is underway with the Modular Contracts framework, safety and security of the code that we officially release into production is always top of mind at thirdweb.
Which is why today we release macro-audit-8
, which covers the following repositories: modular contracts, contracts and contracts pay gateway.
You can find the full release of the audit here.
As Modular Contracts have undergone a significant refactor, we are now going through a second round of auditing in order to cover for those changes, so stay tuned!
Sometimes users want to get started using your app without logging 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.
When your user is ready, link any other auth method so they can access their account in the future.
Your user can now access this same wallet with their Google account. Until the user links another profile to the wallet, it will be stored in memory and last until they clear their browser cookies or connect a different wallet.
Guest accounts are available in the Connect UI just like any other authentication method.
- Fixed custom ID handling in custom contracts
- Expand getNFTs ERC1155 support
More and more protocols and chains have been releasing functionality around cross-chain messaging and token transfers. With Modular Contracts being released in beta, we saw this as an opportunity to partner up and create modules around these functionalities.
However, as we explored deeper into each protocol's cross-chain mechanisms, we noticed a significant amount of overlap across all functionalities, including:
- A function to handle sending cross-chain payloads and tokens
- A function to handle receiving cross-chain payloads and tokens
- Setter and getter functions for their version of a router
With that in mind, we decided to create CrossChain.sol, an abstract contract that provides a unified interface to implement cross-chain functionality across any protocol.
Inside the contract CrossChain.sol, there are three main functions:
sendCrossChainTransaction
As the name suggests, this is the primary function responsible for sending cross-chain transactions from the protocol.
onCrossChainTransactionSent
This callback function is used within the context of the sendCrossChainTransaction
function.
onCrossChainTransactionReceived
This callback function is used within the context of the receive function for the specified cross-chain protocol.
With these two callback functions, the user’s application logic can be separated from the cross-chain functionality logic, making it easier to differentiate between the two.
And there you have it—an abstract contract to create a unified interface for cross-chain functionality.
If you want to find out more, check out the code here:
https://github.com/thirdweb-dev/modular-contracts