- The easiest way to enable crypto payments from any wallet, any asset, anywhere. +
+ The Connectivity Layer for the Financial Internet
-- **[WalletConnect Pay](/payments/overview)** is a complete, end-to-end crypto payment solution that allows PSPs and merchants to enable crypto payments from any wallet and any asset through a single, familiar integration. +
+ WalletConnect powers apps, wallets and end-users via the WalletConnect network. +
++ Check out our quickstart guides to get started!
- A curated list of educational resources about WalletConnect Pay and crypto payments. -
-
+
+The initial supply of WCT tokens is capped at 1 billion, with the following allocations:
+
+- WalletConnect Foundation: 27%
+- Airdrops: 18.5%
+- Team: 18.5%
+- Rewards: 17.5%
+- Previous Backers: 11.5%
+- Core Development: 7%
+
+Tokens allocated to core development, team and previous backers will be subject to a 4-year unlock including a 1 year cliff starting at the token generation event (TGE).
+
+## Fixed Supply
+
+The initial design of the WalletConnect Network's tokenomics does not include token inflation. The current model focuses on utilizing existing token allocations such that inflation is not envisioned within the first 3-4 years.
+
+Introduction of an inflationary design would follow only after the token holders' vote to approval following careful consideration of Network metrics, participant feedback, and overall ecosystem health, with specific parameters to be determined through Network governance processes.
+
+## Token Flow
+
+Payments represent one of the largest economic opportunities in crypto. Global card networks generate hundreds of billions in fee revenue annually — funding rewards programs, interchange, and network operations for every participant. WalletConnect Pay is designed to bring that same model onchain: generate real transaction revenue from real commerce, powered by the WalletConnect Network.
+
+The Network is the primary engine of WalletConnect Pay. The WCT token sits at the centre, connecting payment activity to staking rewards, governance weight, and long-term token value.
+
+### How the Network Powers Value Flows
+
+Every payment powered by WalletConnect Pay generates transaction fees. Those fees flow back into the Network through multiple mechanisms. Additional mechanisms are expected to be implemented.
+
+**Rewards Distribution** — Fee revenue funds rewards across all four stakeholder groups in the payment flow:
+
+| Stakeholder | How They Earn |
+| --- | --- |
+| Wallets | Earn interchange on every payment routed through WalletConnect Pay — modelled on card network interchange |
+| End Users | Earn cashback-style rewards on every purchase |
+
+### Why This Model Works
+
+Most alternative payment methods have failed not for technical reasons, but because they gave users no reason to switch. UK Open Banking was technically superior to cards but offered consumers zero upside. CurrentC was backed by the largest US retailers but built solely to save merchants on fees — and died before launch because users had nothing to gain.
+
+WalletConnect Pay is designed around the opposite principle: lead with incentives on every side. The result is a self-reinforcing flywheel — more payments generate more fees, more fees fund better rewards, better rewards drive more payments.
+
+WCT is what holds this flywheel together. Stakers benefit as volume grows. Governance shapes how rewards and buybacks are calibrated over time. The token is not waiting for utility — it is the connective tissue between a payments network and its community of participants.
+
+
+
+
+
+
+The staking flow involves:
+- Connect your wallet.
+- Select **Stake**.
+- Enter the **amount** you want to stake.
+- Set the **duration** (this sets the **unstaking period** used when you later exit. The longer the duration, the higher the APY).
+- **Approve** the amount — sign the approval with your wallet.
+- **Stake** — sign the staking transaction with your wallet.
+
+
+
+
+
+### Re-Locking (Stop Decay)
+
+- While **Unstaking**, you can **Update** your position to return to the **Locked** state.
+- When updating your position, you must select a preset that is **≥ the current remaining time** (you can make it **longer**, but not shorter).
+- Decay stops immediately; stakeweight snaps back to the fixed value using the new preset.
+
+### Completed Unstake
+
+When remaining lock time reaches **0**:
+- Stakeweight and voting power become **0**.
+- The position becomes **withdrawable** (full amount; partial withdrawals are not supported).
+- After withdrawing, you may create a **new** staking position at any time.
+
+## Updating Your Position
+
+Users can update **active staking** positions at any time:
+
+### Adding WCT
+
+Increase your position by depositing more WCT. The added tokens adopt your position's current preset.
+
+
+
+### Changing the Unlock Duration Preset
+
+While **Staked**, you can change your duration to any of the discrete options **greater than or equal to** your current remaining time. This **does not** initiate unlocking; it only changes the **fixed remaining lock time** used for stakeweight in the Locked state and sets the future unlock duration.
+
+
+
+## Claiming Rewards
+
+Every Thursday, WCT rewards are distributed to eligible positions based on their proportional share of total network stakeweight. If your position's stakeweight represents 5% of the total, you'll receive approximately 5% of that week's distribution.
+
+$$
+\text{Reward Share} = \frac{\text{Position Stakeweight}}{\text{Total Network Stakeweight}}
+$$
+
+You can claim rewards on your dashboard at any time. When claiming, you may **re-stake** rewards back into the position to grow stakeweight.
+
+
+
+The WalletConnect Network comprises various participants, each playing a crucial role in maintaining functionality and security:
+
+1. **Service Node Operators**: They run the service nodes (database nodes) that form the backbone of the network's storage layer. These nodes operate on a consistent-hashing based distributed database.
+
+2. **Gateway Node Operators**: They manage the gateway nodes, which are the entry points for apps and SDKs. Gateways facilitate encrypted communications and data routing between wallets and applications.
+
+3. **Wallets**: These allow end-users to manage their blockchain keys and interact with apps via the WalletConnect protocol. Most wallets integrate with the network using the WalletKit SDK.
+
+4. **Apps**: These are the products and services in the web3 space that drive traffic to the network. They can integrate directly or via available SDKs.
+
+5. **SDKs**: Software Development Kits that simplify the integration process for apps and wallets.
+
+6. **End Users**: The consumers of all services within the network, from wallets to apps, going through the relay and database nodes.
+
+Each of these participants contributes to the ecosystem in unique ways, ensuring the network's functionality, security, and continued growth. Their roles and interactions form the foundation of the WalletConnect Network's robust and interconnected infrastructure.
+
+## Learn more about the WalletConnect Network
+
++ WalletConnect Pay is a complete, end-to-end stablecoin and crypto payment solution that allows PSPs and merchants to enable crypto payments from any wallet and any asset through a single, familiar integration. +
++ WalletConnect Pay serves Merchants, PSPs, Wallets and eCommerce. Choose your integration method below to quickstart. +
++ Learn more about WalletConnect Pay and the wider WalletConnect brand. +
+
+
+
+
+
+#### Overview - Clients
+
+Indicates the total number of connections established from clients (device or browser if connecting on the web).
+
+
+
+
+
+#### Overview - Messages
+
+Shows the total messages exchanged between the configured Reown SDK and the Relay Server.
+
+
+
+
+
+#### Wallet/Dapp Sessions
+
+Shows the daily trend of established sessions over a 30 day period.
+
+
+
+
+
+#### Clients
+
+Shows the daily trend of client connections over a 30 day period.
+
+
+
+
+
+#### All Messages
+
+Shows the daily trend of messages connections over a 30 day period.
+
+
+
+
+
+#### Projects
+
+Lists the top ranked wallets/Dapps connected to your project.
+
+
+
+
+
+#### Countries and Continents
+
+Provides insights into user connections by displaying the countries and continents with the most connections.
+
+
+
+
+
+Learn more about the Relay [here](./relay)
+
+### RPC
+
+#### Overview RPC Requests
+
+Represents the total count of remote procedure calls (RPC) made to the blockchain API for the last 30 days.
+
+
+
+
+
+#### RPC Request Volumes
+
+Displays the daily trend of API requests made to the blockchain API.
+
+
+
+
+
+#### RPC Chain
+
+Shows the top chain requests made by Chain ID.
+
+
+
+
+
+#### RPC Method
+
+Highlights the top-ranked methods called by your users.
+
+
+
+
+
+#### Countries
+
+Illustrates user connections by displaying the countries with the most connections.
+
+
+
+
+
+Learn more about the Blockchain API [here](./blockchain-api)
+
+### AppKit
+
+#### Avg. Daily Visitors
+
+Indicates the daily average of unique visitors to your app’s AppKit.
+
+
+
+
+
+#### Avg. Daily Sessions
+
+Indicates the daily average of sessions.
+
+
+
+
+
+#### Avg. Daily Connections
+
+Indicates the daily average of connections made through AppKit.
+
+
+
+
+
+#### Sessions
+
+Indicates the total count of sessions.
+
+
+
+
+
+#### Successful connections
+
+Total count of all connections made between a wallet and your app.
+
+
+
+
+
+#### Countries
+
+Ranks the top countries with the highest user connections.
+
+
+
+
+
+#### Wallets Breakdown
+
+Ranks the top wallets that your users are connecting from.
+
+
+
+
+
+#### All Events
+
+This table and chart shows the count of various events that are triggered as the users interact with AppKit.
+
+
+
+
+
+#### Platform Sessions
+
+Provides a breakdown of sessions that have been created by device platform.
+
+
+
+
+
+#### Visitors
+
+Shows the daily trend of unique visitors to your app’s AppKit.
+
+
+
+
+
+#### Sessions
+
+Shows the daily trend of sessions created when the user signs a message with their connected wallet.
+
+
+
+
+
+#### Successful connections
+
+Shows the daily trend of successful connections to your app.
+
+
+
+
+
+### Web3Inbox
+
+#### Subscribers - All Time
+
+Total count of all subscribers to your project.
+
+
+
+
+
+#### Notifications - All Time
+
+Total count of all notifications sent from your project.
+
+
+
+
+
+#### Subscribers
+
+Daily trend chart illustrating the growth of subscribers.
+
+
+
+
+
+#### Notifications
+
+Daily trend chart of total notifications received by your subscribers.
+
+
+
+
+
+#### Messaged Accounts
+
+Daily trend chart of unique wallets that received the notification.
+
+
+
+
+
+#### Subscribers by notification type
+
+This table shows the total count of subscribers by notification type over a 30 day period.
+
+
+
+
+
+### Definitions
+
+Definitions of terms used in Reown Analytics.
+
+| Term | Description |
+| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| **Relay:Session** | A session within the context of Relay analytics denotes meaningful user actions, like signing transactions for NFT sales or trades, within a wallet or dapp. It emphasizes core SDK functionality. |
+| **AppKit:Session** | A session within the context of AppKit analytics represents the connection established between your project and your user’s device (includes browsers). Sessions are created when the user interacts with AppKit on your app. If user events are tracked within a 30-minute range, they will be considered within the same session. |
+| **Message** | Messages are data exchanges between the Reown SDK and the Relay Server, facilitating communication between your project and connected clients. |
+| **Client** | A client is a device or browser connected to your project. |
+| **Blockchain API** | The interface that allows your project to interact with the blockchain. Remote Procedure Calls (RPC) are used to request information or execute operations on the blockchain through this API. |
+| **Chain ID** | Chain ID identifies a specific blockchain network. Different blockchain networks, such as Ethereum Mainnet or a testnet, have unique Chain IDs. |
diff --git a/snippets/cloud/explorer-submission.mdx b/snippets/cloud/explorer-submission.mdx
new file mode 100644
index 0000000..7fdf8e5
--- /dev/null
+++ b/snippets/cloud/explorer-submission.mdx
@@ -0,0 +1,106 @@
+---
+title: Explorer Submission
+---
+
+
+
+
+## Project Details
+
+- Go to the "Explorer" tab and fill in the details of your project.
+
+
+
+
+
+| Field | Description | Required |
+|------------------------------|-------------------------------------------------------------------------------------------------------------------------|----------|
+| **Name** | The name to display in the explorer | Yes |
+| **Description** | A short description explaining your project (dapp/wallet) | Yes |
+| **Type** | Whether your project is a dapp or a wallet | Yes |
+| **Category** | Appropriate category for your project. This field is dependent on the type of your project | Yes |
+| **Homepage** | The URL of your project | Yes |
+| **Web App** | The URL of your web app. This field is only applicable for dapps | Yes |
+| **Chains** | Chains supported by your project | Yes |
+| **Logo** | The logo of your project. Further requirements are provided in the explorer submission form | Yes |
+| **Testing Instructions** | Instructions on how to test your WalletConnect Integration | Yes |
+| **Download Links** | Links to download your project (if applicable) | No |
+| **Mobile Linking** | Required for mobile wallets targeting AppKit. Deep Link is recommended over Universal Link | No |
+| **Desktop Linking** | Required for desktop wallets targeting AppKit. | No |
+| **Injected Wallet Identifiers** | Required for injected wallets targeting AppKit. RDNS (from EIP-6963 metadata) is recommended over Provider Flags (Legacy) | No |
+| **Metadata** | User-facing UI metadata for your project. Only Short Name is required. | No |
+
+
+## Project Submission
+
+- Once you've filled the applicable fields, click the "Submit" button to submit your project for review. Alternatively, you can save your changes and submit later. Additional information will be visible in the modal that appears after clicking the "Submit" button.
+
+
+
+
+
+## How do we test wallets?
+
+In order to offer a great user experience in our APIs and SDKs every Cloud submission goes through a QA process to make sure that the integration of the WalletConnect protocol is working correctly.
+
+The following list details our QA flow and how to reproduce it:
+
+| Test Case | Steps | Expected Results |
+|-----------|-------|-----------------|
+| **Set Up** | 1. Download the wallet
+
\ No newline at end of file
diff --git a/snippets/walletkit/shared/mobile-linking.mdx b/snippets/walletkit/shared/mobile-linking.mdx
new file mode 100644
index 0000000..0d2717a
--- /dev/null
+++ b/snippets/walletkit/shared/mobile-linking.mdx
@@ -0,0 +1,12 @@
+### How to test
+
+Before submitting your project to the Cloud Explorer you can test mobile linking in our sample Dapp:
+
+1. On your mobile device, visit the appropriate link:
+- For EVM: https://appkit-lab.reown.com/library/wagmi/
+- For Solana: https://appkit-lab.reown.com/library/solana/
+
+2. Click the "Custom Wallet" button and fill in the form with your wallet information. The website will reload and your wallet will be stored locally.
+3. Click the "Connect Wallet" button and choose your mobile wallet. It _should_ automatically open and redirect to your wallet.
+
+Learn more about mobile linking in the [Best Practices section](/wallets/android/best-practices#2-mobile-linking).
\ No newline at end of file
diff --git a/snippets/walletlist.mdx b/snippets/walletlist.mdx
new file mode 100644
index 0000000..9a0a491
--- /dev/null
+++ b/snippets/walletlist.mdx
@@ -0,0 +1,89 @@
+export const WalletList = () => {
+ let wallets = [];
+ let originalWalletsArray = [];
+
+ if (typeof document !== "undefined") {
+ fetch(
+ "https://explorer-api.walletconnect.com/v3/wallets?projectId=8e998cd112127e42dce5e2bf74122539"
+ )
+ .then((response) => response.json())
+ .then((data) => {
+ wallets = data.listings;
+ originalWalletsArray = Object.keys(data.listings).map((key) => ({
+ ...data.listings[key],
+ namespace: key,
+ }));
+ renderWallets(wallets);
+
+ const searchInput = document.querySelector(".search-bar");
+ if (searchInput) {
+ searchInput.addEventListener("input", (event) => {
+ const query = event.target.value.toLowerCase();
+ const filteredwallets = Object.fromEntries(
+ Object.entries(wallets).filter(([_, wallet]) =>
+ wallet.name.toLowerCase().includes(query)
+ )
+ );
+ renderWallets(filteredwallets);
+ });
+ }
+ })
+ .catch((error) => console.error(error));
+ }
+
+ const renderWallets = (wallets) => {
+ const container = document.querySelector(".wallet-card-container");
+ if (container) {
+ container.innerHTML = "";
+ Object.keys(wallets).forEach((key) => {
+ const wallet = wallets[key];
+ const card = document.createElement("button");
+ card.className = `
+ flex flex-col items-center justify-center
+ border border-gray-500 p-2 text-center
+ w-full dark:bg-gray-600 dark:text-white h-20
+ `;
+ card.innerHTML = `
+
+
+
+### Pairing Error
+
+
+
+
+
+### Expected Errors
+
+While pairing the following errors might occur:
+
+- No Internet connection error or pairing timeout when scanning QR with no Internet connection
+ - User should pair again with Internet connection
+- Pairing expired error when scanning a QR code with expired pairing
+ - User should refresh a QR code and scan again
+- Pairing with existing pairing is not allowed
+ - User should refresh a QR code and scan again. I usually happens when user scans an already paired QR code.
+
+## Session Proposal
+
+A session proposal is a handshake sent by a dapp and it's purpose is to define a session rules. Whenever a user wants to establish a connection between a wallet and a dapp, one should approve a session proposal.
+
+### User Action Feedback
+
+Whenever user approves or rejects a session proposal, wallet should show loading indicators in a moment of the button press until Relay acknowledgement is received for any of this actions.
+
+Session approve
+
+```kotlin
+ WalletKit.approveSession(approveProposal,
+ onSuccess = {
+ //Session approval response was sent successfully - update your UI
+ }
+ onError = { error ->
+ //Error while sending session approval - update your UI
+ })
+```
+
+Session reject
+
+```kotlin
+ WalletKit.rejectSession(reject,
+ onSuccess = {
+ //Session rejection response was sent successfully - update your UI
+ },
+ onError = { error ->
+ //Error while sending session rejection - update your UI
+ })
+```
+
+### Session Proposal Expiry
+
+A session proposal expiry is 5 mins. It means a given proposal is stored for 5 mins in the SDK storage and user has 5 mins for approval or rejection decision. After that time the below event is emitted and proposal modal should be removed from the app's UI.
+
+```kotlin
+val walletDelegate = object : WalletKit.WalletDelegate {
+ override fun onProposalExpired(proposal: Wallet.Model.ExpiredProposal) {
+ //Here this event is triggered when a proposal expires - update your UI
+ }
+ ...other callbacks
+}
+WalletKit.setWalletDelegate(walletDelegate)
+```
+
+### Expected User flow
+
+### Approve or Reject Session Proposal
+
+
+
+
+
+### Error Handling
+
+
+
+
+
+### Expected Errors
+
+While approving or rejecting a session proposal the following errors might occurs:
+
+- No Internet connection
+ - It happens when a user tries to approve or reject session proposal with no Internet connection
+- Session proposal expired
+ - It happens when users tries to approve or reject expired session proposal
+- Invalid namespaces
+ - It happens when a validation of session namespaces fails
+- Timeout
+ - It happens when Relay doesn't acknowledge session settle publish within 10s
+
+## Session Request
+
+A session request represents the request sent by a dapp to a wallet.
+
+### User Action Feedback
+
+Whenever user approves or rejects a session request, wallet should show loading indicators in a moment of the button press until Relay acknowledgement is received for any of this actions.
+
+```kotlin
+WalletKit.respondSessionRequest(Wallet.Params.SessionRequestResponse,
+ onSuccess = {
+ //Session request response was sent successfully - update your UI
+ },
+ onError = { error ->
+ //Error while sending session response - update your UI
+ })
+```
+
+### Session Request Expiry
+
+A session request expiry is defined by a dapp. It's value must be between now() + 5mins and now() + 7 days. After the session request expires the below event is emitted and session request modal should be removed from the app's UI.
+
+```kotlin
+val walletDelegate = object : WalletKit.WalletDelegate {
+ override fun onRequestExpired(request: Wallet.Model.ExpiredRequest) {
+ //Here this event is triggered when a session request expires - update your UI
+ }
+ ...other callbacks
+}
+WalletKit.setWalletDelegate(walletDelegate)
+```
+
+### Expected User flow
+
+### Approve or Reject Session Proposal
+
+
+
+
+
+### Error Handling
+
+
+
+
+
+### Expected Errors
+
+While approving or rejecting a session request the following error might occur:
+
+- Invalid session
+ - This error might happen when user approves or rejects a session request on expired session
+- Session request expired
+ - This error might happen when user approves or rejects a session request that already expires
+- Timeout
+ - It happens when Relay doesn't acknowledge session settle publish within 10s
+
+## Web Socket Connection State
+
+The Web Socket connection state tracks the connection with the relay server, event is emitted whenever a connection state changes.
+
+```kotlin
+val walletDelegate = object : WalletKit.WalletDelegate {
+ override fun onConnectionStateChange(state: Wallet.Model.ConnectionState) {
+ //Here this event is triggered when a connection state has changed
+ }
+ ...other callbacks
+}
+WalletKit.setWalletDelegate(walletDelegate)
+```
+
+### Expected User flow
+
+### Connection State
+
+
+ 
+
diff --git a/wallets/android/chain-abstraction.mdx b/wallets/android/chain-abstraction.mdx
new file mode 100644
index 0000000..7cee853
--- /dev/null
+++ b/wallets/android/chain-abstraction.mdx
@@ -0,0 +1,141 @@
+---
+title: Chain Abstraction
+---
+
+import HowItWorks from "/snippets/walletkit/shared/chain-abstraction/intro.mdx";
+import ErrorHandling from "/snippets/walletkit/shared/chain-abstraction/error-handling.mdx";
+
+
+
diff --git a/wallets/android/notifications/notify/resources.mdx b/wallets/android/notifications/notify/resources.mdx
new file mode 100644
index 0000000..58b79f4
--- /dev/null
+++ b/wallets/android/notifications/notify/resources.mdx
@@ -0,0 +1,19 @@
+---
+title: Resources
+---
+
+Valuable assets for developers interested in integrating Notify API into their wallet.
+
+- [Web3Inbox.com app](https://app.web3inbox.com) - Inbox web app that simulates wallet experience.
+- [GM dapp](https://gm.walletconnect.com/) - Example dapp that sends notification every hour.
+- [GM hackers](https://github.com/WalletConnect/gm-hackers) - Template used in hackathons sponsored by WalletConnect.
+
+## Wallet Resources
+
+To check more in details go and visit our [WalletKit Kotlin implementation app](https://github.com/WalletConnect/WalletConnectKotlinV2/tree/develop/sample/wallet). Sample Wallet .apk files can be found under the latest release tag in [Kotlin's V2 repository](https://github.com/WalletConnect/WalletConnectKotlinV2/tags)
+
+If you need to test your app's integration, you can use one [our GM dapp.](https://gm.walletconnect.com/)
+
+## Need Technical Support?
+
+If you require technical support along the way, please drop a message on the [WalletConnect GitHub](https://github.com/orgs/WalletConnect/discussions/) and our team will get back to you as soon as possible.
diff --git a/wallets/android/notifications/notify/spam-protection.mdx b/wallets/android/notifications/notify/spam-protection.mdx
new file mode 100644
index 0000000..d56bbfa
--- /dev/null
+++ b/wallets/android/notifications/notify/spam-protection.mdx
@@ -0,0 +1,27 @@
+---
+title: Spam Protection
+---
+
+Users play a critical role in web3. That’s why, with WalletKit Notifications, we’re committed to ensuring users can enjoy a safe, seamless, and reliable experience that puts them in the driver’s seat. As part of that pledge, Web3Inbox provides a number of user-first, anti-spam features and elements that ensure users are always in control of their web3 communications.
+
+## How are users protected from spam with WalletKit Notifications?
+
+### Becoming a WalletKitNotifications customer
+
+When a wallet offers app notifications to their users via WalletKit Notifications, the feature will always be optional. If users decide they want to receive notifications from selected apps via their wallet, they’ll be able to ‘opt-in’ and subscribe to an app’s notifications by signing a message request. Similarly, when accessing notifications through the [Web3Inbox.com app](https://app.web3inbox.com), users will be met with the same request for each application they choose to subscribe to. This feature not only enables users to experience a customized, ‘app-by-app’ approach to staying connected in web3, but also ensures they only ever hear from the apps they choose to — no unsolicited notifications or spam from unknown senders. Its their curated inbox, connected with only those they choose.
+
+### Setting customized notification preferences
+
+Once users have subscribed to their chosen apps, they have the option to define and set which types of notifications they receive from those apps. For example, a user may wish to receive only information regarding changes to their portfolio from a DEX, or, they might want to receive notifications from an NFT marketplace — but only notifications regarding their own NFT collections. In these scenarios, they’ll have the ability to disable other notification types, like marketing updates, and ensure their feed is curated to show only information that’s meaningful to them. As apps set their own notification types, they have unlimited optionality to really build out a notification structure they know can support their users’ needs — no ‘one size fits all’ approach, but a personable, community-oriented structure that puts both app and user needs’ at the forefront of communication.
+
+### Rate limiting
+
+Apps are limited to a maximum number of notifications they’re able to send to their community. Specifically, apps may send accounts notifications twice an hour on average, but may exceed that average in bursts of up to 50 at a time.
+
+## Our continued pledge on spam protection
+
+We’re constantly working on improving and growing our products, and we have a number of impactful anti-spam features and functions in the works set to increase the overall protection and user experience of Web3Inbox users:
+
+### User reporting
+
+Users will have the ability to report applications that appear to be acting or engaging with their community in a malicious or suspicious manner. Projects that are flagged as malicious may be removed from the Web3Inbox discover page and have notification functionality disabled.
diff --git a/wallets/android/notifications/notify/usage.mdx b/wallets/android/notifications/notify/usage.mdx
new file mode 100644
index 0000000..be778aa
--- /dev/null
+++ b/wallets/android/notifications/notify/usage.mdx
@@ -0,0 +1,339 @@
+---
+title: Usage
+---
+
+import CloudBanner from "/snippets/cloud-banner.mdx";
+
+
+In this section, we showcase the aspects of using the Notify API. We'll guide you through the initial steps of initializing the Notify client and logging in a blockchain account. You'll also learn how to manage your subscriptions and messages. Additionally, we cover the process of setting up and displaying push notifications on your preferred platform. To ensure a good user experience, we include best practices for spam protection, helping you to enable the users to maintain control over the notifications wallet receives.
+
+## Content
+
+Links to sections on this page. Some sections are platform specific and are only visible when the platform is selected. To view a summary of useful platform specific topics, check out Extra (Platform Specific) under this section.
+
+- [Initialization](#initialization):
+ Creating a new Notify Client instance and initializing it with a projectId from [[WalletConnect Dashboard](https://dashboard.walletconnect.com/).
+- [Account login](#account-login):
+ A SIWE message must be signed by the user in order to authorize the client to use Notify API
+- [Subscribing to a new dapp](#subscribing-to-a-new-dapp):
+ Opt-in to receive notifications from dapp
+- [Fetching active subscriptions](#fetching-active-subscriptions):
+ Get active subscriptions
+- [Fetching subscription’s notification](#fetching-subscriptions-notifications):
+ Get notifications of a subscription
+- [Fetching available notification types](#fetching-available-notification-types):
+ Get latest notification types
+- [Updating subscriptions notification settings](#updating-subscriptions-notification-settings):
+ Change allowed notification types sent by dapp
+- [Unsubscribe from a dapp](#unsubscribe-from-a-dapp):
+ Opt-out from receiving notifications from a dapp
+- [Account logout](#account-logout):
+ To stop receiving notifications to this client, accounts can logout of using Notify API
+- [Push Notification best practices](#push-notification-best-practices):
+ Guidelines on how to implement Push Notifications across different platforms
+- [Firebase Cloud Messaging setup **(Android)**](#firebase-cloud-messaging-setup):
+ Configuring Android app in order to decrypt notifications
+- [NotifyClient.Delegate **(Android)**](#notifyclientdelegate):
+ Setting and overriding functions through NotifyDelegate.
+
+## Initialization
+
+
+
+
+## Disclaimer
+
+Verify API is not designed to be bulletproof but to make the impersonation attack harder and require a somewhat sophisticated attacker. We are working on a new standard with various partners to close those gaps and make it bulletproof.
+
+## Domain risk detection
+
+The Verify security system will discriminate session proposals & session requests with distinct validations that can be either `VALID`, `INVALID` or `UNKNOWN`.
+
+- Domain match: The domain linked to this request has been verified as this application's domain.
+ - This interface appears when the domain a user is attempting to connect to has been ‘verified’ in our domain registry as the registered domain of the application the user is trying to connect to, and the domain has not returned as suspicious from either of the security tools we work with. The `verifyContext` included in the request will have a validation of `VALID`.
+- Unverified: The domain sending the request cannot be verified.
+ - This interface appears when the domain a user is attempting to connect to has not been verified in our domain registry, but the domain has not returned as suspicious from either of the security tools we work with. The `verifyContext` included in the request will have a validation of `UNKNOWN`.
+- Mismatch: The application's domain doesn't match the sender of this request.
+ - This interface appears when the domain a user is attempting to connect to has been flagged as a different domain to the one this application has verified in our domain registry, but the domain has not returned as suspicious from either of the security tools we work with. The `verifyContext` included in the request will have a validation of `INVALID`
+- Threat: This domain is flagged as malicious and potentially harmful.
+ - This interface appears when the domain a user is attempting to connect to has been flagged as malicious on one or more of the security tools we work with. The `verifyContext` included in the request will contain parameter `isScam` with value `true`.
+
+### Implementation
+
+Wallet.Event.VerifyContext provides a domain verification information about SessionProposal, SessionRequest and AuthRequest.
+
+It consists of origin of an app from where the request has been sent, validation Enum that says whether origin is `VALID`, `INVALID` or `UNKNOWN` and verify url server.
+
+```kotlin
+data class VerifyContext(
+ val id: Long,
+ val origin: String,
+ val validation: Model.Validation,
+ val verifyUrl: String
+)
+
+enum class Validation {
+ VALID, INVALID, UNKNOWN
+}
+```
diff --git a/wallets/c-sharp/cloud/analytics.mdx b/wallets/c-sharp/cloud/analytics.mdx
new file mode 100644
index 0000000..f78ba0b
--- /dev/null
+++ b/wallets/c-sharp/cloud/analytics.mdx
@@ -0,0 +1,7 @@
+---
+title: Analytics
+---
+
+import Analytics from "/snippets/cloud/analytics.mdx";
+
+
+
+
+## Disclaimer
+
+Verify API is not designed to be bulletproof but to make the impersonation attack harder and require a somewhat sophisticated attacker. We are working on a new standard with various partners to close those gaps and make it bulletproof.
+
+## Domain risk detection
+
+The Verify security system will discriminate session proposals & session requests with distinct validations that can be either `VALID`, `INVALID` or `UNKNOWN`.
+
+- Domain match: The domain linked to this request has been verified as this application's domain.
+ - This interface appears when the domain a user is attempting to connect to has been ‘verified’ in our domain registry as the registered domain of the application the user is trying to connect to, and the domain has not returned as suspicious from either of the security tools we work with. The `verifyContext` included in the request will have a validation of `VALID`.
+- Unverified: The domain sending the request cannot be verified.
+ - This interface appears when the domain a user is attempting to connect to has not been verified in our domain registry, but the domain has not returned as suspicious from either of the security tools we work with. The `verifyContext` included in the request will have a validation of `UNKNOWN`.
+- Mismatch: The application's domain doesn't match the sender of this request.
+ - This interface appears when the domain a user is attempting to connect to has been flagged as a different domain to the one this application has verified in our domain registry, but the domain has not returned as suspicious from either of the security tools we work with. The `verifyContext` included in the request will have a validation of `INVALID`
+- Threat: This domain is flagged as malicious and potentially harmful.
+ - This interface appears when the domain a user is attempting to connect to has been flagged as malicious on one or more of the security tools we work with. The `verifyContext` included in the request will contain parameter `isScam` with value `true`.
+
+### Implementation
+
+`Reown.Core.Models.Verify.VerifiedContext` provides a domain verification information about `SessionProposal`, `SessionRequest` and `AuthRequest`.
+
+It consists of origin of an app from where the request has been sent, validation Enum that says whether origin is `VALID`, `INVALID` or `UNKNOWN` and verify url server.
+
+```csharp
+public class VerifiedContext
+{
+ [JsonProperty("origin")]
+ public string Origin;
+
+ [JsonProperty("validation")]
+ private string _validation;
+
+ public string ValidationString => _validation;
+
+ public Validation Validation
+ {
+ get
+ {
+ return FromString();
+ }
+ set
+ {
+
+ _validation = AsString(value);
+ }
+ }
+
+ [JsonProperty("verifyUrl")]
+ public string VerifyUrl { get; set; }
+
+ private Validation FromString()
+ {
+ switch (ValidationString.ToLowerInvariant())
+ {
+ case "VALID":
+ return Validation.Valid;
+ case "INVALID":
+ return Validation.Invalid;
+ default:
+ return Validation.Unknown;
+ }
+ }
+
+ private string AsString(Validation str)
+ {
+ switch (str)
+ {
+ case Validation.Invalid:
+ return "INVALID";
+ case Validation.Valid:
+ return "VALID";
+ default:
+ return "UNKNOWN";
+ }
+ }
+}
+
+public enum Validation
+{
+ Unknown,
+ Valid,
+ Invalid,
+}
+```
diff --git a/wallets/chains/adi.mdx b/wallets/chains/adi.mdx
new file mode 100644
index 0000000..ce9f88f
--- /dev/null
+++ b/wallets/chains/adi.mdx
@@ -0,0 +1,31 @@
+---
+title: ADI Chain
+description: "Overview of ADI Chain integration with Wallet SDK."
+---
+
+ADI Chain is a fully EVM-compatible blockchain. It uses the standard Ethereum JSON-RPC methods for all wallet interactions.
+
+## Network / Chain Information
+
+| CAIP-2 | Chain ID | Name | RPC Endpoint | Explorer | Namespace |
+| -------------- | -------- | --------- | ------------------------------- | --------------------------------- | --------- |
+| `eip155:36900` | `36900` | ADI Chain | `https://rpc.adifoundation.ai` | `https://explorer.adifoundation.ai` | `eip155` |
+
+## RPC Methods
+
+As an EVM-compatible chain, ADI Chain supports all standard Ethereum JSON-RPC methods. Wallets implementing ADI Chain support should refer to the [EVM RPC documentation](/wallets/chains/evm) for the complete list of supported methods, including:
+
+- `personal_sign` - Sign a message
+- `eth_sign` - Sign data
+- `eth_signTypedData` / `eth_signTypedData_v4` - Sign typed data (EIP-712)
+- `eth_sendTransaction` - Send a transaction
+- `eth_signTransaction` - Sign a transaction without broadcasting
+- `eth_sendRawTransaction` - Broadcast a signed transaction
+
+For detailed method specifications and examples, see the [EVM Chain Support](/wallets/chains/evm) page.
+
+## Additional Resources
+
+- [ADI Explorer](https://explorer.adifoundation.ai)
+- [ADI Bridge](https://bridge.adifoundation.ai)
+- [ADI RPC Endpoint](https://rpc.adifoundation.ai)
diff --git a/wallets/chains/bitcoin.mdx b/wallets/chains/bitcoin.mdx
new file mode 100644
index 0000000..633e7c9
--- /dev/null
+++ b/wallets/chains/bitcoin.mdx
@@ -0,0 +1,311 @@
+---
+title: Bitcoin
+description: "Bitcoin JSON-RPC methods supported by Wallet SDK."
+---
+
+We define an account as the group of addresses derived using the same account value in their [derivation paths](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#user-content-Path_levels). We use the first address of the [external chain](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#examples) ("first external address"), as the identifier for an account. An account's total balance is defined as the sum of all unspent transaction outputs (UTXOs) belonging to its entire group of addresses.
+
+1. Dapps **must** only display the first external address as a connected account.
+2. Wallets **must** only offer to connect the first external address(es).
+
+#### Account Definition
+
+The derivation path levels in the [BIP44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#path-levels), [BIP49](https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki#user-content-Public_key_derivation), [BIP84](https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki#public-key-derivation), [BIP86](https://github.com/bitcoin/bips/blob/master/bip-0086.mediawiki#user-content-Public_key_derivation) standards are:
+
+```
+m / purpose' / coin_type' / account' / change / address_index
+```
+
+Addresses with different `purpose`, `change` and `address_index` values are considered to belong to the same account. Valid `purpose` values are 44, 49, 84 and 86. We use the first external Native SegWit (purpose = 84) address as the default account identifier.
+
+For a specific seed phrase and path `m/84'/0'/0'/0/0` we get account 0 with identifier `bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu`. Its total balance is the sum of all UTXO balances on all addresses with derivation paths:
+
+* `m/44'/0'/0'/change/address_index`
+* `m/49'/0'/0'/change/address_index`
+* `m/84'/0'/0'/change/address_index`
+* `m/86'/0'/0'/change/address_index`
+
+If the wallet user changes to account 1 we get path `m/84'/0'/1'/0/0` with identifier `bc1qku0qh0mc00y8tk0n65x2tqw4trlspak0fnjmfz`. Its total balance is the sum of all UTXO balances on all addresses with derivation paths:
+
+* `m/44'/0'/1'/change/address_index`
+* `m/49'/0'/1'/change/address_index`
+* `m/84'/0'/1'/change/address_index`
+* `m/86'/0'/1'/change/address_index`
+
+## sendTransfer
+
+This method is used to sign and submit a transfer of any `amount` of Bitcoin to a single `recipientAddress`, optionally including a `changeAddress` for the change amount and `memo` set as an OP_RETURN output by supporting wallets. The transaction will be signed and broadcast upon user approval.
+
+### Parameters
+
+* `Object`
+ * `account` : `String` - *(Required)* The connected account's first external address.
+ * `recipientAddress` : `String` - *(Required)* The recipient's public address.
+ * `amount` : `String` - *(Required)* The amount of Bitcoin to send, denominated in satoshis (Bitcoin base unit).
+ * `changeAddress` : `String` - *(Optional)* The sender's public address to receive change.
+ * `memo` : `String` - *(Optional)* The OP_RETURN value as a hex string without 0x prefix, maximum 80 bytes.
+
+### Returns
+
+* `Object`
+ * `txid` : `String` - *(Required)* The transaction id as a hex string without 0x prefix.
+
+### Example
+
+The example below specifies a simple transfer of 1.23 BTC (123000000 Satoshi).
+
+```javascript theme={null}
+// Request
+{
+ "id": 1,
+ "jsonrpc": "2.0",
+ "method": "sendTransfer",
+ "params": {
+ "account": "bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu",
+ "recipientAddress": "bc1pmzfrwwndsqmk5yh69yjr5lfgfg4ev8c0tsc06e",
+ "amount": "123000000",
+ "memo": "636861726c6579206c6f766573206865"
+ }
+}
+
+// Result
+{
+ "id": 1,
+ "jsonrpc": "2.0",
+ "result": {
+ "txid": "f007551f169722ce74104d6673bd46ce193c624b8550889526d1b93820d725f7"
+ }
+}
+```
+
+## getAccountAddresses
+
+This method returns all current addresses needed for a dapp to fetch all UTXOs, calculate the total balance and prepare transactions. Dapps will typically use an indexing service to query for balances and UTXOs for all addresses returned by this method, such as:
+
+* [Blockbook API](https://github.com/trezor/blockbook/blob/master/docs/api.md#get-address)
+* [Bitcore API](https://github.com/bitpay/bitcore/blob/master/packages/bitcore-node/docs/api-documentation.md#address)
+
+We recognize that there are two broad classes of wallets in use today:
+
+1. Wallets that generate a new change or receive address for every transaction ("dynamic wallet").
+2. Wallets that reuse the first external address for every transaction ("static wallet").
+
+#### Implementation Details
+
+* All wallets **should** include the first external address and all addresses with one or more UTXOs, unless they're filtered by `intentions`.
+* Dynamic wallets **should** include minimum 2 unused change and receive addresses. Otherwise dapps may have to request [getAccountAddresses](#getaccountaddresses) after every transaction to discover the new addresses and keep track of the user's total balance.
+* All wallets **must** return fewer than 20 unused change and receive addresses to avoid breaking the [gap limit](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#address-gap-limit).
+
+### Parameters
+
+* `Object`
+ * `account` : `String` - *(Required)* The connected account's first external address.
+ * `intentions` : `String[]` - *(Optional)* Filter what addresses to return, e.g. "payment" or "ordinal".
+
+### Returns
+
+* `Array`
+ * `Object`
+ * `address` : `String` - *(Required)* Public address belonging to the account.
+ * `publicKey` : `String` - *(Optional)* Public key for the derivation path in hex, without 0x prefix.
+ * `path` : `String` - *(Optional)* Derivation path of the address e.g. "m/84'/0'/0'/0/0".
+ * `intention` : `String` - *(Optional)* Intention of the address, e.g. "payment" or "ordinal".
+
+### Session Properties
+
+In a connection request, it is recommended to serialize the response to `getAccountAddresses` in `session.sessionProperties.bip122_getAccountAddresses`. This allows dapps to consume an active session without requiring a context switch to re-request all addresses and associated public keys from the wallet.
+
+### Example: Dynamic Wallet
+
+The example below specifies a result from a dynamic wallet. For the sake of this example, receive and change addresses with index 3-4 are considered unused and addresses with paths `m/49'/0'/0'/0/7` and `m/84'/0'/0'/0/2` are considered to have UTXOs.
+
+Assuming the dapp monitors all returned addresses for balance changes, a new request to `getAccountAddresses` is only needed when all UTXOs in provided addresses have been spent, or when all provided `receive` addresses or `change` addresses have been used.
+
+```javascript theme={null}
+// Request
+{
+ "id": 1,
+ "jsonrpc": "2.0",
+ "method": "getAccountAddresses",
+ "params": {
+ "account": "bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu"
+ }
+}
+
+// Result
+{
+ "id": 1,
+ "jsonrpc": "2.0",
+ "result": [
+ {
+ "address": "bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu",
+ "publicKey": "0330d54fd0dd420a6e5f8d3624f5f3482cae350f79d5f0753bf5beef9c2d91af3c",
+ "path": "m/84'/0'/0'/0/0"
+ },
+ {
+ "address": "3KHhcgwPgYF9hE77zaKy2G36dpkcNtvQ33",
+ "publicKey": "03b90230ca20150142bc2849a3df4517073978f32466214a0ebc00cac52f996989",
+ "path": "m/49'/0'/0'/0/7"
+ },
+ {
+ "address": "bc1qp59yckz4ae5c4efgw2s5wfyvrz0ala7rgvuz8z",
+ "publicKey": "038ffea936b2df76bf31220ebd56a34b30c6b86f40d3bd92664e2f5f98488dddfa",
+ "path": "m/84'/0'/0'/0/2"
+ },
+ {
+ "address": "bc1qgl5vlg0zdl7yvprgxj9fevsc6q6x5dmcyk3cn3",
+ "publicKey": "03de7490bcca92a2fb57d782c3fd60548ce3a842cad6f3a8d4e76d1f2ff7fcdb89",
+ "path": "m/84'/0'/0'/0/3"
+ },
+ {
+ "address": "bc1qm97vqzgj934vnaq9s53ynkyf9dgr05rargr04n",
+ "publicKey": "03995137c8eb3b223c904259e9b571a8939a0ec99b0717684c3936407ca8538c1b",
+ "path": "m/84'/0'/0'/0/4"
+ },
+ {
+ "address": "bc1qv6vaedpeke2lxr3q0wek8dd7nzhut9w0eqkz9z",
+ "publicKey": "03d0d243b6a3176fa20fa95cd7fb0e8e0829b83fc2b52053633d088c1a4ba91edf",
+ "path": "m/84'/0'/0'/1/3"
+ },
+ {
+ "address": "bc1qetrkzfslk0d4kqjnu29fdh04tkav9vj3k36vuh",
+ "publicKey": "02a8dee7573bcc7d3c1e9b9e267dbf0cd717343c31d322c5b074a3a97090a0d952",
+ "path": "m/84'/0'/0'/1/4"
+ }
+ ]
+}
+```
+
+### Example: Static Wallet
+
+The example below specifies a response from a static wallet. The returned address is used for both change and payments. It's the only address with UTXOs.
+
+```javascript theme={null}
+// Request
+{
+ "id": 1,
+ "jsonrpc": "2.0",
+ "method": "getAccountAddresses",
+ "params": {
+ "account": "bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu"
+ }
+}
+
+// Result
+{
+ "id": 1,
+ "jsonrpc": "2.0",
+ "result": [
+ {
+ "address": "bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu",
+ "publicKey": "0330d54fd0dd420a6e5f8d3624f5f3482cae350f79d5f0753bf5beef9c2d91af3c",
+ "path": "m/84'/0'/0'/0/0"
+ }
+ ]
+}
+```
+
+## signPsbt
+
+This method can be used to request the signature of a Partially Signed Bitcoin Transaction (PSBT) and covers use-cases e.g. involving multiple-recipient transactions, requiring granular control over which UTXOs to spend or how to route change.
+
+### Parameters
+
+* `Object`
+ * `account` : `String` - *(Required)* The connected account's first external address.
+ * `psbt` : `String` - *(Required)* Base64 encoded string of the PSBT to sign.
+ * `signInputs` : `Array`
+ * `Object`
+ * `address` : `String` - *(Required)* The address whose private key to use for signing.
+ * `index` : `Integer` - *(Required)* Specifies which input to sign.
+ * `sighashTypes` : `Integer[]` - *(Optional)* Specifies which part(s) of the transaction the signature commits to. Default is `[1]`.
+ * `broadcast` : `Boolean` - *(Optional)* Whether to finalize and broadcast the transaction after signing it. Default is `false`.
+
+### Returns
+
+* `Object`
+ * `psbt` : `String` - *(Required)* The base64 encoded signed PSBT.
+ * `txid` : `String` - *(Optional)* The transaction ID as a hex-encoded string, without 0x prefix. This must be returned if the transaction was broadcasted.
+
+## signMessage
+
+This method is used to sign a message with one of the connected account's addresses.
+
+### Parameters
+
+* `Object`
+ * `account` : `String` - *(Required)* The connected account's first external address.
+ * `message` : `String` - *(Required)* The message to be signed by the wallet.
+ * `address` : `String` - *(Optional)* The address whose private key to use for signing the message.
+ * `protocol` : `"ecdsa" | "bip322"` - *(Optional)* Preferred signature type. Default is `"ecdsa"`.
+
+### Returns
+
+* `Object`
+ * `address` : `String` - *(Required)* The Bitcoin address used to sign the message.
+ * `signature` : `String` - *(Required)* Hex encoded bytes of the signature, without 0x prefix.
+ * `messageHash` : `String` - *(Optional)* Hex encoded bytes of the message hash, without 0x prefix.
+
+## Events
+
+### bip122_addressesChanged
+
+This event is used by wallets to notify dapps about connected accounts' current addresses, for example all addresses with a UTXO and a few unused addresses. The event data has the same format as the [getAccountAddresses](#getaccountaddresses) result.
+
+#### Implementation Details
+
+* Wallets **should** emit a `bip122_addressesChanged` event immediately after connection approval of a BIP122 chain.
+* Wallets **should** emit a `bip122_addressesChanged` event whenever a UTXO is spent or created for a connected account's addresses.
+* Dapps **should** listen for `bip122_addressesChanged` events, collect and monitor all addresses for UTXO and balance changes.
+
+Example [session_event](https://specs.walletconnect.com/2.0/specs/clients/sign/session-events#session_event) payload as received by a dapp:
+
+```
+{
+ "id": 1675759795769537,
+ "topic": "95d6aca451b8e3c6d9d176761bf786f1cc0a6d38dffd31ed896306bb37f6ae8d",
+ "params": {
+ "event": {
+ "name": "bip122_addressesChanged",
+ "data": [
+ {
+ "address": "bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu",
+ "publicKey": "0330d54fd0dd420a6e5f8d3624f5f3482cae350f79d5f0753bf5beef9c2d91af3c",
+ "path": "m/84'/0'/0'/0/0"
+ },
+ {
+ "address": "3KHhcgwPgYF9hE77zaKy2G36dpkcNtvQ33",
+ "publicKey": "03b90230ca20150142bc2849a3df4517073978f32466214a0ebc00cac52f996989",
+ "path": "m/49'/0'/0'/0/7"
+ },
+ {
+ "address": "bc1qp59yckz4ae5c4efgw2s5wfyvrz0ala7rgvuz8z",
+ "publicKey": "038ffea936b2df76bf31220ebd56a34b30c6b86f40d3bd92664e2f5f98488dddfa",
+ "path": "m/84'/0'/0'/0/2"
+ },
+ {
+ "address": "bc1qgl5vlg0zdl7yvprgxj9fevsc6q6x5dmcyk3cn3",
+ "publicKey": "03de7490bcca92a2fb57d782c3fd60548ce3a842cad6f3a8d4e76d1f2ff7fcdb89",
+ "path": "m/84'/0'/0'/0/3"
+ },
+ {
+ "address": "bc1qm97vqzgj934vnaq9s53ynkyf9dgr05rargr04n",
+ "publicKey": "03995137c8eb3b223c904259e9b571a8939a0ec99b0717684c3936407ca8538c1b",
+ "path": "m/84'/0'/0'/0/4"
+ },
+ {
+ "address": "bc1qv6vaedpeke2lxr3q0wek8dd7nzhut9w0eqkz9z",
+ "publicKey": "03d0d243b6a3176fa20fa95cd7fb0e8e0829b83fc2b52053633d088c1a4ba91edf",
+ "path": "m/84'/0'/0'/1/3"
+ },
+ {
+ "address": "bc1qetrkzfslk0d4kqjnu29fdh04tkav9vj3k36vuh",
+ "publicKey": "02a8dee7573bcc7d3c1e9b9e267dbf0cd717343c31d322c5b074a3a97090a0d952",
+ "path": "m/84'/0'/0'/1/4"
+ }
+ ]
+ },
+ "chainId": "bip122:000000000019d6689c085ae165831e93"
+ }
+}
+```
diff --git a/wallets/chains/canton.mdx b/wallets/chains/canton.mdx
new file mode 100644
index 0000000..67cf6dc
--- /dev/null
+++ b/wallets/chains/canton.mdx
@@ -0,0 +1,581 @@
+---
+title: Canton
+description: "Overview of the Canton JSON-RPC methods supported by Wallet SDK."
+---
+
+These are the methods that wallets should implement to handle Canton transactions and messages via WalletConnect.
+
+## Network / Chain Information
+
+- **Namespace:** `canton`
+- **CAIP-2:** `canton:
+
+### Fully Chain-Agnostic
+
+WalletConnect supports 300+ EVM chains, Bitcoin, Solana, and 70+ other networks. Any network with a CAIP-25 namespace is supported.
+
+### Available on 70,000+ dApps
+
+WalletConnect is available on 70,000+ dApps, making it the most widely used wallet connection protocol in the world.
+
+### Available on 500+ wallets
+
+WalletConnect is available on 500+ wallets, making it the most robust and user-friendly. You can find the list of wallets [here](https://walletguide.walletconnect.network/).
\ No newline at end of file
diff --git a/wallets/features/chain-abstraction.mdx b/wallets/features/chain-abstraction.mdx
new file mode 100644
index 0000000..3ae78a9
--- /dev/null
+++ b/wallets/features/chain-abstraction.mdx
@@ -0,0 +1,87 @@
+---
+title: Chain Abstraction
+---
+Chain Abstraction allows users to spend stablecoins across different networks seamlessly.
+This solution provides wallet developers with a toolkit to integrate cross-chain functionality using WalletKit.
+
+
+
+
+## Security providers
+
+Verify API combines WalletConnect's domain registry with threat intelligence from leading web3 security providers. If any of them flags the domain behind a session proposal or session request as malicious, the `verifyContext` of that request is returned with `isScam` set to `true`.
+
+
+
+
+## Disclaimer
+
+Verify API is not designed to be bulletproof but to make the impersonation attack harder and require a somewhat sophisticated attacker. We are working on a new standard with various partners to close those gaps and make it bulletproof.
+
+## Domain risk detection
+
+The Verify security system will discriminate session proposals & session requests with distinct validations that can be either `VALID`, `INVALID` or `UNKNOWN`.
+
+- Domain match: The domain linked to this request has been verified as this application's domain.
+ - This interface appears when the domain a user is attempting to connect to has been ‘verified’ in our domain registry as the registered domain of the application the user is trying to connect to, and the domain has not returned as suspicious from either of the security tools we work with. The `verifyContext` included in the request will have a validation of `VALID`.
+- Unverified: The domain sending the request cannot be verified.
+ - This interface appears when the domain a user is attempting to connect to has not been verified in our domain registry, but the domain has not returned as suspicious from either of the security tools we work with. The `verifyContext` included in the request will have a validation of `UNKNOWN`.
+- Mismatch: The application's domain doesn't match the sender of this request.
+ - This interface appears when the domain a user is attempting to connect to has been flagged as a different domain to the one this application has verified in our domain registry, but the domain has not returned as suspicious from either of the security tools we work with. The `verifyContext` included in the request will have a validation of `INVALID`
+- Threat: This domain is flagged as malicious and potentially harmful.
+ - This interface appears when the domain a user is attempting to connect to has been flagged as malicious on one or more of the security tools we work with. The `verifyContext` included in the request will contain parameter `isScam` with value `true`.
+
+### Implementation
+
+To check the Verify API validations and whether or not your user is interacting with potentially malicious dapp, you can do so by accessing the `verifyContext` included in the `SessionProposalEvent`:
+
+```javascript
+_walletKit!.onSessionProposal.subscribe((SessionProposalEvent? args) {
+ if (args != null) {
+ final scamApp = args.verifyContext?.validation.scam;
+ final invalidApp = args.verifyContext?.validation.invalid;
+ final validApp = args.verifyContext?.validation.valid;
+ final unknown = args.verifyContext?.validation.unknown;
+ }
+});
+```
\ No newline at end of file
diff --git a/wallets/guides/tonconnect-walletconnect.mdx b/wallets/guides/tonconnect-walletconnect.mdx
new file mode 100644
index 0000000..ad901be
--- /dev/null
+++ b/wallets/guides/tonconnect-walletconnect.mdx
@@ -0,0 +1,179 @@
+---
+title: TON Connect WalletConnect Integration
+sidebarTitle: TON Connect + WalletConnect
+description: "Learn how to enable WalletConnect support in your TON Connect application."
+---
+
+import CloudBanner from "/snippets/cloud-banner.mdx";
+
+This guide explains how to enable WalletConnect support in your [TON Connect](https://www.npmjs.com/package/@tonconnect/sdk) application, allowing users to connect with WalletConnect-compatible wallets.
+
+## Prerequisites
+
+Before enabling WalletConnect in your TON Connect application, ensure you have the following:
+
+### 1. TON Connect Project
+
+You should have an existing TON Connect project initialized with the [@tonconnect/sdk](https://www.npmjs.com/package/@tonconnect/sdk) package. If you haven't set up TON Connect yet, please refer to the [TON Connect documentation](https://docs.ton.org/develop/dapps/ton-connect/overview) to get started.
+
+### 2. WalletConnect Project ID
+
+Create a new project on the WalletConnect Dashboard at https://dashboard.walletconnect.com and obtain a new project ID. You will need this project ID to initialize WalletConnect in your application.
+
+
+
+
+### Pairing Error
+
+
+
+
+
+### Expected Errors
+
+While pairing the following errors might occur:
+
+- No Internet connection error or pairing timeout when scanning QR with no Internet connection
+ - User should pair again with Internet connection
+- Pairing expired error when scanning a QR code with expired pairing
+ - User should refresh a QR code and scan again
+- Pairing with existing pairing is not allowed
+ - User should refresh a QR code and scan again. I usually happens when user scans an already paired QR code.
+
+## Session Proposal
+
+A session proposal is a handshake sent by a dapp and it's purpose is to define a session rules. Whenever a user wants to establish a connection between a wallet and a dapp, one should approve a session proposal.
+
+### User Action Feedback
+
+Whenever user approves or rejects a session proposal, wallet should show loading indicators in a moment of the button press until Relay acknowledgement is received for any of this actions.
+
+Session Approve
+```swift
+do {
+ try await WalletKit.instance.approve(proposalId: proposal.id, namespaces: sessionNamespaces, sessionProperties: proposal.sessionProperties)
+ // Update UI, remove loader
+} catch {
+ // present error
+}
+```
+
+Session Reject
+
+```swift
+do {
+ try await WalletKit.instance.reject(proposalId: proposal.id, reason: .userRejected)
+ // Update UI, remove loader
+} catch {
+ // present error
+}
+```
+
+### Session Proposal Expiry
+
+A session proposal expiry is 5 mins. It means a given proposal is stored for 5 mins in the SDK storage and user has 5 mins for approval or rejection decision. After that time the below event is emitted and proposal modal should be removed from the app's UI.
+
+```swift
+WalletKit.instance.sessionProposalExpirationPublisher.sink { _ in
+ // let user know that session proposal has expired, update UI
+}.store(in: &publishers)
+```
+
+### Expected User flow
+
+### Approve or Reject Session Proposal
+
+
+
+
+
+### Error Handling
+
+
+
+
+
+### Expected Errors
+
+While approving or rejecting a session proposal the following errors might occurs:
+
+- No Internet connection
+ - It happens when a user tries to approve or reject session proposal with no Internet connection
+- Session proposal expired
+ - It happens when users tries to approve or reject expired session proposal
+- Invalid namespaces
+ - It happens when a validation of session namespaces fails
+- Timeout
+ - It happens when Relay doesn't acknowledge session settle publish within 10s
+
+## Session Request
+
+A session request represents the request sent by a dapp to a wallet.
+
+### User Action Feedback
+
+Whenever user approves or rejects a session request, wallet should show loading indicators in a moment of the button press until Relay acknowledgement is received for any of this actions.
+
+```swift
+do {
+ try await WalletKit.instance.respond(requestId: request.id, signature: signature, from: account)
+ // update UI -> remove the loader
+} catch {
+ // present error to the user
+}
+```
+
+### Session Request Expiry
+
+A session request expiry is defined by a dapp. It's value must be between now() + 5mins and now() + 7 days. After the session request expires the below event is emitted and session request modal should be removed from the app's UI.
+
+```swift
+WalletKit.instance.requestExpirationPublisher.sink { _ in
+ // let user know that request has expired
+}.store(in: &publishers)
+```
+
+### Expected User flow
+
+### Approve or Reject Session Proposal
+
+
+
+### Error Handling
+
+
+
+### Expected Errors
+
+While approving or rejecting a session request the following error might occur:
+
+- Invalid session
+ - This error might happen when user approves or rejects a session request on expired session
+- Session request expired
+ - This error might happen when user approves or rejects a session request that already expires
+- Timeout
+ - It happens when Relay doesn't acknowledge session settle publish within 10s
+
+## Web Socket Connection State
+
+The Web Socket connection state tracks the connection with the relay server, event is emitted whenever a connection state changes.
+
+```swift
+WalletKit.instance.socketConnectionStatusPublisher
+ .receive(on: DispatchQueue.main)
+ .sink { status in
+ switch status {
+ case .connected:
+ // ...
+ case .disconnected:
+ // ...
+ }
+}.store(in: &publishers)
+```
+
+### Expected User flow
+
+### Connection State
+
+ 
+
\ No newline at end of file
diff --git a/wallets/ios/chain-abstraction.mdx b/wallets/ios/chain-abstraction.mdx
new file mode 100644
index 0000000..8288435
--- /dev/null
+++ b/wallets/ios/chain-abstraction.mdx
@@ -0,0 +1,92 @@
+---
+title: Chain Abstraction
+---
+
+import HowItWorks from "/snippets/walletkit/shared/chain-abstraction/intro.mdx";
+import ErrorHandling from "/snippets/walletkit/shared/chain-abstraction/error-handling.mdx";
+
+
+
+
+### iOS Universal Links Constraints
+
+
+
+
+### Pairing Error
+
+
+
+
+
+### Expected Errors
+
+While pairing the following errors might occur:
+
+- No Internet connection error or pairing timeout when scanning QR with no Internet connection
+ - User should pair again with Internet connection
+- Pairing expired error when scanning a QR code with expired pairing
+ - User should refresh a QR code and scan again
+- Pairing with existing pairing is not allowed
+ - User should refresh a QR code and scan again. I usually happens when user scans an already paired QR code.
+
+## Session Proposal
+
+A session proposal is a handshake sent by a dapp and it's purpose is to define a session rules. Whenever a user wants to establish a connection between a wallet and a dapp, one should approve a session proposal.
+
+### User Action Feedback
+
+Whenever user approves or rejects a session proposal, wallet should show loading indicators in a moment of the button press until Relay acknowledgement is received for any of this actions.
+
+Approving session
+```typescript
+ try {
+ await walletKit.approveSession(params);
+ // update UI -> remove the loader
+ } catch (error) {
+ // present error to the user
+ }
+```
+Rejecting session
+```typescript
+ try {
+ await walletKit.rejectSession(params);
+ // update UI -> remove the loader
+ } catch (error) {
+ // present error to the user
+ }
+```
+
+### Session Proposal Expiry
+
+A session proposal expiry is 5 mins. It means a given proposal is stored for 5 mins in the SDK storage and user has 5 mins for approval or rejection decision. After that time the below event is emitted and proposal modal should be removed from the app's UI.
+
+```typescript
+walletKit.on("proposal_expire", (event) => {
+ // proposal expired and any modal displaying it should be removed
+ const { id } = event;
+});
+```
+
+### Expected User flow
+
+### Approve or Reject Session Proposal
+
+
+
+
+
+### Error Handling
+
+
+
+
+
+### Expected Errors
+
+While approving or rejecting a session proposal the following errors might occurs:
+
+- No Internet connection
+ - It happens when a user tries to approve or reject session proposal with no Internet connection
+- Session proposal expired
+ - It happens when users tries to approve or reject expired session proposal
+- Invalid namespaces
+ - It happens when a validation of session namespaces fails
+- Timeout
+ - It happens when Relay doesn't acknowledge session settle publish within 10s
+
+## Session Request
+
+A session request represents the request sent by a dapp to a wallet.
+
+### User Action Feedback
+
+Whenever user approves or rejects a session request, wallet should show loading indicators in a moment of the button press until Relay acknowledgement is received for any of this actions.
+
+```typescript
+ try {
+ await walletKit.respondSessionRequest(params);
+ // update UI -> remove the loader
+ } catch (error) {
+ // present error to the user
+ }
+```
+
+### Session Request Expiry
+
+A session request expiry is defined by a dapp. It's value must be between now() + 5mins and now() + 7 days. After the session request expires the below event is emitted and session request modal should be removed from the app's UI.
+
+```typescript
+walletKit.on("session_request_expire", (event) => {
+ // request expired and any modal displaying it should be removed
+ const { id } = event;
+});
+```
+
+### Expected User flow
+
+### Approve or Reject Session Proposal
+
+
+
+
+
+### Error Handling
+
+
+
+
+
+### Expected Errors
+
+While approving or rejecting a session request the following error might occur:
+
+- Invalid session
+ - This error might happen when user approves or rejects a session request on expired session
+- Session request expired
+ - This error might happen when user approves or rejects a session request that already expires
+- Timeout
+ - It happens when Relay doesn't acknowledge session settle publish within 10s
+
+## Web Socket Connection State
+
+The Web Socket connection state tracks the connection with the relay server, event is emitted whenever a connection state changes.
+
+```typescript
+core.relayer.on("relayer_connect", () => {
+ // connection to the relay server is established
+})
+
+core.relayer.on("relayer_disconnect", () => {
+// connection to the relay server is lost
+})
+
+```
+
+### Expected User flow
+
+### Connection State
+
+
+ 
+
diff --git a/wallets/react-native/chain-abstraction.mdx b/wallets/react-native/chain-abstraction.mdx
new file mode 100644
index 0000000..6d74bf8
--- /dev/null
+++ b/wallets/react-native/chain-abstraction.mdx
@@ -0,0 +1,96 @@
+---
+title: Chain Abstraction
+---
+
+import HowItWorks from "/snippets/walletkit/shared/chain-abstraction/intro.mdx";
+import ErrorHandling from "/snippets/walletkit/shared/chain-abstraction/error-handling.mdx";
+
+
+
+
+
+### Sign Request Flow
+
+When the Dapp needs the user to sign something (like a transaction), a similar pattern occurs:
+
+- **Automatic Redirect:** The Dapp automatically sends the user to their previously chosen wallet.
+- **Approval Prompt:** The wallet asks the user to approve or reject the request.
+- **Return to Dapp:**
+ - **Manual Return:** The wallet asks the user to manually return to the Dapp.
+ - **Automatic Return:** Alternatively, the wallet automatically takes the user back to the Dapp.
+- **User Reconnects:** Eventually, the user returns to the Dapp.
+
+
+
+
+
+
+## Platform preparations
+
+Since React Native leverages on native APIs, you must follow iOS and Android steps for each native platform
+
+More information in official documentation: https://reactnative.dev/docs/linking?syntax=android#enabling-deep-links
+
+
+
diff --git a/wallets/react-native/notifications/notify/spam-protection.mdx b/wallets/react-native/notifications/notify/spam-protection.mdx
new file mode 100644
index 0000000..0e7bc21
--- /dev/null
+++ b/wallets/react-native/notifications/notify/spam-protection.mdx
@@ -0,0 +1,27 @@
+---
+title: Spam Protection
+---
+
+Users play a critical role in web3. That's why, with Web3Inbox, we’re committed to ensuring users can enjoy a safe, seamless, and reliable experience that puts them in the driver’s seat. As part of that pledge, Web3Inbox provides a number of user-first, anti-spam features and elements that ensure users are always in control of their web3 communications.
+
+## How are users protected from spam with Web3Inbox?
+
+### Becoming a WalletKit Notification customer
+
+When a wallet offers app notifications to their users via Web3Inbox, the feature will always be optional. If users decide they want to receive notifications from selected apps via their wallet, they’ll be able to ‘opt-in’ and subscribe to an app’s notifications by signing a message request. Similarly, when accessing notifications through the [Web3Inbox.com app](https://app.web3inbox.com), users will be met with the same request for each application they choose to subscribe to. This feature not only enables users to experience a customized, ‘app-by-app’ approach to staying connected in web3, but also ensures they only ever hear from the apps they choose to — no unsolicited notifications or spam from unknown senders. Its their curated inbox, connected with only those they choose.
+
+### Setting customized notification preferences
+
+Once users have subscribed to their chosen apps, they have the option to define and set which types of notifications they receive from those apps. For example, a user may wish to receive only information regarding changes to their portfolio from a DEX, or, they might want to receive notifications from an NFT marketplace — but only notifications regarding their own NFT collections. In these scenarios, they’ll have the ability to disable other notification types, like marketing updates, and ensure their feed is curated to show only information that’s meaningful to them. As apps set their own notification types, they have unlimited optionality to really build out a notification structure they know can support their users’ needs — no ‘one size fits all’ approach, but a personable, community-oriented structure that puts both app and user needs’ at the forefront of communication.
+
+### Rate limiting
+
+Apps are limited to a maximum number of notifications they’re able to send to their community. Specifically, apps may send accounts notifications twice an hour on average, but may exceed that average in bursts of up to 50 at a time.
+
+## Our continued pledge on spam protection
+
+We're constantly working on improving and growing our products, and we have a number of impactful anti-spam features and functions in the works set to increase the overall protection and user experience of WalletKit Notification users:
+
+### User reporting
+
+Users will have the ability to report applications that appear to be acting or engaging with their community in a malicious or suspicious manner. Projects that are flagged as malicious may be removed from the WalletKit Notification discover page and have notification functionality disabled.
diff --git a/wallets/react-native/notifications/notify/usage.mdx b/wallets/react-native/notifications/notify/usage.mdx
new file mode 100644
index 0000000..0bc1322
--- /dev/null
+++ b/wallets/react-native/notifications/notify/usage.mdx
@@ -0,0 +1,427 @@
+---
+title: Usage
+---
+
+import CloudBanner from "/snippets/cloud-banner.mdx";
+
+In this section, we showcase the aspects of using the Notify API. We'll guide you through the initial steps of initializing the Notify client and logging in a blockchain account. You'll also learn how to manage your subscriptions and messages. Additionally, we cover the process of setting up and displaying push notifications on your preferred platform. To ensure a good user experience, we include best practices for spam protection, helping you to enable the users to maintain control over the notifications wallet receives.
+
+## Content
+
+Links to sections on this page. Some sections are platform specific and are only visible when the platform is selected. To view a summary of useful platform specific topics, check out Extra (Platform Specific) under this section.
+
+- [Initialization](#initialization):
+ Creating a new Notify Client instance and initializing it with a projectId from [[WalletConnect Dashboard](https://dashboard.walletconnect.com/).
+- [Account login](#account-login):
+ A SIWE message must be signed by the user in order to authorize the client to use Notify API
+- [Subscribing to a new dapp](#subscribing-to-a-new-dapp):
+ Opt-in to receive notifications from dapp
+- [Fetching active subscriptions](#fetching-active-subscriptions):
+ Get active subscriptions
+- [Fetching subscription’s notification](#fetching-subscriptions-notifications):
+ Get notifications of a subscription
+- [Fetching available notification types](#fetching-available-notification-types):
+ Get latest notification types
+- [Updating subscriptions notification settings](#updating-subscriptions-notification-settings):
+ Change allowed notification types sent by dapp
+- [Unsubscribe from a dapp](#unsubscribe-from-a-dapp):
+ Opt-out from receiving notifications from a dapp
+- [Account logout](#account-logout):
+ To stop receiving notifications to this client, accounts can logout of using Notify API
+- [Push Notification Setup](#push-notification-setup):
+ Configuring app in order to decrypt notifications
+
+## Initialization
+
+
+
+
+
+## Handling Authentication Requests
+
+To handle incoming authentication requests, subscribe to the `session_authenticate` event. This will notify you of any authentication requests that need to be processed, allowing you to either approve or reject them based on your application logic.
+
+```typescript
+walletKit.on("session_authenticate", async (payload) => {
+ // Process the authentication request here.
+ // Steps include:
+ // 1. Populate the authentication payload with the supported chains and methods
+ // 2. Format the authentication message using the payload and the user's account
+ // 3. Present the authentication message to the user
+ // 4. Sign the authentication message(s) to create a verifiable authentication object(s)
+ // 5. Approve the authentication request with the authentication object(s)
+});
+```
+
+## Authentication Payload
+
+```typescript
+import { populateAuthPayload } from "@walletconnect/utils";
+
+// EVM chains that your wallet supports
+const supportedChains = ["eip155:1", "eip155:2", 'eip155:137'];
+// EVM methods that your wallet supports
+const supportedMethods = ["personal_sign", "eth_sendTransaction", "eth_signTypedData"];
+// Populate the authentication payload with the supported chains and methods
+const authPayload = populateAuthPayload({
+ authPayload: payload.params.authPayload,
+ chains: supportedChains,
+ methods: supportedMethods,
+});
+// Prepare the user's address in CAIP10(https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-10.md) format
+const iss = `eip155:1:0x0Df6d2a56F90e8592B4FfEd587dB3D5F5ED9d6ef`;
+// Now you can use the authPayload to format the authentication message
+const message = walletKit.formatAuthMessage({
+ request: authPayload,
+ iss
+});
+
+// Present the authentication message to the user
+...
+```
+
+## Approving Authentication Requests
+
+
+
+
+The `session_request` event is triggered by a dapp when it needs the wallet to perform a specific action, such as signing a transaction. The event contains a `topic` and a `request` object, which will vary depending on the action requested.
+
+To respond to the request, the wallet can access the `topic` and `request` object by destructuring them from the event payload. To see a list of possible `request` and `response` objects, refer to the relevant JSON-RPC Methods for [Ethereum](https://docs.reown.com/advanced/multichain/rpc-reference/ethereum-rpc), [Solana](https://docs.reown.com/advanced/multichain/rpc-reference/solana-rpc), [Cosmos](https://docs.reown.com/advanced/multichain/rpc-reference/cosmos-rpc), or [Stellar](https://docs.reown.com/advanced/multichain/rpc-reference/stellar-rpc).
+
+As an example, if the dapp requests a `personal_sign` method, the wallet can extract the `params` array from the `request` object. The first item in the array is the hex version of the message to be signed, which can be converted to UTF-8 and assigned to a `message` variable. The second item in `params` is the user's wallet address.
+
+To sign the message, the wallet can use the `wallet.signMessage` method and pass in the message. The signed message, along with the `id` from the event payload, can then be used to create a `response` object, which can be passed into `respondSessionRequest`.
+
+The wallet then signs the message. `signedMessage`, along with the `id` from the event payload, can then be used to create a `response` object, which can be passed into `respondSessionRequest`.
+
+```javascript
+walletKit.on("session_request", async (event) => {
+ const { topic, params, id } = event;
+ const { request } = params;
+ const requestParamsMessage = request.params[0];
+
+ // convert `requestParamsMessage` by using a method like hexToUtf8
+ const message = hexToUtf8(requestParamsMessage);
+
+ // sign the message
+ const signedMessage = await wallet.signMessage(message);
+
+ const response = { id, result: signedMessage, jsonrpc: "2.0" };
+
+ await walletKit.respondSessionRequest({ topic, response });
+});
+```
+
+To reject a session request, the response should be similar to this.
+
+```javascript
+const response = {
+ id,
+ jsonrpc: "2.0",
+ error: {
+ code: 5000,
+ message: "User rejected.",
+ },
+};
+```
+
+### Updating a Session
+
+The `session_update` event is emitted from the wallet when the session is updated by calling `updateSession`. To update a session, pass in the [topic](https://docs.reown.com/advanced/glossary#topics) and the new namespace.
+
+```javascript
+await walletKit.updateSession({ topic, namespaces: newNs });
+```
+
+### Extending a Session
+
+To extend the session, call the `extendSession` method and pass in the new `topic`. The `session_update` event will be emitted from the wallet.
+
+```javascript
+await walletKit.extendSession({ topic });
+```
+
+### Session Disconnect
+
+When either the dapp or the wallet disconnects from a session, a `session_delete` event will be emitted. It's important to subscribe to this event so you could keep your state up-to-date.
+
+To initiate a session disconnect, call the `disconnectSession` method and pass in the `topic` and `reason`. You can use the `getSDKError` utility function, which is available in the `@walletconnect/utils` [library](https://github.com/WalletConnect/walletconnect-monorepo/tree/v2.0/packages/utils).
+
+```javascript
+await walletKit.disconnectSession({
+ topic,
+ reason: getSdkError("USER_DISCONNECTED"),
+});
+```
+
+### Emitting Session Events
+
+To emit session events, call the `emitSessionEvent` and pass in the params. If you wish to switch to chain/account that is not approved (missing from `session.namespaces`) you will have to update the session first. In the following example, the wallet will emit `session_event` that will instruct the dapp to switch the active accounts.
+
+```javascript
+await walletKit.emitSessionEvent({
+ topic,
+ event: {
+ name: "accountsChanged",
+ data: ["0xab16a96D359eC26a11e2C2b3d8f8B8942d5Bfcdb"],
+ },
+ chainId: "eip155:1",
+});
+```
+
+In the following example, the wallet will emit `session_event` when the wallet switches chains.
+
+```javascript
+await walletKit.emitSessionEvent({
+ topic,
+ event: {
+ name: "chainChanged",
+ data: 1,
+ },
+ chainId: "eip155:1",
+});
+```
diff --git a/wallets/react-native/verify.mdx b/wallets/react-native/verify.mdx
new file mode 100644
index 0000000..3fd7c16
--- /dev/null
+++ b/wallets/react-native/verify.mdx
@@ -0,0 +1,72 @@
+---
+title: Verify API
+---
+
+Verify API is a security-focused feature that allows wallets to notify end-users when they may be connecting to a suspicious or malicious domain, helping to prevent phishing attacks across the industry.
+Once a wallet knows whether an end-user is on uniswap.com or eviluniswap.com, it can help them to detect potentially harmful connections through Verify's combined offering of WalletConnect's domain registry.
+
+When a user initiates a connection with an application, Verify API enables wallets to present their users with four key states that can help them determine whether the domain they’re about to connect to might be malicious.
+
+These are:
+
+
+
+
+
+## Disclaimer
+
+Verify API is not designed to be bulletproof but to make the impersonation attack harder and require a somewhat sophisticated attacker. We are working on a new standard with various partners to close those gaps and make it bulletproof.
+
+## Domain risk detection
+
+The Verify security system will discriminate session proposals & session requests with distinct validations that can be either `VALID`, `INVALID` or `UNKNOWN`.
+
+- Domain match: The domain linked to this request has been verified as this application's domain.
+ - This interface appears when the domain a user is attempting to connect to has been ‘verified’ in our domain registry as the registered domain of the application the user is trying to connect to, and the domain has not returned as suspicious from either of the security tools we work with. The `verifyContext` included in the request will have a validation of `VALID`.
+- Unverified: The domain sending the request cannot be verified.
+ - This interface appears when the domain a user is attempting to connect to has not been verified in our domain registry, but the domain has not returned as suspicious from either of the security tools we work with. The `verifyContext` included in the request will have a validation of `UNKNOWN`.
+- Mismatch: The application's domain doesn't match the sender of this request.
+ - This interface appears when the domain a user is attempting to connect to has been flagged as a different domain to the one this application has verified in our domain registry, but the domain has not returned as suspicious from either of the security tools we work with. The `verifyContext` included in the request will have a validation of `INVALID`
+- Threat: This domain is flagged as malicious and potentially harmful.
+ - This interface appears when the domain a user is attempting to connect to has been flagged as malicious on one or more of the security tools we work with. The `verifyContext` included in the request will contain parameter `isScam` with value `true`.
+
+### Implementation
+
+To check the Verify API validations and whether or not your user is interacting with potentially malicious app, you can do so by accessing the `verifyContext` included in the request payload.
+
+```javascript
+...
+walletKit.on("auth_request", async (authRequest) => {
+ const { verifyContext } = authRequest
+ const validation = verifyContext.verified.validation // can be VALID, INVALID or UNKNOWN
+ const origin = verifyContext.verified.origin // the actual verified origin of the request
+ const isScam = verifyContext.verified.isScam // true if the domain is flagged as malicious
+
+ // if the domain is flagged as malicious, you should warn the user as they may lose their funds - check the `Threat` case for more info
+ if(isScam) {
+ // show a warning screen to the user
+ // and proceed only if the user accepts the risk
+ }
+
+ switch(validation) {
+ case "VALID":
+ // proceed with the request - check the `Domain match` case for more info
+ break
+ case "INVALID":
+ // show a warning dialog to the user - check the `Mismatch` case for more info
+ // and proceed only if the user accepts the risk
+ break
+ case "UNKNOWN":
+ // show a warning dialog to the user - check the `Unverified` case for more info
+ // and proceed only if the user accepts the risk
+ break
+ }
+})
+```
+
+For live demo examples of the intended Verify API flows, check out our demo apps:
+
+- [Demo Web Wallet](https://react-wallet.walletconnect.com)
+- [Demo React Native Wallet](https://github.com/WalletConnect/react-native-examples/tree/main/wallets/rn_cli_wallet)
+- [Demo App](https://react-app.walletconnect.com/) - you can toggle between the verify states by clicking on the `gear` & selecting the decided Validation before connecting to the wallet
+- [Demo Malicious App](https://malicious-app-verify-simulation.vercel.app/) - this app is flagged as malicious and will have the `isScam` parameter set to `true` in the `verifyContext` of the request
diff --git a/wallets/walletguide/chain-list.mdx b/wallets/walletguide/chain-list.mdx
new file mode 100644
index 0000000..d623181
--- /dev/null
+++ b/wallets/walletguide/chain-list.mdx
@@ -0,0 +1,17 @@
+---
+title: Supported Chains
+---
+
+import { ChainList } from "/snippets/chainlist.mdx"
+
+## Overview
+
+This page provides a list of chains on the [WalletGuide](https://walletguide.walletconnect.network/). WalletGuide is a tool that allows users to discover wallets and dapps that support their preferred blockchain.
+
+On this page, you can:
+
+- Filter chains by Mainnet / Testnet
+- Search for chains by name
+- Click on a chain to copy its Chain ID
+
+
+
+
+- Select **"Wallet"**, enter a project name, and click **"Add"**.
+
+
+
+
+
+
+## Project Details
+
+- From the project Dashboard, click on the **"WalletGuide"** tab in the top navigation.
+
+
+
+
+
+- Click **"Start submission"** to begin the submission wizard.
+
+
+
+
+
+## Project Submission
+
+The submission is a multi-step wizard. Follow each step to complete your listing:
+
+### Step 1 — Describe your project
+
+Fill in your wallet's basic details:
+
+- **Name** — This will appear in WalletGuide and other SDKs using the WalletConnect API
+- **Link** — The homepage URL of your project
+- **Description** — A short description of your wallet
+- **Logo** — Upload your wallet's logo
+
+Click **"Continue"** to proceed.
+
+
+
+
+
+### Step 2 — Add wallet types
+
+Select the wallet types that apply to your project and provide the required links for each:
+
+- Mobile Wallet
+- Desktop Wallet
+- Web Wallet
+- Browser Extension
+
+Click **"+ Add"** next to each applicable type to add its details. Click **"Continue"** when done.
+
+
+
+
+
+
+
+
+
+### Step 3 — Add chains
+
+Select all chains your project supports. You can search by name or browse by ecosystem (EVM, Solana, Cosmos, etc.). Toggle **"My wallet supports custom chains"** if applicable.
+
+Click **"Continue"** when done.
+
+
+
+
+
+### Step 4 — Submit your listing
+
+Add **Test instructions** to help the review team validate your WalletConnect integration. Clear test instructions help accelerate the review process.
+
+Click **"Submit"** to send your listing for review.
+
+
+
+
+
+## Review Timeline
+
+After submitting, your listing will go through a QA review to verify your WalletConnect integration is working correctly.
+
+- **Initial review** takes **7–10 business days** on average. You can track the status in the **WalletGuide** tab of your project — it will show as **"In Review"** while pending.
+- **Once approved**, changes take approximately **24 hours** to go live on the production WalletGuide page.
+
+If your submission is not accepted, the reason will be noted in the WalletGuide tab and in the notification email. You can make the necessary changes and resubmit at any time.
+
+## How do we test wallets?
+
+In order to offer a great user experience in our APIs and SDKs every Cloud submission goes through a QA process to make sure that the integration of the WalletConnect protocol is working correctly.
+
+The following list details our QA flow and how to reproduce it:
+
+| Test Case | Steps | Expected Results |
+|-----------------------------------------------|-------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|
+| **Set Up** | 1. Download the wallet
+
+
+If your submission was not accepted, you can make the necessary changes and resubmit your project for review. The reason for rejection will be mentioned in the email and in the WalletGuide tab of your project.
+
+In case of any questions, feel free to ask on [Github Discussions](https://github.com/orgs/WalletConnect/discussions/categories/explorer-support)
diff --git a/wallets/walletguide/wallet-list.mdx b/wallets/walletguide/wallet-list.mdx
new file mode 100644
index 0000000..f273c67
--- /dev/null
+++ b/wallets/walletguide/wallet-list.mdx
@@ -0,0 +1,17 @@
+---
+title: Wallets
+sidebarTitle: Wallet List
+---
+
+import { WalletList } from "/snippets/walletlist.mdx"
+
+## Overview
+
+This page provides a list of wallets on the [WalletGuide](https://walletguide.walletconnect.network/). WalletGuide is a tool that allows users to discover wallets and all the information like WalletId, networks, supported devices, and official links.
+
+On this page, you can:
+
+- Search for wallets by name
+- Click on a wallet to copy the WalletId
+
+
+
+
+### Pairing Error
+
+
+
+
+
+### Expected Errors
+
+While pairing the following errors might occur:
+
+- No Internet connection error or pairing timeout when scanning QR with no Internet connection
+ - User should pair again with Internet connection
+- Pairing expired error when scanning a QR code with expired pairing
+ - User should refresh a QR code and scan again
+- Pairing with existing pairing is not allowed
+ - User should refresh a QR code and scan again. I usually happens when user scans an already paired QR code.
+
+## Session Proposal
+
+A session proposal is a handshake sent by a dapp and it's purpose is to define a session rules. Whenever a user wants to establish a connection between a wallet and a dapp, one should approve a session proposal.
+
+### User Action Feedback
+
+Whenever user approves or rejects a session proposal, wallet should show loading indicators in a moment of the button press until Relay acknowledgement is received for any of this actions.
+
+Approving session
+
+```typescript
+ try {
+ await walletKit.approveSession(params);
+ // update UI -> remove the loader
+ } catch (error) {
+ // present error to the user
+ }
+```
+
+Rejecting session
+
+```typescript
+ try {
+ await walletKit.rejectSession(params);
+ // update UI -> remove the loader
+ } catch (error) {
+ // present error to the user
+ }
+```
+
+### Session Proposal Expiry
+
+A session proposal expiry is 5 mins. It means a given proposal is stored for 5 mins in the SDK storage and user has 5 mins for approval or rejection decision. After that time the below event is emitted and proposal modal should be removed from the app's UI.
+
+```typescript
+walletKit.on("proposal_expire", (event) => {
+ // proposal expired and any modal displaying it should be removed
+ const { id } = event;
+});
+```
+
+### Expected User flow
+
+### Approve or Reject Session Proposal
+
+
+
+
+
+### Error Handling
+
+
+
+
+
+### Expected Errors
+
+While approving or rejecting a session proposal the following errors might occurs:
+
+- No Internet connection
+ - It happens when a user tries to approve or reject session proposal with no Internet connection
+- Session proposal expired
+ - It happens when users tries to approve or reject expired session proposal
+- Invalid namespaces
+ - It happens when a validation of session namespaces fails
+- Timeout
+ - It happens when Relay doesn't acknowledge session settle publish within 10s
+
+## Session Request
+
+A session request represents the request sent by a dapp to a wallet.
+
+### User Action Feedback
+
+Whenever user approves or rejects a session request, wallet should show loading indicators in a moment of the button press until Relay acknowledgement is received for any of this actions.
+
+```typescript
+ try {
+ await walletKit.respondSessionRequest(params);
+ // update UI -> remove the loader
+ } catch (error) {
+ // present error to the user
+ }
+```
+
+### Session Request Expiry
+
+A session request expiry is defined by a dapp. It's value must be between now() + 5mins and now() + 7 days. After the session request expires the below event is emitted and session request modal should be removed from the app's UI.
+
+```typescript
+walletKit.on("session_request_expire", (event) => {
+ // request expired and any modal displaying it should be removed
+ const { id } = event;
+});
+```
+
+### Expected User flow
+
+### Approve or Reject Session Proposal
+
+
+
+
+
+### Error Handling
+
+
+
+
+
+### Expected Errors
+
+While approving or rejecting a session request the following error might occur:
+
+- Invalid session
+ - This error might happen when user approves or rejects a session request on expired session
+- Session request expired
+ - This error might happen when user approves or rejects a session request that already expires
+- Timeout
+ - It happens when Relay doesn't acknowledge session settle publish within 10s
+
+## Web Socket Connection State
+
+The Web Socket connection state tracks the connection with the relay server, event is emitted whenever a connection state changes.
+
+```typescript
+core.relayer.on("relayer_connect", () => {
+ // connection to the relay server is established
+})
+
+core.relayer.on("relayer_disconnect", () => {
+// connection to the relay server is lost
+})
+
+```
+
+### Expected User flow
+
+### Connection State
+
+
+ 
+
diff --git a/wallets/web/chain-abstraction.mdx b/wallets/web/chain-abstraction.mdx
new file mode 100644
index 0000000..3ed6768
--- /dev/null
+++ b/wallets/web/chain-abstraction.mdx
@@ -0,0 +1,92 @@
+---
+title: "Chain Abstraction"
+---
+
+import HowItWorks from "/snippets/walletkit/shared/chain-abstraction/intro.mdx";
+import ErrorHandling from "/snippets/walletkit/shared/chain-abstraction/error-handling.mdx";
+
+
+
+
+
+
+Additionally, you don't need to build SDKs in native languages such as Swift, Kotlin, Flutter, Unity, or React Native. This means your wallet can be available not just for web dApps, but also for native dApps, all from a single codebase.
+
+This section provides instructions on how to initialize the WalletKit client, approve sessions with supported namespaces, and respond to session requests, enabling easy integration of Web3 wallets with dApps through a simple and intuitive interface.
+
+## User Experience
+
+### Default Integration
+
+This integration automatically opens a new web wallet tab when a user clicks "Connect" in a dApp. The wallet handles the WalletConnect URI automatically, meaning users don't need to manually copy and paste the URI. This provides a seamless, one-click connection experience.
+
+
+
+
+
+### QR Code Integration
+
+This integration only handles the session proposal and approval via the WalletConnect QR code. The user will need to manually copy and paste the WalletConnect URI into the wallet.
+
+
+
+
+
+## Cloud Configuration
+
+Create a new project on WalletConnect Dashboard at https://dashboard.walletconnect.com and obtain a new project ID.
+
+