Changelog

Joaquim Verges

We've been iterating on our next generation smart accounts contracts. They are ERC-7579 compliant modular smart accounts, unlocking the growing catalog of account modules.

This is a BETA release, so expect some changes, but you can already start playing with it on both TypeScript and DotNet SDKs.

We have published 2 contracts to get you started, a modular account factory and a simple validator module.

Stateless Modular Account Factory

A generic, un-opinionated smart account factory that lets you pick a smart account implementation and any default modules you like.

thirdweb: The complete web3 development platform
Build web3 apps easily with thirdweb’s powerful SDKs, audited smart contracts, and developer tools—for Ethereum & 700+ EVM chains. Try now.

Default Validator Module

A simple validator module, with multi owner and session key support.

thirdweb: The complete web3 development platform
Build web3 apps easily with thirdweb’s powerful SDKs, audited smart contracts, and developer tools—for Ethereum & 700+ EVM chains. Try now.

Usage in TypeScript SDK

Once you have deployed both of those contracts, you can use them in the SDK to deploy accounts for you users, using the new Config smart account presets.

import { sepolia } from "thirdweb/chains";
import { smartWallet, Config } from "thirdweb/wallets/smart";
const modularSmartWallet = smartWallet(
Config.erc7579({
chain: sepolia,
sponsorGas: true,
factoryAddress: "0x...", // the 7579 factory address
validatorAddress: "0x...", // the default validator module address
}),
});

You now have a modular smart account wallet instance that you can use with the rest of the SDK as usual.

You can also pass this configuration to the Connect UI components:

<ConnectButton
client={client}
accountAbstraction={
Config.erc7579({
chain: sepolia,
sponsorGas: true,
factoryAddress: "0x...", // the 7579 factory address
validatorAddress: "0x...", // the default validator module address
})
}
/>

Disclaimer

API and contracts are still in BETA - expect breaking changes and frequent updates.

Once stabilized, we will deploy a default factory and validator module on all chains which will be the default in the SDKs.

Looking for feedback

We're releasing this early so we can get some feedback from you, play with it on testnet and let us know what you think!

Happy building! 🛠️

Joaquim Verges

We just added support for ERC-6492 signatures in the TypeScript and DotNet SDKs. This means that you can now sign and verify signatures for smart accounts even if they haven't been deployed yet!

This massively improves the first time user flow when your app uses smart accounts and sign in with ethereum, no need to wait for the accounts to be deployed to proceed into the app the very first time.

It also reduces cost for app developers, since the cost of deploying smart accounts will only be paid on the first transaction, not when signing in.

No code changes for this one, just make sure you use the latest version of the SDK on both the signing and the verifying side, or any 6492 compatible signature verification library.

Happy building! 🛠️

Firekeeper

We've added new chains to the platform this week!

AppChain: RPC and Chain Settings
Use the best AppChain RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.
Metal L2: RPC and Chain Settings
Use the best Metal L2 RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.
Xsolla ZK Sepolia Testnet: RPC and Chain Settings
Use the best Xsolla ZK Sepolia Testnet RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.
Funki Sepolia Sandbox: RPC and Chain Settings
Use the best Funki Sepolia Sandbox RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.
Sanko: RPC and Chain Settings
Use the best Sanko RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.
DOS Tesnet: RPC and Chain Settings
Use the best DOS Tesnet RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.
DOS Chain: RPC and Chain Settings
Use the best DOS Chain RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.
BOB: RPC and Chain Settings
Use the best BOB RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.
BOB Sepolia: RPC and Chain Settings
Use the best BOB Sepolia RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.

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.

const wallet = smartWallet({
chain: defineChain(388), // just need the chainId!
sponsorGas: true,
});

For testnets, you'll also find a faucet in each chain page.

Happy building! 🛠️

Firekeeper

What's Changed

  • Additions from Thirdweb's .NET SDK Release 2.11.0
    • SmartWallet.PersonalSign no longer requires the SmartWallet to be deployed, increasing speed. Verification is done through ERC-6492. Validating a signature also works with ERC-6492 signatures now. Useful for apps that want to instantly authenticate (using Thirdweb Auth - SIWE for example) without incurring costs.
    • purchaseData can now be passed to Thirdweb Pay quote params, making Direct Payment flows fully featured.
  • InAppWalletOptions now extends EcosystemWalletOptions (no changes to dx).
  • Slightly improved Playground UI.

Links

.NET Release | NuGet Release | Unity Release

Docs | Support

Firekeeper

Added the ability to pay for gas with ERC20 tokens when using Smart Wallet.

  • Currently supports Base USDC, Celo CUSD, and Lisk LSK tokens.
  • Simply select a TokenPaymaster when creating a SmartWallet and all transactions will be paid for with the corresponding ERC20 from the user's Smart Wallet.
  • Useful on L2s where the native token is ETH and you want to enshrine another coin or onramp your users directly to that coin.
  • These TokenPaymasters entirely operate onchain, leveraging popular DEXes and decentralized price feeds from Uniswap & Chainlink.
  • This product is in beta, and only compatible with EntryPoint v0.7.0, which we auto select for you if not overriden when configurin your wallet.

Example:

import { base, lisk, celo } from "thirdweb/chains";
import { TokenPaymaster, smartWallet } from "thirdweb/wallets";
// Have users pay for gas in Base USDC
const usdcWallet = smartWallet({
chain: base,
sponsorGas: true,
overrides: {
tokenPaymaster: TokenPaymaster.BASE_USDC,
},
});
// Have users pay for gas in Lisk LSK
const lskWallet = smartWallet({
chain: lisk,
sponsorGas: true,
overrides: {
tokenPaymaster: TokenPaymaster.LISK_LSK,
},
});
// Have users pay for gas in Celo CUSD
const cusdWallet = smartWallet({
chain: celo,
sponsorGas: true,
overrides: {
tokenPaymaster: TokenPaymaster.CELO_CUSD,
},
});
Nicholas St. Germain

The latest update brings unparalleled marketplace integration to your fingertips! All 36 marketplace engine calls are now available in C++, Blueprints, and as async tasks, complete with supporting structs to streamline your workflow. Dive into enhanced examples, fetch IPFS nodes seamlessly, and enjoy compatibility with Unreal Engine 5.2 and 5.5 for even greater flexibility. We've cleaned up runtime settings, optimized dynamic tasks, and resolved key build errors to ensure a smooth development experience. Get ready to unlock the full potential of your marketplace projects with these powerful new tools!

What's Changed

Additions

  • Bug Report and Feature Request Templates in Repo
  • Missing C++ functions for exising engine calls
  • All 36 marketplace engine calls in c++, Blueprints, and as async tasks with supporting structs
  • Sign In With Ethereum and Link with SIWE
  • Fetch IPFS nodes
  • QR Code Generator for future use

Enhancements

  • Unbind Route on destroy for Browser
  • UE_5.2 compatibility for customer
  • UE_5.5 compatibility
  • Cleanup Runtime settings
  • Cleanup duplicate async tasks for dynamic tasks
  • Updated examples
  • Updated Rust libs

Fixes

  • intrinsic build errors
  • OAuthBrowserWidget Error being empty

Removals

  • Moved BuildPlugin to its own repo

Marketplace | Documentation | Github Release

Phillip Ho

Since introducing Smart Backend Wallets we introduced some new capabilities to Engine and over a dozen bugfixes.

Troubleshoot your webhook implementation

It is important to verify the signature header for Engine webhook calls to verify they came from your Engine. The dashboard now allows you to send a test payload to determine if your webhook endpoint is unreachable, not handling the webhook signature properly, or returning a unexpected response.

On the Webhooks dashboard page, select ... > Test webhook to send an example webhook payload to your backend and see the status code and response body.

Delete backend wallets

You can now delete backend wallets directly from the dashboard. Keep your backend wallets list tidy by removing unused backend wallets.

Better "insufficient funds" errors

Engine now estimates the required amount of gas when it attempts to send a transaction without sufficient gas funds:

Insufficient funds in 0x4Ff9aa707AE1eAeb40E581DF2cf4e14AffcC553d on Polygon Mainnet. Transaction requires > 0.000682043142837 POL.

Notable bugfixes

Lastly we've been squashing bugs to ensure your Engine handles transactions as reliably as possible.

  • Fixed Contract Subscriptions to support all chain IDs (previous large chain IDs like Xai Sepolia were unsupported).
  • Updated dependency libraries to address reported vulnerabilities.
  • Fixed malformed transactions causing the transactions to not load in the dashboard.
  • Fixed an edge case where errors for read contract calls were dropped.
  • Fixed an edge case in nonce self-healing.
  • Fixed Smart Backend Wallet support for certain extension endpoints.
  • Handled a different RPC response that could cause a nonce to be skipped.
  • See Engine release notes for more details.

thirdweb is hiring!

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!

Phillip Ho

The Engine dashboard now shows all recent versions with timestamps and allows you to select any version to upgrade or downgrade to.

Find the improved version selector in the upper right corner of the Engine dashboard.

Why does it matter?

While Engine releases follows semantic versioning, non-major updates may add input validation or fix an incorrect response (e.g. a 500 that should have been a 400 response). These fixes correct behavior, but in rare cases this may conflict with how your backend sends or parses requests. In these cases, you can now self-service downgrade to a previous Engine version.

Example: Engine used to rely on an older SDK that did not strictly enforce ABIs. In a newer update, provided ABIs must match the proper spec. This may cause write calls that provided an incomplete ABI to start throwing an error.

What's next?

We're aiming to provide visibility in the dashboard when Engine versions change shortly. We also plan to roll out a predictable schedule when cloud-hosted Engines may receive critical security or reliability updates.


thirdweb is hiring!

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!

Firekeeper

What's Changed

  • Added AuthProvider.Steam as a login option for In-App or Ecosystem Wallets.
// Using .NET SDK
var steamWallet = await InAppWallet.Create(client: client, authProvider: AuthProvider.Steam);
if (!await steamWallet.IsConnected())
{
_ = await steamWallet.LoginWithOauth(...);
}
var steamWalletAddy = await steamWallet.GetAddress();
// Using Unity SDK
var steamWalletOptions = new WalletOptions(
provider: WalletProvider.InAppWallet,
chainId: 1,
inAppWalletOptions: new InAppWalletOptions(authprovider: AuthProvider.Steam);
);
var steamWallet = await ThirdwebManager.Instance.ConnectWallet(options);
var steamWalletAddy = await steamWallet.GetAddress();
  • Added the ability to pay for gas with ERC20 tokens when using Smart Wallet.
    • Currently supports Base USDC, Celo CUSD, and Lisk LSK tokens.
    • Simply select a TokenPaymaster when creating a SmartWallet and all transactions will be paid for with the corresponding ERC20 from the user's Smart Wallet.
    • Useful on L2s where the native token is ETH and you want to enshrine another coin or onramp your users directly to that coin.
    • These TokenPaymasters entirely operate onchain, leveraging popular DEXes and decentralized price feeds from Uniswap & Chainlink.
    • This product is in beta, and only compatible with EntryPoint v0.7.0, which we auto select for you if not overriden when configurin your wallet.
// Example of paying for a transaction ERC20 stablecoins instead of native ETH
// Using .NET SDK (Lisk LSK)
var chainId = 1135; // lisk
var erc20SmartWallet = await SmartWallet.Create(
personalWallet: privateKeyWallet,
chainId: chainId,
tokenPaymaster: TokenPaymaster.LISK_LSK
);
// Using Unity SDK (Base USDC)
var chainId = 8453; // base
var erc20SmartWallet = await ConnectWallet(
new WalletOptions(
WalletProvider.InAppWallet,
chainId,
inAppWalletOptions: new InAppWalletOptions(authprovider: AuthProvider.Steam),
smartWalletOptions: new SmartWalletOptions(sponsorGas: true, tokenPaymaster: TokenPaymaster.BASE_USDC)
)
);
// Then just trigger any transaction!
var erc20SmartWalletAddress = await erc20SmartWallet.GetAddress();
Debug.Log($"ERC20 Smart Wallet address: {erc20SmartWalletAddress}");
var receipt = await erc20SmartWallet.Transfer(chainId: chainId, toAddress: erc20SmartWalletAddress, weiAmount: 0);
Debug.Log($"Receipt: {JsonConvert.SerializeObject(receipt, Formatting.Indented)}");

Links

.NET Release | NuGet Release | Unity Release

Docs | Support

Winston Yeo

We supported pregeneration for enclave wallets a while back.

Today, wallet pregeneration is available for in-app wallets too!

What does this mean?

This means that you can now know the in-app wallet address of a user before they register on your platform!

This allows you to perform airdrop, pre-load certain assets, and more!

The API is the same as ecosystem wallets except we don't have to include the ecosystem details:

curl -X POST 'https://embedded-wallet.thirdweb.com/api/v1/pregenerate' \
-H 'x-secret-key: YOUR_SECRET_KEY_HERE' \
-H 'Content-Type: application/json' \
-d '{
"strategy": "email",
"email": "[email protected]"
}'

On top of that, we also now support pregeneration via custom IDs. This means that you can know your user's address ahead of time even if you use a custom authentication methods like JWT or an auth endpoint.

Here's what that would look like:

curl -X POST 'https://embedded-wallet.thirdweb.com/api/v1/pregenerate' \
-H 'x-secret-key: YOUR_SECRET_KEY_HERE' \
-H 'Content-Type: application/json' \
-d '{
"strategy": "userId",
"userId": "YOUR_CUSTOM_USER_ID_HRE"
}'

For more information and background on what pregeneration is all about, check out the newly updated documentation here.

Amine Afia

We're excited to announce that thirdweb Insight has expanded its blockchain data querying capabilities with support for six new chains:

  • Donatuz
  • Avalanche
  • Soneium Minato
  • Fhenix- Helium
  • Ape Chain

What This Means For Developers
With these additions, you can now use all of Insight's powerful features across these new chains:

  • Query on-chain events with the Events Blueprint
  • Track transactions with the Transactions Blueprint
  • Monitor token balances (ERC-20, ERC-721, ERC-1155) with the Tokens Blueprint
https://<chain-id>.insight.thirdweb.com

Replace `<chain-id>` with the specific chain ID you want to query.

For example, to query Avalanche data:

const getAvaxTransfers = async () => {
try {
const response = await fetch(
"https://43114.insight.thirdweb.com/v1/<client-id>/transactions/<wallet-address>",
);
const walletTransactionsInfo = await response.json();
return walletTransactionsInfo;
} catch (error) {
console.error("Error:", error);
}
};


Use Cases
These new chain additions enable various use cases across different sectors:

  • DeFi
    • Track token movements and trading volume across new DeFi ecosystems
    • Monitor liquidity pools and DEX activity
    • Analyze cross-chain token economics
  • Gaming
    • Track in-game assets and NFTs on gaming-focused chains
    • Monitor player rewards and achievements
    • Analyze gaming economy metrics
  • NFTs
    • Track NFT collections and transfers across new marketplaces
    • Monitor NFT trading activity and ownership
    • Analyze collection performance metrics

View All Supported Chains
For a complete list of supported chains and their respective chain IDs, check the thirdweb chainlist.

Greg

As of v5.69.0, we've added Steam as an authentication option in our TypeScript SDK for all the games and game enjoyooors out there. You can setup Steam auth just like any other authentication method.

import { inAppWallet } from "thirdweb/wallets";
const wallet = inAppWallet();
const account = await wallet.connect({
client,
chain,
strategy: "steam",
});
0:00
/0:13
Firekeeper

What's Changed

  • Fixed an issue with typed data signing using In-App/Ecosystem Wallets when one of the fields was larger than Uint32.
  • Improved NFT Metadata Population & Added Filters
    • The ERC1155_GetOwnedNFTs extension now returns the QuantityOwned metadata field correctly for each NFT.
    • The ERC721_GetNFT and ERC721_GetAllNFTs extensions can now take in a new fillOwner parameter that defaults to true and decides whether to make additional requests to populate the Owner field of the metadata, otherwise defaulting to Constants.ADDRESS_ZERO.
    • The ERC1155_GetNFT and ERC1155_GetAllNFTs extensions can now take in a new fillSupply parameter that defaults to true and decides whether to make additional requests to populate the Supply field of the metadata, otherwise defaulting to BigInteger.MinusOne.

Links

.NET Release | NuGet Release | Unity Release

Docs | Support

Samina Kabir
Stanley Szeto

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!

Greg

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. 🫡

0:00
/0:16
Firekeeper

We've added new chains to the platform this week!

Metis Sepolia Testnet: RPC and Chain Settings
Use the best Metis Sepolia Testnet RPC and add to your wallet. Discover the chain ID, native token, explorers, and faucet options.
Metis Andromeda: RPC and Chain Settings
Use the best Metis Andromeda RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.
Donatuz Testnet: RPC and Chain Settings
Use the best Donatuz Testnet RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.
ZERO Testnet (Sepolia): RPC and Chain Settings
Use the best ZERO Testnet (Sepolia) RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.
Blast: RPC and Chain Settings
Use the best Blast RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.
Pivotal Sepolia: RPC and Chain Settings
Use the best Pivotal Sepolia RPC and add to your wallet. Discover the chain ID, native token, explorers, and faucet options.
Skopje Testnet: RPC and Chain Settings
Use the best Skopje Testnet RPC and add to your wallet. Discover the chain ID, native token, explorers, and faucet options.
GPT: RPC and Chain Settings
Use the best GPT RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.
Superseed: RPC and Chain Settings
Use the best Superseed RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.
Geist: RPC and Chain Settings
Use the best Geist RPC and add to your wallet. Discover the chain ID, native token, explorers, and more.

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.

const wallet = smartWallet({
chain: defineChain(59902), // just need the chainId!
sponsorGas: true,
});

For testnets, you'll also find a faucet in each chain page.

Happy building! 🛠️

Winston Yeo

Faster In-App Wallet initialization

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!

Enclave In App Wallet

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!

Manan Tank

We are introducing a massive change to thirdweb dashboard with a focus on Teams and Projects

API Keys are now Projects

By default all your API keys are converted to projects under a single team as shown below

New Project Dashboard

You can click on your project to view analytics, configure thirdweb services and manage settings.

Easily switch between Teams and Projects

You can quickly switch between teams and projects directly from dashboard header

Team Settings Dashboard

Manage your team's general settings, team members, billing, gas credits and notification alerts in team settings dashboard

Account Management dashboard

We now have an entire dashboard dedicated to Account management. You can manage your teams, view all your contracts and manage authorized devices.

More features coming soon in Q4

  • Create multiple teams
  • Invite and manage team members
  • Account settings
  • Link Engines and Contracts with Projects
  • Link Projects to Ecosystems
Firekeeper

What's Changed

  • 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 optional tokenAddress override to transfer ERC20 tokens using said function; this is an alternative to ThirdwebContract.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 returns NFTMetadata 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.

Links

.NET Release | NuGet Release | Unity Release

Docs | Support