From 0bfd28aefd6e6fbe33cd58c9882c76d1de1cd232 Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Mon, 21 Jul 2025 16:57:33 -0700 Subject: [PATCH 1/6] fix: remove /connect wildcard redirects --- apps/portal/redirects.mjs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/apps/portal/redirects.mjs b/apps/portal/redirects.mjs index 3043d115abc..947966ba20a 100644 --- a/apps/portal/redirects.mjs +++ b/apps/portal/redirects.mjs @@ -1016,11 +1016,7 @@ const otherRedirects = { "/unity/wallets/providers/account-abstraction", "/wallet/get-started/overview": "/connect/wallet/overview", // connect > wallets - "/connect/:path*": "/wallets/:path*", - "/connect/wallet/:path*": "/wallets/:path*", - "/connect/auth/:path*": "/wallets/auth/:path*", - "/connect/connect/:path*": "/wallets/connect/:path*", - "/connect/embedded-wallet/:path*": "/wallets/embedded-wallet/:path*", + "/connect": "/wallets", "/connect/wallet/sign-in-methods/configure": "/wallets/users", "/connect/wallet/server": "/wallets/server", "/connect/account-abstraction/get-started": "/wallets/sponsor-gas", From e07c268dc7a1c894da53bc2391501b5b842aba20 Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Mon, 21 Jul 2025 17:16:18 -0700 Subject: [PATCH 2/6] chore: update link styles --- apps/portal/src/app/Header.tsx | 2 +- apps/portal/src/app/bundler/layout.tsx | 15 + apps/portal/src/app/bundler/page.mdx | 490 ++++++++++++++++++ apps/portal/src/app/page.tsx | 2 +- apps/portal/src/app/payments/send/page.mdx | 7 +- .../src/components/Document/DocLink.tsx | 2 +- .../src/components/Layouts/DocLayout.tsx | 28 +- 7 files changed, 528 insertions(+), 18 deletions(-) create mode 100644 apps/portal/src/app/bundler/layout.tsx create mode 100644 apps/portal/src/app/bundler/page.mdx diff --git a/apps/portal/src/app/Header.tsx b/apps/portal/src/app/Header.tsx index d2aaa509e22..89b2cd5dfad 100644 --- a/apps/portal/src/app/Header.tsx +++ b/apps/portal/src/app/Header.tsx @@ -136,7 +136,7 @@ const apisLinks = [ name: "Payments", }, { - href: "/connect/account-abstraction/api", + href: "/bundler", name: "Bundler", }, ]; diff --git a/apps/portal/src/app/bundler/layout.tsx b/apps/portal/src/app/bundler/layout.tsx new file mode 100644 index 00000000000..af2950cbda9 --- /dev/null +++ b/apps/portal/src/app/bundler/layout.tsx @@ -0,0 +1,15 @@ +import { DocLayout } from "@/components/Layouts/DocLayout"; + +export default async function Layout(props: { children: React.ReactNode }) { + return ( + + {props.children} + + ); +} diff --git a/apps/portal/src/app/bundler/page.mdx b/apps/portal/src/app/bundler/page.mdx new file mode 100644 index 00000000000..c4506badbaf --- /dev/null +++ b/apps/portal/src/app/bundler/page.mdx @@ -0,0 +1,490 @@ +# Thirdweb Bundler - API Reference + +The Thirdweb Bundler is a service that provides Account Abstraction (ERC-4337 and EIP-7702) bundler functionality with integrated paymaster services, zkSync chains support, and EIP-7702 transaction delegation. + +## Table of Contents + +- [Url format](#url-format) +- [Authentication](#authentication) +- [Request Format](#request-format) +- [Paymaster Methods](#paymaster-methods) +- [User Operation Methods](#user-operation-methods) +- [Gas Price Methods](#gas-price-methods) +- [Status and Tracking Methods](#status-and-tracking-methods) +- [zkSync-Specific Methods](#zksync-specific-methods) +- [EIP-7702 Methods](#eip-7702-methods) +- [Standard ERC-4337 Methods](#standard-erc-4337-methods) +- [Error Responses](#error-responses) +- [Policy Enforcement](#policy-enforcement) + +## Url format + +- **Chain Parameter**: the chain id is always specified in the subdomain (e.g., `.bundler.thirdweb.com`) +- **Version Parameter**: the version is specified in the path, we recommend using `/v2` + +``` +https://.bundler.thirdweb.com/v2 +``` + +## Authentication + +All requests require authentication via: + +- **Client ID**: Provided as `X-Client-Id: ` header - used for frontend authentication +- **Secret Key**: Provided as `X-Secret-Key: ` header - used for backend authentication + +## Request Format + +All RPC requests follow the JSON-RPC 2.0 specification: + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "method": "", + "params": [...] +} +``` + +## Paymaster Methods + +### `pm_sponsorUserOperation` + +**Purpose**: Sponsors a user operation by providing paymaster data to cover gas costs. + +**Parameters**: + +```json +[ + { + "sender": "0x...", // Address of the smart account + "nonce": "0x...", // Nonce for the operation + "initCode": "0x...", // Account initialization code (if needed) + "callData": "0x...", // The call data to execute + "callGasLimit": "0x...", // Gas limit for the call + "verificationGasLimit": "0x...", // Gas limit for verification + "preVerificationGas": "0x...", // Pre-verification gas + "maxFeePerGas": "0x...", // Maximum fee per gas + "maxPriorityFeePerGas": "0x...", // Maximum priority fee per gas + "paymasterAndData": "0x...", // Paymaster data (EntryPoint v0.6) + // OR for EntryPoint v0.7: + "paymaster": "0x...", // Paymaster address + "paymasterData": "0x...", // Paymaster data + "paymasterVerificationGasLimit": "0x...", + "paymasterPostOpGasLimit": "0x..." + }, + "0x...", // Entry point address + "0x...", // Chain ID (hex) +] +``` + +**Response**: + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": { + "paymaster": "0x...", // Paymaster address + "paymasterData": "0x...", // Paymaster data + "paymasterAndData": "0x..." // Combined paymaster data (v0.6) + } +} +``` + +### `pm_getPaymasterData` + +**Purpose**: Gets paymaster data for sponsoring a user operation (functionally equivalent to `pm_sponsorUserOperation`). + +**Parameters**: Same as `pm_sponsorUserOperation` +**Response**: Same as `pm_sponsorUserOperation` + +### `pm_getPaymasterStubData` + +**Purpose**: Gets stub paymaster data for gas estimation purposes without actual sponsorship. + +**Parameters**: Same as `pm_sponsorUserOperation` +**Response**: Similar to `pm_sponsorUserOperation` but with placeholder data for estimation. + +### `pm_getAcceptedPaymentTokens` + +**Purpose**: Returns the list of tokens accepted for gas payments by the paymaster. + +**Parameters**: `[]` + +**Response**: + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": { + "acceptedTokens": [] + } +} +``` + +## User Operation Methods + +### `eth_estimateUserOperationGas` + +**Purpose**: Estimates gas limits required for a user operation. + +**Parameters**: + +```json +[ + { + "sender": "0x...", // Smart account address + "nonce": "0x...", // Account nonce + "initCode": "0x...", // Initialization code (if deploying) + "callData": "0x...", // Transaction call data + "maxFeePerGas": "0x...", // Maximum fee per gas + "maxPriorityFeePerGas": "0x..." // Maximum priority fee + }, + "0x...", // Entry point address + {} // State overrides (optional) +] +``` + +**Response**: + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": { + "preVerificationGas": "0x...", // Pre-verification gas + "verificationGasLimit": "0x...", // Verification gas limit + "callGasLimit": "0x...", // Call gas limit + // For EntryPoint v0.7: + "paymasterVerificationGasLimit": "0x...", + "paymasterPostOpGasLimit": "0x..." + } +} +``` + +### `eth_sendUserOperation` + +**Purpose**: Submits a user operation to the bundler for execution on-chain. + +**Parameters**: Same format as the user operation object used in other methods. + +**Response**: + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": "0x..." // User operation hash +} +``` + +## Gas Price Methods + +### `thirdweb_getUserOperationGasPrice` + +**Purpose**: Gets current gas prices optimized for user operations. + +**Parameters**: `[]` + +**Response**: + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": { + "maxFeePerGas": "0x...", // Recommended max fee per gas + "maxPriorityFeePerGas": "0x..." // Recommended priority fee + } +} +``` + +## Status and Tracking Methods + +### `thirdweb_getUserOperationStatus` + +**Purpose**: Gets the current status of a submitted user operation. + +**Parameters**: + +```json +["0x..."] // User operation hash (hex string) +``` + +**Response**: + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": { + "status": "not_found|not_submitted|submitted|rejected|included|failed|queued", + "transactionHash": "0x..." // Transaction hash (null if not yet included) + } +} +``` + +**Status Values**: + +- `not_found`: User operation not found +- `not_submitted`: Not yet submitted to mempool +- `submitted`: Submitted to mempool +- `rejected`: Rejected by bundler +- `included`: Successfully included in a block +- `failed`: Transaction failed on-chain +- `queued`: Queued for processing + +## zkSync-Specific Methods + +### `zk_paymasterData` + +**Purpose**: Gets paymaster data for zkSync chains to enable gasless transactions. + +**Parameters**: + +```json +[ + { + "nonce": "0x...", // Transaction nonce + "from": "0x...", // Sender address + "to": "0x...", // Recipient address + "gas": "0x...", // Gas limit + "gasPrice": "0x...", // Gas price + "value": "0x...", // ETH value to send + "data": "0x...", // Transaction data + "maxFeePerGas": "0x...", // EIP-1559 max fee + "maxPriorityFeePerGas": "0x...", // EIP-1559 priority fee + "chainId": "0x..." // Chain ID + } +] +``` + +**Response**: + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": { + "paymaster": "0x...", // Paymaster contract address + "paymasterInput": "0x..." // Encoded paymaster input data + } +} +``` + +### `zk_broadcastTransaction` + +**Purpose**: Broadcasts a signed transaction on zkSync chains. + +**Parameters**: + +```json +[ + { + "nonce": "0x...", + "from": "0x...", + "to": "0x...", + "gas": "0x...", + "gasPrice": "0x...", + "value": "0x...", + "data": "0x...", + "maxFeePerGas": "0x...", + "maxPriorityFeePerGas": "0x...", + "chainId": "0x...", + "signedTransaction": "0x..." // Raw signed transaction bytes + } +] +``` + +**Response**: + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": "0x..." // Transaction hash +} +``` + +## EIP-7702 Methods + +### `tw_execute` + +**Purpose**: Executes transactions using EIP-7702 (Account Abstraction via Authorization Lists). This enables EOAs to temporarily act as smart contracts. + +**Parameters**: + +```json +[ + "0x...", // EOA address that will execute the calls + { + "calls": [ + { + "target": "0x...", // Contract address to call + "value": "0x...", // ETH value to send (hex) + "data": "0x..." // Call data + } + // ... more calls + ], + "uid": "0x..." // Unique identifier for the batch (bytes32) + }, + "0x...", // Signature authorizing the execution + { + // Authorization list (optional) + "chainId": 1, + "address": "0x...", + "nonce": "0x...", + "yParity": 0, + "r": "0x...", + "s": "0x..." + } +] +``` + +**Response**: + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": { + "queueId": "..." // Queue ID for tracking the transaction + } +} +``` + +### `tw_getTransactionHash` + +**Purpose**: Gets the transaction hash for a queued EIP-7702 transaction. + +**Parameters**: + +```json +["queue_id"] // Queue ID returned from tw_execute +``` + +**Response**: + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": { + "transactionHash": "0x..." // Transaction hash (null if not yet mined) + } +} +``` + +## Standard ERC-4337 Methods + +The service supports all the standard ERC-4337 bundler methods: + +- `eth_chainId` - Returns the current chain ID +- `eth_getUserOperationByHash` - Retrieves user operation by hash +- `eth_getUserOperationReceipt` - Gets the receipt for a user operation +- `eth_supportedEntryPoints` - Lists supported EntryPoint contracts +- Any other standard bundler RPC methods defined in ERC-4337 + +## Error Responses + +All methods may return error responses following the JSON-RPC 2.0 error format: + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "error": { + "code": 400, + "message": "Detailed error description" + } +} +``` + +### Common Error Codes + +- **400**: Invalid parameters, malformed request, or unsupported chain +- **401**: Invalid authentication credentials or insufficient permissions +- **500**: Internal server error +- **502**: Upstream bundler provider error + +### Example Error Scenarios + +```json +// Invalid chain +{ + "error": "Invalid chain: unsupported_chain", + "chain": "unsupported_chain", + "code": 400 +} + +// Mainnet access denied +{ + "error": "Mainnets not enabled for this account, please enable billing...", + "code": 401 +} + +// Invalid user operation hash +{ + "error": "Invalid userOpHash parameter", + "code": 400 +} +``` + +## Policy Enforcement + +Paymaster methods support policy-based access control. When a transaction is subject to policy evaluation: + +### Policy Check Process + +1. The system evaluates paymaster requests against configured policies +2. Policies can restrict based on: + - Contract addresses being called + - Transaction data + - Gas limits + - Sender addresses + - Custom endpoint logic + +### Policy Rejection Response + +If a request is rejected by policy, the response format is: + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": { + "policyId": "policy_123", // ID of the policy that rejected the request + "reason": "Transaction rejected by policy: Unauthorized contract call" + } +} +``` + +### Affected Methods + +Policy enforcement applies to: + +- `pm_sponsorUserOperation` +- `pm_getPaymasterData` +- `zk_paymasterData` + +## Rate Limits and Quotas + +- Rate limits may apply based on your billing plan +- Mainnet access requires billing information +- Testnet access is available on free plans + +## Supported Networks + +For the most up-to-date list of supported chains, check the [thirdweb dashboard](https://thirdweb.com/dashboard). + +## SDK Integration + +For easier integration, consider using the thirdweb SDKs: + +- [JavaScript/TypeScript SDK](/typescript) +- [React SDK](/react) +- [Unity SDK](/unity) +- [Dotnet SDK](/dotnet) +- [Unreal Engine SDK](/unreal) diff --git a/apps/portal/src/app/page.tsx b/apps/portal/src/app/page.tsx index 8d90dffc9e2..0ece28fb5e5 100644 --- a/apps/portal/src/app/page.tsx +++ b/apps/portal/src/app/page.tsx @@ -133,7 +133,7 @@ function ReferenceSection() { title="Wallets" /> diff --git a/apps/portal/src/app/payments/send/page.mdx b/apps/portal/src/app/payments/send/page.mdx index fc6d22eca0e..96907225acb 100644 --- a/apps/portal/src/app/payments/send/page.mdx +++ b/apps/portal/src/app/payments/send/page.mdx @@ -272,10 +272,9 @@ Send a payment between users using any combination of chains or tokens. thirdweb ## Going further -- [Other auth strategies](/connect/wallet/sign-in-methods/configure) -- [Sponsor Gas](/connect/account-abstraction/overview) -- [Implement Sign In with Ethereum](/connect/auth) -- [External Wallets](/connect/wallet/sign-in-methods/external-wallets) (e.g. MetaMask, WalletConnect, Coinbase Wallet, etc.) +- [Sell a Product](/payments/products) +- [Token Prices](/payments/tokens) +- [Routes](/payments/routes) ## Explore API References diff --git a/apps/portal/src/components/Document/DocLink.tsx b/apps/portal/src/components/Document/DocLink.tsx index 037ae71e929..f7a402c9861 100644 --- a/apps/portal/src/components/Document/DocLink.tsx +++ b/apps/portal/src/components/Document/DocLink.tsx @@ -10,7 +10,7 @@ export function DocLink(props: { return ( 0 + ? props.showTableOfContents !== false + ? "xl:grid-cols-[220px_720px_1fr]" + : "xl:grid-cols-[220px_1160px]" + : props.showTableOfContents !== false + ? "xl:grid-cols-[960px_1fr]" + : "", )} style={{ minHeight: "calc(100vh - var(--sticky-top-height))", }} > - + {props.sideBar.links.length > 0 && ( + + )}
From 2bdb92a06dbaa28b6a6d9fd1f36caf43cb9ff831 Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Mon, 21 Jul 2025 17:26:21 -0700 Subject: [PATCH 3/6] feat: adds payments faq --- apps/portal/src/app/payments/faq/page.mdx | 126 ++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 apps/portal/src/app/payments/faq/page.mdx diff --git a/apps/portal/src/app/payments/faq/page.mdx b/apps/portal/src/app/payments/faq/page.mdx new file mode 100644 index 00000000000..b748d948cde --- /dev/null +++ b/apps/portal/src/app/payments/faq/page.mdx @@ -0,0 +1,126 @@ +import { createMetadata, Details } from "@doc"; + +export const metadata = createMetadata({ + image: { + title: "thirdweb Payments - FAQs", + icon: "thirdweb", + }, + title: "thirdweb Payments - FAQs - thirdweb", + description: "thirdweb Payments - Frequently Asked Questions", +}); + +# FAQs + +
+thirdweb does not charge any fees for buy with fiat. Any fees on onramping are based on the onramp provider. +
+ +
+For buying with crypto or swap fees, thirdweb charges a 0.3% protocol fee. Developers may monetize their application by charging additional fees on swap transactions. To set a fee in your project page, navigate to Payments > Settings to set this fee. +
+ +
+Network fees, also referred to as miner fees, are paid to the miner for processing crypto transactions and securing the respective network. These fees do not go to thirdweb. +
+ +
+Payments is an asset router that combines thirdweb's own onchain infrastructure with existing bridging and swapping protocols to find the optimal route for any given transaction. +This can include intents, native bridges, third party bridges, cross-chain messaging protocols, thirdweb's custom bridges, and more. All routes are monitored and planned continuously for +health, price, and speed to guarantee the best path every time. +
+ +
+Payments is able to support most token that meet the following criteria: + +- The token must have sufficient liquidity +- The token must be on a [supported Payments Chain](https://thirdweb.com/chainlist?service=pay). + +To request support for a token, please visit the Payments tab in your project dashboard > Settings > "Don't see your token listed?" component and fill out the chain and token address information. + +Payments will automatically kick off the token route discovery process. Please check back the Payments modal after 20-40 minutes for the requested token. +
+ +
+Yes, Payments is designed to be agnostic to wallet infrastructure. You can use it with any wallet service. +
+ +
+Apple Pay and Google Pay are supported through the onramp providers depending on region. Coinbase, Stripe, and Transak currently support Apple Pay. Transak supports Google Pay. [Learn more about the supported onramp providers.](/connect/pay/onramp-providers). +
+ +
+Onramp options all require minimal KYC. This is done to comply with local regulations and to ensure the safety of our users. +Please note: onramping with Coinbase does not require KYC for a purchase below $500 with debit card. +
+ +
+We currently require a $1 minimum purchase for both stablecoin and non-stablecoin purchases through Buy With Fiat. + +Our transaction maximum starts from $1500 per week for new users and can increase over time to $10,000 per week. +
+ +
+**Buy With Fiat** is available 160+ countries. The following countries are _UNSUPPORTED_: + +- Afghanistan +- Africa (All Countries) +- Belarus +- Bolivia +- China +- Cuba +- Colombia +- Haiti +- Honduras +- Iran +- Iraq +- Latvia +- Lebanon +- Myanmar +- Pakistan +- Qatar +- Russia +- Ukraine +- United Arab Emirates +- Venezuela +- Yemen + +All United States are supported, excluding Hawaii. +
+ +
+We offer direct onramping **internationally** to the following tokens: + +- Mainnet (Ethereum) +- Avalanche +- Polygon + +We offer direct onramping to the following tokens in the **US only**: + +- ETH (Base)\* +- USDC (Ethereum) +- USDC (Polygon)\* +- USDC (Avalanche)\* +- USDC (Base)\* + +All other tokens will require an additional Buy With Crypto step. + +\* Not available in New York or the EU. +
+ +
+Users will be required to complete KYC verification for their first purchase using 'Buy with Fiat.' After that, no further KYC will be needed for future purchases on the same platform. +
+ +
+Payments can support any currency on our [supported chains](https://thirdweb.com/chainlist?service=pay). +
+ +
+Prices are set depending on the liquidity provider used to route your transaction. +
+ +
+Fiat payouts are not currently available. +
+ + From 109659a6aa7227bd961791bc8d2357bcaa6b6e7f Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Mon, 21 Jul 2025 20:35:12 -0700 Subject: [PATCH 4/6] fix: broken links --- apps/portal/src/app/Header.tsx | 2 +- .../TDoc/utils/getSidebarLinkgroups.ts | 8 +-- apps/portal/src/app/wallets/faq/page.mdx | 6 +- .../src/app/wallets/link-profiles/page.mdx | 2 +- apps/portal/src/app/wallets/page.mdx | 8 +-- apps/portal/src/components/others/Sidebar.tsx | 2 +- packages/thirdweb/scripts/typedoc.mjs | 1 + packages/thirdweb/src/bridge/Webhook.ts | 2 +- pnpm-lock.yaml | 58 +++++++++++++++---- 9 files changed, 60 insertions(+), 29 deletions(-) diff --git a/apps/portal/src/app/Header.tsx b/apps/portal/src/app/Header.tsx index 89b2cd5dfad..cb1290960dd 100644 --- a/apps/portal/src/app/Header.tsx +++ b/apps/portal/src/app/Header.tsx @@ -265,7 +265,7 @@ export function Header() { {links.map((link) => { return (
  • { setShowBurgerMenu(false); diff --git a/apps/portal/src/app/references/components/TDoc/utils/getSidebarLinkgroups.ts b/apps/portal/src/app/references/components/TDoc/utils/getSidebarLinkgroups.ts index 7fc05bb004f..8350ca208d4 100644 --- a/apps/portal/src/app/references/components/TDoc/utils/getSidebarLinkgroups.ts +++ b/apps/portal/src/app/references/components/TDoc/utils/getSidebarLinkgroups.ts @@ -258,12 +258,10 @@ export function getSidebarLinkGroups(doc: TransformedDoc, path: string) { const bridgeGroups = bridge.reduce( (acc, d) => { const [, moduleName] = getCustomTag(d) || []; - if (moduleName) { - if (!acc[moduleName]) { - acc[moduleName] = []; - } - acc[moduleName]?.push(d); + if (!acc[moduleName ?? "common"]) { + acc[moduleName ?? "common"] = []; } + acc[moduleName ?? "common"]?.push(d); return acc; }, {} as Record, diff --git a/apps/portal/src/app/wallets/faq/page.mdx b/apps/portal/src/app/wallets/faq/page.mdx index 4166c38e32d..d7de9dc11f3 100644 --- a/apps/portal/src/app/wallets/faq/page.mdx +++ b/apps/portal/src/app/wallets/faq/page.mdx @@ -39,10 +39,6 @@ Yes, you can easily use account abstraction with in-app wallets to enable sponso Thirdweb wallets can be used as a signer to a smart contract account (account abstraction), but it can also be used as a standalone EOA. -### Is there a way to display the logged-in email address in the Wallet component, similar to the wallet address? - -Yes, we show the email by default in the details modal after you connect. To display the email anywhere else using React or React Native, [check out the code snippets for all platforms](/connect/in-app-wallet/how-to/interact-with-wallets#get-the-user-email). - ### What happens if thirdweb ceases to exist? Will my users be able to access their wallets? In the event that thirdweb ceases to exist, we have committed to keeping our in-app wallet service running for a period of at least 12 months after the shutdown announcement. During this time users will be able to access their wallet and transfer their assets out, or export their private key which they can then import into a different client. @@ -58,7 +54,7 @@ Users can also link their account to a different auth method (e.g. email, phone, ### How is the private key managed? -You can learn more about the architecture of how thirdweb wallets are created and stored [here](/connect/wallet/security) +You can learn more about the architecture of how thirdweb wallets are created and stored [here](/wallets/security). ### What happens if thirdweb or my database gets breached? diff --git a/apps/portal/src/app/wallets/link-profiles/page.mdx b/apps/portal/src/app/wallets/link-profiles/page.mdx index 384502b39ba..ccd55d7a778 100644 --- a/apps/portal/src/app/wallets/link-profiles/page.mdx +++ b/apps/portal/src/app/wallets/link-profiles/page.mdx @@ -261,4 +261,4 @@ List linkedAccounts = await inAppWallet.GetLinkedAccounts(); -For fetching linked profile information from the backend, see [Fetch Users](/connect/wallet/get-users). +For fetching linked profile information from the backend, see [Fetch Users](/wallets/get-users). diff --git a/apps/portal/src/app/wallets/page.mdx b/apps/portal/src/app/wallets/page.mdx index f3b3e8fe17d..0f9628009b2 100644 --- a/apps/portal/src/app/wallets/page.mdx +++ b/apps/portal/src/app/wallets/page.mdx @@ -584,10 +584,10 @@ Create wallets for your users, authenticate with your backend, connect to extern To connect with other auth strategies, use external wallets, or sponsor gas for users, check out the following guides: -- [Other auth strategies](/connect/wallet/sign-in-methods/configure) -- [Sponsor Gas](/connect/account-abstraction/overview) -- [Implement Sign In with Ethereum](/connect/auth) -- [External Wallets](/connect/wallet/sign-in-methods/external-wallets) (e.g. MetaMask, WalletConnect, Coinbase Wallet, etc.) +- [Authentication Methods](/connect/wallet/sign-in-methods/configure) +- [Sponsor Gas](/wallets/sponsor-gas) +- [Implement Sign In with Ethereum](/wallets/auth) +- [External Wallets](/wallets/external-wallets) (e.g. MetaMask, WalletConnect, Coinbase Wallet, etc.) ## Explore Full API References diff --git a/apps/portal/src/components/others/Sidebar.tsx b/apps/portal/src/components/others/Sidebar.tsx index 88602fe2f49..93a20642380 100644 --- a/apps/portal/src/components/others/Sidebar.tsx +++ b/apps/portal/src/components/others/Sidebar.tsx @@ -250,7 +250,7 @@ export function DocSidebarMobile(props: ReferenceSideBarProps) { return ( -