Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
382 KiB
thirdweb
5.111.10
Patch Changes
-
#8390
f964b8aThanks @joaquim-verges! - Loosen peer dependency requirements for RN -
#8383
424e6b8Thanks @kumaryash90! - deploy and install stylus modules -
#8388
763d3deThanks @MananTank! - - Various UI/UX Improvements in Bridge components
5.111.9
Patch Changes
- #8384
673e51bThanks @joaquim-verges! - Replace celo alfajores with celoSepoliaTestnet
5.111.8
Patch Changes
- #8343
1f440d0Thanks @0xFirekeeper! - Added Epic Games Authentication
5.111.7
Patch Changes
-
#8373
7f08161Thanks @joaquim-verges! - Respect from address when simulating with Engine.serverWallet -
#8373
7f08161Thanks @joaquim-verges! - Expose useInvalidateBalances() react hook
5.111.6
Patch Changes
- Updated dependencies [
ad68969]:- @thirdweb-dev/[email protected]
5.111.5
Patch Changes
- #8369
7da16cfThanks @joaquim-verges! - Make maxAmount optional in wrapFetchWithPayment and loosen schema validation for payment payloads
5.111.4
Patch Changes
-
#8363
d907017Thanks @MananTank! - Fix BuyWidget autoconnect not working when receiverAddress prop is set -
#8365
40781b8Thanks @joaquim-verges! - Respect passed chain when doing SIWE for in-app/ecosystem wallet
5.111.3
Patch Changes
- #8361
207cb9dThanks @joaquim-verges! - Add extra mobile detection for isMobile() function
5.111.2
Patch Changes
-
#8358
1d54cffThanks @joaquim-verges! - Add support for extraMetadata in x402 payment requirements -
#8356
fd04eefThanks @kumaryash90! - Update implementations, fix deployment
5.111.1
Patch Changes
- #8354
ccdce49Thanks @joaquim-verges! - Fix hiddenWallets prop not applying to all wallets screen
5.111.0
Minor Changes
- #8335
c83f1c6Thanks @MananTank! - RemoveBridge.routesanduseBridgeRoutes
Patch Changes
- #8345
219fc69Thanks @joaquim-verges! - Update x402 flows to use remote /accepts endpoint
5.110.6
Patch Changes
-
#8334
6c318f8Thanks @kumaryash90! - Update implementations -
#8306
759b93bThanks @alecananian! - Moved@storybook/reactpackage to be a dev dependency -
#8332
8e357b3Thanks @jnsdls! - expose some useful erc20 extensions
5.110.5
Patch Changes
-
#8327
c08fb13Thanks @MananTank! - Fix Safe wallet connection issues with WalletConnect -
#8331
bcbb3f5Thanks @joaquim-verges! - Loosen network schema -
#8325
e0c8312Thanks @Yash094! - Add Arc testnet to chains package
5.110.4
Patch Changes
-
#8310
23cb3bdThanks @MananTank! - Minor UI adjustments in CheckoutWidget -
#8317
abf0bbaThanks @0xFirekeeper! - updates default x402 transfer with authorization timeout -
#8319
e0abf2bThanks @joaquim-verges! - Update x402 types
5.110.3
Patch Changes
- #8314
bf46520Thanks @joaquim-verges! - Enhance compatiblity with third party x402 libs
5.110.2
Patch Changes
-
#8304
3e9eb49Thanks @MananTank! - Fix Select Token UI stuck in loading state if wallet is connected to a chain that is not supported by thirdweb Bridge in BuyWidget, SwapWidget and BridgeWidget -
#8311
bfd3be7Thanks @jnsdls! - filter out null-ish values fromERC721.getNFTs()andERC1155.getNFTs()arrays -
#8313
ae3a122Thanks @joaquim-verges! - Fix network comparison when using diff libraries -
#8301
d5d5939Thanks @kumaryash90! - create2 factory for neura testnet -
#8305
f757e60Thanks @MananTank! - Update theme colors and minor UI tweaks in React Components
5.110.1
Patch Changes
-
#8299
85fe949Thanks @alecananian! - [React Native] Fixed Send Funds screen not allowing decimal amounts -
#8296
e978809Thanks @MananTank! - Do not require connecting wallet inBuyWidgetifreceiverAddressis set -
#8298
899051fThanks @joaquim-verges! - Add EIP-5792 support for EIP1193.toProvider()
5.110.0
Minor Changes
-
#8289
b30369fThanks @jnsdls! - ###getContractMetadata()now returns a record withunknownvalues instead ofany.before:
const metadata = await getContractMetadata({ contract }); metadata; // Record<string, any> metadata.name; // string metadata.symbol; // stringafter:
const metadata = await getContractMetadata({ contract }); metadata; // Record<string, unknown> metadata.name; // string | null metadata.symbol; // string | nullMetadata is not (and was never) strictly defined outside of
nameandsymboland may contain any type of data in the record. This is not a runtime change but it may break type inference in existing apps that relied on the previous return type.Recommended fix: You should type-guard any key you access from "metadata".
const metadata = await getContractMetadata({ contract }); if ("foo" in metadata && typeof metadata.foo === "string") { metadata.foo; // string }Quick fix: If adding type assertions is not something you can do in the short term you can also assert the type directly. This is as "unsafe" as the type was before.
const metadata = await getContractMetadata({ contract }); const foo = metadata.foo as string;
Patch Changes
- #8280
ceba683Thanks @MananTank! - Fix process not defined error when using "thirdweb/contract" import in Vite
5.109.1
Patch Changes
-
#8266
5ff6063Thanks @MananTank! - autofocus token search input when token selector modal opens inBuyWidget,SwapWidgetandBridgeWidgetcomponents -
#8279
72fbb15Thanks @joaquim-verges! - Resolve TokenIcon automatically when available
5.109.0
Minor Changes
-
#8259
d68da22Thanks @MananTank! - UpdateonSuccessprop onBuyWidget,CheckoutWidget,SwapWidget, andBridgeWidgetcomponents to includestatusesandquoteobjects instead of justquote.<BuyWidget onSuccess={(data) => { console.log(data.statuses); console.log(data.quote); }} />
Patch Changes
5.108.15
Patch Changes
- #8257
e7f42e6Thanks @joaquim-verges! - Improve Transactions list in connect modal Fix query cache for block explorers for raw chains
5.108.14
Patch Changes
-
#8253
8280efbThanks @joaquim-verges! - Fix cb wallet transaction desktop popup when logged in via mobile QR code -
#8235
464af6aThanks @kumaryash90! - CLI updates for stylus - new templates
5.108.13
Patch Changes
- Updated dependencies [
9545b43]:- @thirdweb-dev/[email protected]
5.108.12
Patch Changes
-
#8226
0082e99Thanks @joaquim-verges! - Add optional recipientAddress to x402 settlePayment -
#8226
0082e99Thanks @joaquim-verges! - Expose 7702 utility functions
5.108.11
Patch Changes
- #8228
05550d0Thanks @0xFirekeeper! - Export ERC7702 MinimalAccount helpers and events
5.108.10
Patch Changes
-
#8218
f630912Thanks @joaquim-verges! - Export missing x402 types -
#8215
62cfbb7Thanks @MananTank! - Show error in BuyWidget and SwapWidget UI if fetching token details fails -
Updated dependencies [
f630912]:- @thirdweb-dev/[email protected]
5.108.9
Patch Changes
- #8192
968913dThanks @MananTank! - Fix TransactionWidget not updating whencurrencyprop is changed after initial render
5.108.8
Patch Changes
- #8184
af9a73dThanks @joaquim-verges! - Fix waitUntil facilitator param not being respected
5.108.7
Patch Changes
- #8181
e612f16Thanks @MananTank! - BuyWidget UI improvements and new features:chain, andamountprops are now optional- User can always change the token and chain selection in the widget
- Both fiat and token amounts are editable
- connected wallet can be disconnected from the widget
- current balance displayed in the widget
5.108.6
Patch Changes
- #8167
eb603f8Thanks @joaquim-verges! - Update dependencies
5.108.5
Patch Changes
-
#8145
7495f46Thanks @MananTank! - Token Search improvements in SwapWidget -
#8142
496615fThanks @joaquim-verges! - Improve token info discovery for x402 payments -
#8144
b8afa98Thanks @MananTank! - Remove retries when fetching list of tokens fails in SwapWidget to reduce time loading skeletons are shown in the UI -
#8153
94aae90Thanks @joaquim-verges! - Also expose waitUntil param in settlePayment()
5.108.4
Patch Changes
-
#8141
85bde21Thanks @joaquim-verges! - Handle 7702 accounts in verifyTypedData -
#8136
aa0d23eThanks @MananTank! - Fix Embed container size
5.108.3
Patch Changes
- #8128
f152139Thanks @joaquim-verges! - Support ERC-2612 permit for x402 payments
5.108.2
Patch Changes
-
#8106
1f7cda6Thanks @MananTank! - AddBridgeWidgetcomponent.Generate a browser script in
dist/scripts/bridge-widget.jsthat can be used to render theBridgeWidgetcomponent in a browser with a script -
#8126
9069351Thanks @joaquim-verges! - Accept chain objects for x402 APIs
5.108.1
Patch Changes
- #8108
e1cccd7Thanks @gregfromstl! - Displays the failure error messages on the BuyWidget
5.108.0
Minor Changes
- #8091
5249cb7Thanks @joaquim-verges! - Accept arbitrary chain ids for x402 payments with new settlePayment() and verifyPayment() backend utility functions
Patch Changes
-
#8100
a94f229Thanks @MananTank! - Update theonSuccess,onError, andonCancelcallback props of theBuyWidgetto be called with thequoteobject<BuyWidget onSuccess={(quote) => console.log("Swap completed:", quote)} onError={(error, quote) => console.error("Swap failed:", error, quote)} onCancel={(quote) => console.log("Swap cancelled:", quote)} />
5.107.1
Patch Changes
-
#8080
93f913cThanks @MananTank! - SwapWidget UI improvements -
#8092
a85ef0bThanks @0xFirekeeper! - add zephyr testnet to pre-1559 chains
5.107.0
Minor Changes
- #8076
5967fb8Thanks @joaquim-verges! - x402 utilities
5.106.1
Patch Changes
-
#8069
32980f8Thanks @MananTank! - AddpersistTokenSelectionsprop onSwapWidgetto allow disabling token selection persistence to local storage -
#8077
7b8ceebThanks @joaquim-verges! - Show policy error for 7702 transactions
5.106.0
Minor Changes
-
#8044
0e3f346Thanks @MananTank! - AddSwapWidgetcomponent for swapping tokens using thirdweb Bridge<SwapWidget client={thirdwebClient} />
Patch Changes
-
#8066
e160debThanks @joaquim-verges! - Always reconnect any previously connected wallet properly -
#8067
e0738d6Thanks @MananTank! - Fix SwapWidget setting same token for buy and sell in some cases when using last used token from storage -
#8065
a6f846fThanks @MananTank! - Addtw-class names in connect ui -
#8054
15f0839Thanks @MananTank! - FixonSuccesscallback was not called correctly onCheckoutWidget,BuyWidgetcomponents -
#8062
f276dcfThanks @joaquim-verges! - Filter out AGW from searchable wallets (needs explicit adding)
5.105.48
Patch Changes
- #8052
557f0e2Thanks @gregfromstl! - Prevents incorrect failures in widget onramps.
5.105.47
Patch Changes
- #8048
97e5080Thanks @joaquim-verges! - Fix fiat payments with no wallets connected
5.105.46
Patch Changes
- #8046
224c9d0Thanks @joaquim-verges! - Improve WalletConnect chain switching reliability
5.105.45
Patch Changes
-
#8038
0b45405Thanks @joaquim-verges! - Accept pre signed authorizations for 7702 account transactions -
#8039
dc1f7abThanks @joaquim-verges! - Support fully disconnecting from metamask on disconnect -
#8042
ea80610Thanks @joaquim-verges! - Fix signAuthorization implementation for 1193 provider -
#8041
3ad9f7dThanks @joaquim-verges! - Allow passing overrides to common extension functions
5.105.44
Patch Changes
- #8036
ef15ba7Thanks @joaquim-verges! - pass through authorizationList for injected providers
5.105.43
Patch Changes
- #8029
1759112Thanks @joaquim-verges! - Add signAuthorization support to 1193 provider
5.105.42
Patch Changes
-
#7973
b149019Thanks @shubham-yuga! - Added Glyph wallet to supported wallets -
#8007
4ff1cf7Thanks @nischitpra! - Polygon amoy gasstation url fix https://github.com/thirdweb-dev/js/pull/8004
5.105.41
Patch Changes
- #7966
af6a306Thanks @gregfromstl! - Addscountrycode option to payment widgets
5.105.40
Patch Changes
- #7946
597431eThanks @MananTank! - Add Pay Modal integration inuseSendAndConfirmTransactionhook similar touseSendTransactionhook
5.105.39
Patch Changes
- #7942
50c6371Thanks @gregfromstl! - Adds the ability to exclude prices from Bridge.tokens
5.105.38
Patch Changes
-
#7936
76cfecbThanks @gregfromstl! - Updates copy on the payment widgets -
#7937
44e6e11Thanks @gregfromstl! - Allows using the checkout widget without a wallet connected -
#7922
f3ad6efThanks @joaquim-verges! - Handle already connected wallets in 1193 provider
5.105.37
Patch Changes
- #7872
1083316Thanks @gregfromstl! - Update createToken to return a prepared transaction
5.105.36
Patch Changes
- #7887
e01af9dThanks @leo-shi-dacheng! - fix: #7886
5.105.35
Patch Changes
- #7870
f78b0a2Thanks @gregfromstl! - Adds predictAddress token extension function
5.105.34
Patch Changes
-
#7858
7f11657Thanks @MananTank! - Fix PayEmbed UI when mode prop is not specified - Default to mode: "fund_wallet" with amount: "0.01" and chain: ethereum -
#7865
467ba50Thanks @MananTank! - Add missing props for details modal onuseWalletDetailsModalhook -
#7321
d227bc3Thanks @kumaryash90! - ERC20 assets
5.105.33
Patch Changes
- #7850
4be655dThanks @joaquim-verges! - Fix onDisconnect not being invoked in react native
5.105.32
Patch Changes
-
#7844
0d7e5e5Thanks @gregfromstl! - Fix SDK resolution in environements where process is undefined -
#7825
a77e98aThanks @gregfromstl! - DeprecatessortByparameter in Bridge.routes -
#7817
66c7df9Thanks @0xFirekeeper! - Adds TikTok as a new authentication method for In-App and Ecosystem Wallets. -
#7827
90f36bcThanks @gregfromstl! - Hide quote value in payment widgets
5.105.31
Patch Changes
-
#7819
45ba811Thanks @gregfromstl! - Sort payment quotes in ascending order -
#7824
d52855dThanks @joaquim-verges! - Fix supportedTokens address comparison
5.105.30
Patch Changes
- #7813
e114b2cThanks @gregfromstl! - Skips payment selection in the TransactionWidget if the user's balance is sufficient to complete the transaction.
5.105.29
Patch Changes
- #7809
c0948fbThanks @joaquim-verges! - Handle environments where process is not defined
5.105.28
Patch Changes
- #7805
621c1deThanks @joaquim-verges! - Add ability to override button label for all payment widgets
5.105.27
Patch Changes
-
#7803
fd4414bThanks @MananTank! - UpdategetTotalClaimedSupplyandgetTotalUnclaimedSupplyerc721 extensions to considerstartTokenIdif the contract hasstartTokenIdset. -
#7789
9a3ebe1Thanks @joaquim-verges! - Add transaction hash to max wait time error -
#7785
e5326c4Thanks @alecananian! - AddeduseSiweAuthto the React Native exports -
#7774
e1ad7daThanks @MananTank! - Fixthirdweb/insightimport typescript error
5.105.26
Patch Changes
-
#7775
b86d520Thanks @joaquim-verges! - Handle mobile deeplinks for transactions via WalletConnect -
#7767
e4ba47bThanks @joaquim-verges! - Fix decodeFunction and decodeError functions -
#7766
58787a2Thanks @alecananian! - FixeduseContractEventspersisting previous data when filters change
5.105.25
Patch Changes
- #7761
d35b6fcThanks @joaquim-verges! - Fix CheckoutWidget transaction invalidation and fix nft filtering in connect UI
5.105.24
Patch Changes
- #7745
c717eaaThanks @gregfromstl! - Faster payment widget quote discovery
5.105.23
Patch Changes
- #7746
4f38198Thanks @joaquim-verges! - Improve walletConnect connection and auto-connection flow
5.105.22
Patch Changes
-
#7732
1cbbbc3Thanks @joaquim-verges! - Improve EIP5792 support -
#7729
58dbe90Thanks @joaquim-verges! - Fallback to onchain nonce in 7702 execution -
#7710
e92d8f9Thanks @joaquim-verges! - Add contract filtering to Insight.getOwnedNFTs and getOwnedTokens -
Updated dependencies [
e92d8f9]:- @thirdweb-dev/[email protected]
5.105.21
Patch Changes
-
#7708
3c8e444Thanks @joaquim-verges! - Fix ecosystem wallet connection with default chains -
#7711
adec6beThanks @joaquim-verges! - Fix showQrModal option not respected on desktop web
5.105.20
Patch Changes
- #7693
cf22c23Thanks @joaquim-verges! - Optimize 4337 signature performance
5.105.19
Patch Changes
-
#7683
08955f1Thanks @joaquim-verges! - Expose getAuthToken from inapp and ecosystem wallets -
#7681
7562952Thanks @gregfromstl! - Bridge.status: Adds optional transactionId parameter
5.105.18
Patch Changes
-
#7666
37414ebThanks @joaquim-verges! - Fix native token fallback when insight query fails -
#7657
22bf68aThanks @MananTank! - Fix Various alignment issues in React Components
5.105.17
Patch Changes
-
#7634
4cbf671Thanks @Yash094! - feat(chains): add Etherlink mainnet and testnet chains -
#7650
426bb8bThanks @alecananian! - react: fix native<ConnectEmbed />component not auto-connecting -
#7600
170c377Thanks @gregfromstl! - Add fallback mechanism to usePaymentMethods hook for getOwnedTokens failuresWhen getOwnedTokens batches fail in the usePaymentMethods hook, the system now falls back to getting native token balances for each chain using getWalletBalance. This ensures users can still access their native tokens as payment methods even when the insight API is experiencing issues, providing a more resilient user experience.
The fallback mechanism:
- Catches getOwnedTokens failures and logs warnings
- Falls back to native balance fetching using getWalletBalance for each chain
- Transforms results to match the expected format
- Continues normal processing flow seamlessly
-
#7656
bfa0a42Thanks @joaquim-verges! - Fix TransactionWidget when wallet has enough currency for the transaction -
#7647
823af01Thanks @alecananian! - react: update hooks to use core transaction types -
#7642
0f38a12Thanks @gregfromstl! - TransactionWidget: Hides the "UnknownContract" label -
#7652
620e294Thanks @joaquim-verges! - Update server wallet config types for 7702 and EOA execution -
Updated dependencies [
620e294]:- @thirdweb-dev/[email protected]
5.105.16
Patch Changes
-
#7591
f33e31aThanks @gregfromstl! - Fixed a regression that prompted the user to pay the full amount in the TransactionWidget, rather than the difference from their current balance -
#7589
592bf6fThanks @MananTank! - Fix theme in ConnectButton Details Modal Buy screen
5.105.15
Patch Changes
-
#7570
585eac2Thanks @joaquim-verges! - Make vault access token optional -
#7586
d62e997Thanks @joaquim-verges! - Fix inapp wallets showing up in all wallets list
5.105.14
Patch Changes
5.105.13
Patch Changes
-
#7578
772eb0cThanks @joaquim-verges! - Handle different fiat currencies in payment widgets -
#7580
446a69bThanks @joaquim-verges! - Update wallet definitions
5.105.12
Patch Changes
- #7575
bfd728aThanks @gregfromstl! - Adds the ability to hide thirdweb branding in the payment widgets with showThirdwebBranding
5.105.11
Patch Changes
- #7567
692cedfThanks @MananTank! - Restore CSS resets on react components
5.105.10
Patch Changes
-
#7540
415ad90Thanks @Yash094! - add trextestnet to chains package -
#7551
c644463Thanks @joaquim-verges! - Use new BuyWidget in wallet details modal -
#7556
10c3b6fThanks @joaquim-verges! - Respect fee payer in token payment selection quotes
5.105.9
Patch Changes
- #7536
f48d800Thanks @joaquim-verges! - Optimize fetching payment tokens in payment widgets
5.105.8
Patch Changes
- #7532
0ea25bbThanks @joaquim-verges! - Upgrade to wallet connect universal provider
5.105.7
Patch Changes
- #7533
cb77544Thanks @joaquim-verges! - Respect feePayer property in Payment widgets
5.105.6
Patch Changes
-
#7521
f94226aThanks @joaquim-verges! - Add Frame wallet in wallet list -
#7523
341325fThanks @joaquim-verges! - Show all tokens in payment selection screen, even if not enough balance
5.105.5
Patch Changes
-
#7487
50e01ceThanks @MananTank! - Restore border on embed components:ConnectEmbed,BuyWidget,CheckoutWidget,TransactionWidget -
#7503
7ab8808Thanks @joaquim-verges! - Handle very large numbers in BuyWidget -
#7507
fd967ceThanks @0xFirekeeper! - Fix purchaseData propagation in PayEmbed component to new widget implementations
5.105.4
Patch Changes
- #7465
bc51255Thanks @gregfromstl! - Adds paymentMethods prop to BuyWidget, CheckoutWidget, and TransactionWidget to control available payment options. Accepts an array of "crypto" and/or "card" values.
5.105.3
Patch Changes
-
#7432
acd5656Thanks @0xFirekeeper! - Introduces Session Keys to EIP-7702-powered In-App Wallets via a new createSessionKey extension -
#7454
6d1d344Thanks @gregfromstl! - Prevent admin wallet from connecting when no IAW config is specified -
#7427
f9d7935Thanks @joaquim-verges! - Support latest engine API -
Updated dependencies [
f9d7935]:- @thirdweb-dev/[email protected]
5.105.2
Patch Changes
-
#7452
277c2e2Thanks @gregfromstl! - Adds "Unsupported Token" fallback screen to TransactionWidget -
#7451
c2ef5ebThanks @joaquim-verges! - update dependencies
5.105.1
Patch Changes
- #7450
fa5e13bThanks @gregfromstl! - Adds onramp webhook parsing for Universal Bridge
5.105.0
Minor Changes
- #7431
1387337Thanks @PaoloRollo! - update hey-api version to 0.76.0
Patch Changes
-
#7441
6712911Thanks @gregfromstl! - A number of important fixes for payment widgets -
#7437
af89836Thanks @joaquim-verges! - Handle sponsored gas on TransactionWidget -
#7426
6aa2765Thanks @gregfromstl! - Deprecate PayEmbed -
Updated dependencies [
1387337]:- @thirdweb-dev/[email protected]
- @thirdweb-dev/[email protected]
5.104.1
Patch Changes
-
#7413
3107ba1Thanks @joaquim-verges! - Handle non urls for metadata images in payment widgets -
#7429
ef2895fThanks @d4mr! - Support EOA Execution Options for Server Wallets -
#7425
c26be2dThanks @joaquim-verges! - Fix wallet row alignement in wide connect modal -
Updated dependencies [
ef2895f]:- @thirdweb-dev/[email protected]
5.104.0
Minor Changes
-
#7343
787118dThanks @Yash094! - add berachain and berachain testnet in chains package -
#7394
9c420c0Thanks @gregfromstl! - Updated PayEmbed UI
Patch Changes
-
#7387
70e024fThanks @MananTank! - Fixposternot shown inMediaRenderercomponent for 3D models -
#7390
6be9459Thanks @gregfromstl! - Use decimal string for BuyWidget amount -
#7371
3dbf9e1Thanks @gregfromstl! - Fix typo in payment confirmation widget
5.103.1
Patch Changes
-
#7360
78b9c8eThanks @gregfromstl! - Fix setting explicit amount on TransactionWidget -
#7358
55baa99Thanks @gregfromstl! - Fix etherlink transfers when too little funds
5.103.0
Minor Changes
-
#7354
ed81006Thanks @gregfromstl! - Adds new components BuyWidget, CheckoutWidget, and TransactionWidgetBuyWidget
A component that allows users to purchase tokens or NFTs directly within your application.
Example:
import { BuyWidget } from "thirdweb/react"; function App() { return ( <BuyWidget client={client} chain={chain} tokenAddress="0x..." // Token or NFT contract address recipient="0x..." // Optional: recipient address theme="light" // Optional: "light" or "dark" /> ); }CheckoutWidget
A comprehensive checkout experience for purchasing digital assets with multiple payment options.
Example:
import { CheckoutWidget } from "thirdweb/react"; function App() { return ( <CheckoutWidget client={client} chain={chain} items={[ { tokenAddress: "0x...", tokenId: "1", // For NFTs quantity: "1", }, ]} onSuccess={(result) => console.log("Purchase successful:", result)} theme="dark" // Optional: "light" or "dark" /> ); }TransactionWidget
A widget for executing arbitrary blockchain transactions with a user-friendly interface.
Example:
import { TransactionWidget } from "thirdweb/react"; import { prepareContractCall } from "thirdweb"; function App() { const transaction = prepareContractCall({ contract: myContract, method: "transfer", params: [recipientAddress, amount], }); return ( <TransactionWidget client={client} transaction={transaction} onSuccess={(result) => console.log("Transaction successful:", result)} onError={(error) => console.error("Transaction failed:", error)} theme="light" // Optional: "light" or "dark" /> ); }
Patch Changes
-
#7315
99d6b3bThanks @MananTank! - - Add support for blob urls inMediaRenderercomponent- Fix
classNameprop not set in loading state ofMediaRenderercomponent
- Fix
-
#7332
913ea98Thanks @MananTank! - FixNFTMetadatatype
5.102.6
Patch Changes
- #7296
69bf925Thanks @gregfromstl! - Allow forcing onramp chain in buyWithFiat options
5.102.5
Patch Changes
- #7282
e3e3142Thanks @catalyst17! - fix implementation resolution for Beacon
5.102.4
Patch Changes
-
#7243
283dc28Thanks @joaquim-verges! - Include native tokens in Insight.getOwnedTokens -
#7268
b237318Thanks @joaquim-verges! - Support EIP7702 execution for ecosystem wallets
5.102.3
Patch Changes
-
#7240
ad8cc9aThanks @joaquim-verges! - AddBridge.tokens()function to retrieve supported Universal Bridge tokensNew function allows fetching and filtering tokens supported by the Universal Bridge service. Supports filtering by chain ID, token address, symbol, name, and includes pagination with limit/offset parameters.
import { Bridge } from "thirdweb"; // Get all supported tokens const tokens = await Bridge.tokens({ client: thirdwebClient, }); // Filter tokens by chain and symbol const ethTokens = await Bridge.tokens({ chainId: 1, symbol: "USDC", limit: 50, client: thirdwebClient, }); -
#7242
f10fbc8Thanks @joaquim-verges! - Optimize fiat conversion query -
#7230
8245c06Thanks @gregfromstl! - Fixes token pricing in PayEmbed -
#7234
4e93539Thanks @MananTank! - Fallback to insight response if RPC request fails in ERC721 & ERC1155getNFTsextension -
#7241
38627d3Thanks @joaquim-verges! - Handle smart account detection for inApp and ecosystem wallets
5.102.2
Patch Changes
-
#7225
3edbe28Thanks @gregfromstl! - Fix use of purchaseData in payment links -
#7220
4fed9f4Thanks @joaquim-verges! - Update token price APIs to query from insight -
Updated dependencies [
4fed9f4]:- @thirdweb-dev/[email protected]
5.102.1
Patch Changes
-
#7211
31c4bb2Thanks @joaquim-verges! - Add account deletion support when unlinking profilesAdded optional
allowAccountDeletionparameter touseUnlinkProfilehook andunlinkProfilefunction. When set totrue, this allows deleting the entire account when unlinking the last profile associated with it.React Hook Example:
import { useUnlinkProfile } from "thirdweb/react"; const { mutate: unlinkProfile } = useUnlinkProfile(); const handleUnlink = () => { unlinkProfile({ client, profileToUnlink: connectedProfiles[0], allowAccountDeletion: true, // Delete account if last profile }); };Direct Function Example:
import { unlinkProfile } from "thirdweb/wallets/in-app"; const updatedProfiles = await unlinkProfile({ client, profileToUnlink: profiles[0], allowAccountDeletion: true, // Delete account if last profile });
5.102.0
Minor Changes
- #7190
861e623Thanks @joaquim-verges! - Enhanced Engine functionality with server wallet management, search transactions and batch transaction support:-
Added
Engine.createServerWallet()to create a new server wallet with a custom labelimport { Engine } from "thirdweb"; const serverWallet = await Engine.createServerWallet({ client, label: "My Server Wallet", }); console.log(serverWallet.address); console.log(serverWallet.smartAccountAddress); -
Added
Engine.getServerWallets()to list all existing server walletsimport { Engine } from "thirdweb"; const serverWallets = await Engine.getServerWallets({ client, }); console.log(serverWallets); -
Added
Engine.searchTransactions()to search for transactions by various filters (id, chainId, from address, etc.)// Search by transaction IDs const transactions = await Engine.searchTransactions({ client, filters: [ { field: "id", values: ["1", "2", "3"], }, ], }); // Search by chain ID and sender address const transactions = await Engine.searchTransactions({ client, filters: [ { filters: [ { field: "from", values: ["0x1234567890123456789012345678901234567890"], }, { field: "chainId", values: ["8453"], }, ], operation: "AND", }, ], pageSize: 100, page: 0, }); -
Added
serverWallet.enqueueBatchTransaction()to enqueue multiple transactions in a single batch// Prepare multiple transactions const transaction1 = claimTo({ contract, to: firstRecipient, quantity: 1n, }); const transaction2 = claimTo({ contract, to: secondRecipient, quantity: 1n, }); // Enqueue as a batch const { transactionId } = await serverWallet.enqueueBatchTransaction({ transactions: [transaction1, transaction2], }); // Wait for batch completion const { transactionHash } = await Engine.waitForTransactionHash({ client, transactionId, }); -
Improved server wallet transaction handling with better error reporting
-
Patch Changes
- Updated dependencies [
861e623]:- @thirdweb-dev/[email protected]
5.101.2
Patch Changes
-
#7185
41e59a9Thanks @gregfromstl! - Addscountryto onramp parameters -
#7157
52d451fThanks @RobbyUitbeijerse! - default the spinner stroke color to currentColor and make the color prop optional -
#7158
ec7bc2bThanks @joaquim-verges! - Handle large NFT colletions when updating metadata -
#7183
655df03Thanks @joaquim-verges! - Add ahiddenWalletsprop toConnectEmbed,ConnectButton, anduseConnectModalto hide specific wallets from the connect list. -
#7191
44a7460Thanks @gregfromstl! - Remove unnecessary Switch Network button in PayEmbed -
#7202
3d3c6f3Thanks @gregfromstl! - Fixes a bug with purchaseData not being included on PayEmbed transfers -
Updated dependencies [
ec7bc2b,ec7bc2b]:- @thirdweb-dev/[email protected]
- @thirdweb-dev/[email protected]
5.101.1
Patch Changes
-
#7151
5277eddThanks @gregfromstl! - Fix Webhook schema type -
#7147
3489eceThanks @joaquim-verges! - Better Quote errors
5.101.0
Minor Changes
-
#7103
f3abea3Thanks @jnsdls! - Added webhook verification functionality to securely verify incoming webhooks from thirdweb. This includes:- New
Webhook.parsefunction to verify webhook signatures and timestamps - Support for both
x-payload-signatureandx-pay-signatureheader formats - Timestamp verification with configurable tolerance
- Version 2 webhook payload type support
Example usage:
import { Webhook } from "thirdweb/bridge"; const webhook = await Webhook.parse( payload, headers, secret, 300, // optional tolerance in seconds ); - New
5.100.2
Patch Changes
-
#7119
dcd6b99Thanks @joaquim-verges! - Better error messages in PayEmbed -
#7090
1e0b142Thanks @joaquim-verges! - Allow limiting the selectable countries for SMS login via a newallowedSmsCountryCodesoption placed alongsidedefaultSmsCountryCode. -
#7123
f31116eThanks @jnsdls! - fix avatar image detection on Node -
#7110
7b72e88Thanks @RobbyUitbeijerse! - Fix loading spinner theme color in PayEmbed -
#7108
dd2fb1bThanks @RobbyUitbeijerse! - Add support for filtering fiat payment providers in PayEmbed -
#7121
376bdb2Thanks @gregfromstl! - Payment link support in PayEmbed -
#7145
69fdef0Thanks @joaquim-verges! - Ensure bigints are stringified before usage with server wallets
5.100.1
Patch Changes
- #7104
30fafd1Thanks @joaquim-verges! - Fix siwe auth always forcing a switch chain call
5.100.0
Minor Changes
-
#7064
64964daThanks @gregfromstl! - Adds Bridge.Transfer module for direct token transfers:import { Bridge, NATIVE_TOKEN_ADDRESS } from "thirdweb"; const quote = await Bridge.Transfer.prepare({ chainId: 1, tokenAddress: NATIVE_TOKEN_ADDRESS, amount: toWei("0.01"), sender: "0x...", receiver: "0x...", client: thirdwebClient, });This will return a quote that might look like:
{ originAmount: 10000026098875381n, destinationAmount: 10000000000000000n, blockNumber: 22026509n, timestamp: 1741730936680, estimatedExecutionTimeMs: 1000 steps: [ { originToken: { chainId: 1, address: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", symbol: "ETH", name: "Ethereum", decimals: 18, priceUsd: 2000, iconUri: "https://..." }, destinationToken: { chainId: 1, address: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", symbol: "ETH", name: "Ethereum", decimals: 18, priceUsd: 2000, iconUri: "https://..." }, originAmount: 10000026098875381n, destinationAmount: 10000000000000000n, estimatedExecutionTimeMs: 1000 transactions: [ { action: "approval", id: "0x", to: "0x...", data: "0x...", chainId: 1, type: "eip1559" }, { action: "transfer", to: "0x...", value: 10000026098875381n, data: "0x...", chainId: 1, type: "eip1559" } ] } ], expiration: 1741730936680, intent: { chainId: 1, tokenAddress: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", amount: 10000000000000000n, sender: "0x...", receiver: "0x..." } }Sending the transactions
The
transactionsarray is a series of ox EIP-1559 transactions that must be executed one after the other in order to fulfill the complete route. There are a few things to keep in mind when executing these transactions:- Approvals will have the
approvalaction specified. You can perform approvals withsendAndConfirmTransaction, then proceed to the next transaction. - All transactions are assumed to be executed by the
senderaddress, regardless of which chain they are on. The final transaction will use thereceiveras the recipient address. - If an
expirationtimestamp is provided, all transactions must be executed before that time to guarantee successful execution at the specified price.
NOTE: To get the status of each non-approval transaction, use
Bridge.statusrather than checking for transaction inclusion. This function will ensure full completion of the transfer.You can include arbitrary data to be included on any webhooks and status responses with the
purchaseDataoption:const quote = await Bridge.Transfer.prepare({ chainId: 1, tokenAddress: NATIVE_TOKEN_ADDRESS, amount: toWei("0.01"), sender: "0x...", receiver: "0x...", purchaseData: { reference: "payment-123", metadata: { note: "Transfer to Alice", }, }, client: thirdwebClient, });Fees
There may be fees associated with the transfer. These fees are paid by the
feePayeraddress, which defaults to thesenderaddress. You can specify a different address with thefeePayeroption. If you do not specify an option or explicitly specifysender, the fees will be added to the input amount. If you specify thereceiveras the fee payer the fees will be subtracted from the destination amount.For example, if you were to request a transfer with
feePayerset toreceiver:const quote = await Bridge.Transfer.prepare({ chainId: 1, tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC amount: 100_000_000n, // 100 USDC sender: "0x...", receiver: "0x...", feePayer: "receiver", client: thirdwebClient, });The returned quote might look like:
{ originAmount: 100_000_000n, // 100 USDC destinationAmount: 99_970_000n, // 99.97 USDC ... }If you were to request a transfer with
feePayerset tosender:const quote = await Bridge.Transfer.prepare({ chainId: 1, tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC amount: 100_000_000n, // 100 USDC sender: "0x...", receiver: "0x...", feePayer: "sender", client: thirdwebClient, });The returned quote might look like:
{ originAmount: 100_030_000n, // 100.03 USDC destinationAmount: 100_000_000n, // 100 USDC ... } - Approvals will have the
Patch Changes
-
#7064
64964daThanks @gregfromstl! - Faster useSendTransaction execution -
#7092
d623978Thanks @joaquim-verges! - Show deposit modal for tokens that don't have any UB routes -
#7076
89ccc80Thanks @joaquim-verges! - Added Bridge.Onramp.prepare and Bridge.Onramp.status functionsBridge.Onramp.prepare
Prepares an onramp transaction, returning a link from the specified provider to onramp to the specified token.
import { Bridge } from "thirdweb"; import { ethereum } from "thirdweb/chains"; import { NATIVE_TOKEN_ADDRESS, toWei } from "thirdweb/utils"; const preparedOnramp = await Bridge.Onramp.prepare({ client: thirdwebClient, onramp: "stripe", chainId: ethereum.id, tokenAddress: NATIVE_TOKEN_ADDRESS, receiver: "0x...", // receiver's address amount: toWei("10"), // 10 of the destination token // Optional params: // sender: "0x...", // sender's address // onrampTokenAddress: NATIVE_TOKEN_ADDRESS, // token to initially onramp to // onrampChainId: 1, // chain to initially onramp to // currency: "USD", // maxSteps: 2, // purchaseData: { customId: "123" } }); console.log(preparedOnramp.link); // URL to redirect the user to console.log(preparedOnramp.currencyAmount); // Price in fiat currencyBridge.Onramp.status
Retrieves the status of an Onramp session created via Bridge.Onramp.prepare.
import { Bridge } from "thirdweb"; const onrampStatus = await Bridge.Onramp.status({ id: "022218cc-96af-4291-b90c-dadcb47571ec", client: thirdwebClient, }); // Possible results: // { // status: "CREATED", // transactions: [], // purchaseData: { // orderId: "abc-123", // }, // } // // or // { // status: "PENDING", // transactions: [], // purchaseData: { // orderId: "abc-123", // }, // } // // or // { // status: "COMPLETED", // transactions: [ // { // chainId: 1, // transactionHash: "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", // }, // ], // purchaseData: { // orderId: "abc-123", // }, // }
5.99.3
Patch Changes
- #7077
c61e258Thanks @joaquim-verges! - expose getInstalledWallets() utility
5.99.2
Patch Changes
-
#7065
61152ddThanks @joaquim-verges! - Return timestamps in Engine.getTransactionStatus() -
#7069
da2a2a0Thanks @joaquim-verges! - Fix buyWithCrypto false not respected when going back from quote -
#7040
20b5ba9Thanks @joaquim-verges! - Propagate 401 errors when connecting in-app wallet -
#7061
8d47864Thanks @joaquim-verges! - Expose prepareUserOp utility function -
Updated dependencies [
ae2ff74]:- @thirdweb-dev/[email protected]
5.99.1
Patch Changes
-
#7016
1985de8Thanks @joaquim-verges! - Expose inMemoryStorage for inAppWallet backend usage -
#7034
fc65350Thanks @joaquim-verges! - Preload wallet balances on pay embed -
#7038
da3fc99Thanks @joaquim-verges! - Default to in-memory storage when creating inapp wallets outside the browser
5.99.0
Minor Changes
-
#7003
58e343cThanks @joaquim-verges! - Breaking change: EIP-5792 supportWe've significantly improved our EIP-5792 apis, which come with some breaking changes:
New Functions Added
-
useSendAndConfirmCalls- Description: Hook to send and wait for confirmation of EIP-5792 calls
- Returns: React Query mutation object with transaction receipts
- Example:
const { mutate: sendAndConfirmCalls, data: result } = useSendAndConfirmCalls(); await sendAndConfirmCalls({ client, calls: [tx1, tx2], }); console.log("Transaction hash:", result.receipts?.[0]?.transactionHash); -
useWaitForCallsReceipt- Description: Hook to wait for the receipt of EIP-5792 calls, perfect for splitting submitting the call and waiting for receipt
- Returns: React Query object with call receipts
- Example:
const { mutate: sendCalls, data: result } = useSendCalls(); const { data: receipt, isLoading } = useWaitForCallsReceipt(result);
Breaking Changes
useSendCallsChangesBefore
// mutation returns id a string const sendCalls = useSendCalls({ client });After
// no longer needs client // mutation returns an object with id const sendCalls = useSendCalls();Waiting for call receipts is now done separately, via the
useWaitForCallsReceipt.Before
const { mutate: sendCalls, data: receipt } = useSendCalls({ client, waitForBundle: true, });After
const { mutate: sendCalls, data: result } = useSendCalls(); const { data: receipt, isLoading } = useWaitForCallsReceipt(result);You can also use the helper
useSendAndConfirmCallsto combine both submitting and waiting for confirmation.const { mutate: sendAndConfirmCalls, data: receipt } = useSendAndConfirmCalls();sendCallsChangesBefore:
// Old output type type SendCallsResult = string;After:
// New output type type SendCallsResult = { id: string; client: ThirdwebClient; chain: Chain; wallet: Wallet; }; -
5.98.2
Patch Changes
-
#7009
5a13ad4Thanks @gregfromstl! - Automatically trigger SIWE sign in when a wallet is connected -
#7011
98eda9dThanks @gregfromstl! - Auto-login on autoconnect of IAW in all cases
5.98.1
Patch Changes
- #7004
6f1d4b1Thanks @joaquim-verges! - Handle tx with value on engineAccount
5.98.0
Minor Changes
-
#6874
e96ebbaThanks @joaquim-verges! - EIP7702 support for in-app walletsYou can now turn your in-app wallets into smart accounts with 7702!
This lets you:
- sponsor transactions
- batch transactions
- add session keys
- and more!
simply pass the executionMode "EIP7702" to get started:
const wallet = inAppWallet({ executionMode: { mode: "EIP7702", sponsorGas: true, }, });Keep in mind that this will only work on chains that support 7702.
5.97.3
Patch Changes
- #6974
5f6403bThanks @joaquim-verges! - Handle hex value format for smart wallet execution
5.97.2
Patch Changes
-
#6969
4e42158Thanks @joaquim-verges! - Handle hedera native currency decimal values for smart wallet calls -
#6967
5a069feThanks @joaquim-verges! - Always connect to destination chain if available in PayEmbed
5.97.1
Patch Changes
- #6963
760b250Thanks @joaquim-verges! - Fix metamask deeplink parsing
5.97.0
Minor Changes
-
#6956
08cff4bThanks @gregfromstl! - feat(bridge): Add chains endpoint to retrieve Universal Bridge supported chainsimport { Bridge } from "thirdweb"; const chains = await Bridge.chains({ client: thirdwebClient, });Returned chains include chain information such as chainId, name, icon, and nativeCurrency details.
Patch Changes
-
#6953
736c3f8Thanks @gregfromstl! - Adds themaxStepsoption to Buy.quote, Buy.prepare, Sell.quote, and Sell.prepare functions. This allows users to limit quotes to routes with a specific number of steps or fewer. For example:const quote = await bridge.Buy.quote({ originChainId: 1, originTokenAddress: "0x...", destinationChainId: 137, destinationTokenAddress: "0x...", amount: 1000000n, maxSteps: 2, }); const preparedQuote = await bridge.Buy.prepare({ originChainId: 1, originTokenAddress: "0x...", destinationChainId: 137, destinationTokenAddress: "0x...", amount: 1000000n, sender: "0x...", receiver: "0x...", maxSteps: 2, }); const quote = await bridge.Sell.quote({ originChainId: 1, originTokenAddress: "0x...", destinationChainId: 137, destinationTokenAddress: "0x...", amount: 1000000n, maxSteps: 3, }); const preparedQuote = await bridge.Sell.prepare({ originChainId: 1, originTokenAddress: "0x...", destinationChainId: 137, destinationTokenAddress: "0x...", amount: 1000000n, sender: "0x...", receiver: "0x...", maxSteps: 3, }); -
#6952
055e451Thanks @gregfromstl! - +Deprecate legacy Pay functions -
#6955
6dd2b09Thanks @gregfromstl! - Added thesortByoption to Bridge.routesimport { Bridge } from "thirdweb"; const routes = await Bridge.routes({ originChainId: 1, originTokenAddress: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", limit: 10, offset: 0, sortBy: "popularity", client: thirdwebClient, }); -
#6900
e9d0b6eThanks @MananTank! - Only attempt autoconnect once
5.96.8
Patch Changes
-
#6918
98cce77Thanks @joaquim-verges! - Handle zero address as native tokens in UB -
#6924
20d182bThanks @joaquim-verges! - Optimize token query in PayEmbed using Insight where possible
5.96.7
Patch Changes
- #6914
e23f53bThanks @joaquim-verges! - Fix react native exports
5.96.6
Patch Changes
-
#6910
2dba042Thanks @joaquim-verges! - Improve destination tokens error handling -
#6906
c271ec6Thanks @joaquim-verges! - Updated Wallet Connect to 2.20.1
5.96.5
Patch Changes
-
#6891
7684b76Thanks @joaquim-verges! - Reword buy with card in PayEmbed -
#6869
880650dThanks @kumaryash90! - Fix module deployment with refs and zk -
#6870
fd91ee8Thanks @joaquim-verges! - Handle fixed size arrays in solidity inputs -
#6871
0aadcd4Thanks @joaquim-verges! - Show injected wallet icon when available
5.96.4
Patch Changes
-
#6849
e28eb73Thanks @MananTank! - Signature Screen loading state improvements -
#6858
adcbec6Thanks @mmahdigh! - Add name and icon to inAppWallet metadata props to customize in-app wallets inside the connect modal
5.96.3
Patch Changes
- #6846
31ce837Thanks @joaquim-verges! - Only update isLoggedIn state on successfull logins
5.96.2
Patch Changes
- #6834
4c33936Thanks @joaquim-verges! - Always checksum Account.address
5.96.1
Patch Changes
- #6832
436750eThanks @joaquim-verges! - Lazy import native dependencies in React Native
5.96.0
Minor Changes
- #6830
e526f75Thanks @gregfromstl! - Enhanced SDK Bridge functionality with the following key updates:-
Breaking Change: Standardized parameter naming in bridge functions:
- Changed
buyAmountWeitoamountin Buy functions - Changed
sellAmountWeitoamountin Sell functions
Example:
// Before const buyQuote = await buy.quote({ originChainId: 1, originTokenAddress: NATIVE_TOKEN_ADDRESS, destinationChainId: 10, destinationTokenAddress: NATIVE_TOKEN_ADDRESS, buyAmountWei: toWei("0.01"), client: thirdwebClient, }); // After const buyQuote = await buy.quote({ originChainId: 1, originTokenAddress: NATIVE_TOKEN_ADDRESS, destinationChainId: 10, destinationTokenAddress: NATIVE_TOKEN_ADDRESS, amount: toWei("0.01"), client: thirdwebClient, }); - Changed
-
Enhanced Quote Structure: Added
stepsarray to buy/sell quote responses with detailed token information:// Steps contains detailed information about each step in a cross-chain transaction steps: [ { originToken: { chainId: 1, address: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", symbol: "ETH", name: "Ethereum", decimals: 18, priceUsd: 2000, iconUri: "https://...", }, destinationToken: { chainId: 10, address: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", symbol: "ETH", name: "Ethereum", decimals: 18, priceUsd: 2000, iconUri: "https://...", }, originAmount: 1000000000000000000n, destinationAmount: 9980000000000000000n, estimatedExecutionTimeMs: 1000, transactions: [ /* transactions for this step */ ], }, ]; -
Added Purchase Data Support: Added optional
purchaseDataparameter to Buy and Sell functions:// Example with purchaseData const quote = await buy.prepare({ originChainId: 1, originTokenAddress: NATIVE_TOKEN_ADDRESS, destinationChainId: 10, destinationTokenAddress: NATIVE_TOKEN_ADDRESS, amount: toWei("0.01"), sender: "0x2a4f24F935Eb178e3e7BA9B53A5Ee6d8407C0709", receiver: "0x2a4f24F935Eb178e3e7BA9B53A5Ee6d8407C0709", purchaseData: { foo: "bar", }, client: thirdwebClient, }); -
Enhanced Status Responses: Status responses now include the
purchaseDatafield that was provided during the initial transaction:// Status response includes purchaseData { status: "COMPLETED", // ...other status fields purchaseData: { foo: "bar" } } -
Updated API Interactions: Changed from query parameters to JSON body for prepare functions to accommodate complex data.
-
Patch Changes
-
#6823
dc2e514Thanks @kumaryash90! - Deprecate Pack -
#6822
33666aaThanks @joaquim-verges! - More efficient multi event querying when using indexer -
#6819
8b4b873Thanks @joaquim-verges! - expose setServiceKey -
#6824
b2e56f8Thanks @kumaryash90! - Custom factory addr for Chiliz mainnet
5.95.3
Patch Changes
-
#6782
d7dc83fThanks @jnsdls! - updated various dependencies -
#6778
4ccf062Thanks @joaquim-verges! - Fix loading state when loading source tokens in PayEmbed
5.95.2
Patch Changes
5.95.1
Patch Changes
- #6765
03e2385Thanks @joaquim-verges! - Better fallbacks for live NFT data cache miss
5.95.0
Minor Changes
-
#6706
185d2f3Thanks @joaquim-verges! - Expose getOwnedTokens, getOwnedNFTs and getTransaction functionsYou can now use Insight, our in-house indexer directly from the SDK with a simple API:
Get Owned ERC20 tokens
import { Insight } from "thirdweb"; const tokens = await Insight.getOwnedTokens({ client, ownerAddress, chains: [base, polygon, arbitrum], });Get Owned NFTs (ERC721 and ERC1155)
import { Insight } from "thirdweb"; const nfts = await Insight.getOwnedNFTs({ client, ownerAddress, chains: [sepolia], });Get Transactions for a given wallet address
import { Insight } from "thirdweb"; const transactions = await Insight.getTransactions({ client, walletAddress, chains: [sepolia], });All functions come with extra query filters for more granular queries, refer to the documentation for more details.
Patch Changes
-
#6760
7ecfcb9Thanks @joaquim-verges! - Add thirdweb branding to PayEmbed -
#6753
4cf15a2Thanks @joaquim-verges! - Use insight for 1155 getNFTs, getOwnedNFTs and getNFT -
#6752
23d3757Thanks @joaquim-verges! - Simplify RPC request handling -
#6741
8d4d991Thanks @joaquim-verges! - Use insight for erc821/getNFT, erc721/getNFTs and erc721/getOwnedNFTsStandard ERC721 getNFT, getNFTs and getOwnedNFTs now use insight, our in house indexer by default. If indexer is not availbale, will fallback to RPC.
You can also use the indexer directly using the Insight API:
for an entire collection
import { Insight } from "thirdweb"; const events = await Insight.getContractNFTs({ client, chains: [sepolia], contractAddress: "0x1234567890123456789012345678901234567890", });or for a single NFT
import { Insight } from "thirdweb"; const events = await Insight.getNFT({ client, chains: [sepolia], contractAddress: "0x1234567890123456789012345678901234567890", tokenId: 1n, }); -
#6683
a3e7300Thanks @kumaryash90! - Get indexed events fromgetContractEventsYou can now automatically query indexed events on supported chains when calling getContractEvents
import { getContractEvents } from "thirdweb"; const events = await getContractEvents({ contract: DOODLES_CONTRACT, events: [transferEvent()], });This method falls back to RPC eth_getLogs if the indexer is not available.
You can also use the dedicated indexer function via the Insight export
import { Insight } from "thirdweb"; const events = await Insight.getContractEvents({ client, chains: [sepolia], contractAddress: "0x1234567890123456789012345678901234567890", event: transferEvent(), decodeLogs: true, }); -
#6732
a45c558Thanks @gregfromstl! - Improve pay error messages -
#6758
62ce05eThanks @joaquim-verges! - Better error message for getUser -
#6734
2a7df33Thanks @joaquim-verges! - Better error messages for failed requests -
Updated dependencies [
185d2f3]:- @thirdweb-dev/[email protected]
5.94.2
Patch Changes
-
#6716
0ea8987Thanks @gregfromstl! - Miscellaneous PayEmbed error improvements:- Adds title and message to PayEmbed errors
- Prevents propagating raw errors to the user when in purchase or transaction mode
- Fixes bubble alignment on pulsing animation
-
#6712
e574114Thanks @joaquim-verges! - Dont retry on user connection rejection in eip1193 connector
5.94.1
Patch Changes
- #6707
fa0d114Thanks @joaquim-verges! - Add retry logic to predictAccountAddress
5.94.0
Minor Changes
-
#6695
86070faThanks @joaquim-verges! - Add feePayer option for direct_payment mode of PayEmbedFor direct payments via the PayEmbed, you can now specify the payer of the protocol fee for direct transfers. Can be "sender" or "receiver", defaults to "sender".
<PayEmbed client={THIRDWEB_CLIENT} payOptions={{ mode: "direct_payment", paymentInfo: { amount: "2", chain: base, token: getDefaultToken(base, "USDC"), sellerAddress: "0x...", feePayer: "receiver", // <-- transfer fee paid by the receiver }, metadata: { name: "Black Hoodie (Size L)", image: "/drip-hoodie.png", }, }} />
5.93.17
Patch Changes
- #6693
c1d6bb7Thanks @joaquim-verges! - Extra gas buffer for quote and transfer transactions
5.93.16
Patch Changes
- #6690
0a798c5Thanks @joaquim-verges! - Add smartAccountAddress to getUser result
5.93.15
Patch Changes
-
#6655
59be4eaThanks @kumaryash90! - Single phase functionality for erc1155 -
#6686
e10c1e6Thanks @joaquim-verges! - Pass through desired chain when signing in with wallet for ecosystems
5.93.14
Patch Changes
- #6643
04d2bc7Thanks @kumaryash90! - Deploy config
5.93.13
Patch Changes
-
#6632
e9649a2Thanks @joaquim-verges! - Update dependencies -
#6640
93f225bThanks @joaquim-verges! - Fix ethers6 provider override
5.93.12
Patch Changes
-
#6613
5788cbdThanks @gregfromstl! - Adds transactionactionfields to Bridge responses. This includes and necessary approval transactions.n -
#6621
6a0704aThanks @joaquim-verges! - Connect to current wallet chain when connecting other wallets in PayEmbed -
#6626
3f21445Thanks @joaquim-verges! - Emit accountChanged event when smart wallets switch chains -
#6628
95a8753Thanks @joaquim-verges! - Fix updateListing date handling -
#6520
d6373b2Thanks @denpiligrim! - Added ru_RU locale to thirdweb package
5.93.11
Patch Changes
-
#6615
f618c53Thanks @joaquim-verges! - handle entrypoint resolution inside createAndSignUserOp -
#6618
62c8e7cThanks @joaquim-verges! - Show correct transfer from amount for transfer flow in PayEmbed
5.93.10
Patch Changes
-
#6605
38e089aThanks @joaquim-verges! - Only onramp for the amount required for transaction flows in PayEmbed -
#6607
a9b7633Thanks @joaquim-verges! - Show past transactions in transactions modal screen -
#6612
9cf1376Thanks @kumaryash90! - Remove custom config for Ronin
5.93.9
Patch Changes
-
#6593
0dcde07Thanks @kumaryash90! - Fix bytecode caching -
#6588
cd9ea69Thanks @joaquim-verges! - Add erc20Value for makeOffer extension function
5.93.8
Patch Changes
- #6584
3d7c009Thanks @joaquim-verges! - Fix CLI secret key handling
5.93.7
Patch Changes
-
#6578
2a1f4beThanks @gregfromstl! - Fix bug with PayEmbed incorrectly showing failed state -
#6580
c3d0ea0Thanks @joaquim-verges! - respect supportedTokens prop in PayEmbed -
#6495
b49c191Thanks @kumaryash90! - Support Stylus contracts in CLI and SDK
5.93.6
Patch Changes
- #6569
2d4c5ffThanks @MananTank! - Fix "Cannot read properties of undefined (reading 'forwardRef')" error in certain bundler setups
5.93.5
Patch Changes
-
#6550
3c120a7Thanks @kumaryash90! - Functions to manage extensions on a dynamic contract -
#6545
c549d59Thanks @joaquim-verges! - Update dependencies -
#6562
e5026a1Thanks @gregfromstl! - Account for bigint values in engine wallet typed data
5.93.4
Patch Changes
- #6527
4f51201Thanks @joaquim-verges! - Update dependencies
5.93.3
Patch Changes
- #6518
744491fThanks @joaquim-verges! - Handle wallet chain mismatch on post onramp flow
5.93.2
Patch Changes
- #6515
c407bd1Thanks @joaquim-verges! - Always fetch fresh quotes before post onramp step in PayEmbed
5.93.1
Patch Changes
-
#6509
7476b79Thanks @joaquim-verges! - Improve swap status UI in PayEmbed -
#6507
ccb6416Thanks @joaquim-verges! - Force redirect to phantom app on mobile
5.93.0
Minor Changes
-
#6464
654f879Thanks @gregfromstl! - Adds a newBridgemodule to the thirdweb SDK to access the Universal Bridge.Features
Buy & Sell Operations
The Bridge module makes it easy to buy and sell tokens across chains:
Bridge.Buy- For specifying the destination amount you want to receiveBridge.Sell- For specifying the origin amount you want to send
Each operation provides two functions:
quote- Get an estimate without connecting a walletprepare- Get a finalized quote with transaction data
Buy Example
import { Bridge, toWei, NATIVE_TOKEN_ADDRESS } from "thirdweb"; // First, get a quote to see approximately how much you'll pay const buyQuote = await Bridge.Buy.quote({ originChainId: 1, // Ethereum originTokenAddress: NATIVE_TOKEN_ADDRESS, destinationChainId: 10, // Optimism destinationTokenAddress: NATIVE_TOKEN_ADDRESS, buyAmountWei: toWei("0.01"), // I want to receive 0.01 ETH on Optimism client: thirdwebClient, }); console.log( `To get ${buyQuote.destinationAmount} wei on destination chain, you need to pay ${buyQuote.originAmount} wei`, ); // When ready to execute, prepare the transaction const preparedBuy = await Bridge.Buy.prepare({ originChainId: 1, originTokenAddress: NATIVE_TOKEN_ADDRESS, destinationChainId: 10, destinationTokenAddress: NATIVE_TOKEN_ADDRESS, buyAmountWei: toWei("0.01"), sender: "0x...", // Your wallet address receiver: "0x...", // Recipient address (can be the same as sender) client: thirdwebClient, }); // The prepared quote contains the transactions you need to execute console.log(`Transactions to execute: ${preparedBuy.transactions.length}`);Sell Example
import { Bridge, toWei } from "thirdweb"; // First, get a quote to see approximately how much you'll receive const sellQuote = await Bridge.Sell.quote({ originChainId: 1, // Ethereum originTokenAddress: NATIVE_TOKEN_ADDRESS, destinationChainId: 10, // Optimism destinationTokenAddress: NATIVE_TOKEN_ADDRESS, sellAmountWei: toWei("0.01"), // I want to sell 0.01 ETH from Ethereum client: thirdwebClient, }); console.log( `If you send ${sellQuote.originAmount} wei, you'll receive approximately ${sellQuote.destinationAmount} wei`, ); // When ready to execute, prepare the transaction const preparedSell = await Bridge.Sell.prepare({ originChainId: 1, originTokenAddress: NATIVE_TOKEN_ADDRESS, destinationChainId: 10, destinationTokenAddress: NATIVE_TOKEN_ADDRESS, sellAmountWei: toWei("0.01"), sender: "0x...", // Your wallet address receiver: "0x...", // Recipient address (can be the same as sender) client: thirdwebClient, }); // Execute the transactions in sequence for (const tx of preparedSell.transactions) { // Send the transaction using your wallet // Wait for it to be mined }Bridge Routes
You can discover available bridge routes using the
routesfunction:import { Bridge, NATIVE_TOKEN_ADDRESS } from "thirdweb"; // Get all available routes const allRoutes = await Bridge.routes({ client: thirdwebClient, }); // Filter routes for a specific token or chain const filteredRoutes = await Bridge.routes({ originChainId: 1, // From Ethereum originTokenAddress: NATIVE_TOKEN_ADDRESS, destinationChainId: 10, // To Optimism client: thirdwebClient, }); // Paginate through routes const paginatedRoutes = await Bridge.routes({ limit: 10, offset: 0, client: thirdwebClient, });Bridge Transaction Status
After executing bridge transactions, you can check their status:
import { Bridge } from "thirdweb"; // Check the status of a bridge transaction const bridgeStatus = await Bridge.status({ transactionHash: "0xe199ef82a0b6215221536e18ec512813c1aa10b4f5ed0d4dfdfcd703578da56d", chainId: 8453, // The chain ID where the transaction was initiated client: thirdwebClient, }); // The status will be one of: "COMPLETED", "PENDING", "FAILED", or "NOT_FOUND" if (bridgeStatus.status === "completed") { console.log(` Bridge completed! Sent: ${bridgeStatus.originAmount} wei on chain ${bridgeStatus.originChainId} Received: ${bridgeStatus.destinationAmount} wei on chain ${bridgeStatus.destinationChainId} `); } else if (bridgeStatus.status === "pending") { console.log("Bridge transaction is still pending..."); } else { console.log("Bridge transaction failed"); }Error Handling
The Bridge module provides consistent error handling with descriptive error messages:
try { await Bridge.Buy.quote({ // ...params }); } catch (error) { // Errors will have the format: "ErrorCode | Error message details" console.error(error.message); // e.g. "AmountTooHigh | The provided amount is too high for the requested route." }Types
The Bridge module exports the following TypeScript types:
Route- Describes a bridge route between chains and tokensStatus- Represents the status of a bridge transactionQuote- Contains quote information for a bridge transactionPreparedQuote- Extends Quote with transaction data
Integration
The Bridge module is accessible as a top-level export:
import { Bridge } from "thirdweb";Use
Bridge.Buy,Bridge.Sell,Bridge.routes, andBridge.statusto access the corresponding functionality.
Patch Changes
-
#6503
47f8cd6Thanks @joaquim-verges! - UI cleanup for multistep swaps in PayEmbed -
#6506
d854021Thanks @joaquim-verges! - Pass along chainId to internal 1193 provider when connecting -
#6505
7890145Thanks @joaquim-verges! - Fix requireApproval option not enforced for wallet connection
5.92.3
Patch Changes
-
#6496
b5fb5ddThanks @joaquim-verges! - Support account overrides in engineAccount() -
#6498
8b036dcThanks @joaquim-verges! - Add Saga in gas free chains definitions
5.92.2
Patch Changes
-
#5699
1273cc7Thanks @kumaryash90! - Compute addresses with ref contracts -
#6490
9901351Thanks @joaquim-verges! - Handle serialized bigints for packing userops
5.92.1
Patch Changes
-
#6449
f655657Thanks @joaquim-verges! - Fix EIP1193 provider adapter filtering out value from transactions -
#6447
109f250Thanks @joaquim-verges! - Fix ethers5 adapter not handling authorizationList tx prop
5.92.0
Minor Changes
- #6443
f6cbdb7Thanks @gregfromstl! - BREAKING: Removes 3D model support in MediaRenderer
5.91.1
Patch Changes
- #6439
2ae778eThanks @gregfromstl! - Adds countdown for email cooldown
5.91.0
Minor Changes
- #6437
cbc4e80Thanks @gregfromstl! - Several onramp embed improvements
5.90.4
Patch Changes
- #6432
617fe68Thanks @joaquim-verges! - Allow overriding storage for inApp and ecosystem wallets
5.90.3
Patch Changes
- #6424
38ae2d3Thanks @joaquim-verges! - Expose getUserOpHash utility function
5.90.2
Patch Changes
-
#6415
fb446bdThanks @joaquim-verges! - emit onPurchaseSuccess for wallet to wallet transfer flow before execution -
#6412
9f1a77fThanks @joaquim-verges! - Allow resending OTP on failures
5.90.1
Patch Changes
-
#6390
9799b0aThanks @gregfromstl! - Adds GPT Protocol to chains that only support legacy transactions -
#6386
c3b90a6Thanks @joaquim-verges! - Handle comma for decimal input in PayEmbed
5.90.0
Minor Changes
- #6370
5625ff1Thanks @joaquim-verges! - AddedestimateUserOpGasCost()utility function for estimating the total gas cost in wei/ether of user operations
Patch Changes
- #6360
6235fe7Thanks @joaquim-verges! - Initialize activeWalletConnectionStatus as 'unknown' instead of 'disconnected'
5.89.1
Patch Changes
- #6356
2ba1683Thanks @joaquim-verges! - Change caching strategy for contract ABI
5.89.0
Minor Changes
-
#6335
1851a8cThanks @joaquim-verges! - AddactiveWalletprop toPayEmbedto pre select a wallet in the UI -
#6323
15adec4Thanks @joaquim-verges! - Fiat onramp UI revamp in PayEmbed and support multi hop onramp flows -
#6317
a19c0c9Thanks @jcheese1! - Add SiweOptions in useConnectModal
Patch Changes
-
#6300
2cb89cbThanks @gregfromstl! - Fix storage upload timeout -
#6332
28df6f7Thanks @joaquim-verges! - Force pre-eip1559 tx on Homeverse mainnet/testnet
5.88.7
Patch Changes
- #6289
5abbae7Thanks @joaquim-verges! - Respect buy with fiat disabled in pay embed
5.88.6
Patch Changes
-
#6274
b182302Thanks @kumaryash90! - bytes32 salt for deterministic deployment -
#6283
5a08176Thanks @joaquim-verges! - Respect supportedTokens override in PayEmbed -
#6281
a0f3557Thanks @joaquim-verges! - Fix text wrapping for long balances in token selector -
#6282
45ca033Thanks @joaquim-verges! - DeprecatedviemAdapter.walletClientin favor ofviemAdapter.walletto take wallet instances instead of accountsBEFORE:
import { viemAdapter } from "thirdweb/adapters/viem"; const walletClient = viemAdapter.walletClient.toViem({ account, // Account chain, client, });AFTER:
import { viemAdapter } from "thirdweb/adapters/viem"; const walletClient = viemAdapter.wallet.toViem({ wallet, // now pass a connected Wallet instance instead of an account chain, client, });This allows for full wallet lifecycle management with the viem adapter, including switching chains, adding chains, events and more.
5.88.5
Patch Changes
-
#6269
0574eacThanks @joaquim-verges! - Enable chain switching for toEIP1194 provider -
#6257
562c534Thanks @joaquim-verges! - New PayEmbed UI for token selection -
#6243
52cbcd2Thanks @gregfromstl! - Fix PayEmbed fiat values to 2 decimal places -
#6262
b882e29Thanks @MananTank! - Fix ConnectEmbed briefly showing "Sign In" prompt while the login status is not known - show loading indicator instead
5.88.4
Patch Changes
- #6246
98b6198Thanks @joaquim-verges! - Prevent popup opening when logging in with auth mode: "redirect"
5.88.3
Patch Changes
- #6240
ee1bc3eThanks @joaquim-verges! - Dont display dollar and token values for wallet balances
5.88.2
Patch Changes
-
#6210
2fbf105Thanks @joaquim-verges! - Dont retry on quote errors, show fiat value in every step -
#6209
97c9ab7Thanks @joaquim-verges! - Batch approvals and swaps if using smart wallets -
#6217
6b2a90aThanks @joaquim-verges! - Handle updating session keys with new params and exposeshouldUpdateSessionKeyfromextensions/erc4337 -
#6237
fbafb65Thanks @joaquim-verges! - PayEmbed UI polish -
#6191
66bbedbThanks @jcheese1! - Add treasure and treasureTopaz chain definitions -
#6234
159ffbfThanks @joaquim-verges! - ExposecanClaimextension function for erc20/721/1155 drops -
#6236
6b286c7Thanks @joaquim-verges! - Dont allow editing amoutns for non fund_wallet modes in PayEmbed
5.88.1
Patch Changes
- #6204
f1cd253Thanks @joaquim-verges! - Update coinbase wallet sdk
5.88.0
Minor Changes
-
#6194
9663079Thanks @joaquim-verges! - Added session keys to smart wallet optionsYou can now pass a
sessionKeyto thesmartWalletoptions function to immediately add a session key to the smart wallet upon connection.This is great in combination with an engine backend wallet! Let's you act on behalf of the user from your backend, making executing transactions as easy as a REST API call. Also unblocks automations, like renewing a subscription, or paying for a service.
const wallet = smartWallet({ sessionKey: { address: "0x...", // the session key address (ex: engine backend wallet) permissions: { approvedTargets: ["0x..."], // allowed contract addresses (or * for all) nativeTokenLimitPerTransaction: 0.1, // max spend per transaction in ETH permissionEndTimestamp: new Date(Date.now() + 1000 * 60 * 60), // expiration date }, }, }); // this will connect the user wallet and add the session key if not already added await wallet.connect({ client: TEST_CLIENT, personalAccount, });You can also pass the
sessionKeyto theConnectButton,ConnectEmbedcomponents anduseConnecthook.<ConnectButton client={client} accountAbstraction={{ chain, sponsorGas: true, sessionKey: { address: "0x...", permissions: { approvedTargets: "*", }, }, }} />Also works for the
inAppWalletsmartAccountoption!const wallet = inAppWallet({ smartAccount: { chain, sponsorGas: true, sessionKey: { address: "0x...", permissions: { approvedTargets: "*", }, }, }, });
Patch Changes
-
#6193
1f6bb7cThanks @joaquim-verges! - Show fiat amount in PayEmbed main screen -
#6192
30e13e6Thanks @joaquim-verges! - Allow editing pay amount mid flow -
#6190
2dfc245Thanks @joaquim-verges! - Add fiat provider selection in PayEmbed -
#6187
ee57dedThanks @joaquim-verges! - Requery allowances when getting back to quote screen -
#6188
64d7bf3Thanks @jnsdls! - when explicitly passingclientIdtocreateThirdwebClient()prefer it over computing theclientIdfrom a passedsecretKeyoption
5.87.4
Patch Changes
- #6182
f77165eThanks @joaquim-verges! - Skip swap approvals if already approved and always calculate gas prices locally
5.87.3
Patch Changes
-
#6116
9d5828eThanks @alecananian! - Skip factory entrypoint lookup for ZKsync chains -
#6119
b693b78Thanks @gregfromstl! - Fix: Ecosystem smart wallets now properly trigger switch chain on their admin wallets -
#6093
08cc489Thanks @kumaryash90! - 7702 delegation designator
5.87.2
Patch Changes
- #6104
bf43196Thanks @MananTank! - Fix thirdweb Pay Modal logging react-query error when opened
5.87.1
Patch Changes
-
#6105
ab55aecThanks @joaquim-verges! - Allow connecting wallets without setting them as active with useConnect
5.87.0
Minor Changes
-
#6082
4550bb2Thanks @joaquim-verges! - Support Account and Wallet headless components in react nativeYou can now use the Account and Wallet headless components in react native, this lets you build your own UI, styling it however you want, but letting the components handle the logic.
Example Account components usage:
<AccountProvider address={account.address} client={client}> /* avatar */ <AccountAvatar loadingComponent={ <AccountBlobbie size={92} style={{ borderRadius: 100 }} /> } fallbackComponent={ <AccountBlobbie size={92} style={{ borderRadius: 100 }} /> } style={{ width: 92, height: 92, borderRadius: 100, }} /> /* address */ <AccountAddress style={{ fontSize: 16, color: Colors.secondary }} formatFn={shortenAddress} /> /* balance */ <AccountBalance showBalanceInFiat={"USD"} chain={chain} loadingComponent={ <ActivityIndicator size="large" color={Colors.accent} /> } fallbackComponent={ <Text className="text-primary">Failed to load balance</Text> } style={{ color: "white", fontSize: 48, fontWeight: "bold", }} /> </AccountProvider>Example Wallet components usage:
<WalletProvider id={"io.metamask"}> <WalletIcon width={32} height={32} /> <WalletName style={{ fontSize: 16, color: Colors.primary }} /> </WalletProvider>
Patch Changes
-
#6079
1616b7fThanks @jnsdls! - exportrandomPrivateKeyfromthirdweb/wallets -
#6076
1401f8dThanks @joaquim-verges! - Fix autoconnection of inapp wallets in react native
5.86.6
Patch Changes
- #6074
94e2d5bThanks @joaquim-verges! - Fix account linking for ecosystem smart wallets
5.86.5
Patch Changes
- #6072
2cebb42Thanks @joaquim-verges! - Fix showing link profiles for ecosystem smart wallets
5.86.4
Patch Changes
- #6068
6c277aeThanks @joaquim-verges! - Respect passed in chain when connecting to inapp wallet with wallet strategy
5.86.3
Patch Changes
- #6057
b6f189cThanks @joaquim-verges! - Updated dependencies
5.86.2
Patch Changes
-
#6046
5ad442cThanks @joaquim-verges! - Simplify in-app wallet login flow -
#6040
a67d342Thanks @joaquim-verges! - Always use 712 signature verification if the smart account is already deployed -
#6042
60edce4Thanks @joaquim-verges! - Fix prompting for generic WC connection on mobile -
#6025
21cc45aThanks @ElasticBottle! - fix (in app wallets): error when calling connect for backend strategy due todocumentreference
5.86.1
Patch Changes
-
#6011
b38604cThanks @gregfromstl! - Fixes issue with chain switching breaking after disconnect -
#6015
8bbee03Thanks @gregfromstl! - Fixes issue with smart wallets used on SiteLink and SiteEmbed -
#6020
ab9a148Thanks @joaquim-verges! - Better transaction tracking for smart wallets
5.86.0
Minor Changes
-
#5989
8b5cb47Thanks @gregfromstl! - Feature: Adds deployMarketplaceContractimport { deployMarketplaceContract } from "thirdweb/deploys"; const address = await deployMarketplaceContract({ client, chain, account, params: { name: "MarketplaceV3", description: "MarketplaceV3 deployed using thirdweb SDK", platformFeeRecipient: "0x21d514c90ee4E4e4Cd16Ce9185BF01F0F1eE4A04", platformFeeBps: 1000, }, });
Patch Changes
- #6004
bb6c71eThanks @joaquim-verges! - Fallback to eip1193 provider chain when switching chain is not supported
5.85.0
Minor Changes
-
#5972
0b62397Thanks @joaquim-verges! - Support multiple messages for Nebula API, updated input props.Some prop names have been updated:
prompt -> messsagecontext -> contextFilterNebula.chat({ client, // prompt is now message message: "What's the total supply of this contract: 0xe2cb0eb5147b42095c2FfA6F7ec953bb0bE347D8", // contextFilter is now contextFilter contextFilter: { chains: [sepolia], }, });The Nebula.chat and Nebula.execute functions now support multiple input messages, and the input properties have been updated to match the http API.
Nebula.chat({ client, // multi message format messages: [ { role: "user", content: "Tell me the name of this contract: 0xe2cb0eb5147b42095c2FfA6F7ec953bb0bE347D8", }, { role: "assistant", content: "The name of the contract is My NFT Collection", }, { role: "user", content: "What's the symbol of this contract?", }, ], contextFilter: { chains: [sepolia], }, });Same changes apply to Nebula.execute.
Nebula.execute({ client, account, messages: [ { role: "user", content: "What's the address of vitalik.eth" }, { role: "assistant", content: "The address of vitalik.eth is 0xd8dA6BF26964aF8E437eEa5e3616511D7G3a3298", }, { role: "user", content: "Send them 0.0001 ETH" }, ], contextFilter: { chains: [sepolia], }, });
Patch Changes
-
#5966
4ffcf30Thanks @MananTank! - Fix NFT components not displaying correct metadata if multiple contracts with same token id is rendered because of incorrect caching -
#5973
dbb64eaThanks @kumaryash90! - Update implementations -
#5982
b6d65cfThanks @gregfromstl! - Addedmodeas a predefined chain -
#5967
9cbcbe7Thanks @gregfromstl! - Added overrides for Lumia Testnet to use pre-EIP1559 gas values
5.84.0
Minor Changes
-
#5889
7a3dff0Thanks @ElasticBottle! - Exposes autoConnect as a standalone function for use outside of react.import { autoConnect } from "thirdweb/wallets"; const autoConnected = await autoConnect({ client, onConnect: (wallet) => { console.log("wallet", wallet); /// wallet that is have been auto connected. }, }); console.log("isAutoConnected", isAutoConnected); // true or false -
#5947
d1c03b0Thanks @joaquim-verges! - IntroducingengineAccount()for backend usageYou can now use
engineAccount()on the backend to create an account that can send transactions via your engine instance.This lets you use the full catalog of thirdweb SDK functions and extensions on the backend, with the performance, reliability, and monitoring of your engine instance.
// get your engine url, auth token, and wallet address from your engine instance on the dashboard const engine = engineAccount({ engineUrl: process.env.ENGINE_URL, authToken: process.env.ENGINE_AUTH_TOKEN, walletAddress: process.env.ENGINE_WALLET_ADDRESS, }); // Now you can use engineAcc to send transactions, deploy contracts, etc. // For example, you can prepare extension functions: const tx = await claimTo({ contract: getContract({ client, chain, address: "0x..." }), to: "0x...", tokenId: 0n, quantity: 1n, }); // And then send the transaction via engine // this will automatically wait for the transaction to be mined and return the transaction hash const result = await sendTransaction({ account: engine, // forward the transaction to your engine instance transaction: tx, }); console.log(result.transactionHash); -
#5948
b10f306Thanks @joaquim-verges! - Introducing Nebula APIYou can now chat with Nebula and ask it to execute transactions with your wallet.
Ask questions about real time blockchain data.
import { Nebula } from "thirdweb/ai"; const response = await Nebula.chat({ client: TEST_CLIENT, prompt: "What's the symbol of this contract: 0xe2cb0eb5147b42095c2FfA6F7ec953bb0bE347D8", context: { chains: [sepolia], }, }); console.log("chat response:", response.message);Ask it to execute transactions with your wallet.
import { Nebula } from "thirdweb/ai"; const wallet = createWallet("io.metamask"); const account = await wallet.connect({ client }); const result = await Nebula.execute({ client, prompt: "send 0.0001 ETH to vitalik.eth", account, context: { chains: [sepolia], }, }); console.log("executed transaction:", result.transactionHash);
Patch Changes
-
#5926
4b5661bThanks @MananTank! - ExporttoEventSelectorutility function from "thirdweb/utils" -
#5923
42a313fThanks @kumaryash90! - Fix deploy version for published contracts -
#5924
7fb5ce1Thanks @joaquim-verges! - Ensure resetting deploy flag on bundler errors -
#5937
0e2b3dfThanks @MananTank! - AddisValidENSNameutility function for checking if a string is a valid ENS name. It does not check if the name is actually registered, it only checks if the string is in a valid format.import { isValidENSName } from "thirdweb/utils"; isValidENSName("thirdweb.eth"); // true isValidENSName("foo.bar.com"); // true isValidENSName("foo"); // false -
#5790
e331e43Thanks @gregfromstl! - Migrated underlying functionality to Ox -
#5914
c5c6f9dThanks @MananTank! - Do not prompt user for signing message for SIWE auth in Connect UI for Ecosystem wallets
5.83.1
Patch Changes
-
#5918
5d71415Thanks @joaquim-verges! - Fix PayEmbed purchase success callback and insufficient funds displayed when no metadata is passed in -
#5915
bfc4778Thanks @jnsdls! - respect custom RPC urls passed directly
5.83.0
Minor Changes
-
#5878
70b7b5cThanks @ElasticBottle! - Add support for backend wallets.This is useful is you have a backend that is connected to an that you want to have programmatic access to a wallet without managing private keys.
Here's how you'd do it:
const wallet = inAppWallet(); const account = await wallet.connect({ strategy: "backend", client: createThirdwebClient({ secretKey: "...", }), walletSecret: "...", }); console.log("account.address", account.address);Note that
walletSecretshould be generated by you and securely stored to uniquely authenticate to the given wallet.
Patch Changes
- #5904
5e2eec3Thanks @kumaryash90! - Fix batch fetch util for marketplace-v3
5.82.0
Minor Changes
-
#5801
429e112Thanks @gregfromstl! - Feature: Adds beta support for EIP-7702 authorization listsimport { prepareTransaction, sendTransaction, signAuthorization, } from "thirdweb"; const authorization = await signAuthorization({ request: { address: "0x...", chainId: 911867, nonce: 100n, }, account: myAccount, }); const transaction = prepareTransaction({ chain: ANVIL_CHAIN, client: TEST_CLIENT, value: 100n, to: TEST_WALLET_B, authorizationList: [authorization], }); const res = await sendTransaction({ account, transaction, }); -
#5845
b058f68Thanks @gregfromstl! - Feature: AddsdeploySmartAccountfunction to force the deployment of a smart account.const account = await deploySmartAccount({ smartAccount, chain, client, accountContract, });Fix: Uses 1271 signatures if the smart account is already deployed.
5.81.0
Minor Changes
- #5829
e01193aThanks @gregfromstl! - Feature: Adds getAdminAccount to inAppWallet interface for AA ecosystem wallets
Patch Changes
-
#5837
ce3e850Thanks @kumaryash90! - Update implementations -
#5865
a9547c5Thanks @gregfromstl! - SDK: Fix chain switching in smart account transactions -
#5879
810f319Thanks @kien-ngo! - Add onTimeout callback to useAutoConnect -
#5605
e9c23adThanks @kien-ngo! - - Add onClose callback to Connect Details modal<ConnectButton detailsModal={{ onClose: (screen: string) => { // The last screen name that was being shown when user closed the modal console.log({ screen }); }, }} />- Small fix for ChainIcon: Always resolve IPFS URI
- Improve test coverage
-
#5869
273a320Thanks @gregfromstl! - SDK: Removed co.lobstr from the available wallets (an unsupported non-EVM wallet) -
#5871
1e8ddcbThanks @gregfromstl! - SDK: Gracefully ignore chain with no chain ID infromEip1193Provider
5.80.0
Minor Changes
-
#5799
90e2b97Thanks @gregfromstl! - Feature: Allows hiding the "Linked Profiles" button in theConnectButtonDetails Modal<ConnectButton detailsModal={{ manageWallet: { allowLinkingProfiles: false } }} />
Patch Changes
-
#5693
7c40fdaThanks @kumaryash90! - Custom create2 factory deployment for skale chains -
#5780
a2a61dfThanks @joaquim-verges! - Validate getContract params -
#5818
a89f766Thanks @joaquim-verges! - Only connect wallets on SIWE linking if not already connected -
#5783
e818f0eThanks @gregfromstl! - Adds Humanity Testnet as a legacy transaction chain
5.79.0
Minor Changes
- #5691
5be197bThanks @kien-ngo! - Add headless components for Wallets: WalletProvider, WalletIcon and WalletName
Patch Changes
- #5746
e42ffc6Thanks @joaquim-verges! - Fix migration to enclave in react native
5.78.0
Minor Changes
-
#5709
cd55adaThanks @gregfromstl! - Adds a defaultSmsCountryCode configuration option to In-App and Ecosystem WalletscreateWallet("inApp", { auth: { options: [ "email", "phone", ], mode: "redirect", defaultSmsCountryCode: "IN", // Default country code for SMS }, }), -
#5604
03b6d0dThanks @ElasticBottle! - Support the ability to unlink accounts for in app wallet with more than 1 linked account.It's supported out of the box in the connect UI.
For typescript users, the following code snippet is a simple example of how it'd work.
import { inAppWallet } from "thirdweb/wallets"; const wallet = inAppWallet(); wallet.connect({ strategy: "google" }); const profiles = await getProfiles({ client, }); const updatedProfiles = await unlinkProfile({ client, profileToUnlink: profiles[1], // assuming there is more than 1 profile linked to the user. });
5.77.0
Minor Changes
- #5697
f778d30Thanks @gregfromstl! - AddsgetLastAuthProviderto get the most recently used auth provider for login
Patch Changes
5.76.1
Patch Changes
-
#5688
da5d8ecThanks @joaquim-verges! - Autoconnect previously linked wallets -
#5682
5b24fafThanks @gregfromstl! - Fix ecosystem wallet AA detection in Pay modal -
#5674
8020bdbThanks @devfelipenunes! - This pull request adds the complete Portuguese (Brazil) translation for the wallet connection module. It includes translations for connecting a wallet, sending/receiving funds, network management, and other wallet-related actions. This improves the user experience for Portuguese-speaking users.
5.76.0
Minor Changes
-
#5533
43fbcacThanks @kien-ngo! - The Connected-details button now shows USD value next to the token balance.Breaking change to the AccountBalance
The formatFn props now takes in an object of type
AccountBalanceInfo. The oldformatFnwas inflexible because it only allowed you to format the balance value. With this new version, you have access to both the balance and symbol.import { AccountBalance, type AccountBalanceInfo } from "thirdweb/react"; <AccountBalance // Show the symbol in lowercase, before the balance formatFn={(props: AccountBalanceInfo) => `${props.symbol.toLowerCase()} ${props.balance}` } />;AccountBalance now supports showing the token balance in fiat value (only USD supported at the moment)
<AccountBalance showBalanceInFiat="USD" />The
formatFnprop now takes in an object of typeAccountBalanceInfoand outputs a stringimport { AccountBalance, type AccountBalanceInfo } from "thirdweb/react"; <AccountBalance formatFn={(props: AccountBalanceInfo) => `${props.balance}---${props.symbol.toLowerCase()}` } />; // Result: 11.12---ethConnectButton also supports displaying balance in fiat since it uses AccountBalance internally
<ConnectButton // Show USD value on the button detailsButton={{ showBalanceInFiat: "USD", }} // Show USD value on the modal detailsModal={{ showBalanceInFiat: "USD", }} />Export utils functions:
formatNumber: Round up a number to a certain decimal place
import { formatNumber } from "thirdweb/utils"; const value = formatNumber(12.1214141, 1); // 12.1shortenLargeNumber: Shorten the string for large value. Mainly used for the AccountBalance's
formatFnimport { shortenLargeNumber } from "thirdweb/utils"; const numStr = shortenLargeNumber(1_000_000_000);Fix to ConnectButton
The social image of the Details button now display correctly for non-square image.
Massive test coverage improvement for the Connected-button components
-
#5655
f69d1aaThanks @kien-ngo! - Improve NFT Components- Add custom resolver methods to NFTMedia, NFTName and NFTDescription
- Add caching for the NFT-info-getter method to improve performance
- Small fix to handle falsy values for NFT media src, name and description
- Improve test coverage by extracting internal logics and testing them
Patch Changes
-
#5660
d5a68c8Thanks @gregfromstl! - Fix: Correctly cleans the "Custom Auth" profile type label -
#5672
3b53732Thanks @gregfromstl! - Fix ox hardset version -
#5653
df734baThanks @joaquim-verges! - More helpful error messages for enclave and userop errors -
#5656
f680496Thanks @joaquim-verges! - Fix connecting to cb wallet browser extension when already on the same chain -
#5671
dcd5822Thanks @joaquim-verges! - Allow signature minting for LoyaltyCard contracts by passing the contractType -
#5673
c55f02fThanks @ElasticBottle! - always include gas price information even if it's 0 for enclave wallets -
#5617
c48e0c9Thanks @gregfromstl! - Fix: Disconnect smart account when account signer is disconnected -
#5668
485dcc6Thanks @joaquim-verges! - Fix add chain not triggering for certain wallets
5.75.0
Minor Changes
- #5598
16e5347Thanks @gregfromstl! - Update underlying APIs to use Ox for transaction serialization
Patch Changes
-
#5639
ed0886aThanks @jnsdls! - default account components to not retry on failure -
#5640
5070e76Thanks @jnsdls! - acceptreact 19as peer explicitly -
#5487
5574c15Thanks @joaquim-verges! - BETA support for 7579 modular smart accountsYou can now create modular smart wallets using the 7579 preset.
Keep in mind that this is in BETA, and there might be breaking API changes.
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 }), }); -
#5630
0aa2416Thanks @kien-ngo! - Add erc20Value to buyFromListing transaction -
#5641
d1716fcThanks @joaquim-verges! - Support ERC6492 for smart account signatures
5.74.0
Minor Changes
-
#5634
d1aa380Thanks @joaquim-verges! - ERC20 Token Paymaster supportYou can now use ERC20 Token Paymasters with Smart Wallets.
import { base } from "thirdweb/chains"; import { TokenPaymaster, smartWallet } from "thirdweb/wallets"; const wallet = smartWallet({ chain: base, sponsorGas: true, // only sponsor gas for the first ERC20 approval overrides: { tokenPaymaster: TokenPaymaster.BASE_USDC, }, });
Patch Changes
-
#5593
68ad62fThanks @ElasticBottle! - updatetypeingetUserProfilesto match tyepscript types -
#5621
279cb6fThanks @gregfromstl! - Feature: Propagate failed sign in error message to the UI -
#5596
c893239Thanks @ElasticBottle! - add fallback chain for ecosystem smart accounts -
#5620
13d63abThanks @gregfromstl! - Fix: Hides Sign in with Wallet button when linking a profile -
#5618
33c23e7Thanks @gregfromstl! - Fix: Removed the auth prop from useConnectModal as it is currently not supported
5.73.0
Minor Changes
-
#5457
57fa96bThanks @kien-ngo! - Add 2 new Pay functions: convertFiatToCrypto and convertCryptoToFiatExamples:
Convert fiat (USD) to crypto
import { convertFiatToCrypto } from "thirdweb/pay"; import { ethereum } from "thirdweb/chains"; // Convert 2 cents to ETH const result = await convertFiatToCrypto({ from: "USD", // the token address. For native token, use NATIVE_TOKEN_ADDRESS to: "0x...", // the chain (of the chain where the token belong to) chain: ethereum, // 2 cents fromAmount: 0.02, }); // Result: 0.0000057 (a number)Convert crypto to fiat (USD)
import { convertCryptoToFiat } from "thirdweb/pay"; // Get Ethereum price const result = convertCryptoToFiat({ fromTokenAddress: NATIVE_TOKEN_ADDRESS, to: "USD", chain: ethereum, fromAmount: 1, }); // Result: 3404.11 (number)
Patch Changes
-
#5594
b7c8854Thanks @joaquim-verges! - Support for Expo 52 and React Native 0.76 -
#5595
9b45aaeThanks @ElasticBottle! - Display error message when failing to fetch account status from endpoint outside of unauthorized requests -
#5592
c3d7b66Thanks @gregfromstl! - Properly updates active smart wallet when switching signer account on EOA wallet -
#5577
b117cb1Thanks @joaquim-verges! - Show warning when sponsorship policy rejects a transaction -
#5531
1e9a6c7Thanks @joaquim-verges! - Handle 0 value for maxPriorityFeePerGas in 712 transactions
5.72.0
Minor Changes
-
#5495
d1845f3Thanks @kien-ngo! - Add headless components: ChainProvider, ChainIcon & ChainName -
#5529
7488102Thanks @gregfromstl! - Adds LoyaltyCard extensions and support for ERC721 deployment.import { deployERC721Contract } from "thirdweb/deploys"; const loyaltyCardContractAddress = await deployERC721Contract({ chain: "your-chain-id", // replace with your chain ID client: yourThirdwebClient, // replace with your Thirdweb client instance account: yourAccount, // replace with your account details type: "LoyaltyCard", params: { name: "MyLoyaltyCard", symbol: "LOYAL", description: "A loyalty card NFT contract", image: "path/to/image.png", // replace with your image path defaultAdmin: "0xYourAdminAddress", // replace with your admin address royaltyRecipient: "0xYourRoyaltyRecipient", // replace with your royalty recipient address royaltyBps: 500n, // 5% royalty trustedForwarders: ["0xTrustedForwarderAddress"], // replace with your trusted forwarder addresses saleRecipient: "0xYourSaleRecipient", // replace with your sale recipient address platformFeeBps: 200n, // 2% platform fee platformFeeRecipient: "0xYourPlatformFeeRecipient", // replace with your platform fee recipient address }, });
Patch Changes
-
#5517
480fb4eThanks @kien-ngo! - Fix UI issue when assetTabs is set to an empty array -
#5548
9337925Thanks @joaquim-verges! - Fix tx cost estimation for pay transaction modal
5.71.0
Minor Changes
-
#5501
ac42c45Thanks @gregfromstl! - Added new deployment utility functions to help manage infrastructure contracts and initialization:getInitializeTransaction: Prepare initialization transaction for contract deploymentgetOrDeployInfraForPublishedContract: Get or deploy required infrastructure for published contracts
import { getInitializeTransaction, getOrDeployInfraForPublishedContract, } from "thirdweb"; // Get initialization transaction const initTx = await getInitializeTransaction({ client, chain, account, implementationContract, deployMetadata, initializeParams: { name: "My Contract", symbol: "CNTRCT", }, }); // Get or deploy infrastructure const infra = await getOrDeployInfraForPublishedContract({ chain, client, account, contractId: "MyContract", constructorParams: params, });
5.70.1
Patch Changes
-
#5482
b5baeaeThanks @joaquim-verges! - Expose utilities to decode errors and function data -
#5493
d9a63a6Thanks @kien-ngo! - Fix props not getting passed to TokenIcon -
#5498
6b6f617Thanks @ElasticBottle! - enable private key export for enclave wallets upon initial login
5.70.0
Minor Changes
-
#5388
901c3a1Thanks @kien-ngo! - Add headless UI component: Account (Name, Image, Address, Balance) -
#5374
0e5d120Thanks @joaquim-verges! - # Breaking changeWe are making the following changes to the NFT component to provide better performance and fine-grain control over their internal fetching logic. Moreover, you no longer have to wrap React.Suspense around said components!
Old
<NFT> <React.Suspense fallback={"Loading stuff..."}> <NFT.Media /> <NFT.Name /> <NFT.Description /> </React.Suspense> </NFT>New
The new version comes with 2 new props:
loadingComponentandfallbackComponent. Basically,loadingComponenttakes in a component and show it while the internal fetching is being donefallbackComponenttakes in a component and show it once the data is failed to be resolved<NFTProvider contract={contract} tokenId={0n}> <NFTMedia loadingComponent={<span>Loading NFT Image</span>} fallbackComponent={<span>Failed to load NFT</span>} /> <NFTDescription loadingComponent={<span>Loading NFT Description</span>} fallbackComponent={<span>Failed to load NFT Description</span>} /> </NFT>
Patch Changes
-
#5463
f368793Thanks @gregfromstl! - Fixes PayEmbed error state appearing on certain errors -
#5464
b5227c9Thanks @gregfromstl! - Adds the ability to override transaction values in createNewPack
5.69.0
Minor Changes
-
#5415
7b21f1bThanks @gregfromstl! - Adds steam auth -
#5415
7b21f1bThanks @gregfromstl! - Adds Steam as an authentication option
Patch Changes
-
#5397
895b4d1Thanks @MananTank! - Catch localStorage getItem and setItem unhandled errors -
#5440
f01de73Thanks @joaquim-verges! - Support erc6492 signature verification on zksync
5.68.0
Minor Changes
-
#5354
a1fc436Thanks @joaquim-verges! - Adds EIP1193 adapters that allow conversion between Thirdweb wallets and EIP-1193 providers:EIP1193.fromProvider(): Creates a Thirdweb wallet from any EIP-1193 compatible provider (like MetaMask, WalletConnect)EIP1193.toProvider(): Converts a Thirdweb wallet into an EIP-1193 provider that can be used with any web3 library
Key features:
- Full EIP-1193 compliance for seamless integration
- Handles account management (connect, disconnect, chain switching)
- Supports all standard Ethereum JSON-RPC methods
- Comprehensive event system for state changes
- Type-safe interfaces with full TypeScript support
Examples:
// Convert MetaMask's provider to a Thirdweb wallet const wallet = EIP1193.fromProvider({ provider: window.ethereum, walletId: "io.metamask", }); // Use like any other Thirdweb wallet const account = await wallet.connect({ client: createThirdwebClient({ clientId: "..." }), }); // Convert a Thirdweb wallet to an EIP-1193 provider const provider = EIP1193.toProvider({ wallet, chain: ethereum, client: createThirdwebClient({ clientId: "..." }), }); // Use with any EIP-1193 compatible library const accounts = await provider.request({ method: "eth_requestAccounts", }); // Listen for events provider.on("accountsChanged", (accounts) => { console.log("Active accounts:", accounts); });
Patch Changes
-
#5335
1e7e32fThanks @joaquim-verges! - Added global transaction decorator, better eip712 transaction support -
#5349
46d0b4bThanks @joaquim-verges! - Use maxFeePerGas for Pay gas cost estimations in transaction flow -
#5366
ef56304Thanks @gregfromstl! - Adds ox for internal utilities -
#5390
6771cfeThanks @ElasticBottle! - fix enclave transaction signing for transactions with 0 maxPriorityFeePerGas -
#5343
5de5418Thanks @gregfromstl! - Adds chain ID to tracked analytics
5.67.0
Minor Changes
-
#5326
f5f5ae6Thanks @gregfromstl! - Add SiteLink component for creating wallet-aware links between thirdweb-enabled sites. This component automatically adds wallet connection parameters to the target URL when a wallet is connected, enabling seamless wallet state sharing between sites.Example:
import { SiteLink } from "thirdweb/react"; function App() { return ( <SiteLink href="https://thirdweb.com" client={thirdwebClient} ecosystem={{ id: "ecosystem.thirdweb" }} > Visit thirdweb.com with connected wallet </SiteLink> ); }
Patch Changes
- #5341
1db950eThanks @joaquim-verges! - Make encryption key optional for in-app and ecosystem wallets custom auth
5.66.0
Minor Changes
-
#5298
5cc5c93Thanks @gregfromstl! - Added newSiteEmbedReact component for embedding thirdweb-supported sites with seamless wallet connection support.The component allows you to embed other thirdweb-enabled sites while maintaining wallet connection state, supporting both in-app and ecosystem wallets.
Example usage:
import { SiteEmbed } from "thirdweb/react"; <SiteEmbed src="https://thirdweb.com" client={client} ecosystem={ecosystem} />;Note: Embedded sites must include
<AutoConnect />and support frame-ancestors in their Content Security Policy.
Patch Changes
-
#5217
b633293Thanks @joaquim-verges! - Automatically migrate in-app wallets to the new enclave system -
#5315
87e736dThanks @ElasticBottle! - fix ecosystem signing with data error
5.65.2
Patch Changes
-
#5302
75cbe64Thanks @joaquim-verges! - Fix Pay UI not force switching connected wallet chain -
#5256
f98059cThanks @kien-ngo! - Optimize ERC20 transferBatch
5.65.1
Patch Changes
- #5277
58fb28dThanks @joaquim-verges! - Respect bundlerUrl in waitForUserReceipt
5.65.0
Minor Changes
-
#5126
c621c13Thanks @kien-ngo! - Allow to customize the display order of Asset tabsWhen you click on "View Assets", by default the "Tokens" tab is shown first.
If you want to show the "NFTs" tab first, change the order of the asset tabs to: ["nft", "token"]
Note: If an empty array is passed, the [View Funds] button will be hidden
<ConnectButton client={client} detailsModal={{ assetTabs: ["nft", "token"], }} />
Patch Changes
-
#5253
baf2198Thanks @joaquim-verges! - Use stringify instead of JSON.stringify in most places to handle bigint serialization -
#5272
e3c0af2Thanks @gregfromstl! - Tracks transaction chain IDs -
#5250
f40d247Thanks @joaquim-verges! - Allow smart accounts to switch chains between zk and non zk chains -
#5270
0660416Thanks @gregfromstl! - Enable configuring the analytics endpoint
5.64.5
Patch Changes
- #5246
82c8726Thanks @joaquim-verges! - Fix custom paymaster callback not being respected
5.64.4
Patch Changes
-
#5237
802d3bfThanks @joaquim-verges! - Sanitize block explorer URLs -
#5231
686d0c3Thanks @joaquim-verges! - Respect custom bundler URL for getting gas fees + better DX forpredictSmartAccountAddress() -
#5187
68ce724Thanks @ElasticBottle! - expose WalletUser type for in app / ecosystem wallets -
#5214
ad4af68Thanks @joaquim-verges! - Reduce async calls before requesting webauthn credentials for ios 15 -
#5229
9425e9eThanks @ElasticBottle! - Consolidate custom jwt and custom auth endpoint through common endpoint -
#5244
178d407Thanks @joaquim-verges! - Add support for custom singlePhase dropsIf you are using a custom drop contract, you can now set claim conditions and claim by passing the
singlePhaseDropoption to thesetClaimConditionsandclaimTofunctions.setClaimConditions({ contract, phases: [ { startTime: new Date(0), maxClaimableSupply: 10n, }, ], tokenId: 0n, singlePhaseDrop: true, // <--- for custom drop contracts });
5.64.3
Patch Changes
-
#5207
adeda1eThanks @joaquim-verges! - Handle unsupported Pay chains properly for sending paid transactions -
#5176
84571efThanks @joaquim-verges! - Redesigned Pay payment selection flow -
#5212
07ea65bThanks @joaquim-verges! - Better handling of ecosystem smart accounts
5.64.2
Patch Changes
- #5172
e8f952aThanks @joaquim-verges! - Always add URI to SIWE payload
5.64.1
Patch Changes
- #5163
158c2b6Thanks @joaquim-verges! - Respect theme accentColor for default icons in connect UI
5.64.0
Minor Changes
-
#5062
0cafa33Thanks @gregfromstl! - Adds GitHub authentication -
#5036
f8c981cThanks @kien-ngo! - Add new ERC1155 extension: mintAdditionalSupplyToBatch
Patch Changes
-
#5125
d522343Thanks @kien-ngo! - Optimize mintAdditionalSupplyToBatch extension -
#5153
47b1bbbThanks @joaquim-verges! - Enable Sign in with Wallet for ecosystems -
#5123
364d97eThanks @joaquim-verges! - Auto resolve entrypoint address from factory when available -
#5129
319a203Thanks @gregfromstl! - Fixes Brave Wallet Metadata -
#5148
2fdb69dThanks @joaquim-verges! - Optimize mintAdditionalSupplyTo -
#5091
45fcfb1Thanks @joaquim-verges! - Support smart account options for ecosystem wallets -
#5090
50f98d7Thanks @joaquim-verges! - Fix useProfiles not updating when connecting to a different account
5.63.2
Patch Changes
-
#5092
223c497Thanks @joaquim-verges! - Ensure smart accounts are deployed before validating signatures -
#5089
541bee5Thanks @joaquim-verges! - Fix useProfiles not updating when connecting to a different account
5.63.1
Patch Changes
-
#5065
b01faacThanks @MananTank! - Catch failed to post tracking errors to avoid exposing them to error report services -
#5063
ef6b4f4Thanks @MananTank! - Add reason string on abort controller'sabortmethod to avoidAbortError: signal is aborted without reasonerrors -
#5080
67a363fThanks @gregfromstl! - Fix revalidation with siwe auth in ConnectEmbed
5.63.0
Minor Changes
- #5047
3a141e7Thanks @gregfromstl! - Adds twitch auth strategy
Patch Changes
-
#5059
cb6a053Thanks @joaquim-verges! - Update default zk chains -
#5053
772604eThanks @gregfromstl! - Fix flaky auth state in PWAs
5.62.0
Minor Changes
-
#5032
3fe33a6Thanks @kien-ngo! - Add ERC1155 extension: mintToBatch -
#4992
1994d9eThanks @joaquim-verges! - Support for enclave wallet migration in React Nativethis change requires the latest version of the
@thirdweb-dev/react-native-adapterpackage to be installed.
Patch Changes
-
#5045
ec10e81Thanks @joaquim-verges! - Fix linking wallets for ecosystems -
#5009
6faf63fThanks @kien-ngo! - Fix upload logic for delayed reveal batch
5.61.6
Patch Changes
-
#4962
9685a85Thanks @kien-ngo! - Expose UnstoppableDomains extensions: namehash and reverseNameOf -
#5004
df0388dThanks @joaquim-verges! - Expose auth options onuseConnectModal -
#4961
98f358dThanks @gregfromstl! - Throw an error if an expected auth token is missing -
#5002
cd2c0f3Thanks @joaquim-verges! - Handle zk sync direct deploys indeployContract
5.61.5
Patch Changes
-
#4979
ccd4cd6Thanks @joaquim-verges! - Overestimate zksync gas limit to account for paymaster extra gas -
#4974
6a4b776Thanks @ElasticBottle! - fix: allow account linking on thirdweb dashboard -
#4977
7c10343Thanks @joaquim-verges! - Add soneiumMinato chain definition
5.61.4
Patch Changes
- #4969
3446b4cThanks @MananTank! - Remove extra text shown in Error Message in Pay UI
5.61.3
Patch Changes
- #4965
24981a7Thanks @joaquim-verges! - Respect raw accountSalt passed as hex
5.61.2
Patch Changes
- #4948
ea36c54Thanks @joaquim-verges! - Allow overriding callGasLimit for userops
5.61.1
Patch Changes
-
#4933
506764dThanks @joaquim-verges! - Support show all wallets option in React Native Connect UI -
#4944
822ece4Thanks @joaquim-verges! - Option to disable storing last stored passkey credentials
5.61.0
Minor Changes
-
#4906
63d0777Thanks @joaquim-verges! - NewuseLinkProfile()hook to link profiles to inapp and ecosystem accounts -
#4905
a453d96Thanks @kien-ngo! - Add name & address resolvers for Unstoppable Domains
Patch Changes
-
#4919
d4c423cThanks @joaquim-verges! - Fix passing 0n as from/to blocks in getContractEvents -
#4918
0f6b881Thanks @ElasticBottle! - Add querying for in app wallet user details via externally linked wallet address:import { getUser } from "thirdweb"; // this is the wallet address that the user used to connect via SIWE to their in app wallet const user = await getUser({ client, externalWalletAddress: "0x123...", });Add querying for ecosystem wallet user details:
import { getUser } from "thirdweb"; const user = await getUser({ client, ecosystem: { id: "ecosystem.YOUR_ID", partnerId: "OPTIONAL_PARTNER_ID" } email: "[email protected]", });
5.60.1
Patch Changes
-
#4884
e548675Thanks @joaquim-verges! - Switch to v2 bundler for all user operations for better performance -
#4886
985c4b0Thanks @ElasticBottle! - fix missing partner id when creating ecosystem wallet -
#4883
454f063Thanks @joaquim-verges! - Auto resolve zksync bytecode
5.60.0
Minor Changes
-
#4579
90b5495Thanks @kien-ngo! - Add Pack extensionsDeploy Pack
import { deployPackContract } from "thirdweb/extensions/deploy"; const packAddress = await deployPackContract({ account, client, chain, params: { name: "Pack contract name", symbol: "PACK1155", }, });Create a Pack
import { createPack } from "thirdweb/extensions/pack"; const transaction = createPack({ contract: packContract, client, recipient: "0x...", tokenOwner: "0x...", packMetadata: { name: "Pack #1", image: "image-of-pack-1", }, openStartTimestamp: new Date(), erc20Rewards: [ { contractAddress: "0x...", quantityPerReward: 1, totalRewards: 1, }, ], erc721Rewards: [ { contractAddress: "0x...", tokenId: 0n, }, ], erc1155Rewards: [ { contractAddress: "0x...", tokenId: 0n, quantityPerReward: 1, totalRewards: 1, }, ], });
Patch Changes
-
#4820
80729e9Thanks @MananTank! - Added "use client" directives on various client side hooks -
#4871
5d0505cThanks @edwardysun! - Add purchaseData to direct transfer pay transactions
5.59.2
Patch Changes
-
#4839
fc56142Thanks @joaquim-verges! - Fix createAndSignUserOp with multiple transactions -
#4838
842baa0Thanks @gregfromstl! - Ensure optional chains are passed to wallet connect request
5.59.1
Patch Changes
-
#4832
bbe75b0Thanks @gregfromstl! - Fixes WC connections with wallets that have limited chain support -
#4815
d0616c4Thanks @kumaryash90! - Add cronos zkevm to isZkSyncChain check -
#4823
21b032dThanks @edwardysun! - Remove unnecessary text in UI
5.59.0
Minor Changes
-
#4783
944d56fThanks @joaquim-verges! - Enable ecosystem wallets in React Native -
#4755
e02d87bThanks @joaquim-verges! - Refactor linkProfile and getProfile API
Patch Changes
-
#4568
3f83a37Thanks @kumaryash90! - Handle new zksolc metadata format -
#4809
500970eThanks @gregfromstl! - Fixes account logout state -
#4789
e384001Thanks @MananTank! - Fix whitespaces in UI components -
#4793
c0d81dcThanks @jnsdls! - add optional Headers param tofetchChain
5.58.5
Patch Changes
-
#4759
2d34771Thanks @ElasticBottle! - Fix guest account creation uniqueness -
#4763
399ba2eThanks @jnsdls! - improve error handling for 402 and 403 error codes in storage upload
5.58.4
Patch Changes
-
#4752
e9ae980Thanks @joaquim-verges! - [ReactNative] Respect icon theme color in connect button and detail modal -
#4738
a4dac95Thanks @kien-ngo! - Fix jsdoc for getClaimParams -
#4753
1133cccThanks @joaquim-verges! - Fix abi resolution fallback -
#4756
33936b3Thanks @joaquim-verges! - Handle biging serialization for ecosystem wallets -
#4687
fc2ecdfThanks @gregfromstl! - React: Hides guest accounts from linked profiles screen
5.58.3
Patch Changes
- #4740
915442eThanks @joaquim-verges! - Enable wallet linking and guest mode for ecosystem wallets
5.58.2
Patch Changes
- #4737
2707db1Thanks @joaquim-verges! - Allow linking accounts when using in-app + smart wallets
5.58.1
Patch Changes
- #4733
824b1bdThanks @gregfromstl! - Enable account linking for ecosystem wallets
5.58.0
Minor Changes
-
#4692
0a7448cThanks @gregfromstl! - Login to an in-app wallet with your Coinbase accountimport { inAppWallet } from "thirdweb/react"; const wallet = inAppWallet(); const account = await wallet.connect({ strategy: "coinbase", chain: mainnet, client: thirdwebClient, });
Patch Changes
-
#4709
b033784Thanks @gregfromstl! - Displays the social login provider in the details modal -
#4684
c1008a5Thanks @gregfromstl! - Migrates existing sharded ecosystem wallets to enclaves -
#4716
3229e1fThanks @MananTank! - ExportisGetNFTSupportedextension from "thirdweb/erc1155/extensions" -
#4715
7d547a4Thanks @joaquim-verges! - Fix showing user info for ecosystem wallets -
#4718
11a833eThanks @gregfromstl! - Improve arrangement of social icons in Connect UI
5.57.3
Patch Changes
-
#4696
0c97d79Thanks @joaquim-verges! - Fix default chain when using redirect mode + default to first passed chains if available -
#4693
4a87109Thanks @jnsdls! - fixgetClaimConditionsextension for erc20, erc721 and erc1155
5.57.2
Patch Changes
- #4686
1b89464Thanks @gregfromstl! - Force legacy transactions on polygon zkevm cardona testnet
5.57.1
Patch Changes
-
#4665
6ce7c83Thanks @joaquim-verges! - Update @mobile-wallet-protocol/client to 0.0.3 -
#4659
406de39Thanks @jnsdls! - - Allow using valid JWTs for authorization- update dependencies
- simplify updateMetadata extension params for ERC721 and ERC1155
5.57.0
Minor Changes
-
#4631
a468439Thanks @gregfromstl! - Adds guest account option. These accounts will only persist for the duration of the user's session unless they link an additionaly auth method to recover the account with.import { inAppWallet } from "thirdweb/wallets"; const wallet = inAppWallet(); const account = await wallet.connect({ client, strategy: "guest", });
Patch Changes
-
#4644
e89ffd4Thanks @kumaryash90! - Handle custom id for published contract -
#4653
00ce74aThanks @jnsdls! - make getNFTs work for more ERC1155 contracts
5.56.0
Minor Changes
-
#4607
7b94bf5Thanks @joaquim-verges! - ExposecheckModulesCompatibilityfunction -
#4601
a4a4136Thanks @joaquim-verges! -useAdminWallet()Hook + automatically auth when using inapp + smart accountsAdd
useAdminWallet()hook to get the admin wallet for a smart walletconst activeWallet = useActiveWallet(); // smart wallet const adminWallet = useAdminWallet(); // the personal wallet that controls the smart walletAutomatically auth when using inapp + smart accounts
When using auth with an inapp + smart wallet, ConnectButton and ConnectEmebed will automatically auth without having to click sign in.
-
#4604
3009a0fThanks @joaquim-verges! - Expose publishContract extension
Patch Changes
-
#4628
3961ef4Thanks @joaquim-verges! - Handle function sigantures and contract ABIs in resolveMethod -
#4602
07b949dThanks @joaquim-verges! - Allow topping up from a different wallet with the same currency -
#4639
c320b18Thanks @joaquim-verges! - Export Abi types -
#4557
fb0daabThanks @kien-ngo! - Expose some Marketplace extensions for detecting supported features -
#4630
2b6a2fdThanks @joaquim-verges! - Invalidate balances on Pay success -
#4621
5bde075Thanks @joaquim-verges! - Allow customizing PayEmbed metadata for top-up flow
5.55.0
Minor Changes
-
#4571
5058fdbThanks @gregfromstl! - Adds X authentication -
#4565
c0778cbThanks @gregfromstl! - Adds parseAvatarRecord and parseNftUri utilitiesimport { parseAvatarRecord } from "thirdweb/extensions/ens"; import { parseNftUri } from "thirdweb/extensions/common"; const avatarUrl = await parseAvatarRecord({ client, uri: "...", }); const nftUri = await parseNftUri({ client, uri: "...", });
Patch Changes
-
#4582
5d3b395Thanks @gregfromstl! - Adds the ability to hide certain wallets in the wallet switcher<ConnectButton client={client} detailsModal={{ // We hide the in-app wallet so they can't switch to it hiddenWallets: ["inApp"], }} accountAbstraction={{ chain: baseSepolia, sponsorGas: true, }} /> -
#4546
3901805Thanks @edwardysun! - Add preferredProvider to buyWithFiat
5.54.0
Minor Changes
-
#4527
b76a82cThanks @joaquim-verges! - Update React Native dependencies and add support for React Native 0.75 -
#4499
fe1ff63Thanks @joaquim-verges! - Breaking Change indeployPublishedContractContract constructor/ initializer params are now passed as a single object instead of an array. The object should have the same shape as the params defined in the contract's ABI.
Example of old way (using
constructorParamsorinitializeParams):const address = await deployPublishedContract({ account, chain, client, contractId: "Airdrop", contractParams: [TEST_ACCOUNT_A.address, ""], });New way (using
contractParams):const address = await deployPublishedContract({ account, chain, client, contractId: "Airdrop", contractParams: { defaultAdmin: TEST_ACCOUNT_A.address, contractURI: "", }, }); -
#4528
c96e2d9Thanks @joaquim-verges! - Handle salt parameter for deterministic deploys of published contractsYou can now pass a salt parameter to the
deployPublishedContractfunction to deploy a contract deterministically.const address = await deployPublishedContract({ client, chain, account, contractId: "Airdrop", contractParams: { defaultAdmin: "0x...", contractURI: "ipfs://...", }, salt: "test", // <--- deterministic deploy });This also works for unpublished contracts, via the
deployContractfunction.const address = await deployContract({ client, chain, account, bytecode: "0x...", abi: contractAbi, constructorParams: { param1: "value1", param2: 123, }, salt: "test", // <--- deterministic deploy }); -
#4541
0596fa2Thanks @gregfromstl! - Adds getUsers function to query users on the serverimport { getUser } from "thirdweb/wallets"; const user = await getUser({ client, walletAddress: "0x123...", });
Patch Changes
-
#4503
8636c28Thanks @jnsdls! - fix erc721 delayed reveal detection -
#4544
40f01e5Thanks @joaquim-verges! - Allow smart wallet transactions to be sent in parallel -
#4543
b4e1491Thanks @gregfromstl! - Display social profiles for linked accounts -
#4507
6353cb7Thanks @joaquim-verges! - Fix erc721 delayed reveal simulation error
5.53.0
Minor Changes
-
#4094
f1d087eThanks @joaquim-verges! - Support for Coinbase Smart Wallet in React NativeYou can now use the Coinbase Smart Wallet in your React Native apps.
const wallet = createWallet("com.coinbase.wallet", { appMetadata: { name: "My app name", }, mobileConfig: { callbackURL: "https://example.com", }, walletConfig: { options: "smartWalletOnly", }, }); await wallet.connect({ client, }); -
#4454
c546b65Thanks @joaquim-verges! - ExposecreateAndSignUserOputility function
Patch Changes
-
#4466
763e439Thanks @joaquim-verges! - Export thirdweb/social functions and types -
#4477
42feff3Thanks @kumaryash90! - More storage slots for proxy resolution -
#4462
f3a6179Thanks @joaquim-verges! - Fix common icons theme in React Native -
#4473
baf1a21Thanks @gregfromstl! - Updated SocialProfiles type to be SocialProfile[] -
#4478
80e0bfeThanks @gregfromstl! - Fix ERC20 balance read when showing pay modal
5.52.0
Minor Changes
-
#4349
a2d2291Thanks @gregfromstl! - Adds social profile retrieval for Farcaster, Lens, and ENS.import { getSocialProfiles } from "thirdweb/social"; const profiles = await getSocialProfiles({ address: "0x...", client, });[ { "type": "ens", "name": "joenrv.eth", "avatar": "ipfs://bafybeic2wvtpv5hpdyeuy6o77yd5fp2ndfygppd6drdxvtfd2jouijn72m", "metadata": { "name": "joenrv.eth" } }, { "type": "farcaster", "name": "joaquim", "bio": "Eng Lead @ thirdweb", "avatar": "https://lh3.googleusercontent.com/EUELPFJzdDNcc3qSaEMekh0_W16acnS8MSvWizt-7HPaQhfJsNFC5HA0W4NKcy6CN9zmV7d4Crqg2B8qM9BpiveqVTl2GPBQ16Ax2IQ", "metadata": { "fid": 2735, "bio": "Eng Lead @ thirdweb", "pfp": "https://lh3.googleusercontent.com/EUELPFJzdDNcc3qSaEMekh0_W16acnS8MSvWizt-7HPaQhfJsNFC5HA0W4NKcy6CN9zmV7d4Crqg2B8qM9BpiveqVTl2GPBQ16Ax2IQ", "username": "joaquim", "addresses": [ "0x2247d5d238d0f9d37184d8332ae0289d1ad9991b", "0xf7970369310b541b8a84086c8c1c81d3beb85e0e" ] } }, { "type": "lens", "name": "joaquim", "bio": "Lead engineer @thirdweb", "avatar": "https://ik.imagekit.io/lens/media-snapshot/557708cc7581172234133c10d473058ace362c5f547fa86cee5be2abe1478e5b.png", "metadata": { "name": "joaquim", "bio": "Lead engineer @thirdweb", "picture": "https://ik.imagekit.io/lens/media-snapshot/557708cc7581172234133c10d473058ace362c5f547fa86cee5be2abe1478e5b.png" } } ]import { useSocialProfiles } from "thirdweb/react"; const { data: profiles } = useSocialProfiles({ client, address: "0x...", }); -
#3413
87d6b6aThanks @joaquim-verges! - Support for modular contractsDeploy and Interact with modular contracts programmatically
Deploy a modular contract
import { ClaimableERC721, BatchMetadataERC721, deployModularContract, } from "thirdweb/modules"; const deployed = deployModularContract({ client, chain, account, core: "ERC721", params: { name: "My Modular NFT Contract", }, modules: [ ClaimableERC721.module({ primarySaleRecipient: ..., }), BatchMetadataERC721.module(), ], });Interact with a modular contract
import { ClaimableERC721 } from "thirdweb/modules"; const contract = getContract({ client, chain, address, }); const transaction = ClaimableERC721.mint({ contract, to: account.address, quantity: 1, }); await sendTransaction({ transaction, account, });
Patch Changes
-
#4444
9cefe5fThanks @edwardysun! - Add buyWithCrypto testMode in useSendTransaction -
#4447
f0d0f37Thanks @jnsdls! - fix baseURI extraction logic -
#4435
e7bf498Thanks @edwardysun! - Add testMode to buyWithCrypto pay options -
#4345
fa6809dThanks @kien-ngo! - Add ERC1155 getOwnedTokenIds + more tests -
#4450
775ab6dThanks @MananTank! - Add options for hiding buttons on details modal on useWalletDetailsModal -
#4443
498d543Thanks @MananTank! - Fix getFunctionId -
#4446
f39e1baThanks @gregfromstl! - Improve React Query caching performance
5.51.0
Minor Changes
-
#4392
c5b9d1cThanks @jnsdls! - [Extensions] Erc20 Drop ClaimCondition enhancements -
#4391
f9c351cThanks @jnsdls! - [Extensions] Erc721 Drop ClaimCondition enhancements -
54f0294Thanks @jnsdls! - [Extensions] Erc1155 Drop ClaimCondition enhancements
Patch Changes
-
#4393
f383fc7Thanks @kumaryash90! - resolve implementation for matic proxy implementation slot -
a098224Thanks @jnsdls! - remove unusable singlephase claim condition extension
5.50.1
Patch Changes
-
#4388
82a30afThanks @edwardysun! - Update setting default source chain and token -
#4375
edb95d0Thanks @jnsdls! - [Extensions] expose permission detection logic -
#4390
d74e61bThanks @MananTank! - Fix Swap Fees layout in fees drawer in pay UI -
#4319
73e5dc7Thanks @joaquim-verges! - Fix direct payments to the same wallet -
#4382
9e8d3e6Thanks @MananTank! - Add props for hiding "Send", "Receive" and "Send" buttons in Connect Details Modal UI forConnectButtoncomponent. By default, all buttons are visible in the modal.<ConnectButton detailsModal={{ hideSendFunds: false, hideReceiveFunds: true, hideBuyFunds: false, }} /> -
#4363
066aedeThanks @kien-ngo! - Allow to specify "from" and "to" props for the ClaimButton
5.50.0
Minor Changes
- #4334
6432e8dThanks @gregfromstl! - Adds L2 ENS name resolution
Patch Changes
-
#4270
5475551Thanks @gregfromstl! - Allow accepting a string for signature mint UIDs -
#4336
8b137f0Thanks @gregfromstl! - Hide in-app wallet connection in Pay Embed -
#4344
915e7fbThanks @kien-ngo! - Fix merkletree proof for Drop contracts -
#4343
a2f2c7eThanks @joaquim-verges! - Better error message when smart wallet connection fails due to rpc error -
#4327
bdb814dThanks @kien-ngo! - Fix nft approval for CreateDirectListingButton
5.49.0
Minor Changes
-
#4179
42d5c65Thanks @kien-ngo! - Add NFT prebuilt componentsimport { getContract } from "thirdweb"; import { NFT } from "thirdweb/react"; const contract = getContract({ address: "0x...", chain: ethereum, client: yourThirdwebClient, }); <NFT contract={contract} tokenId={0n}> <Suspense fallback={"Loading media..."}> <NFTMedia /> </Suspense> </NFT>;
Patch Changes
-
#4316
a65bb88Thanks @gregfromstl! - Include from address in in-app wallet transactions -
#4322
3e425ecThanks @gregfromstl! - Fix accessibility warnings -
#4317
1e70bbfThanks @gregfromstl! - Automatic retries for React Native in-app wallet logins -
#4306
9d6eb27Thanks @gregfromstl! - Fix programmatic deployments with smart accounts -
#4328
c97b1a5Thanks @edwardysun! - Update default source chain selection in PayEmbed
5.48.3
Patch Changes
-
#4264
b661ce7Thanks @kien-ngo! - Add extension for deploying VoteERC20 contract -
#4291
f346bb8Thanks @joaquim-verges! - ZkSync gasPubPerData increase for faster inclusion -
#4271
fcf8f89Thanks @alecananian! - Added overrides for connected wallet name and avatar in details button and modal -
#4295
db2ee85Thanks @gregfromstl! - Adds prop to require TOS or Privacy Policy acceptance before connecting to an in-app wallet -
#4106
c116597Thanks @joaquim-verges! - Support Entrypoint v0.7 for smart accounts -
#4307
dc79abdThanks @MananTank! - FixNFTMetadatatype - removeidproperty -
#4294
09bb251Thanks @ElasticBottle! - fix: ecosystem wallet signing modal should be clickable even when there's a pop up beneath -
#4286
dda57eaThanks @edwardysun! - No retries on permanent failures on Pay quotes
5.48.2
Patch Changes
-
#4250
41fbdafThanks @gregfromstl! - Add overload tosignMessageto pass an account rather than a private keyimport { signMessage } from "thirdweb/utils"; await signMessage({ message: "Hello, world!", account, }); -
#4267
7a2de70Thanks @alecananian! - AddedhideSwitchWalletparam to wallet details modal -
#4224
1405598Thanks @IDubuque! - Added support for direct transfers in Pay -
#4269
120d61fThanks @MananTank! - Show wallet balance with upto 5 decimal places in UI components -
#4274
a0aea23Thanks @gregfromstl! - Fix popup and window auth modes conflicting on firefox -
#4244
44e8e7bThanks @MananTank! - - Pay UI now selects the fiat currency based on the user's location / timezone- Add Japanese Yen (JPY) as a supported fiat currency for thirdweb Pay
- Added option to configure the default fiat currency for the Pay UI
Examples
<PayEmbed client={client} payOptions={{ buyWithFiat: { prefillSource: { currency: "CAD", }, }, }} /><ConnectButton client={client} detailsModal={{ payOptions: { buyWithFiat: { prefillSource: { currency: "JPY", }, }, }, }} />const sendTransaction = useSendTransaction({ payModal: { buyWithFiat: { prefillSource: { currency: "CAD", }, }, }, });<TransactionButton transaction={() => someTx} payModal={{ buyWithFiat: { prefillSource: { currency: "CAD", }, }, }} > some tx </TransactionButton>
5.48.1
Patch Changes
-
#4237
b38308dThanks @gregfromstl! - Enable external redirects for electron supportimport { authenticate } from "thirdweb/wallets/in-app"; const result = await authenticate({ client, strategy: "google", redirectUrl: "https://example.org", mode: "window", }); -
#4213
6c87d7bThanks @MananTank! - Fix "conditionally rendereed hooks error" in various components inthirdweb/reactandthirdweb/react-native -
#4214
0a1bce8Thanks @gregfromstl! - Fix custom image metadata on in-app wallets -
#4239
d93ec63Thanks @joaquim-verges! - Fix passkey domain not being respected on login
5.48.0
Minor Changes
-
#4191
42cdc3aThanks @gregfromstl! - Updates connect modal styles -
#4124
246701dThanks @gregfromstl! - Adds the ability to link a wallet in the Connect UI
Patch Changes
-
#4128
ef9cc55Thanks @kien-ngo! - Expose max() & min() util methods for bigints -
#4172
cb591aaThanks @joaquim-verges! - Only show pay modal if active wallet does not have enough funds for a paid transaction -
#4177
bd46699Thanks @kien-ngo! - Expsose GaslessConfigs typeconst gaslessOptions: GaslessOptions = { provider: "engine", relayerUrl: "https://thirdweb.engine-***.thirdweb.com/relayer/***", relayerForwarderAddress: "0x...", }; -
#4211
4abf7a7Thanks @MananTank! - Fix Conditionally rendered hook error when Buying funds using fiat
5.47.1
Patch Changes
-
#4173
7778063Thanks @gregfromstl! - Update Blobbie appearance -
#4154
9133b45Thanks @kien-ngo! - Update tsdocs for Vote extensions -
#4150
a43907eThanks @kien-ngo! - Lens's resolveAddress for sending crypto with lens handles -
#4163
fc8daaaThanks @kien-ngo! - Export util method: isBytes -
#4165
43f9319Thanks @kien-ngo! - Add GaslessOptions to useSendAndConfirmTransaction
5.47.0
Minor Changes
Patch Changes
-
#4120
8253524Thanks @gregfromstl! - Throw error when no encryption key is provided to custom auth -
#4159
cf4443aThanks @gregfromstl! - Improves the Blobbie algorithm -
#4126
13764f1Thanks @gregfromstl! - Connect UI cosmetic improvements -
#4157
355795aThanks @gregfromstl! - Fix text wrapping on Connect Button -
#4160
e0dcc64Thanks @gregfromstl! - Fix connect button border on firefox browser -
#4156
f0d6e34Thanks @gregfromstl! - Fix smart contract wallet signature validation on older chains
5.46.1
Patch Changes
- #4099
79260c8Thanks @WyattMufson! - Add new auth fields to support redirect in web and electron applications
5.46.0
Minor Changes
-
#4045
3c32b99Thanks @gregfromstl! - Update SIWE interfaceimport { inAppWallet, createWallet } from "thirdweb/wallets"; import { mainnet } from "thirdweb/chains"; const rabby = createWallet("io.rabby"); const wallet = inAppWallet(); const account = await wallet.connect({ client: MY_CLIENT, strategy: "wallet", wallet: rabby, chain: mainnet, }); -
#4077
ef9c7dfThanks @joaquim-verges! - Passkey login support in React Native
Patch Changes
-
#4033
141fd53Thanks @kien-ngo! - Add more Split contract extensions -
#3998
db8695dThanks @kien-ngo! - Add NFT extension: updateTokenURI -
#4101
03a809aThanks @MananTank! - AddonPurchaseSuccesscallback toPayEmbed,ConnectButton,TransactionButtonanduseSendTransactionand gets called when user completes the purchase using thirdweb pay.<PayEmbed client={client} payOptions={{ onPurchaseSuccess(info) { console.log("purchase success", info); }, }} /><ConnectButton client={client} detailsModal={{ payOptions: { onPurchaseSuccess(info) { console.log("purchase success", info); }, }, }} /><TransactionButton transaction={...} payModal={{ onPurchaseSuccess(info) { console.log("purchase success", info); }, }} > Some Transaction </TransactionButton>const sendTransaction = useSendTransaction({ payModal: { onPurchaseSuccess(info) { console.log("purchase success", info); }, }, }); -
#4047
7a68e3bThanks @gregfromstl! - Switch to the proper chain prior to signing SIWE payloads -
#4092
0ca1a79Thanks @gregfromstl! - UI cosmetic improvements -
#4091
b9ed753Thanks @MananTank! - Fix connection with Safe using WalletConnect link -
#4070
e5a046eThanks @kien-ngo! - Add contract util method:getCompilerMetadata()
5.45.1
Patch Changes
5.45.0
Minor Changes
-
#3870
bbb4f1cThanks @gregfromstl! - Adds useProfiles hook to fetch linked profiles for the current wallet.import { useProfiles } from "thirdweb/react"; const { data: profiles } = useProfiles(); console.log("Type:", profiles[0].type); // "discord" console.log("Email:", profiles[0].email); // "[email protected]" -
#3870
bbb4f1cThanks @gregfromstl! - Adds SIWE authentication on in-app walletsimport { inAppWallet } from "thirdweb/wallets"; const wallet = inAppWallet(); const account = await wallet.connect({ client, walletId: "io.metamask", chainId: 1, // can be anything unless using smart accounts });This will give you a new in-app wallet, not the injected provider wallet.
-
#3797
f74d523Thanks @gregfromstl! - Wallets can now add additional profiles to an account. Once added, any connected profile can be used to access the same wallet.const wallet = inAppWallet(); await wallet.connect({ strategy: "google" }); const profiles = await linkProfile(wallet, { strategy: "discord" });Both the Google and Discord accounts will now be linked to the same wallet.
If the Discord account is already linked to this or another wallet, this will throw an error.
You can retrieve all profiles linked to a wallet using the
getProfilesmethod.import { inAppWallet, getProfiles } from "thirdweb/wallets"; const wallet = inAppWallet(); wallet.connect({ strategy: "google" }); const profiles = getProfiles(wallet);This would return an array of profiles like this:
[ { type: "google", details: { email: "[email protected]", }, }, { type: "discord", details: { email: "[email protected]", }, }, ]; -
#3995
5367eedThanks @kien-ngo! - Add thirdweb Split contract extensions -
#3993
c31f25cThanks @kien-ngo! - Add thirdweb Vote contract extensions -
#3870
bbb4f1cThanks @gregfromstl! - Adds account linking to the Connect UI
Patch Changes
-
#4029
b0494f6Thanks @gregfromstl! - Fix SIWE auth in ecosystem wallets -
#4015
05cee23Thanks @gregfromstl! - Fix native AutoConnect -
#3997
dd7d28cThanks @gregfromstl! - Improved serializeTransaction interface to include separate signature input (maintains backwards compatibility) -
#4014
419873aThanks @kien-ngo! - Small fix for ethers5 adapter -
#3986
4d0e00aThanks @jarrodwatts! - add abstract l2 chain definition (ZKSync ZK stack) -
#4008
7cba594Thanks @MananTank! - Fix "All Wallets" not shown by default in Pay UI when trying to connect a new wallet -
#3989
a4bc285Thanks @MananTank! - Update the chain object in connection manager and wallets when chain objects passed to UI components are updated. -
#3996
2b4629bThanks @0xScratch! - Added Fraxtal and Mode Testnets to the chain-definitions -
#4032
c953c3fThanks @alecananian! - Addedenabledparam touseWalletBalancehook
5.44.1
Patch Changes
-
#3976
358a757Thanks @gregfromstl! - Fix wallet info retrieval for adapter wallets -
#3963
2e3c5e9Thanks @jnsdls! - handle switching accounts inside a connected wallet in SIWE auth states -
#3934
d7e5930Thanks @jxom! - Fix 6492 signature verification for undeployed accounts -
#3894
dc86fa2Thanks @IDubuque! - updated pay interface for onramp + gas
5.44.0
Minor Changes
-
c9e14e3Thanks @jnsdls! - Adds telegram login option for in-app walletsimport { inAppWallet } from "thirdweb"; const wallet = inAppWallet(); await wallet.connect({ strategy: "telegram", });
Patch Changes
-
c9e14e3Thanks @jnsdls! - Added Celo Alfajores Testnet within the chain-definitions -
c9e14e3Thanks @jnsdls! - Addtypefield onDirectListingandEnglishAuctiontypes.
5.43.2
Patch Changes
-
#3895
13d9741Thanks @joaquim-verges! - Add Korean and French Locale -
#3901
825ef23Thanks @joaquim-verges! - Handle gas free chains where baseFeePerGas is 0 -
#3903
306f3daThanks @gregfromstl! - Fix occasional iframe error when logging in with oauth
5.43.1
Patch Changes
-
#3896
3b49b18Thanks @gregfromstl! - Fix OTP validation in React Native Connect UI -
#3897
4463848Thanks @jnsdls! - fix "create" command requiring login
5.43.0
Minor Changes
-
#3881
e7d6161Thanks @kien-ngo! - Add CreateDirectListing button for Marketplace v3import { CreateDirectListingButton } from "thirdweb/react"; <CreateDirectListingButton contractAddress="0x..." // contract address for the marketplace-v3 chain={...} // the chain which the marketplace contract is deployed on // These props below are the same props for `createListing` // to get the full list, check the docs link above tokenId={0n} assetContractAddress="0x..." // The NFT contract address whose NFT(s) you want to sell pricePerToken={"0.1"} // sell for 0.1 <native token> > Sell NFT </CreateDirectListingButton>
Patch Changes
-
#3885
6cd279bThanks @joaquim-verges! - Fix ethers5adapter transaction result nonces -
#3871
f702cf7Thanks @jnsdls! - temporarily disable CLI login -
#3882
4171f15Thanks @MananTank! - Improved error messages when connection management hooks used outside ThirdwebProvider -
#3880
5eb4955Thanks @MananTank! - Fix autoConnect for wallets that are connected from "All wallets" screen
5.42.0
Minor Changes
-
#3847
e27ebefThanks @kien-ngo! - Add prebuilt component: BuyDirectListingButton for Marketplace v3import { BuyDirectListingButton } from "thirdweb/react"; <BuyDirectListingButton contractAddress="0x..." // contract address of the marketplace v3 chain={...} // the chain which the marketplace contract is deployed on client={...} // thirdweb client listingId={100n} // the listingId or the item you want to buy quantity={1n} // optional - see the docs to learn more > Buy NFT </BuyDirectListingButton> -
#3857
d5e5467Thanks @gregfromstl! - Adds useChainMetadata to retrieve metadata for a chain such as name, icon, available faucets, block explorers, etc.import { useChainMetadata } from "thirdweb/react"; const { data: chainMetadata } = useChainMetadata(defineChain(11155111)); console.log("Name:", chainMetadata.name); // Sepolia console.log("Faucets:", chainMetadata.faucets); // ["https://thirdweb.com/sepolia/faucet"] console.log("Explorers:", chainMetadata.explorers); // ["https://sepolia.etherscan.io/"]
Patch Changes
-
#3846
cdb2970Thanks @kien-ngo! - Handle ERC20 approval for the ClaimButton -
#3843
91edae5Thanks @kien-ngo! - Expose multicall & erc1155:encodeSafeTransferFrom extension -
#3867
109575eThanks @gregfromstl! - Fix wallet social login button styling -
#3854
7ec421fThanks @kien-ngo! - Add util function: parseAbiParamsimport { parseAbiParams } from "thirdweb/utils"; const example1 = parseAbiParams( ["address", "uint256"], ["0x.....", "1200000"], ); // result: ["0x......", 1200000n] -
#3869
bd44ce9Thanks @joaquim-verges! - Export more wallet creation and connection types
5.41.0
Minor Changes
-
#3827
b0a303dThanks @gregfromstl! - Adds SIWF for in-app walletsawait wallet.connect({ strategy: "farcaster", client: CLIENT, });
Patch Changes
-
#3831
d775333Thanks @kien-ngo! - Expose ERC20 extension: getApprovalForTransaction -
#3845
b551b69Thanks @gregfromstl! - Restyles the View Assets Connect UI page -
#3817
b128530Thanks @MananTank! - Move connection manager creation to context instead of global singleton
5.40.0
Minor Changes
-
#3750
4a4a061Thanks @joaquim-verges! - New PayEmbed modes and revamp TransactionButton flowYou can now configure the PayEmbed component to build 3 different flows:
- Buy Crypto: Inline component that allows users to buy any currency. (default)
<PayEmbed client={client} payOptions={{ mode: "fund_wallet", }} />- Direct payments: Take payments from Fiat or Crypto directly to your seller wallet.
<PayEmbed client={client} payOptions={{ mode: "direct_payment", paymentInfo: { sellerAddress: "0x...", chain: base, amount: "0.1", }, metadata: { name: "Black Hoodie (Size L)", image: "https://example.com/image.png", }, }} />- Transaction payments: Let your users pay for onchain transactions with fiat or crypto on any chain.
<PayEmbed client={client} payOptions={{ mode: "transaction", transaction: claimTo({ contract, tokenId: 0n, to: toAddress, }), metadata: nft?.metadata, }} />You can also configure the TransactionButton component to show metadata to personalize the transaction payment flow:
<TransactionButton transaction={() => { return transfer({ contract, amount: 10n, to: toAddress, }); }} payModal={{ metadata: { name: "Buy me a coffee", image: "https://example.com/image.png", }, }} /> -
#3822
3848327Thanks @gregfromstl! - Adds the ability to open OAuth windows as a redirect. This is useful for embedded applications such as telegram web apps.Be sure to include your domain in the allowlisted domains for your client ID.
import { inAppWallet } from "thirdweb/wallets"; const wallet = inAppWallet({ auth: { mode: "redirect", }, });
Patch Changes
-
#3813
6081ac7Thanks @kien-ngo! - Expose types: NFTInput and NFTMetadata -
#3815
87dc9a5Thanks @MananTank! - Allow clicking on other wallet when a wallet is connected and sign in is required inConnectEmbedcomponent.
5.39.0
Minor Changes
-
#3785
105e523Thanks @kien-ngo! - Add ClaimButton for claiming tokens from all thirdweb Drop contractsHigher level abstraction to claim tokens from all thirdweb Drop contracts
import { ClaimButton } from "thirdweb/react"; import { ethereum } from "thirdweb/chains"; <ClaimButton contractAddress="0x..." chain={ethereum} client={client} claimParams={{ type: "ERC721", quantity: 1n, }} > Claim now </ClaimButton>;
Patch Changes
-
#3792
5fabe66Thanks @MananTank! - handlenullvalue ofeffectiveGasPriceinsendTransactionmethod oftoEthersSigneradapter that throws error when trying to convert to BigNumber. This is causing issue in XDC Network (chain Id 50) and XDC Apothem testnet (chain id 51) -
#3804
cb616f7Thanks @joaquim-verges! - Fix gas estimation on arbitrum sepolia -
#3524
8599fbfThanks @kumaryash90! - Modular contracts deployment setup -
#3782
c82c524Thanks @joaquim-verges! - Allow overriding nonce for smart accounts -
#3801
a51f53fThanks @gregfromstl! - Fix RPC URL construction for chains -
#3805
5c9af85Thanks @jnsdls! - [performance] - fix rpc client reuse -
#3796
c51f785Thanks @joaquim-verges! - Handle polygon amoy gas station -
#3800
b15118aThanks @gregfromstl! - Minor style fixes on the Connect UI Send Funds page
5.38.0
Minor Changes
- #3766
9f555caThanks @kien-ngo! - Add more chains: Astria EVM Dusknet (912559), Blast Sepolia (168587773), Celo (42220), Cronos (25), Degen (666666666), Fantom Testnet (4002), Fantom (250), Frame Tesnet (68840142), Gnosis Chiado Testnet (10200), Gnosis (100), GodWoken (71402), GodWoken Testnet (71401), Hokum Testnet (20482050), Localhost (1337), Loot chain (5151706), Manta Pacific (169), Manta Pacific Testnet (3441005), Moonbeam (1284), Palm Testnet (11297108099), Palm (11297108109), Polygon zkEvm Testnet (1442), Polygon zkEVM (1101), Rari Testnet (1918988905), Rari chain (1380012617), Scroll Alpha Testnet (534353), Scroll Sepolia Testnet (534353), Scroll (534352), Xai Sepolia (37714555429), Xai Mainnet(660279), zk Candy Sepolia (302)
Patch Changes
-
#3767
11b2ad0Thanks @kien-ngo! - Expose roleMap and getRoleHash -
#3764
26d825bThanks @kien-ngo! - Add extension support for Lens Protocol -
#3779
d3c8302Thanks @gregfromstl! - Improved in-app wallet sign-in speed -
#3769
a9a3f0fThanks @gregfromstl! - Fix deterministic deploys with specified versions -
#3687
f082af0Thanks @kumaryash90! - Fix proxy resolution. Use implementation call in case of beacon.
5.37.0
Minor Changes
-
#3678
31ee4e5Thanks @ElasticBottle! - Add discord login as an option of thirdweb in app wallet and ecosystem wallet loginsimport { inAppWallet } from "thirdweb/wallets"; const wallet = inAppWallet(); const account = await wallet.connect({ client, chain, strategy: "discord", }); -
#3716
ec3405bThanks @gregfromstl! - Adds Discord login to the React Native SDK
Patch Changes
-
#3746
870be08Thanks @gregfromstl! - Update Connect UI tabs styling -
#3751
aba1266Thanks @joaquim-verges! - Handle minimum amount in buy to crypto flow -
#3762
6a94696Thanks @MananTank! - Fix Wallet switcher icon position in wallet details modal -
#3661
c6741b4Thanks @joaquim-verges! - Handle ERC20 transaction value in Pay components -
#3748
24bcee2Thanks @joaquim-verges! - Fix disconnect button color in light mode SIWE react native -
#3676
56b34ceThanks @kien-ngo! - Allow to add extra call data toprepareContractCall
5.36.0
Minor Changes
- #3718
6bda057Thanks @gregfromstl! - Adds transaction history page to connect modal UI
Patch Changes
-
#3730
db2cadfThanks @MananTank! - Update buffer calculation of transaction if gas estimation fails for Pay Modal -
#3735
6cc3038Thanks @joaquim-verges! - Add optional 'from' in readContract() -
#3719
05df89cThanks @joaquim-verges! - Add support for ERC20 paymaster for smart accounts -
#3728
0a5af48Thanks @MananTank! - Fix chain with custom RPC not used if the chain object is passed in thechainsprop toConnectButton,ConnectEmbedorPayEmbedcomponents.This also fixes dashboard not using custom chain's RPC since it passes the chain object via
chainsprop
5.35.0
Minor Changes
- #3709
73c74f1Thanks @gregfromstl! - Adds fetchProofsERCXX methods
Patch Changes
-
#3677
a3fb673Thanks @joaquim-verges! - Handle universal links on ios for coinbase wallet connection -
#3708
1a09f46Thanks @joaquim-verges! - Support auth in React Native -
#3689
6ad65e2Thanks @MananTank! - Addtypeprop forTransactionButton -
#3662
8e1a24aThanks @joaquim-verges! - Add recipient address to PayEmbed -
#3673
9f3fb7dThanks @joaquim-verges! - Fix account address override in smart wallet -
#3694
817a778Thanks @MananTank! - Fix Network Switcher only showing 1 search result -
#3681
3479117Thanks @kien-ngo! - Add Vietnamese locale for ConnectButton components -
#3707
f8f6790Thanks @gregfromstl! - Fix in-app wallet typed data signatures -
#3706
aadbd33Thanks @joaquim-verges! - Make client and chain mandatory in useWalletBalance -
#3688
7e416c0Thanks @MananTank! - Add queryOptions foruseWalletBalancehook -
#3659
eabb215Thanks @kien-ngo! - Add support for Zora1155 in ERC1155 > getOwned -
#3690
81751d3Thanks @MananTank! - Fix "add custom network" button not closing details modal -
#3685
aee7aefThanks @kien-ngo! - Export utils method: getClaimParams for thirdweb Drop contracts -
#3712
c5b9740Thanks @farhanW3! - updated getUserOpReceipt & waitForUserOpReceipt to use a decodeRevertReason flag. Updated example for createUnsignedUserOp & signUserOp. Exposed getPaymasterAndData for Paymaster -
#3704
baec85fThanks @joaquim-verges! - Fix error message not showing on reverts
5.34.3
Patch Changes
- #3657
3d14162Thanks @joaquim-verges! - Fix extension contract detection
5.34.2
Patch Changes
-
#3642
f239d09Thanks @kien-ngo! - MediaRenderer: only render video poster if it's an image -
#3656
77d7dd1Thanks @joaquim-verges! - Fix autoconnect for phone number sign in on RN -
#3655
9dd7b4dThanks @MananTank! - Ensure all wallet's account address is checksum encoded
5.34.1
Patch Changes
-
#3634
4d24208Thanks @MananTank! - Fix random behavior when connecting smart wallet where it sometimes does not add the personal wallet in the list of connected wallets -
#3637
02fff7dThanks @joaquim-verges! - Loosen react native peer dep version restriction
5.34.0
Minor Changes
-
#3613
d253badThanks @gregfromstl! - Adds verifyTypedData and verifyHash functions with full wallet interoperability -
#3619
325416eThanks @gregfromstl! - Adds blast preset -
#3585
f6ff5a7Thanks @gregfromstl! - Adds NFTs to the connect modal, specified with supportedNFTs -
#3602
21aaec8Thanks @jnsdls! - [erc20] - addedtransferBatch()extension -
#3622
95c9d3dThanks @joaquim-verges! - Expose smart wallet and bundler utilities
Patch Changes
-
#3633
636fe40Thanks @joaquim-verges! - Fix uploading files on mobile with directory -
#3621
5470dd9Thanks @MananTank! - Pay UI improvements- Only perform token amount rounding when rendering the amount - not in state
- increase the rendered decimals for token amount whereever we have enough space available in UI
- Fix "Minimum required amount" error message for Buy with fiat when token amount is so low that server calculates its value as 0 USD - which prevents calculation of minimum required token amount
- Show token symbol in Minimum required amount error message
-
#3603
342d74eThanks @jnsdls! - export JWT utils, fix naming ofdecodeJWT -
#3611
f103a90Thanks @MananTank! - Fix Transaction Button callbacks not called when tx is executed in Pay Modal -
#3630
41b9a53Thanks @MananTank! - Fix Search in Network Selector screen
5.33.0
Minor Changes
- #3609
9faa8fcThanks @gregfromstl! - Adds ERC-6942 utilities and verification compatibility. See ERC-6942 for more information.
Patch Changes
-
#3597
34b9bbeThanks @gregfromstl! - Fix wallet disconnect events not being emitted -
#3608
2ab8b3cThanks @MananTank! - Set selection data on wallet selection with no custom selection UI - This fixes UI bug in Connect wide modal that has both inApp and ecosystem wallets added
5.32.3
Patch Changes
- #3605
c261921Thanks @joaquim-verges! - Fix inapp wallet layout reset
5.32.2
Patch Changes
-
#3599
eac126bThanks @joaquim-verges! - Respect title and theme colors in react native modals -
#3590
106c013Thanks @jnsdls! - fix ethers5 adapter populateTransaction for sendTransaction -
#3600
e598f46Thanks @joaquim-verges! - Force legacy transactions on Vanguard chain -
#3591
e22b308Thanks @MananTank! - Various Pay UI improvements -
#3583
229561eThanks @joaquim-verges! - Animated connecting states for React Native -
#3576
687328aThanks @kumaryash90! - Blockscout v2 contract verification -
#3593
e0f4e5aThanks @joaquim-verges! - Fix input validation in Send Funds modal -
#3598
e5cccb9Thanks @MananTank! - Fix Send Transaction UI
5.32.1
Patch Changes
-
#3582
9651b96Thanks @joaquim-verges! - ExposewaitForUserOpReceipt()helper function -
#3397
49ae575Thanks @jnsdls! - improve loading performance for chains -
#3577
6b919e1Thanks @gregfromstl! - Show ecosystem wallet branding on wide modal layout
5.32.0
Minor Changes
-
#3570
1a2e056Thanks @joaquim-verges! - ConnectButton and ConnectEmbed components for React NativeConnectButton and ConnectEmbed components for React Native
Same behavior as the web, you can use these prebuilt components to quickly provide wallet connection flows to your users.
You can use it the same way as you would in the web, with the same supported properties and configuration flags.
import { ConnectButton } from "thirdweb/react"; <ConnectButton client={client} />and same for ConnectEmbed
import { ConnectEmbed } from "thirdweb/react"; <ConnectEmbed client={client} />
Patch Changes
-
#3574
f526d73Thanks @MananTank! - * Fix broken inApp wallet connection flow in Compact size Connect UI- Fix missing back button in inApp wallet connection flow in Compact size Connect UI
-
#3575
5953131Thanks @MananTank! - Reset wallet selection data on wallet selection -
#3569
e5f772dThanks @edwardysun! - Support localhost as a domain override option for the Pay service
5.31.1
Patch Changes
-
#3558
54c1789Thanks @gregfromstl! - Fix recommended wallet ordering -
#3562
98a9e22Thanks @gregfromstl! - Fix coinbase wallet connections on vite
5.31.0
Minor Changes
-
#3543
6704fa8Thanks @gregfromstl! - Adds the ability to override transaction properties in mintTo functions -
#3552
31775dcThanks @gregfromstl! - Adds storage unpin function -
#3533
e4b6391Thanks @gregfromstl! - Adds StoredTransaction type -
#3534
cf2d1b8Thanks @gregfromstl! - Adds shortenHex utility
Patch Changes
-
#3529
18c3d3bThanks @gregfromstl! - Do not log auto connect failure "errors" -
#3541
27daf22Thanks @gregfromstl! - Fix in-app wallet transcation execution via WalletConnect -
#3539
85f2f6dThanks @gregfromstl! - Fix WalletConnect client disconnections -
#3536
8bfba81Thanks @maciekzygmunt! - Add Linea & Linea Sepolia chain config files -
#3542
517ecffThanks @gregfromstl! - Rename Sepolia native currency symbol to ETH -
#3545
7e24260Thanks @gregfromstl! - Fix errors thrown when connecting with an open access ecosystem
5.30.0
Minor Changes
-
#3451
2244631Thanks @gregfromstl! - AddsgetTransactionStoreto retrieve a transaction store for a given address -
#3381
6429accThanks @gregfromstl! - Adds support for Dawn wallet -
#3270
b24e9b2Thanks @gregfromstl! - Adds ecosystemWallet to TS SDKUsage
import { ecosystemWallet } from "thirdweb/wallets"; const wallet = ecosystemWallet("ecosystem.hooli", { partnerId: "pied-piper", }); -
#3428
fab5cd4Thanks @jnsdls! - Adds watchAsset support in injected wallet accounts -
#3428
fab5cd4Thanks @jnsdls! - - AddpurchaseDataparameter ingetBuyWithFiatQuoteandgetBuyWithCryptoQuotefunctions and UI components to store Extra details for the purchase which can be retrieved later via the status API or Webhook- Add a required
fromAddressparameter ingetBuyWithFiatQuote
- Add a required
-
#3429
a3a4008Thanks @gregfromstl! - Adds WalletConnect disconnect screen -
#3428
fab5cd4Thanks @jnsdls! - AddedonDisconnectoption inuseWalletDetailsModal'sopenmethod to add a callback when the user disconnects the wallet by clicking the disconnect button in the wallet details modal.import { useWalletDetailsModal } from "thirdweb/react"; function Example() { const detailsModal = useWalletDetailsModal(); return ( <button onClick={() => { detailsModal.open({ client, onDisconnect: ({ wallet, account }) => { console.log("disconnected", wallet, account); }, }); }} > Show wallet details </button> ); }onDisconnectprop ofConnectButtonnow gets called with the disconnectedwalletandaccountas arguments<ConnectButton onDisconnect={({ wallet, account }) => { console.log("disconnected", wallet, account); }} /> -
#3270
b24e9b2Thanks @gregfromstl! - Adds ecosystem wallet UI
Patch Changes
-
#3444
fe77516Thanks @gregfromstl! - Adds wallet connect functions to react native -
#3428
fab5cd4Thanks @jnsdls! - Fix mobile Wallet Connect connection flow -
#3428
fab5cd4Thanks @jnsdls! - Add updateMetadata extension for Edition Drop (DropERC1155) -
#3428
fab5cd4Thanks @jnsdls! - Fix hex-based signatures for in-app wallets -
#3428
fab5cd4Thanks @jnsdls! - - Fix ConnectButton not able to connect Unknown injected wallet provider + Fix Wallet Icon + Fix AutoConnect -
#3449
eaa5093Thanks @jnsdls! - [internals] refactor context usage in connect wallet UI -
#3428
fab5cd4Thanks @jnsdls! - Fix uploadMobile function not respecting bundleId -
#3421
02a70b9Thanks @MananTank! - Pay UI improvements - Break down the complex screen into multiple screens each prompting the user for a single actionFix PayEmbed Modal title alignment
-
#3513
c330d0dThanks @gregfromstl! - resolveName returns null if no ENS exists for an address -
#3443
ea46c70Thanks @kumaryash90! - Fix EIP155 check for create2 factory deployment -
#3428
fab5cd4Thanks @jnsdls! - Fix React warning when clicking copy address button and layout shift -
#3521
16ea2bcThanks @MananTank! - Fix wallet app not opening when using ConnectButton inside an iframe -
#3465
70b31ddThanks @iamcryptofennec! - Fix error when Switching to an unknown network in wallet when connected using WaletConnectFix Network Selector not closed sometimes when Network switch is successful when connected using WalletConnect
-
#3481
8807042Thanks @kien-ngo! - Export getClaimConditionById for Drop1155 -
#3428
fab5cd4Thanks @jnsdls! - Fixed return type for useConnectModal.connect
5.29.6
Patch Changes
-
#3366
9dd1b5aThanks @joaquim-verges! - Fix sign raw message through ethers 5/6 adapters -
#3369
b808652Thanks @jnsdls! - do not consider localhost a thirdweb url (except for dev mode)
5.29.5
Patch Changes
-
#3356
2d7ebe2Thanks @joaquim-verges! - Fix ConnectButton theming prop -
#3364
7304c5bThanks @joaquim-verges! - Respect coinbase wallet create settings when preloading the provider -
#3347
a9ce10fThanks @kien-ngo! - Add ERC721 extension: updateMetadata
5.29.4
Patch Changes
- #3345
79e6a04Thanks @joaquim-verges! - Fix react native inAppWallet creation
5.29.3
Patch Changes
-
#3329
c94bcd5Thanks @joaquim-verges! - Dynamically import coinbase sdk to avoid cloudflare bundler issues -
#3341
1c533efThanks @joaquim-verges! - Fix transaction button not respecting theme prop -
#3298
ffaff74Thanks @joaquim-verges! - refactor exports to handle native vs non-native dependencies -
#3330
9cf3a1dThanks @joaquim-verges! - Fix coinbase wallet popup sometimes not opening on safari + improve inAppWallet web performance
5.29.2
Patch Changes
-
#2880
7768067Thanks @kumaryash90! - Modular contract publish and deploy setup -
#3318
fb6a07dThanks @jnsdls! - add missing erc4337 extensions
5.29.1
Patch Changes
-
#3290
b248afcThanks @alecananian! - Fixed Connect modal title not using custom title and icon in compact mode -
#3292
132b3cbThanks @alecananian! - Updated theConnectButtonlabelprop to be of typeReactNode -
#3305
e7ba698Thanks @gregfromstl! - Fix default sale and royalty recipients for signature mints
5.29.0
Minor Changes
-
#3273
7afd2daThanks @gregfromstl! - Adds options refetchInterval and retry params to useReadContract -
#3231
dbf74aaThanks @joaquim-verges! - TransactionButton react native implementation -
#3271
3a1fd98Thanks @joaquim-verges! - Align inAppWallet secret sharing implementation with web and previous RN SDK -
#3229
e7b9b9fThanks @MananTank! - AdduseWalletDetailsModalhook to open Wallet Details Modal without using<ConnectButton />componentimport { createThirdwebClient } from "thirdweb"; import { useWalletDetailsModal } from "thirdweb/react"; const client = createThirdwebClient({ clientId: "<your_client_id>", }); function Example() { const { open } = useWalletDetailsModal(); function handleClick() { open({ client, theme: "light" }); } return <button onClick={handleClick}> Show Wallet Details </button>; }
Patch Changes
-
#3278
5698b0cThanks @0xFirekeeper! - [v4 & v5] zkCandy Sepolia AA Support -
#3263
f2004b5Thanks @gregfromstl! - Add potential error message for eip155 failure -
#3266
e763aceThanks @joaquim-verges! - Fix sign typed data with inAppWallet when the domain contains a salt param -
#3264
3948f43Thanks @MananTank! - - Remove the feature that sets another connected wallet as active when disconnecting the current active wallet.- Do not save personal wallet as a separate wallet in connected wallets list.
-
#3256
923a5ecThanks @gregfromstl! - Automatic retries on watchContractEvents -
#3280
7dec4d0Thanks @MananTank! - Fix in-app wallet sending another verification code on window focus when using ConnectEmbed.Fix the underlying issue of
useAutoConnectrunning again on window focus.Add
refetchOnWindowFocus: falseon few moreuseQueryinstances to avoid unnecessary refetches -
#3235
824a631Thanks @gregfromstl! - Adds EIP-5792 hook exports to thirdweb/react -
#3241
37ec4caThanks @jnsdls! - fix ipfsresolveSchemebug for v1 ipfs schemes -
#3240
d488223Thanks @MananTank! - Fix custom theme not used in ConnectEmbed loading screen -
#3251
ce45a79Thanks @MananTank! - Allow selecting fiat currency in Pay UI
5.28.0
Minor Changes
-
#3198
ca31a6cThanks @gregfromstl! - Exports toSerializableTransaction to convert preparedTransaction into a fully serializable transaction. Exports estimateGasCost to estimate the gas cost of a transaction in ether and wei. Exports getGasPrice to get the currect gas price for a chain.toSerializableTransactionimport { prepareTransaction, toSerializableTransaction } from "thirdweb"; const transaction = await prepareTransaction({ transaction: { to: "0x...", value: 100, }, }); const serializableTransaction = await toSerializableTransaction({ transaction, }); account.sendTransaction(serializableTransaction);estimateGasCostimport { estimateGasCost } from "thirdweb"; const gasCost = await estimateGasCost({ transaction });getGasPriceimport { getGasPrice } from "thirdweb"; const gasPrice = await getGasPrice({ client, chain });
Patch Changes
-
#3207
e7443edThanks @MananTank! - Fixes #3204 - Account methods not properly updated when account is changed in wallet -
#3226
58d14c9Thanks @joaquim-verges! - Add option to choose the contract type for erc1155/generateMintSignature -
#3227
043f0daThanks @joaquim-verges! - Better gas estimation for opBNB mainnet & testnet -
#3201
0328bc8Thanks @joaquim-verges! - Fallback to default metadata on failure to fetch erc20 metadata
5.27.0
Minor Changes
-
#3181
a346111Thanks @gregfromstl! - Adds headless functions for creating and managing a WalletConnect session with a connected walletcreateWalletConnectClientimport { createWalletConnectClient } from "thirdweb/wallets/wallet-connect"; createWalletConnectClient({ client: client, wallet: wallet, onConnect: (session: any) => { alert("Connected"); }, onDisconnect: (session: any) => { alert("Disconnected"); }, });createWalletConnectSessionimport { createWalletConnectSession } from "thirdweb/wallets/wallet-connect"; createWalletConnectSession({ walletConnectClient: wcClient, uri: "wc:...", });getWalletConnectSessionsimport { getWalletConnectSession, type WalletConnectSession, } from "thirdweb/wallets/wallet-connect"; const sessions: WalletConnectSession[] = await getWalletConnectSessions();disconnectWalletConnectClientimport { disconnectWalletConnectClient } from "thirdweb/wallets/wallet-connect"; disconnectWalletConnectClient({ session, walletConnectClient: wcClient }); -
#3105
51e7adaThanks @joaquim-verges! - First party support for zkSync native account abstractionYou can now use smart accounts on zkSync and zkSync sepolia without any extra setup.
const wallet = smartWallet({ chain: zkSync, sponsorGas: true, }); const smartAccount = await wallet.connect({ client, personalAccount, }); // now your can perform transactions normally, gas will be sponsored sendTransaction({ transaction, account: smartAccount }); -
#3105
51e7adaThanks @joaquim-verges! - ZkSync transaction support
Patch Changes
- #3195
3f66945Thanks @gregfromstl! - FixestimateGastype resolution
5.26.0
Minor Changes
-
#3161
b569eb4Thanks @gregfromstl! - Adds waitForBundle function to await a sendCalls bundle's complete confirmation.Usage
import { waitForBundle } from "thirdweb/wallets/eip5792"; const result = await waitForBundle({ client, chain, wallet, bundleId: "0x123...", }); -
#3161
b569eb4Thanks @gregfromstl! - Adds EIP-5792 react hooksuseSendCallsuseSendCallswill automatically revalidate all reads from contracts that are interacted with.import { useSendCalls } from "thirdweb/react"; const sendTx1 = approve({ contract: USDT_CONTRACT, amount: 100, spender: "0x33d9B8BEfE81027E2C859EDc84F5636cbb202Ed6", }); const sendTx2 = approve({ contract: USDT_CONTRACT, amount: 100, spender: "0x2a4f24F935Eb178e3e7BA9B53A5Ee6d8407C0709", }); const { mutate: sendCalls, data: bundleId } = useSendCalls({ client }); await sendCalls({ wallet, client, calls: [sendTx1, sendTx2], });Await the bundle's full confirmation:
const { mutate: sendCalls, data: bundleId } = useSendCalls({ client, waitForResult: true, }); await sendCalls({ wallet, client, calls: [sendTx1, sendTx2], });Sponsor transactions with a paymaster:
const { mutate: sendCalls, data: bundleId } = useSendCalls(); await sendCalls({ client, calls: [sendTx1, sendTx2], capabilities: { paymasterService: { url: `https://${CHAIN.id}.bundler.thirdweb.com/${client.clientId}`, }, }, });useCapabilitiesimport { useCapabilities } from "thirdweb/react"; const { data: capabilities, isLoading } = useCapabilities();useCallsStatusimport { useCallsStatus } from "thirdweb/react"; const { data: status, isLoading } = useCallsStatus({ bundleId, client });
Patch Changes
-
#3178
3dca028Thanks @joaquim-verges! - Fix gas estimation in transaction button -
#3187
874747bThanks @joaquim-verges! - Upgrade to latest coinbase wallet sdk -
#3186
123275bThanks @gregfromstl! - Catch any errors thrown while polling block numbers
5.25.1
Patch Changes
- #3169
f8cad77Thanks @joaquim-verges! - Mark coinbase mobile wallet as optional dep
5.25.0
Minor Changes
-
#3140
fc1b658Thanks @gregfromstl! - Show in-app wallet users an option to export their private key. Enabled by default.Usage
To hide the private key export:
import { inAppWallet } from "thirdweb/wallets"; const wallet = inAppWallet({ hidePrivateKeyExport: true, }); -
#3154
99d11bbThanks @gregfromstl! - Adds the ability to copy the wallet connect connection link as an alternative to scanning the QR code -
#3150
9c417d9Thanks @gregfromstl! - Adds onDisconnect callback to connect buttonUsage
<ConnectButton client={THIRDWEB_CLIENT} onDisconnect={() => console.log("disconnect")} theme={theme === "light" ? "light" : "dark"} />
Patch Changes
-
#3162
b9b185bThanks @joaquim-verges! - Add support for CB wallet in react native -
#3151
8b606b5Thanks @joaquim-verges! - Better handling for multiple accounts connected -
#3144
c1d3a5aThanks @joaquim-verges! - Fix resolveScheme for native apps -
#3153
3b03cd0Thanks @gregfromstl! - Improve the copy on the pending connection QR code screen in the connect modal
5.24.0
Minor Changes
-
#2943
2774d1fThanks @MananTank! - AddeduseConnectModalhook.Add
useConnectModalhook that allows you to open the Connect UI in a Modal to prompt the user to connect wallet.import { createThirdwebClient } from "thirdweb"; import { useConnectModal } from "thirdweb/react"; const client = createThirdwebClient({ clientId: "<your_client_id>", }); function Example() { const { connect, isConnecting } = useConnectModal(); async function handleConnect() { const wallet = await connect({ client }); // opens the connect modal console.log("connected to", wallet); } return <button onClick={handleConnect}> Connect </button>; } -
#3127
5031e44Thanks @gregfromstl! - Adds contract extensions for delayed reveal NFTs -
#3118
546d2dbThanks @gregfromstl! - Adds React Native to the thirdweb create CLI -
#3126
764bce2Thanks @joaquim-verges! - WalletConnect in React Native + useAutoConnect hookSupport WalletConnect compatible wallets in React Native
You can now connect any of the 300+ WalletConnect compatible mobile wallets from react native.
import { useConnect } from "thirdweb/react"; import { createWallet } from "thirdweb/wallets"; const { connect, isConnecting } = useConnect(); const connectMetamask = async () => { await connect(async () => { const wallet = createWallet("io.metamask"); await wallet.connect({ client, chain, }); return wallet; }); };Exposed
useAutoConnecthookYou can now use a hook to trigger autoconnecting to the last connected wallet
import { useAutoConnect } from "thirdweb/react"; const { data: autoConnected, isLoading } = useAutoConnect({ client, accountAbstraction, wallets, onConnect, timeout, }); -
#3125
c3a92bfThanks @gregfromstl! - AddeduseWalletBalance()hookAdds the
useWalletBalancehook. The hook will default to the native token balance if notokenAddressis provided.Usage
import { useWalletBalance } from "thirdweb/react"; const { data, isLoading, isError } = useWalletBalance({ chain: walletChain, tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", address: activeAccount?.address, client, });
Patch Changes
-
#3143
b72daa4Thanks @joaquim-verges! - Expose useWalletBalance in react native -
#3136
8b3e1e2Thanks @MananTank! - Prefer native wallet app link in android as well for WalletConnect session -
#3139
4eda306Thanks @gregfromstl! - Converts chainId hex to number for proper signTypedData type -
#3104
d021f4eThanks @MananTank! - Fix WalletConnect connection and show Retry option on connection failure/rejection
5.23.0
Minor Changes
-
#3103
a2275c4Thanks @gregfromstl! - Addsunstyledprop toTransactionButtonto remove default styles<TransactionButton transaction={() => {}} onSuccess={handleSuccess} onError={handleError} unstyled className="bg-white text-black rounded-md p-4 flex items-center justify-center" > Confirm Transaction </TransactionButton> -
#3083
5994685Thanks @MananTank! - Add support for deep-linking to Metamask app instead of using WalletConnect on mobile devices when using Connect UI (ConnectButton/ConnectEmbed) components.<ConnectButton client={client} wallets={[ createWallet("io.metamask", { preferDeepLink: true, }), ]} /> -
#3064
f55fa4cThanks @joaquim-verges! - In-app wallet support for react native
Patch Changes
-
#3085
a22eb5cThanks @MananTank! - FixonConnectprop called twice when connecting inApp wallet using Social login -
#3071
da63eabThanks @gregfromstl! - Fully clear in-app wallet user data when disconnecting -
#3063
f49f8caThanks @jnsdls! - ethers6 adapter: allow optional account to be passed tocontract.toEthersthat will automatically hook up the contract with a signer instead of provider -
#3079
f8e0a50Thanks @MananTank! - Fix PayEmbed not passing theme to ConnectButton -
#3107
57f7cd5Thanks @MananTank! - - Fix spacing issues in UI components- Revert color changes in UI components
-
#3067
b46173fThanks @gregfromstl! - Fix TransactionButton styles when overriding with custom styles -
#3080
7abbe03Thanks @MananTank! - Improved OTP input using input-otp library -
#3110
49aa6e4Thanks @joaquim-verges! - Phone number sign in for React Native -
#3082
9c9969eThanks @MananTank! - Add switch account button inConnectButtondetails button for MetaMask injected provider
5.22.1
Patch Changes
-
#3059
5a40c6aThanks @jnsdls! - fix losing state when looking at transactions during pay -
#3058
1698c40Thanks @gregfromstl! - Fixes MediaRenderer flashing its failed state while loading
5.22.0
Minor Changes
-
#3001
726618bThanks @gregfromstl! - Adds basic EIP-5792 support for wallets with functionsgetCapabilities,sendCalls,showCallsStatus,getCallsStatus.Example Usage
getCapabilitiesReturns the capabilities of the wallet according to EIP-5792.
import { getCapabilities } from "thirdweb/wallets/eip5792"; const capabilities = await getCapabilities({ wallet });sendCallsSends the given calls to the wallet for execution, and attempts to fallback to normal execution if the wallet does not support EIP-5792.
import { sendCalls } from "thirdweb/wallets/eip5792"; const transfer1 = transfer({ contract: USDC_CONTRACT, amount: 5000, to: "0x33d9B8BEfE81027E2C859EDc84F5636cbb202Ed6", }); const transfer2 = transfer({ contract: USDT_CONTRACT, amount: 1000, to: "0x33d9B8BEfE81027E2C859EDc84F5636cbb202Ed6", }); const bundleId = await sendCalls({ wallet, client, calls: [transfer1, transfer2], });showCallsStatusRequests the wallet to show the status of a given bundle ID.
import { showCallsStatus } from "thirdweb/wallets/eip5792"; await showCallsStatus({ wallet, bundleId });getCallsStatusReturns the status of the given bundle ID and the transaction receipts if completed.
import { getCallsStatus } from "thirdweb/wallets/eip5792"; const status = await getCallsStatus({ wallet, bundleId });
Patch Changes
-
#3048
cfe60d2Thanks @kien-ngo! - Improve error message forresolveAbiFromBytecode -
#3040
ce45475Thanks @gregfromstl! - Fixes caching issue when usingdefineChain -
#3037
f006429Thanks @joaquim-verges! - Updates for react native compatibility
5.21.0
Minor Changes
-
#3034
99fa2daThanks @gregfromstl! - Adds the ability to set a custom logo for the social login modalimport { inAppWallet } from "thirdweb/wallets"; const wallet = inAppWallet({ metadata: { image: { src: "https://example.com/logo.png", alt: "My logo", width: 100, height: 100, }, }, });
Patch Changes
5.20.0
Minor Changes
-
#2912
9caa9d7Thanks @joaquim-verges! - Updated Connect Modal UI + Passkey support- Passkey is now an auth option for
inAppWallet - Connect UI component UI refresh
const wallet = inAppWallet(); const hasPasskey = await hasStoredPasskey(client); await wallet.connect({ client, strategy: "passkey", type: hasPasskey ? "sign-in" : "sign-up", }); - Passkey is now an auth option for
-
#3018
5083464Thanks @gregfromstl! - Adds support for Core wallet extension
Patch Changes
-
#3024
eb29adfThanks @kien-ngo! - Add BSC mainnet and testnet -
#3004
145ff48Thanks @gregfromstl! - Updates shortenAddress to accept a string -
#3027
c08a5f2Thanks @gregfromstl! - Fixes chain metadata overrides
5.19.1
Patch Changes
- #3005
0006e54Thanks @joaquim-verges! - - useSendTransaction now switches chain if needed- Fix chain switching with in-app smart accounts
- Fix tx simulation for pay modal
5.19.0
Minor Changes
-
#2995
523cd1eThanks @gregfromstl! - Adds shortenAddress util -
#2997
cf7b6fcThanks @joaquim-verges! - addedcreateWalletAdapterhelper for interop with diff libraries
Patch Changes
- #3000
0ab1407Thanks @MananTank! - Fix WalletImage fallback icon
5.18.1
Patch Changes
5.18.0
Minor Changes
-
#2985
55081d8Thanks @jnsdls! - ### "Credit Card" payment method added in thirdweb Pay for Fiat on-rampPayEmbedcomponent added to embed thirdweb Pay UI<PayEmbed client={client} style={{ width: "360px", }} />thirdweb Pay UI customization available in
PayEmbedandConnectButtonpayOptionsprop inPayEmbedandConnectButton > detailsModalallows you custimize :- Enable/Disable payment methods
- Set default amount for Buy token
- Set Buy token/chain to be selected by default
- Set Source token/chain to be selected by default for Crypto payment method
- Disable editing for Buy token/chain/amount and Source token/chain
<ConnectButton client={client} detailsModal={{ payOptions: yourOptions, }} /> <PayEmbed client={client} detailsModal={{ payOptions: yourOptions, }} />Fiat on-ramp functions and hooks added
getBuyWithFiatQuote,useBuyWithFiatQuoteto get a quote for buying crypto with fiat currencygetBuyWithFiatStatus,useBuyWithFiatStatusto get status of "Buy with fiat" transactiongetBuyWithFiatHistory,useBuyWithFiatHistoryto get "Buy with fiat" transaction historygetPostOnRampQuote,usePostOnRampQuoteto get quote for swapping on-ramp token to destination token after doing on-ramp- Add
getBuyHistoryanduseBuyHistoryto get both "Buy with Fiat" and "Buy with Crypto" transaction history in a single list
5.17.0
Minor Changes
-
#2931
24c1670Thanks @joaquim-verges! - NewsmartAccountprop forinAppWallet()You can now convert an inAppWallet to a smart account simply by passing the
smartAccountprop.const wallet = inAppWallet({ smartAccount: { chain: sepolia, sponsorGas: true, }, }); await wallet.connect({ client, strategy: "google", });Note: beware that when toggling this flag on and off, you will get a different address (admin EOA vs smart account).
Patch Changes
-
#2959
3377fc9Thanks @MananTank! - Fix custom details button not opening the details modal inConnectButton -
#2955
fd1bd7eThanks @kien-ngo! - Add resolve method for Arweave URIs -
#2950
d4808fdThanks @gregfromstl! - Export getUserPhoneNumber and getAuthenticatedUser in-app wallet functions -
#2972
b1ca05eThanks @gregfromstl! - Fix issue with nonce set to 0 on toSerializableTransaction -
#2966
4de8802Thanks @gregfromstl! - Fixes issue with contract compilation in hardhat -
#2962
5b6b241Thanks @gregfromstl! - Makes multiple bugfixes on the deployPublishedContract code path- Contracts with no constructor can now deploy as abi inputs defaults to
[]when encoding the parameters - Properly finds contract versions when specified
- Defaults to standard deployment if no deployType is specified
- Contracts with no constructor can now deploy as abi inputs defaults to
-
#2965
ae10776Thanks @kien-ngo! - Add Arweave URI support to -
#2969
d660b6cThanks @gregfromstl! - Fixes deterministic deploys of contracts with no constructor -
#2958
02a0ca9Thanks @gregfromstl! - Fixes inconsistent block numbers when fetching events.getContractEventswill now properly handleblockRangeinteraction withfromBlockandtoBlockgiven they are both inclusive (i.e. it will only return logs for the number of blocks specified inblockRange).
5.16.1
Patch Changes
-
#2936
a692154Thanks @MananTank! - Fix OTP input entered by by clicking on “from messages” option in iOS safari -
#2934
bdb919fThanks @gregfromstl! - Updates the CLIcreatecommand to use the v5 templates for Next.js and ViteOther templates will be updated in the future from within their existing repositories
Removes React Native starters from the CLI menu Removes JS template support from the CLI
-
#2941
795a59eThanks @gregfromstl! - Can now optionally specifyblockRangeongetContractEventsin combination withtoBlockandfromBlock.Usage
Specify a
blockRange, defaultingtoBlockto the current block number.await getContractEvents({ contract: myContract, blockRange: 123456n, events: [preparedEvent, preparedEvent2], });Specify a block range with
toBlock.await getContractEvents({ contract: myContract, toBlock: endBlock, blockRange: 123456n, events: [preparedEvent, preparedEvent2], });Specify a block range starting from
fromBlock(great for pagination).await getContractEvents({ contract: myContract, fromBlock: lastBlockFetched, blockRange: 123456n, events: [preparedEvent, preparedEvent2], }); -
#2945
b64c8e7Thanks @gregfromstl! - Removes deprecated template options from the CLI, specifically PWA Vite, Express, and React -
#2951
49d4494Thanks @gregfromstl! - Increase gas on MarketplaceV3 writes -
#2948
44680c6Thanks @gregfromstl! - Adds extraGas override to transactions. Useful when gas estimates are faulty or to ensure a transaction goes through.Usage
const transaction = prepareTransaction({ to: "0x1234567890123456789012345678901234567890", chain: ethereum, client: thirdwebClient, value: toWei("1.0"), gasPrice: 30n, extraGas: 50_000n, }); -
#2932
86105c9Thanks @gregfromstl! - TransactionButton throws error on reverted transaction -
#2946
ec149f3Thanks @gregfromstl! - Read RPC url from viem chain in viem chain adapter -
#2928
cea736cThanks @gregfromstl! - Filters invalid listings and auctions from marketplace -
#2949
0e19911Thanks @kien-ngo! - Docs update: fix typos and add code snippet -
#2944
82e8911Thanks @joaquim-verges! - Show auth provider icon in connect UI when connected to in app wallet -
#2933
8e0a3ceThanks @MananTank! - ### Integrate Pay Modal with TransactionButtonBy default, the Pay Modal is integrated with the
TransactionButtoncomponent. If the user performs a transaction and does not have enough funds to execute it and if thirdweb Payments is available for that blockchain, the Pay Modal will be displayed to allow user to buy the required amount of tokensA new prop
payModalis added to theTransactionButtoncomponent customize the Pay Modal UI or disable it entirelyExample: Disable Pay Modal
<TransactionButton payModal={false}> Example 1 </TransactionButton>Example: Customize Pay Modal UI
<TransactionButton payModal={{ theme: "light", }} > Example 2 </TransactionButton>Disable Pay Modal for certain configurations in
useSendTransactionhookIf
useSendTransactionhook is passedgasless: trueconfiguration or if current active wallet is a smart wallet withsponsorGas: trueconfiguration - the Pay Modal will be disabled -
#2929
9f817cfThanks @joaquim-verges! - Tweaked connected modal UI layout
5.16.0
Minor Changes
-
#2917
5b0c37aThanks @joaquim-verges! - Factory address is now optional inaccountAbstractionandsmartWalletoptions.- Defaults to a global permissionless factory deployed on all chains.
- Also enables switching chains for smart wallets, as long as the factory is deployed
-
#2915
664082eThanks @joaquim-verges! - NewprepareDeterministicDeployTransactionextension for deploying published contracts with the same address on multiple chains -
#2921
d77b6f6Thanks @gregfromstl! - Adds the 'use client' directive to all client-only components -
#2919
47de345Thanks @jnsdls! - Add support for several additional wallets
Patch Changes
-
#2914
24a3ee4Thanks @joaquim-verges! - Fix legacy transactions with in-app wallets -
#2913
5525a0eThanks @gregfromstl! - Filter invalid auctions in getAllAuctions -
#2911
35acbcdThanks @gregfromstl! - Updates mintWithSignature return types to properly parse
5.15.0
Minor Changes
-
#2875
7882b22Thanks @joaquim-verges! - Support for Coinbase Smart Wallet -
#2898
88886acThanks @gregfromstl! - Adds overrides to extension functions
Patch Changes
-
#2906
75e66b1Thanks @joaquim-verges! - Fix signTypedData external verification for smart accounts -
#2897
f916d7aThanks @gregfromstl! - Fixes TransactionButton loading state layout shift -
#2905
9a031bbThanks @joaquim-verges! - Bump timeout for userOps receipts to 2mins -
#2899
e6fce1fThanks @gregfromstl! - Fixes useContractEvents duplicating events
5.14.0
Minor Changes
- #2869
fa4bd43Thanks @gregfromstl! - Adds the disabled prop to TransactionButton component
Patch Changes
-
#2881
7f4caf0Thanks @kien-ngo! - Fix nonce value for ethers5 adapter -
#2874
d2aead4Thanks @kien-ngo! - Docs: update incorrect code snippet for viem adapter -
#2882
bfdfc23Thanks @gregfromstl! - Better error message for failed smart wallet connections -
#2879
597900bThanks @MananTank! - - Add onConnect prop onAutoConnectcomponent- Call the
onConnectcallback passed toConnectButtonandConnectEmbedwhen wallet is auto-connected
- Call the
-
#2866
62c799dThanks @MananTank! - Fix exception on passing chain with unknown chainId to ConnectButton -
#2872
99298b3Thanks @joaquim-verges! - Add optionaliconinChainOptionswhen defining a chain -
#2867
674fcc7Thanks @gregfromstl! - Fixes single phase drop compatibility across erc20, erc721, and erc1155 contracts -
#2883
48e6427Thanks @gregfromstl! - Improve docs for verifySignature -
#2870
8ae8e6aThanks @gregfromstl! - Fix TransactionButton layout shift while loading
5.13.0
Minor Changes
- #2853
56c139cThanks @joaquim-verges! - Add account abstraction options touseConnectand handle smart wallet autoconnection outside of UI components
Patch Changes
-
#2859
03d8d6cThanks @jnsdls! - addgaslessprop to<TransactionButton /> -
#2861
5b83353Thanks @kumaryash90! - Export airdrop extensions -
#2857
77c2a8aThanks @kien-ngo! - Docs: update incorrect code snippets, fix typos
5.12.0
Minor Changes
-
#2841
2ae9a13Thanks @kumaryash90! - SDK V5 extension for new Airdrop contract.
Patch Changes
-
#2848
41be954Thanks @jnsdls! - addcelochains to knownop stackchains -
#2850
aa0b8c4Thanks @MananTank! - Fix "All wallets" UI in Connect- Remove duplicated entry for "inApp"
- Remove wallets specified by developer
5.11.0
Minor Changes
-
#2679
560d8adThanks @ElasticBottle! - Add support for connecting in-app wallet using phone numberUsage in TypeScript
import { createThirdwebClient, createWallet } from "thirdweb"; import { preAuthenticate } from "thirdweb/wallets/in-app"; const client = createThirdwebClient({ clientId: "..." }); const phoneNumber = '+123456789'; // Send OTP to given phone number async function sendOTP() { await preAuthenticate({ strategy: "phone", phoneNumber, client, }); } async function connect() { // create a in-app wallet instance const wallet = createWallet('inApp'); // if the OTP is correct, the wallet will be connected else an error will be thrown const account = await wallet.connect({ client, strategy: "phone"; phoneNumber, verificationCode: '...' // Pass the OTP entered by the user }); console.log('connected to', account); }Usage in React
import { createThirdwebClient } from "thirdweb"; import { preAuthenticate } from "thirdweb/wallets/in-app"; import { useConnect } from "thirdweb/react"; const client = createThirdwebClient({ clientId: "..." }); function Component() { const { connect } = useConnect(); const [phoneNumber, setPhoneNumber] = useState(''); // get phone number from user const [otp, setOtp] = useState(''); // get OTP from user // Send OTP to given phone number async function sendOTP() { await preAuthenticate({ strategy: "phone", phoneNumber, client, }); } async function connect() { // create a in-app wallet instance const wallet = createWallet('inApp'); // if the OTP is correct, the wallet will be connected else an error will be thrown await wallet.connect({ client, strategy: "phone"; phoneNumber, verificationCode: otp }); // set the wallet as active connect(wallet) } // render UI to get OTP and phone number from user return <div> ... </div> } -
#2818
948f155Thanks @jnsdls! - Gasless transactions in Typescriptimport { sendTransaction } from "thirdweb"; const result = sendTransaction({ transaction, account, gasless: { provider: "engine", relayerUrl: "https://...", relayerForwarderAddress: "0x...", }, });Gasless transactions in React
import { useSendTransaction } from "thirdweb/react"; const { mutate } = useSendTransaction({ gasless: { provider: "engine", relayerUrl: "https://...", relayerForwarderAddress: "0x...", }, }); // Call mutate with the transaction object mutate(transaction);
Patch Changes
-
#2842
d7e6671Thanks @joaquim-verges! - fix: handle signature minting with price and currency -
#2839
3be61ddThanks @MananTank! - Enable Buy Modal by default with useSendTransaction hook -
#2768
cfff7e8Thanks @MananTank! - Fix custom chain not being used
5.10.1
Patch Changes
5.10.0
Minor Changes
Patch Changes
-
#2834
be85410Thanks @joaquim-verges! - fix: erc1155 sigmint with additional supply -
#2831
38f3b2eThanks @MananTank! - Fix In-App + Smart wallet Connection issue
5.9.0
Minor Changes
-
#2793
4dbcbd1Thanks @jnsdls! - thirdweb/reactAdd a new optional
authprop to<ConnectButton />to allow specifying a SIWE auth flow after users connect their wallets.<ConnectButton client={client} auth={{ isLoggedIn: async (address) => { // check if the user is logged in by calling your server, etc. // then return a boolean value return true || false; }, getLoginPayload: async ({ address, chainId }) => { // send the address (and optional chainId) to your server to generate the login payload for the user to sign // you can use the `generatePayload` function from `thirdweb/auth` to generate the payload // once you have retrieved the payload return it from this function return; // <the login payload here> }, doLogin: async (loginParams) => { // send the login params to your server where you can validate them using the `verifyPayload` function // from `thirdweb/auth` // you can then set a cookie or return a token to save in local storage, etc // `isLoggedIn` will automatically get called again after this function resolves }, doLogout: async () => { // do anything you need to do such as clearing cookies, etc when the user should be logged out // `isLoggedIn` will automatically get called again after this function resolves }, }} />
Patch Changes
5.8.0
Minor Changes
-
#2806
94e354aThanks @jnsdls! - ImplementOffersin the Marketplace extensions, available viathirdweb/extensions/marketplace. -
#2814
bebcf46Thanks @jnsdls! - Add support for updating metadata for ERC1155 contracts -
#2811
1b2bfc8Thanks @joaquim-verges! - Added ERC1155 and ERC20 signature mint extensions
Patch Changes
- #2815
381b669Thanks @joaquim-verges! - Fix query invalidation when using react hooks
5.7.0
Minor Changes
-
#2803
a54c745Thanks @jnsdls! - Added new extensions for "English Auctions" inthirdweb/extensions/marketplacemodule:bidInAuctioncancelAuctionbuyoutAuctioncollectAuctionPayoutcollectAuctionTokensexecuteSale
-
#2767
300e4c8Thanks @MananTank! - Open "Pay Modal" UI when sending transaction using theuseSendTransactionhook if the user does not have enough funds to execute the transaction to prompt the user to buy tokensuseSendTransactionnow takes an optionalconfigoption to customize the "Pay Modal" UIconst sendTransaction = useSendTransaction({ payModal: { locale: "en_US", theme: "light", }, });You may also explicitly disable the "Pay Modal" UI by setting the
payModaloption tofalseconst sendTransaction = useSendTransaction({ payModal: false, }); -
#2788
f5abbe8Thanks @joaquim-verges! - AddeddeployPublishedContract
Patch Changes
-
#2795
7c17892Thanks @joaquim-verges! - Fix claiming drops with prices and no allowlists -
#2799
37bd0e4Thanks @jnsdls! - fixnpx thirdwebon windows whenthirdwebis installed locally
5.6.0
Minor Changes
-
#2760
8197b3cThanks @gregfromstl! - Adds serializeTransaction and updates sign return object to include yParity -
#2766
65e4ddcThanks @joaquim-verges! - Added ERC721 extensions:- claimTo with allowlist support
- lazyMint
- setClaimConditions
-
#2771
df338f5Thanks @jnsdls! - Added ERC20 extensions:- claimTo with allowlist support
- setClaimConditions
-
#2757
9d46fceThanks @jnsdls! - add extensions for contract roles in thethirdweb/extensions/permissionsnamespace
Patch Changes
- #2761
a18fc8eThanks @MananTank! - Connect UI context code cleanup
5.5.0
Minor Changes
-
#2752
39c6fbcThanks @jnsdls! - addconcatHexutility function -
#2744
db05717Thanks @joaquim-verges! - Added 1155 extensions:claimTowith allowlist supportlazyMintsetClaimConditions
-
#2749
eb919edThanks @jnsdls! - - storage:uploadnow returns a singleuriwhen a single file is passed to thefilesarray.- extensions: added suport for
royalty,platformFeeandprimarySaleextensions
- extensions: added suport for
Patch Changes
-
#2748
007770cThanks @MananTank! - - Show ENS name and avatar in ConnectButton's Details Modal- Add wallet ID alias
"embedded"for"inApp"to avoid breaking change
createWallet("embedded"); // supported but deprecated createWallet("inApp"); // recommended - Add wallet ID alias
-
#2759
07f98a5Thanks @MananTank! - - Improved Swap UI in ConnectButton Details Modal- Prevent Modal from closing when clicking on "Switch Network" in the Swap UI
- Fix wrong network name shown in Transaction History
-
#2756
e6b5d9cThanks @jnsdls! - improveresolveSchemereliability and handle cases wheregetNFTfor ERC1155 was breaking on missingtotalSupplymethod -
#2678
9453f74Thanks @kumaryash90! - Custom gas settings for any evm deployments
5.4.2
Patch Changes
- #2579
d836889Thanks @ElasticBottle! - ExportresolvePromisedValuefromthirdweb/utils
5.4.1
Patch Changes
- #2741
900e7d0Thanks @MananTank! - Remove duplicated entry for MetaMask in MM browser
5.4.0
Minor Changes
-
#2736
3847617Thanks @gregfromstl! - Adds fromGwei unit converter -
#2735
d9cd6f5Thanks @jnsdls! - added extension support for: Marketplace, ERC1155, ERC721 -
#2711
14cecc9Thanks @joaquim-verges! - ExportuseSendBatchTransaction()for smart accounts
Patch Changes
-
#2731
1d4fdd6Thanks @jnsdls! - exportChainMetadatatype fromthirdweb/chains -
#2712
02583f8Thanks @jnsdls! - fixwatchBlockNumberpolling when fully unsubscribing and later re-subscribing
5.3.1
Patch Changes
5.3.0
Minor Changes
- #2697
c2eba49Thanks @joaquim-verges! - DeprecateembeddedWalletin favor ofinAppWallet(same functionality)
Patch Changes
-
#2689
740a675Thanks @jnsdls! - ---Marketplace Extensions
Added initial support for the Marketplace extensions, available via the
thirdweb/extensions/marketplacemodule.Direct Listings
Write
createListing
Read
totalListingsgetListinggetAllListingsgetAllValidListings
Events
buyerApprovedForListingEventcancelledListingEventcurrencyApprovedForListingEventnewListingEventnewSaleEventupdatedListingEvent
English Auctions
Write
createAuction
Read
totalAuctionsgetAuctiongetAllAuctionsgetAllValidAuctions
Events
auctionClosedEventcancelledAuctionEventnewAuctionEventnewBidEvent
Types
DirectListingEnglishAuction
ERC721 Extensions
- Added
isERC721to thethirdweb/extensions/erc721module.
ERC1155 Extensions
- Added
isERC1155to thethirdweb/extensions/erc1155module.
-
#2700
f709f13Thanks @jnsdls! - ENS: add support forresolveName(),resolveAvatar()andresolveText() -
#2686
a2423caThanks @MananTank! - AddmodalSizeprop onConnectEmbedto allow"wide"modal size. -
#2684
4504a8dThanks @MananTank! - Fix sourcemap warnings in CRA -
#2677
0e479e2Thanks @farhanW3! - added 50k overhead to userOp gas estimations
5.2.0
Minor Changes
-
#2667
44d9630Thanks @joaquim-verges! - API update for ethers5 and ethers5 adapters:- Now all adapter functions take a singular object
- ethers5: fixed adapted signer not containing a provider by default
- ethers5: added support for sign typed data
-
#2674
97a31f5Thanks @joaquim-verges! - AdduseSendAndConfirmTransactionhook
Patch Changes
-
#2666
127c476Thanks @gregfromstl! - fix getAddresses for accounts converted to viem -
#2637
367576cThanks @MananTank! - - Always start a new session when callingwallet.connectfor WalletConnect- Fix JSDoc for
useConnectedWallets - Add
accountsChangedevent back toWallet wallet.disconnectmethod cleanups
- Fix JSDoc for
5.1.1
Patch Changes
-
#2636
c508751Thanks @joaquim-verges! - Optimie encode by caching asyncParams -
#2662
e4d243eThanks @jnsdls! - fixsendTransactionwithinviemAdapter.walletClient.toViem()
5.1.0
Minor Changes
- #2602
3aaad1eThanks @gregfromstl! - Adds generateAccount function for generating a random local account
Patch Changes
-
#2525
7234e6bThanks @gregfromstl! - Better private-key account support -
#2626
e806393Thanks @jnsdls! - fix wallet connect uri parsing -
#2632
d89f009Thanks @MananTank! - Various Improvements for wallet connection- change
accountsChangedevent toaccountChangedevent and emit newAccountobject instead of creating it in the connection manager - WalletConnect connection improvements
- change
-
#2610
213f313Thanks @dependabot! - build(deps): bump viem from 2.9.5 to 2.9.6 -
#2606
0394eb2Thanks @joaquim-verges! - Add ERC4337 extensions -
#2631
1c29556Thanks @joaquim-verges! - Get userOp prices from bundler
5.0.3
Patch Changes
-
#2595
dd1141fThanks @MananTank! - Do not subscribe tosession_request_sentevent when usingwalletConnectbecause that is already handled when connecting with official Modal -
#2591
6d63920Thanks @MananTank! - AddwalletConnect, fix WC connection issues -
#2588
eba8f1cThanks @joaquim-verges! - Fix 721/1155 claimTo
5.0.2
Patch Changes
-
#2585
052892bThanks @MananTank! - Fix wallet not opened on WC sessions request event on page reload on mobile -
#2587
6063f40Thanks @jnsdls! - [CLI] - fix execution on windows and when prettier is not installed
5.0.1
Patch Changes
-
#2572
701cd88Thanks @jnsdls! - point CLI backwards compatibility @latest instead of @beta -
#2576
04961f0Thanks @joaquim-verges! - Change getWalletBalance prop from account to address
5.0.0
Major Changes
-
#2356
01fd523Thanks @jnsdls! - Initial release of v5 of the thirdweb SDK.For more information please refer to the documentation and the migration guide.
Patch Changes
- #2566
c63d9eaThanks @kumaryash90! - Verification status in progress