Changelog

Phillip Ho

We've made Engine even more reliable in v2.1.20. Here's a sample of nonce management improvements we made:

Improved handling of stuck transactions

Transactions can be stuck in mempool for multiple reasons (usually chain-specific). We made improvements to more aggressively retry transactions through including:

  • Retries with increasing gas (up to 10x gas).
  • Retries after a fixed amount of time, even if the RPC blocks are delayed.
  • Configuration to limit the max gas to spend on resends to stay within chain limits.
  • Configuration to limit how long to retry a transaction for.

Automatic nonce reset when out of funds

Engine resets the nonce when a wallet runs out of funds to ensure that after the wallet is funded, transactions are sent with correct nonces.

Retry failed transactions, even userOps

The Retry Failed Transactions now allows retrying any failed transactions including user operations.

Want to force a specific transaction to retry with the same nonce? Use the Retry Transaction (Synchronous) endpoint.

Advanced usage to manage wallet nonces

Most users should rely on Engine to manage and correct wallet nonces. If you want more direct control, the following endpoints allow you to directly manage Engine's wallet nonces. These endpoints are safe to run and intended to "fix" wallets that are stuck. Be warned they may cancel any pending transactions with those nonces.

Reset nonce state for one or all wallets

The Reset Nonces endpoint was updated to optionally allow resetting the nonce state for a single wallet (by default it resets all wallets).

Cancel nonces

A new Cancel Nonces endpoint allows you to send null transactions with high gas to effectively "cancel" pending transactions using those nonces.


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!

Joaquim Verges

We just released a new package that allows you to use thirdweb's in-app and smart wallets within you wagmi app with minimal effort. Few lines of code to add web2 sign in like google, discord, passkey, etc along with ERC-4337 smart accounts that unlock gasless transactions, batched transactions and session keys.

Install the new package

First, install the thirdweb and @thirdweb-dev/wagmi-adapter packages in your wagmi app.

npm install thirdweb @thirdweb-dev/wagmi-adapter

Make sure you're running wagmi 2.14.1 or above.

Setup the connector

You probably already have a wagmi config with some connectors, simply add the inAppWalletConnector to the list, along with the desired options.

import { http, createConfig } from "wagmi";
import { inAppWalletConnector } from "@thirdweb-dev/wagmi-adapter";
import {
createThirdwebClient,
defineChain as thirdwebChain,
} from "thirdweb";
const client = createThirdwebClient({
clientId: "your-client-id",
});
export const config = createConfig({
chains: [sepolia],
connectors: [
// add the in-app wallet connector
inAppWalletConnector({
client,
// optional: turn on smart accounts!
smartAccounts: {
sponsorGas: true,
chain: thirdwebChain(sepolia),
},
}),
],
transports: {
[sepolia.id]: http(),
},
});

Connect users

Now you can connect users with the desired auth strategy. Options include email, phone, passkey, google, discord, x, telegram, github, and more.

const { connect, connectors } = useConnect();
const onClick = () => {
// grab the connector
const inAppWallet = connectors.find(
(x) => x.id === "in-app-wallet",
);
// call connect with the desired strategy
connect({
connector: inAppWallet,
strategy: "google",
});
};

And that's it! The example above connects your users with their google account, creates an ERC4337 smart account with sponsored transactions that you can use with the rest of your wagmi app.

Happy building! 🛠️

Greg

We previously added unified identities to the thirdweb SDK, allowing users to link multiple profiles as valid authentication options within your app. However, you couldn't tell which provider they had signed in with for the current session. In thirdweb v5.77.0, we've added the getLastAuthProvider utility to the React module, allowing you to retrieve the most recently used provider from within any web context.

import { getLastAuthProvider } from "thirdweb/react";
getLastAuthProvider(); // "google"

Other Improvements

Yash Kumar

Users can now publish their contracts with contract references in deploy params.

What this means is, if there are address params in your contract's constructor, you can provide a reference to another published contract for those params. These reference contracts will then be deterministically deployed before deploying your contract.

You can specify these references in publish form as shown below:

For e.g., _owner param is of type address and allows publisher to specify a contract reference. You can do this by selecting Dynamic Input and providing details of the published contract. Please note that the contract being set as reference should be a published contract with default values pre-filled.

You can also setup a chain of such references, i.e. a referenced contract has another reference contract in its deploy params, and so on.

In addition to the address type, you can also provide dynamic inputs for bytes params. For e.g., if the bytes param is composed of address, uint256, and bool, you can specify these values instead of giving an encoded bytes value. These will be encoded during deployment. The address param within this bytes param can again be a dynamic reference. See below:

This feature works for address[] and bytes[] params too.

Phillip Ho

Engine is used by web2 and web3 companies for production use, powering 10M+ transactions per week. Making sure your Engine is secure and your funds are safe are critical, so here's security improvements we made (v2.1.20) and what's coming up.

Security audit

We've completed our second code and infrastructure assessment from an independent third party auditor and will be sharing the report shortly.

No critical vulnerabilities were identified, and all reported issues were addressed.

Security updates

  • Improved CORS response handling. Clearer logs + responses if calls are made from invalid origins.
  • Added modern browser security headers to restrict unused permissions (embedding, geolocation, camera, etc.).
  • Updated dependencies to address publicly reported vulnerabilities.

Other notable updates

  • singlePhaseDrop added to all claim-to endpoints allowing users to set claim conditions and claim tokens in a single phase for custom drop contracts.
  • gasPrice can now be overridden allowing users to explicitly set the gas price for pre-EIP1559 chains.
    • Post-EIP1559 chains should continue to use maxFeePerGas and maxPriorityFeePerGas overrides, if needed.
{
// ...write request body
txOverrides: {
"gasPrice": "50000000000" // pre-EIP1559
// "maxFeePerGas": "50000000000" // post-EIP1559
}
}
  • All /mint-to endpoints were updated to thirdweb v5 SDK and should have greatly improved response times.
  • Idempotency keys up to 200 characters are now supported.
  • The codebase is updated with better organization and code standards, and we're enforcing linting rules moving forward.

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!

Toomas Oosalu

A new version of Insight is released, focusing on bringing decoded data to the API and bug fixes to the indexing logic.

Added

Decoding for events and transactions in the API

Implemented functionality to decode event logs (supporting both indexed and non-indexed parameters) and transaction inputs whenever a query is made with. partial ABI.

For example, let's say we want to query all allocated withdrawal function calls on the TheCompact contract (0x00000000000018DF021Ff2467dF97ff846E09f48).

The partial ABI of the function is ((bytes,uint256,uint256,uint256,uint256,address)), however the Insight API allows for named arguments, so we can use allocatedWithdrawal((bytes allocatorSignature,uint256 nonce,uint256 expires,uint256 id,uint256 amount,address recipient) _withdrawal)

We can do the following query to insight

curl 'https://1.insight.thirdweb.com/v1/:clientID/transactions/0x00000000000018DF021Ff2467dF97ff846E09f48/allocatedWithdrawal((bytes,uint256 nonce,uint256 expires,uint256 id,uint256 amount,address recipient) _withdrawal)'

and receive a response

{
"meta": {
"chain_id": 1,
"address": "0x00000000000018DF021Ff2467dF97ff846E09f48",
"signature": "0x27c777a9",
"page": 0,
"limit": 5,
"total_items": 1,
"total_pages": 0
},
"data": [
{
"chain_id": 1,
"hash": "0x8cd2145f99f11885c4136330ad1bb77555504f58bede20fc1f32f1ba12adcb53",
"nonce": 832,
"block_hash": "0xe6053a9f4e9ee63b37f174ece3938a46e1dd782dfefc55316e770134bfc59d60",
"block_number": 21131927,
"block_timestamp": 1730936111,
"transaction_index": 117,
"from_address": "0x0734d56da60852a03e2aafae8a36ffd8c12b32f1",
"to_address": "0x00000000000018df021ff2467df97ff846e09f48",
"value": 0,
"gas": 67401,
"gas_price": 15172764689,
"data": "0x27c777a9000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000007b00000000000000000000000000000000000000000000000000000000672c0c60302aafae8a36ffd8c12b32f1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000734d56da60852a03e2aafae8a36ffd8c12b32f10000000000000000000000000000000000000000000000000000000000000000",
"function_selector": "0x27c777a9",
"max_fee_per_gas": 28932060124,
"max_priority_fee_per_gas": 187296056,
"transaction_type": 2,
"r": 56974697277111379906610442563886472860956697825679089697101225017574199230150,
"s": 41080792507018916056596496103695262958288003493025956403880548103799170703734,
"v": 1,
"access_list_json": "[]",
"contract_address": null,
"gas_used": null,
"cumulative_gas_used": null,
"effective_gas_price": null,
"blob_gas_used": null,
"blob_gas_price": null,
"logs_bloom": null,
"status": null,
"decodedData": {
"name": "allocatedWithdrawal",
"signature": "allocatedWithdrawal((bytes,uint256,uint256,uint256,uint256,address))",
"inputs": {
"_withdrawal": {
"allocatorSignature": "",
"nonce": 123,
"expires": 1730940000,
"id": 21786436819914608908212656341824591317420268878283544900672692017070052737024,
"amount": 1000000000000000,
"recipient": "0x0734d56da60852a03e2aafae8a36ffd8c12b32f1"
}
}
}
}
]
}

The interesting part is the decodedData property, which contains the decoded function input arguments

"decodedData": {
"name": "allocatedWithdrawal",
"signature": "allocatedWithdrawal((bytes,uint256,uint256,uint256,uint256,address))",
"inputs": {
"_withdrawal": {
"allocatorSignature": "",
"nonce": 123,
"expires": 1730940000,
"id": 21786436819914608908212656341824591317420268878283544900672692017070052737024,
"amount": 1000000000000000,
"recipient": "0x0734d56da60852a03e2aafae8a36ffd8c12b32f1"
}
}
}

Bug fixes

  • Poller gap filling uses configured poll range - Introduced a limit on polling missing blocks, based on `blocksPerPoll` configuration instead of the whole missing range.
  • Fixed signature calculation for partial ABI - Fixed a bug where various uint types in the partial ABI resulted in an incorrect signature
  • Fixed nullpointer exception when checking if polling limit is reached
  • Clickhouse delete performance - Updated to use lightweight deletes instead when handling reorgs, to reduce load on the DB

Learn more about Insight and how to use it.
Insight is open source.

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": "user@example.com"
}'

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