From dbeb15cb2f00db8ce16a016c363597ce810f07dd Mon Sep 17 00:00:00 2001 From: Joel Lovera Date: Tue, 21 Jul 2026 13:03:15 +0200 Subject: [PATCH 1/5] WG docs refactor --- docs-main/docs.json | 33 ++- .../release-notes/wallet-gateway.mdx | 2 +- .../wallet-gateway/guides/configure.mdx | 189 +++++++++++++++ .../wallet-gateway/guides/manage-wallets.mdx | 69 ++++++ .../guides/networks-and-identity.mdx | 179 ++++++++++++++ .../wallet-gateway/operate/deploy.mdx | 56 +++++ .../wallet-gateway/operate/security.mdx | 49 ++++ .../operate/troubleshooting.mdx | 136 +++++++++++ .../integrations/wallet-gateway/overview.mdx | 135 +++++++++++ .../wallet-gateway/quickstart.mdx | 105 +++++++++ .../reference/configuration-reference.mdx | 164 +++++++++++++ .../wallet-gateway/reference/dapp-api.mdx | 58 +++++ .../wallet-gateway/reference/user-api.mdx | 71 ++++++ .../wallet-gateway/signing-providers.mdx | 219 ++++++++---------- 14 files changed, 1337 insertions(+), 128 deletions(-) create mode 100644 docs-main/integrations/wallet-gateway/guides/configure.mdx create mode 100644 docs-main/integrations/wallet-gateway/guides/manage-wallets.mdx create mode 100644 docs-main/integrations/wallet-gateway/guides/networks-and-identity.mdx create mode 100644 docs-main/integrations/wallet-gateway/operate/deploy.mdx create mode 100644 docs-main/integrations/wallet-gateway/operate/security.mdx create mode 100644 docs-main/integrations/wallet-gateway/operate/troubleshooting.mdx create mode 100644 docs-main/integrations/wallet-gateway/overview.mdx create mode 100644 docs-main/integrations/wallet-gateway/quickstart.mdx create mode 100644 docs-main/integrations/wallet-gateway/reference/configuration-reference.mdx create mode 100644 docs-main/integrations/wallet-gateway/reference/dapp-api.mdx create mode 100644 docs-main/integrations/wallet-gateway/reference/user-api.mdx diff --git a/docs-main/docs.json b/docs-main/docs.json index 01caf85ec..5d7ff4922 100644 --- a/docs-main/docs.json +++ b/docs-main/docs.json @@ -522,17 +522,34 @@ { "group": "Wallet Gateway", "pages": [ - "integrations/wallet-gateway/download", - "integrations/wallet-gateway/configuration", + "integrations/wallet-gateway/overview", + "integrations/wallet-gateway/quickstart", { - "group": "Wallet Gateway Integration Guide", + "group": "Guides", "pages": [ - "integrations/wallet-gateway/usage", - "integrations/wallet-gateway/signing-providers", - "integrations/wallet-gateway/apis", - "integrations/wallet-gateway/troubleshooting" + "integrations/wallet-gateway/guides/configure", + "integrations/wallet-gateway/guides/networks-and-identity", + "integrations/wallet-gateway/guides/manage-wallets" ] - } + }, + "integrations/wallet-gateway/signing-providers", + { + "group": "Deploy & operate", + "pages": [ + "integrations/wallet-gateway/operate/deploy", + "integrations/wallet-gateway/operate/security", + "integrations/wallet-gateway/operate/troubleshooting" + ] + }, + { + "group": "Reference", + "pages": [ + "integrations/wallet-gateway/reference/user-api", + "integrations/wallet-gateway/reference/dapp-api", + "integrations/wallet-gateway/reference/configuration-reference" + ] + }, + "integrations/release-notes/wallet-gateway" ] }, { diff --git a/docs-main/integrations/release-notes/wallet-gateway.mdx b/docs-main/integrations/release-notes/wallet-gateway.mdx index f36c0f3f1..17cb6d81c 100644 --- a/docs-main/integrations/release-notes/wallet-gateway.mdx +++ b/docs-main/integrations/release-notes/wallet-gateway.mdx @@ -1,5 +1,5 @@ --- -title: "Wallet Gateway" +title: "Release Notes" description: "Release notes for the Canton Network Wallet Gateway" --- diff --git a/docs-main/integrations/wallet-gateway/guides/configure.mdx b/docs-main/integrations/wallet-gateway/guides/configure.mdx new file mode 100644 index 000000000..30efc4f88 --- /dev/null +++ b/docs-main/integrations/wallet-gateway/guides/configure.mdx @@ -0,0 +1,189 @@ +--- +title: "Configure the Wallet Gateway" +description: "Understand the Wallet Gateway configuration file: kernel, server, and store settings." +--- + +The Wallet Gateway reads a single JSON configuration file that defines who the Wallet Gateway is, +how it serves requests, where it persists data, and which networks and identity providers it +starts with. This guide covers the file's structure and the kernel, server, and store +sections. For networks and authentication, see +[Networks & identity providers](/integrations/wallet-gateway/guides/networks-and-identity). +For an exhaustive field reference, see the +[Configuration reference](/integrations/wallet-gateway/reference/configuration-reference). + +## Generate a starting point + +Write an example configuration you can edit: + +```bash +wallet-gateway --config-example > config.json +``` + +To see the full JSON Schema (useful for validation and IDE autocompletion): + +```bash +wallet-gateway --config-schema +``` + +## File structure + +The configuration file has five top-level sections: + +| Section | Required | Purpose | +| --- | --- | --- | +| `kernel` | yes | Identity of this Wallet Gateway instance, served to dApps. | +| `server` | yes | Network binding, ports, API paths, and the admin user. | +| `store` | yes | Database connection for sessions, wallets, networks, IDPs, and transactions. | +| `bootstrap` | yes | Networks and identity providers seeded on first run. | +| `signingStore` | no | Secondary database for keys when using internal signing. | + +A minimal configuration for a local setup looks like this: + +```json +{ + "kernel": { + "id": "remote-da", + "clientType": "remote" + }, + "server": { + "port": 3030, + "dappPath": "/api/v0/dapp", + "userPath": "/api/v0/user", + "allowedOrigins": ["http://localhost:8080"], + "admin": "operator" + }, + "store": { + "connection": { + "type": "sqlite", + "database": "store.sqlite" + } + }, + "bootstrap": { + "idps": [], + "networks": [] + } +} +``` + +Fill in `bootstrap.idps` and `bootstrap.networks` following +[Networks & identity providers](/integrations/wallet-gateway/guides/networks-and-identity). + +## Kernel + +The `kernel` section identifies this Wallet Gateway instance to dApps. + +- `id` (required): a stable, unique identifier, for example `"my-gateway-prod"`. +- `clientType` (required): `"remote"` for a remote Wallet Gateway. +- `publicUrl` (optional): the base URL used to redirect clients. If omitted, it is derived + from the server host and port. Set this when running behind a reverse proxy or load + balancer. + +```json +{ + "kernel": { + "id": "my-production-gateway", + "clientType": "remote", + "publicUrl": "https://wallet.example.com" + } +} +``` + +## Server + +The `server` section configures binding, ports, and API paths. + +- `port` (optional, default `3030`): the port the server binds to. Also used to generate + popup URLs in the discovery flow. +- `dappPath` (optional, default `/api/v0/dapp`): the path where dApps connect. +- `userPath` (optional, default `/api/v0/user`): the path used by the User UI and User API. +- `allowedOrigins` (optional, default `["*"]`): CORS allowed origins. In production, list + exact origins instead of `"*"`. +- `requestSizeLimit` (optional, default `"1mb"`): maximum request body size. +- `requestRateLimit` (optional, default `10000`): maximum requests per minute per IP + (health endpoints excluded). +- `admin` (optional): the user ID (JWT `sub` claim) granted admin privileges, which allow + managing networks and identity providers at runtime. If omitted, network and IDP + management is restricted to the bootstrap configuration. + +```json +{ + "server": { + "port": 3030, + "dappPath": "/api/v0/dapp", + "userPath": "/api/v0/user", + "allowedOrigins": ["https://my-dapp.example.com"], + "requestSizeLimit": "10mb", + "requestRateLimit": 10000, + "admin": "operator" + } +} +``` + +## Store + +The `store` connection determines where the Wallet Gateway persists sessions, wallet +configurations, networks, identity providers, and in-flight transactions. Three backends are +available: + +| Backend | Use for | Persistence | +| --- | --- | --- | +| `memory` | Quick testing | Lost on restart. | +| `sqlite` | Local development | Persists to a file. | +| `postgres` | Production and test | Reliable, scalable, backup-friendly. | + +```json +{ + "store": { + "connection": { + "type": "postgres", + "host": "db.example.com", + "port": 5432, + "user": "wallet_gateway", + "password": "secure-password", + "database": "wallet_gateway_db" + } + } +} +``` + + +With the `memory` store in Docker or Kubernetes, all data is lost when the container or pod is +recreated. `sqlite` persists only if the database file is on a persistent volume. Use +`postgres` for production. See the +[Configuration reference](/integrations/wallet-gateway/reference/configuration-reference) +for backup guidance. + + +## Signing store + +The optional `signingStore` is a secondary database used only when the Wallet Gateway signs +transactions itself (the internal signing provider). It uses the same connection options as +`store`. Omit it entirely when using a participant node or an external custody provider. + +```json +{ + "signingStore": { + "connection": { + "type": "sqlite", + "database": "signingStore.sqlite" + } + } +} +``` + + +The internal signing provider stores private keys in the signing store database. Do not use it +in production systems with valuable assets. See +[Signing providers](/integrations/wallet-gateway/signing-providers). + + +## Next steps + + + + Connect to a validator and configure authentication. + + + Every field, all auth methods, and per-environment guidance. + + diff --git a/docs-main/integrations/wallet-gateway/guides/manage-wallets.mdx b/docs-main/integrations/wallet-gateway/guides/manage-wallets.mdx new file mode 100644 index 000000000..0f1705693 --- /dev/null +++ b/docs-main/integrations/wallet-gateway/guides/manage-wallets.mdx @@ -0,0 +1,69 @@ +--- +title: "Manage wallets" +description: "Create and manage wallets through the Wallet Gateway's User UI or User API." +--- + +Users interact with the Wallet Gateway in two ways: the **User UI** for people, and the +**User API** for scripts, custom UIs, and backend automation. Both manage the same wallets, +networks, identity providers, and sessions. This guide covers the User UI, common workflows, +and when to reach for the User API instead. + +The **dApp API** is separate: dApps call it (through the dApp SDK) when a user connects a +wallet. See [dApp API](/integrations/wallet-gateway/reference/dapp-api). + +## User UI + +The Wallet Gateway serves a web UI at its root URL (for example `http://localhost:3030`). Its main +pages are: + +| Page | Path | What it does | +| --- | --- | --- | +| **Login** | `/login` | Choose a network and IDP, then sign in (OAuth redirect or self-signed). | +| **Wallets** | `/wallets` | List, create, and remove wallets, and set the primary wallet. Default landing page. | +| **Transactions** | `/transactions` | List transactions and view status and details. | +| **Approve** | `/approve` | Review and sign or reject a transaction a dApp requested. | +| **Settings** | `/settings` | Manage networks and IDPs, view sessions, and see version info. | +| **Callback** | `/callback` | Internal OAuth redirect target after login. | + +Users log out from the layout control. Logout calls `removeSession`, clears local auth state, +and returns to `/login` (or closes the window if the UI was opened as an approval popup). + +## When to use which interface + +- **User UI**: best for end users. They log in, create and manage wallets, view transactions, + and approve dApp requests. No code required. +- **User API**: use it to drive wallet setup from scripts or a backend, build a custom wallet + UI embedded in your app, or automate session, network, IDP, and wallet operations. + +## Common workflows + +### Set up a wallet (User UI) + +1. Open the User UI and go to **Login**. +2. Select a network and IDP, then complete login (for example, OAuth). +3. On **Wallets**, create a wallet by choosing a network, signing provider, and party ID. + Optionally set it as primary. +4. Add networks or IDPs under **Settings** if needed (admin only). + +### Approve a dApp transaction + +1. A dApp calls `prepareExecute` through the dApp SDK. +2. The user is taken to **Approve** to review the transaction. +3. The user signs or rejects it, and the dApp is notified of the result. + +### Automate wallet setup (User API) + +1. Call `addSession()`, then complete your auth flow to obtain a JWT. +2. Call `listNetworks()` and `listIdps()` to discover available options. +3. Call `createWallet()` with the desired network and signing provider. +4. Use `listWallets()`, `sign()`, `execute()`, and related methods as your use case requires. + +See the [User API](/integrations/wallet-gateway/reference/user-api) for the full method list. + +## Sessions + +Users authenticate through an IDP, and the Wallet Gateway issues a **session** (a JWT) that the User +and dApp APIs use to authorize later calls. `addSession()` starts the connection, your auth +flow supplies the JWT, and `removeSession()` (or logging out) ends it. Sessions are stored in +the Wallet Gateway's database, so back it up to avoid invalidating active sessions. See +[Networks & identity providers](/integrations/wallet-gateway/guides/networks-and-identity). diff --git a/docs-main/integrations/wallet-gateway/guides/networks-and-identity.mdx b/docs-main/integrations/wallet-gateway/guides/networks-and-identity.mdx new file mode 100644 index 000000000..ab1536ae2 --- /dev/null +++ b/docs-main/integrations/wallet-gateway/guides/networks-and-identity.mdx @@ -0,0 +1,179 @@ +--- +title: "Networks & identity providers" +description: "Connect the Wallet Gateway to a Canton validator and configure how users authenticate." +--- + +A Wallet Gateway connects users to one or more **networks**. Each network points at a Canton +validator's Ledger API and references an **identity provider** (IDP) that issues the JWT used +to authenticate against that validator. This guide covers both, plus the authentication +methods a network can use. + +Networks and IDPs are seeded from the `bootstrap` section on first run. After that, the admin +user (see `server.admin` in [Configure the Wallet Gateway](/integrations/wallet-gateway/guides/configure)) +can manage them at runtime through the User API or User UI. + +## Identity providers + +Every network references an IDP by `id`. The Wallet Gateway supports two IDP types. + + +Use an **OAuth** IDP for production. Self-signed tokens are for development and testing only. + + +### OAuth / OpenID Connect + +Integrates with an external OAuth 2.0 / OpenID Connect provider to obtain tokens. + +- `id` (required): must match the `identityProviderId` referenced by networks. +- `type` (required): `"oauth"`. +- `issuer` (required): the `iss` claim value, matching your provider's configuration. +- `configUrl` (required): the OpenID Connect discovery endpoint, typically + `${OAuthServerURL}/.well-known/openid-configuration`. + +```json +{ + "bootstrap": { + "idps": [ + { + "id": "idp-production", + "type": "oauth", + "issuer": "https://auth.example.com", + "configUrl": "https://auth.example.com/.well-known/openid-configuration" + } + ] + } +} +``` + +### Self-signed + +Generates JWTs locally using a secret. Convenient for development, not for production. + +- `id` (required): must match the `identityProviderId` referenced by networks. +- `type` (required): `"self_signed"`. +- `issuer` (required): the `iss` claim value, matching what the validator expects. + +```json +{ + "bootstrap": { + "idps": [ + { + "id": "idp-self-signed", + "type": "self_signed", + "issuer": "self-signed" + } + ] + } +} +``` + +## Networks + +A network represents a Canton validator that users can reach through the Wallet Gateway. `networks` +is an array, so you can configure several in one Wallet Gateway. + +- `id` (required): unique identifier in [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) + form, for example `"canton:localnet"`. +- `name` (required): a user-friendly name shown in the UI. +- `description` (optional): a description shown to users. +- `synchronizerId` (required): the synchronizer ID used on the validator. For multiple + synchronizers, configure a separate network per synchronizer. +- `identityProviderId` (required): must match the `id` of a configured IDP. +- `ledgerApi.baseUrl` (required): the base URL of the validator's Ledger API. +- `auth` (required): authentication for normal ledger operations. This is the method users go + through in the UI. +- `adminAuth` (optional): authentication for admin operations, used by the backend only. + +```json +{ + "bootstrap": { + "networks": [ + { + "id": "canton:localnet", + "name": "Local Network", + "description": "Local development network", + "synchronizerId": "local", + "identityProviderId": "idp-self-signed", + "auth": { + "method": "self_signed", + "issuer": "self-signed", + "audience": "https://canton.network.global", + "scope": "openid daml_ledger_api offline_access", + "clientId": "ledger-api-user", + "clientSecret": "unsafe" + }, + "ledgerApi": { + "baseUrl": "http://localhost:2975" + } + } + ] + } +} +``` + +## Authentication methods + +A network's `auth` (and optional `adminAuth`) uses one of three methods. + +| Method | Use for | Notes | +| --- | --- | --- | +| `authorization_code` | Interactive, user-facing flows | Users grant authorization in their browser. | +| `client_credentials` | Machine-to-machine (production) | Recommended for `adminAuth` and server deployments. | +| `self_signed` | Development and testing | The Wallet Gateway signs tokens locally. | + +### authorization_code + +```json +{ + "auth": { + "method": "authorization_code", + "audience": "https://canton.network.global", + "scope": "openid daml_ledger_api offline_access", + "clientId": "my-client-id" + } +} +``` + +### client_credentials + +```json +{ + "auth": { + "method": "client_credentials", + "audience": "https://canton.network.global", + "scope": "openid daml_ledger_api offline_access", + "clientId": "my-service-client", + "clientSecret": "my-secure-secret" + } +} +``` + +### self_signed + +```json +{ + "auth": { + "method": "self_signed", + "issuer": "self-signed", + "audience": "https://canton.network.global", + "scope": "openid daml_ledger_api offline_access", + "clientId": "ledger-api-user", + "clientSecret": "unsafe-secret-for-development" + } +} +``` + + +`clientSecret` and `adminAuth` credentials are sensitive. Keep them out of version control and +supply them through environment variables or a secret manager. See the +[Configuration reference](/integrations/wallet-gateway/reference/configuration-reference#secrets-and-environments). + + +## Runtime management + +Once the Wallet Gateway is running, the admin user can add, edit, and remove networks and IDPs +without restarting, using the User API (`addNetwork`, `removeNetwork`, `addIdp`, `removeIdp`, +`listNetworks`, `listIdps`) or the **Settings** page in the User UI. Runtime changes are +stored in the database, so back it up to avoid losing them. See the +[User API](/integrations/wallet-gateway/reference/user-api) and +[Manage wallets](/integrations/wallet-gateway/guides/manage-wallets). diff --git a/docs-main/integrations/wallet-gateway/operate/deploy.mdx b/docs-main/integrations/wallet-gateway/operate/deploy.mdx new file mode 100644 index 000000000..83ef096f4 --- /dev/null +++ b/docs-main/integrations/wallet-gateway/operate/deploy.mdx @@ -0,0 +1,56 @@ +--- +title: "Deploy" +description: "Run the Wallet Gateway in a container with Docker or Helm." +--- + +For anything beyond local development, run the Wallet Gateway as a container. This guide +covers what to get right when deploying, and points to the deployment manifests. The Wallet Gateway +is a Node.js server that reads a single configuration file and exposes its User UI, User API, +and dApp API on one port. + +## Before you deploy + +Make production choices in your configuration file before packaging it. See +[Configure the Wallet Gateway](/integrations/wallet-gateway/guides/configure) and the +[Configuration reference](/integrations/wallet-gateway/reference/configuration-reference). + +- **Use a persistent store.** Prefer `postgres`. The `memory` store loses all data when a + container or pod is recreated, and `sqlite` persists only if its file is on a persistent + volume. +- **Set `kernel.publicUrl`.** Behind a reverse proxy or load balancer, set it to the external + URL so client redirects work. +- **Restrict CORS.** Set `server.allowedOrigins` to your known dApp origins instead of `"*"`. +- **Keep secrets out of the image.** Supply `clientSecret`, `adminAuth`, and provider API keys + through environment variables or a secret manager, not the baked-in config file. See + [Secrets and environments](/integrations/wallet-gateway/reference/configuration-reference#secrets-and-environments). + +## Docker + +Provide the configuration file and any required secrets to the container, and expose the +Gateway's port. Mount the config (and, for `sqlite`, a persistent volume for the database +file), then start the Wallet Gateway pointing at the mounted config. + + +If you use the internal signing provider, its `signingStore` holds private keys. Put it on +durable, access-controlled storage, or use a participant node or external custody provider +instead. See [Signing providers](/integrations/wallet-gateway/signing-providers). + + +## Helm + +For Kubernetes, deploy with Helm and back the Wallet Gateway with a managed PostgreSQL instance. +Supply the configuration through a ConfigMap and secrets through a Kubernetes Secret so +sensitive values never live in the chart. + +## Deployment manifests + +The Wallet Gateway repository maintains the reference Docker and Helm manifests and the +step-by-step deployment guide: + +- [Deployment guide](https://github.com/canton-network/wallet-gateway/blob/82ec39c9/docs/dapp-building/wallet-gateway/deployment/index.md) + +## After deploying + +- Confirm the three endpoints respond (User UI, `/api/v0/dapp`, `/api/v0/user`). +- Review the [Security checklist](/integrations/wallet-gateway/operate/security). +- If something fails to start, see [Troubleshooting](/integrations/wallet-gateway/operate/troubleshooting). diff --git a/docs-main/integrations/wallet-gateway/operate/security.mdx b/docs-main/integrations/wallet-gateway/operate/security.mdx new file mode 100644 index 000000000..24a914c98 --- /dev/null +++ b/docs-main/integrations/wallet-gateway/operate/security.mdx @@ -0,0 +1,49 @@ +--- +title: "Security checklist" +description: "Harden a Wallet Gateway deployment before exposing it to users and dApps." +--- + +Work through this checklist before running a Wallet Gateway in production. Each item links to +the relevant configuration. + +## Authentication and identity + +- **Use OAuth / OpenID Connect IDPs.** Reserve self-signed tokens for development. See + [Networks & identity providers](/integrations/wallet-gateway/guides/networks-and-identity#identity-providers). +- **Use `client_credentials` for `adminAuth`.** Store admin credentials securely and rotate + them regularly. +- **Set `server.admin` deliberately.** Only the configured admin can manage networks and IDPs + at runtime. Leave it unset to lock management to the bootstrap configuration. + +## Signing and key custody + +- **Do not use internal signing for valuable assets.** Use a participant node or an external + custody provider (Fireblocks, Blockdaemon, DFNS). See + [Signing providers](/integrations/wallet-gateway/signing-providers). +- **If you must run a signing store,** restrict filesystem permissions, consider encryption at + rest, back it up, and keep it out of version control. See + [Signing store security](/integrations/wallet-gateway/reference/configuration-reference#signing-store-security). + +## Network exposure + +- **Restrict CORS.** Set `server.allowedOrigins` to known dApp origins instead of `"*"`. See + [Configure the Wallet Gateway](/integrations/wallet-gateway/guides/configure#server). +- **Set `kernel.publicUrl`** to the external URL when running behind a proxy or load balancer. +- **Tune rate and size limits.** Review `server.requestRateLimit` and `server.requestSizeLimit` + for your traffic. +- **Terminate TLS** in front of the Wallet Gateway and use valid certificates. + +## Data and secrets + +- **Use PostgreSQL** and take regular, tested backups. See + [Backups and recovery](/integrations/wallet-gateway/reference/configuration-reference#backups-and-recovery). +- **Keep secrets out of config files.** Supply `clientSecret`, `adminAuth`, and provider API + keys through environment variables or a secret manager. See + [Secrets and environments](/integrations/wallet-gateway/reference/configuration-reference#secrets-and-environments). +- **Separate configuration per environment** to avoid using production credentials elsewhere. + +## Operations + +- **Use structured logging** (`-f json`) for aggregation. +- **Monitor the three endpoints** (User UI, `/api/v0/dapp`, `/api/v0/user`). +- **Rehearse restores** so a lost database does not become a lost deployment. diff --git a/docs-main/integrations/wallet-gateway/operate/troubleshooting.mdx b/docs-main/integrations/wallet-gateway/operate/troubleshooting.mdx new file mode 100644 index 000000000..ffd02c9b1 --- /dev/null +++ b/docs-main/integrations/wallet-gateway/operate/troubleshooting.mdx @@ -0,0 +1,136 @@ +--- +title: "Troubleshooting" +description: "Common Wallet Gateway problems and how to resolve them." +--- + +Common issues you may hit when running the Wallet Gateway, with fixes. + +## Database connection errors + +The Wallet Gateway fails to start with database connection errors. + +- **PostgreSQL**: verify the database exists (`psql -U postgres -l`), check credentials in your + config, ensure PostgreSQL is running (`pg_isready`), and check network and firewall rules. +- **SQLite**: ensure the directory for the database file exists, check read/write permissions, + and verify disk space. +- **Memory**: no configuration is needed, but remember data is lost on restart. + +## Authentication failures + +API calls return `401 Unauthorized`. + +- **Invalid or expired token**: use a valid JWT, check its expiration, and regenerate it if + needed. +- **Missing Authorization header**: include `Authorization: Bearer ` in the correct + format. +- **Session not found**: create a session with `addSession()` first, ensure it has not expired, + and confirm you are using the correct user context. + +## Network connection issues + +The Wallet Gateway cannot connect to a configured network or Ledger API. + +- **Network unreachable**: verify the Ledger API URL, test connectivity with + `curl /v2/version`, and check firewall rules and routing. +- **Invalid network configuration**: confirm `synchronizerId` matches the validator, the + `identityProviderId` matches an IDP, and the credentials are correct. +- **SSL/TLS issues**: verify certificates for HTTPS endpoints. In development you may need HTTP + or to configure certificate trust. + +## Port already in use + +`EADDRINUSE: address already in use :::3030`. + +- Find and stop the process using the port: + + ```bash + lsof -ti:3030 | xargs kill -9 + # Or inspect it first + lsof -i :3030 + ``` + +- Use a different port: + + ```bash + wallet-gateway -c ./config.json -p 8080 + ``` + +- Check whether another Gateway instance is running: + + ```bash + ps aux | grep wallet-gateway + ``` + +## Configuration validation errors + +The Wallet Gateway fails to start with configuration errors. + +- Validate your config against the schema: + + ```bash + wallet-gateway --config-schema > schema.json + # Then run it through a JSON Schema validator + ``` + +- Check for common mistakes: missing required fields, invalid JSON, type mismatches (strings + vs numbers), and incorrect IDP references in networks. +- Start from the example config: + + ```bash + wallet-gateway --config-example > my-config.json + ``` + +## Signing provider issues + +Transactions fail with signing errors. Verify the provider's environment variables and +permissions: + +- **Fireblocks**: `FIREBLOCKS_SECRET` and `FIREBLOCKS_API_KEY` set, keys valid with proper + permissions, and the Fireblocks API reachable. +- **Participant**: the participant node is running and reachable, the party exists on it, and + the participant logs show no signing errors. +- **Blockdaemon**: `BLOCKDAEMON_API_URL` and `BLOCKDAEMON_API_KEY` set, API reachable, and the + key has signing permissions. +- **DFNS**: `DFNS_ORG_ID`, `DFNS_BASE_URL`, `DFNS_CRED_ID`, `DFNS_PRIVATE_KEY`, and + `DFNS_AUTH_TOKEN` set, credentials correct, and the service account has wallet-creation and + signing permissions. + +See [Signing providers](/integrations/wallet-gateway/signing-providers) for each +provider's setup. + +## Debugging + +- **Enable pretty logs** for readable, detailed output: + + ```bash + wallet-gateway -c ./config.json -f pretty + ``` + +- **Use structured logs** for aggregation: + + ```bash + wallet-gateway -c ./config.json -f json + ``` + +- **Check logs** in console output, system logs, or container logs depending on how you run + the Wallet Gateway. + +- **Verify endpoints** respond: + + ```bash + # Web UI + curl http://localhost:3030 + + # dApp API status (requires authentication) + curl -X POST http://localhost:3030/api/v0/dapp \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer " \ + -d '{"jsonrpc":"2.0","id":1,"method":"status","params":[]}' + ``` + +## Getting help + +If problems persist: check the logs for detailed errors, validate your configuration against +the schema, review the [User API](/integrations/wallet-gateway/reference/user-api) and +[dApp API](/integrations/wallet-gateway/reference/dapp-api) specifications, and check the +project's GitHub issues for similar reports. diff --git a/docs-main/integrations/wallet-gateway/overview.mdx b/docs-main/integrations/wallet-gateway/overview.mdx new file mode 100644 index 000000000..507cf1fba --- /dev/null +++ b/docs-main/integrations/wallet-gateway/overview.mdx @@ -0,0 +1,135 @@ +--- +title: "Overview" +description: "Connect your own validator and signing provider to any dApp on Canton Network." +--- + +The Wallet Gateway is a self-hosted component that connects your Canton validator to dApps on +Canton Network. You run it in your own environment, next to a validator you already operate, +so you can connect to any [CIP-0103](https://github.com/canton-foundation/cips/blob/main/cip-0103/cip-0103.md) +dApp using **your** validator and **your** signing or custody provider, without moving signing +away from infrastructure you already trust. + +Run the Wallet Gateway to: + +- **Connect to dApps**: expose the CIP-0103 dApp API so any compatible dApp can connect, + list accounts, and request transactions. +- **Use your own validator**: talk to your Canton validator's Ledger API on behalf of + authenticated users. +- **Keep signing where you want it**: sign with a participant node, an external custody + provider (Fireblocks, Blockdaemon, DFNS), or an internal store for development. +- **Manage wallets**: create and manage parties across one or more networks, through a web + UI or programmatically. +- **Authenticate users**: log users in through OAuth / OpenID Connect or self-signed tokens, + and issue sessions for API access. + + +The Wallet Gateway is for teams that operate their own infrastructure: validator operators, +builders, and organizations that want to connect a validator and signing provider they control +to dApps. If you are building a dApp frontend instead, use the [dApp SDK](/sdks-tools/sdks/dapp-sdk/overview). + + +## How it fits together + +```mermaid +flowchart TB + D["dApp
(dApp SDK)"] + U["User"] + subgraph WG["Wallet Gateway (self-hosted)"] + direction TB + DA["dApp API"] + UA["User API"] + UI["User UI"] + end + V["Your Canton validator"] + S["Signing provider
(participant, Fireblocks, …)"] + D -->|dApp API| DA + U -->|browser| UI + U -->|programmatic| UA + WG <-->|Ledger API| V + WG <-->|signing| S +``` + +## Core concepts + +**Networks.** A network points the Wallet Gateway at one Canton validator's Ledger API, identified +in [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) form (for +example `canton:localnet`). You can configure several networks in one Wallet Gateway, and each +wallet belongs to exactly one network. + +**Identity providers.** Every network references an identity provider (IDP) that issues the +JWT used to authenticate against the validator. The Wallet Gateway supports **OAuth / OpenID Connect** +providers (recommended for production) and **self-signed** tokens (development only). + +**Sessions.** Users authenticate through an IDP, and the Wallet Gateway issues a session (a JWT) +that the User and dApp APIs use to authorize later calls. Sessions are created on login and +ended on logout. + +**Wallets and parties.** A wallet is a Canton party the Wallet Gateway manages for a user. Each +wallet is tied to a network and a signing provider, and a user can mark one wallet as +primary. dApps see these wallets as the accounts a user can transact with. + +**Signing providers.** Signing is delegated to a signing provider chosen per wallet, so +different wallets in the same Wallet Gateway can sign through different providers. Keys stay with the +provider you choose: a participant node, an external custody service, or an internal store for +testing. See [Signing providers](/integrations/wallet-gateway/signing-providers). + +## Transaction lifecycle + +Once a dApp is connected, transactions flow through the Wallet Gateway so that approval and +signing stay under your control. A dApp asks the Wallet Gateway to run a transaction, the +Wallet Gateway prepares it against your validator, the user reviews and approves it in the +User UI, your signing provider signs it, and the Wallet Gateway submits it to the ledger and +returns the result. Preparation and submission happen on your validator's Ledger API, approval +happens in your User UI, and signing happens in the provider you chose, so private keys never +pass through the dApp. + +```mermaid +sequenceDiagram + participant D as dApp + participant UI as User UI + participant WG as Wallet Gateway + participant S as Signing provider + participant L as Ledger API + + D->>WG: prepareExecute + WG->>L: prepare + L-->>WG: prepared transaction + + alt UI approval + WG->>UI: queue for user approval + Note over UI: User clicks Approve + UI->>WG: user approves + end + + alt Signing driver + WG->>S: sign + S-->>WG: signed transaction + end + + WG->>L: execute + L-->>WG: completion + WG-->>D: result +``` + +## Quickstart + +Ready to run it? The [Quickstart](/integrations/wallet-gateway/quickstart) walks through +installing the Wallet Gateway, generating a configuration file, starting it against a network, and +verifying the three endpoints. + +## Where to go next + + + + Install, configure, run, and verify a Wallet Gateway. + + + Understand the configuration file, store, and server settings. + + + Choose where transaction signing and key custody happen. + + + Drive the Wallet Gateway from scripts with the User API. + + diff --git a/docs-main/integrations/wallet-gateway/quickstart.mdx b/docs-main/integrations/wallet-gateway/quickstart.mdx new file mode 100644 index 000000000..6e26a0817 --- /dev/null +++ b/docs-main/integrations/wallet-gateway/quickstart.mdx @@ -0,0 +1,105 @@ +--- +title: "Quickstart" +description: "Install the Wallet Gateway, configure it, run it against a network, and verify it is up." +--- + +This is the shortest path to a running Wallet Gateway: install it, generate a configuration +file, start it against a Canton network, and confirm its three endpoints respond. It targets +a local setup you can adapt to your own validator. + + +You need Node.js (tested with v24) and access to a Canton network's Ledger API. For a fully +local target, run a [Splice LocalNet](/sdks-tools/development-tools/localnet). + + + + +Install globally with npm: + +```bash +npm install -g @canton-network/wallet-gateway-remote +``` + +Or run it without installing, using `npx`: + +```bash +npx @canton-network/wallet-gateway-remote -c ./config.json +``` + +`npx` downloads and runs the latest version each time, which is useful for one-off runs. + + + +Write an example configuration you can edit: + +```bash +wallet-gateway --config-example > config.json +``` + +The example targets a Splice LocalNet with SQLite storage and a mock OAuth identity provider. + + + +Open `config.json` and set, at minimum: + +- **Store**: where the Wallet Gateway persists data (`memory`, `sqlite`, or `postgres`). +- **Networks**: at least one Canton network with its Ledger API `baseUrl`. +- **Identity providers**: how users authenticate against those networks. + +See [Configure the Wallet Gateway](/integrations/wallet-gateway/guides/configure) for every option, and +[Networks & identity providers](/integrations/wallet-gateway/guides/networks-and-identity) to +wire up authentication. + + + +```bash +wallet-gateway -c ./config.json +``` + +Override the port with `-p` if needed: + +```bash +wallet-gateway -c ./config.json -p 8080 +``` + + + +The Wallet Gateway exposes three endpoints (default port `3030`): + +- **User UI**: `http://localhost:3030` +- **dApp API**: `http://localhost:3030/api/v0/dapp` +- **User API**: `http://localhost:3030/api/v0/user` + +Open the User UI in your browser to confirm the Wallet Gateway is up. + + + +## Command-line options + +| Option | Description | +| --- | --- | +| `-c, --config ` | Set the config path (default: `./config.json`). | +| `--config-schema` | Output the config JSON Schema and exit. | +| `--config-example` | Output an example config and exit. | +| `-p, --port [port]` | Set the port (overrides the config file). | +| `-f, --log-format ` | Set the log format: `json` or `pretty` (default: `pretty`). | + +The `--config-schema` output is a complete JSON Schema you can use for validation and IDE +autocompletion. + +## Next steps + + + + All configuration options for kernel, server, and store. + + + Connect to a validator and set up authentication. + + + Create and manage wallets through the User UI or User API. + + + Run the Wallet Gateway with Docker or Helm. + + diff --git a/docs-main/integrations/wallet-gateway/reference/configuration-reference.mdx b/docs-main/integrations/wallet-gateway/reference/configuration-reference.mdx new file mode 100644 index 000000000..753f9041f --- /dev/null +++ b/docs-main/integrations/wallet-gateway/reference/configuration-reference.mdx @@ -0,0 +1,164 @@ +--- +title: "Configuration reference" +description: "Full reference for the Wallet Gateway store backends, backups, signing store, and secrets." +--- + +This reference complements the task-oriented guides with the details you need for production: +the store backends in full, backup and recovery, signing store security, and how to handle +secrets across environments. For the config file's overall shape, see +[Configure the Wallet Gateway](/integrations/wallet-gateway/guides/configure). For networks and +authentication, see [Networks & identity providers](/integrations/wallet-gateway/guides/networks-and-identity). + +## Store backends + +The `store.connection` object selects one of three backends. + +### PostgreSQL + +Recommended for production for its robustness, concurrent access, and backup support. + +| Field | Required | Description | +| --- | --- | --- | +| `type` | yes | Must be `"postgres"`. | +| `host` | yes | Hostname or IP of the PostgreSQL server. | +| `port` | no (default `5432`) | Port PostgreSQL listens on. | +| `user` | yes | Database user to connect with. | +| `password` | yes | Password for the database user. | +| `database` | yes | Name of the database to use (must exist). | + +```json +{ + "store": { + "connection": { + "type": "postgres", + "host": "db.example.com", + "port": 5432, + "user": "wallet_gateway", + "password": "secure-password", + "database": "wallet_gateway_db" + } + } +} +``` + +### SQLite + +Suitable for single-instance deployments and local development. Stores all data in one file. + +| Field | Required | Description | +| --- | --- | --- | +| `type` | yes | Must be `"sqlite"`. | +| `database` | yes | Path to the SQLite database file. | + +```json +{ + "store": { + "connection": { + "type": "sqlite", + "database": "store.sqlite" + } + } +} +``` + +### Memory + +Keeps all data in RAM. Useful for testing, not for production. + +| Field | Required | Description | +| --- | --- | --- | +| `type` | yes | Must be `"memory"`. | + +```json +{ + "store": { + "connection": { + "type": "memory" + } + } +} +``` + +## Backups and recovery + +The store database holds user sessions, networks and IDPs (seeded from bootstrap, then +modifiable at runtime), wallet configurations and party mappings, and in-flight transactions. + +If the database is lost and cannot be restored: + +- All sessions are invalidated (users must log in again). +- Networks and IDPs are re-seeded from bootstrap, but runtime changes are lost. +- In-flight transactions are lost and may need manual intervention. +- Wallets referencing lost networks may need reconfiguration. + +Recommendations: + +- **PostgreSQL**: use `pg_dump` or an automated solution (pgBackRest, WAL-E). +- **SQLite**: copy the database file regularly, with no writes during the copy. +- Schedule automated daily backups with a retention policy, and test restores. + + +If the Wallet Gateway is used as the signing provider, the signing store holds private keys. If it is +lost, those keys are unrecoverable. Do not use internal signing for any important system. See +[Signing providers](/integrations/wallet-gateway/signing-providers). + + +## Signing store security + +The optional `signingStore` uses the same connection options as `store` and is only needed for +the internal signing provider. When it holds keys: + +- Store the file in a secure location with restricted access. +- Use strict filesystem permissions (for example `chmod 600` for SQLite files). +- For PostgreSQL, use separate credentials with minimal privileges. +- Consider encrypting the database at rest. +- Back it up regularly if it holds production keys. +- Never commit signing store files to version control. + +## Secrets and environments + +Maintain separate configuration files per environment (for example `config.dev.json`, +`config.staging.json`, `config.prod.json`) to isolate settings and credentials. + +Never commit secrets. Override sensitive values with environment variables using the `Env` +suffix on the field, for example `clientSecretEnv`: + +```json +{ + "bootstrap": { + "networks": [ + { + "auth": { + "clientSecretEnv": "OAUTH_CLIENT_SECRET" + } + } + ] + } +} +``` + +Then set the variable when running: + +```bash +export OAUTH_CLIENT_SECRET="my-secret" +wallet-gateway -c ./config.json +``` + +Additional guidance: + +- Network and IDP configurations (excluding secrets) are visible to users with ledger access. +- Anyone with read access to a shared config repository can see non-secret configuration. +- Use environment variables or a secret manager (HashiCorp Vault, AWS Secrets Manager) for + sensitive values. +- `adminAuth` credentials are sensitive: store them securely, rotate them regularly, and use + them only where truly needed. + +### Suggested environment profiles + +| Setting | Development | Production | +| --- | --- | --- | +| Store | SQLite or memory | PostgreSQL | +| Authentication | Self-signed | OAuth | +| Network endpoints | Localhost | Production endpoints | +| CORS | Permissive | Restricted to known origins | +| Secrets | Inline (non-sensitive) | Environment variables or secret manager | diff --git a/docs-main/integrations/wallet-gateway/reference/dapp-api.mdx b/docs-main/integrations/wallet-gateway/reference/dapp-api.mdx new file mode 100644 index 000000000..33af7e8e3 --- /dev/null +++ b/docs-main/integrations/wallet-gateway/reference/dapp-api.mdx @@ -0,0 +1,58 @@ +--- +title: "dApp API" +description: "The Wallet Gateway's CIP-0103 dApp API, and where it is documented." +--- + +The dApp API is the [CIP-0103](https://github.com/canton-foundation/cips/blob/main/cip-0103/cip-0103.md) +JSON-RPC 2.0 API that dApps call to connect to a wallet, list accounts, and prepare and +execute transactions. The Wallet Gateway exposes it, but you almost never call it directly. + +- **Base path**: `/api/v0/dapp` (configurable via `server.dappPath`) +- **Protocol**: JSON-RPC 2.0, per CIP-0103 +- **Authentication**: JWT bearer token (obtained through a session) + + +Build dApps with the [dApp SDK](/sdks-tools/sdks/dapp-sdk/overview), which implements the +dApp API and adds a high-level interface, session handling, wallet discovery, and multi-transport +support. Use the raw API only for lower-level infrastructure. The SDK documentation is the +reference for methods, events, and error handling. + + +## Full specification + +The complete OpenRPC specification is available at +[openrpc-dapp-api.json](https://github.com/canton-network/wallet-gateway/blob/main/api-specs/openrpc-dapp-api.json). + +## Real-time events (SSE) + +The dApp API supports Server-Sent Events for real-time notifications. Connect to the `/events` +path relative to the dApp API base URL (for example `/api/v0/dapp/events`), authenticating with +the JWT as the `token` query parameter (the `Authorization: Bearer` header is also supported): + +```javascript +const eventsUrl = new URL('events', dappApiUrl + '/') +eventsUrl.searchParams.set('token', jwtToken) +const eventSource = new EventSource(eventsUrl.toString()) + +eventSource.addEventListener('accountsChanged', (e) => { + /* ... */ +}) +eventSource.addEventListener('statusChanged', (e) => { + /* ... */ +}) +eventSource.addEventListener('connected', (e) => { + /* ... */ +}) +eventSource.addEventListener('txChanged', (e) => { + /* ... */ +}) +``` + +SSE connections deliver real-time updates about transaction status (`txChanged`), account +changes (`accountsChanged`), and session state (`connected`, `statusChanged`). + +## See also + +- [dApp SDK overview](/sdks-tools/sdks/dapp-sdk/overview) +- [dApp SDK events reference](/sdks-tools/sdks/dapp-sdk/reference/events) +- [User API](/integrations/wallet-gateway/reference/user-api) diff --git a/docs-main/integrations/wallet-gateway/reference/user-api.mdx b/docs-main/integrations/wallet-gateway/reference/user-api.mdx new file mode 100644 index 000000000..270e2b33f --- /dev/null +++ b/docs-main/integrations/wallet-gateway/reference/user-api.mdx @@ -0,0 +1,71 @@ +--- +title: "User API" +description: "The Wallet Gateway User API for managing sessions, networks, identity providers, wallets, and transactions." +--- + +The User API is a JSON-RPC 2.0 API for managing a user's wallets, networks, identity +providers, sessions, and transactions. The User UI is built on it, and you can call it +directly from scripts, a backend, or a custom UI. + +- **Base path**: `/api/v0/user` (configurable via `server.userPath`) +- **Protocol**: JSON-RPC 2.0 +- **Authentication**: JWT bearer token, except where noted below + +## Methods + +| Category | Method | Description | +| --- | --- | --- | +| Sessions | `addSession()` | Create a new session (unauthenticated, used for the initial connection). | +| | `removeSession()` | End the current session. | +| | `listSessions()` | List sessions for the current user. | +| Networks | `listNetworks()` | List all configured networks. | +| | `addNetwork()` | Add a new network configuration. | +| | `removeNetwork()` | Remove a network configuration. | +| Identity providers | `listIdps()` | List all identity providers. | +| | `addIdp()` | Add a new identity provider. | +| | `removeIdp()` | Remove an identity provider. | +| Wallets | `createWallet()` | Create a new wallet (party) on a network. | +| | `listWallets()` | List all wallets for the current user. | +| | `setPrimaryWallet()` | Set the primary wallet. | +| | `removeWallet()` | Remove a wallet. | +| | `syncWallets()` | Sync wallets with the ledger. | +| | `isWalletSyncNeeded()` | Check whether a wallet sync is needed. | +| Transactions | `sign()` | Sign a transaction. | +| | `execute()` | Execute a signed transaction. | +| | `getTransaction()` | Get a transaction by ID. | +| | `listTransactions()` | List transactions. | + +## Authentication + +Most methods require a JWT in the `Authorization` header: + +```text +Authorization: Bearer +``` + +The following methods are available without authentication, so a client can bootstrap a +connection: + +- `addSession()` +- `listNetworks()` +- `listIdps()` + +## Full specification + +The complete OpenRPC specification is available at +[openrpc-user-api.json](https://github.com/canton-network/wallet-gateway/blob/main/api-specs/openrpc-user-api.json). + +## Rate limiting + +Requests are rate-limited to prevent abuse. Configure the limits in the +[server settings](/integrations/wallet-gateway/guides/configure#server). Responses include: + +- `X-RateLimit-Limit`: maximum requests per window. +- `X-RateLimit-Remaining`: remaining requests in the current window. +- `X-RateLimit-Reset`: when the limit resets. + +## CORS + +Cross-origin access is controlled by `server.allowedOrigins`. It defaults to `["*"]`; in +production, restrict it to known origins. See +[Configure the Wallet Gateway](/integrations/wallet-gateway/guides/configure#server). diff --git a/docs-main/integrations/wallet-gateway/signing-providers.mdx b/docs-main/integrations/wallet-gateway/signing-providers.mdx index 09cf22117..8ef6cea1f 100644 --- a/docs-main/integrations/wallet-gateway/signing-providers.mdx +++ b/docs-main/integrations/wallet-gateway/signing-providers.mdx @@ -1,144 +1,125 @@ --- title: "Signing Providers" -description: "Wallet Gateway signing provider integrations" +description: "How the Wallet Gateway delegates transaction signing, and how to configure each provider." --- -{/* COPIED_START source="wallet-gateway:docs/dapp-building/wallet-gateway/signing-providers/index.md@82ec39c9" hash="ce58d241" */} - -The Wallet Gateway supports multiple signing providers that handle cryptographic key management and transaction signing. Each provider has different use cases and security characteristics. - -## Available Providers - -## Wallet Gateway (Internal) - -The Wallet Gateway provider stores private keys directly in the signing store database. This is suitable for development and testing but **not recommended for production** use cases where security is critical. - -**Configuration:** - -This provider is automatically available when a `signingStore` is configured in the Gateway configuration. No additional setup is required. - -**Use Cases:** - -- Local development -- Testing environments -- Proof-of-concept applications - -**Security Considerations:** - -> [!IMPORTANT] -> Private keys are stored in the database. If the database is compromised, all keys are at risk. Use only in non-production environments. - -## Participant-Based Signing - -The Participant signing provider uses Canton's participant node for signing transactions. The participant maintains the key material and handles all cryptographic operations. - -**Configuration:** - -This provider is always available and requires no additional configuration. You simply select it when creating a party. - -**Use Cases:** - -- Enterprise deployments where the participant node manages keys -- Scenarios where key management is handled by the infrastructure -- Production environments with dedicated participant nodes - -**How it Works:** - -When a transaction is submitted, the Gateway forwards the command to the participant node, which signs it using the party's key stored in the participant's keystore. +The Wallet Gateway does not have to hold private keys. Signing is delegated to a **signing +provider** chosen per wallet, so you decide where each wallet's keys live and who performs the +cryptographic signing. Different wallets in the same Wallet Gateway can use different providers, +and you select the provider per party when you create a wallet. + +When a wallet submits a transaction, the Wallet Gateway hands the prepared transaction to that +wallet's signing provider, which signs it with the party's key and returns it for the Wallet +Gateway to submit. + +## Available providers + +| Provider | Key custody | Best for | +| --- | --- | --- | +| [Internal](#internal) | Wallet Gateway signing store database | Local development and testing only. | +| [Participant](#participant) | Canton participant node | Enterprise deployments with a dedicated participant. | +| [Fireblocks](#fireblocks) | Fireblocks (HSM-backed) | Compliance-sensitive, high-security production. | +| [Blockdaemon](#blockdaemon) | Blockdaemon infrastructure | Managed, cloud-native deployments. | +| [DFNS](#dfns) | DFNS (MPC) | Programmable custody with policy controls. | + + +The internal provider stores private keys in the Wallet Gateway's signing store database. Do not +use it for wallets holding valuable assets. Prefer a participant node or an external custody +provider in production. + + +## Internal + +Stores private keys directly in the Wallet Gateway's signing store database and signs +transactions itself. Suitable for development and testing only. + +It is available whenever a `signingStore` is configured; no other setup is required. See +[Configure the Wallet Gateway](/integrations/wallet-gateway/guides/configure#signing-store). + +```json +{ + "signingStore": { + "connection": { + "type": "sqlite", + "database": "signingStore.sqlite" + } + } +} +``` + + +Private keys are stored in the signing store database. If it is compromised, all keys are at +risk; if it is lost, they are unrecoverable. Protect the database file with strict filesystem +permissions and never commit it to version control. + + +## Participant + +Uses a Canton participant node to sign. The participant holds the key material and performs all +cryptographic operations, so keys never live in the Wallet Gateway. + +It is always available and needs no additional configuration; select it when creating a party. +When a transaction is submitted, the Wallet Gateway forwards the command to the participant +node, which signs it using the party's key from the participant's keystore. ## Fireblocks -Fireblocks is a third-party crypto custody service provider that offers enterprise-grade key management and signing services. - -**Setup:** +Enterprise-grade, HSM-backed key management and signing from Fireblocks. Keys stay in +Fireblocks' secure infrastructure. -1. Complete steps 1-3 from the [Fireblocks signing documentation](https://github.com/canton-network/wallet-gateway/tree/main/core/signing-fireblocks) +1. Complete steps 1-3 from the [Fireblocks signing documentation](https://github.com/canton-network/wallet-gateway/tree/main/core/signing-fireblocks). +2. Supply `FIREBLOCKS_API_KEY` with your Fireblocks API key (from the `API User (ID)` column in + the Fireblocks API users table). -2. Supply an environment variable named `FIREBLOCKS_API_KEY` containing your Fireblocks API key (from the `API User (ID)` column in the Fireblocks API users table). - -**Configuration:** - -The Fireblocks provider reads configuration from environment variables and key files. No additional Gateway configuration is needed beyond placing the required files. - -**Use Cases:** - -- Enterprise deployments requiring HSM-backed key storage -- Compliance-sensitive applications -- High-security production environments +The provider reads its configuration from environment variables and key files; no additional +Wallet Gateway configuration is needed beyond placing the required files. ## Blockdaemon -Blockdaemon provides signing services as part of their infrastructure offerings. - -**Configuration:** - -Set the following environment variables: - -- `BLOCKDAEMON_API_URL` - The base URL for the Blockdaemon API -- `BLOCKDAEMON_API_KEY` - Your Blockdaemon API key - -**Use Cases:** - -- Managed infrastructure deployments -- Cloud-native applications -- Environments leveraging Blockdaemon's services - -## Dfns - -Dfns is a crypto custody platform that provides programmable key management and signing infrastructure. - -**Configuration:** - -Set the following environment variables: - -- `DFNS_ORG_ID` - Your Dfns organization ID -- `DFNS_BASE_URL` - The Dfns API URL (defaults to `https://api.dfns.io`) -- `DFNS_CRED_ID` - Your service account credential ID -- `DFNS_PRIVATE_KEY` - Your service account private key (PEM format) -- `DFNS_AUTH_TOKEN` - Your service account authentication token - -**Prerequisites:** - -1. Set up a service account with appropriate permissions in Dfns -2. Generate and download the service account credentials - -**Use Cases:** - -- Enterprise deployments requiring MPC-based key management -- Programmable custody with policy controls -- Multi-party approval workflows -- High-security production environments +Managed signing from Blockdaemon's infrastructure. Set the following environment variables: -**How it Works:** +| Variable | Description | +| --- | --- | +| `BLOCKDAEMON_API_URL` | The base URL for the Blockdaemon API. | +| `BLOCKDAEMON_API_KEY` | Your Blockdaemon API key. | -Dfns creates and activates Canton wallets directly through its validator integration. When the Gateway requests a wallet, Dfns provisions a Canton-formatted key, registers the party on the network, and returns the wallet ready for use. When signing a prepared transaction, Dfns broadcasts it to Canton in a single step and returns the resulting update ID. Only `Canton` and `CantonTestnet` network wallets are supported. +## DFNS -## Selecting a Provider +Programmable, MPC-based key management and signing from DFNS. Keys are managed in DFNS' secure +infrastructure. -When creating a new party through the User API or web UI, you can select which signing provider to use. The choice depends on your security requirements, infrastructure setup, and compliance needs. +Set up a service account with appropriate permissions and download its credentials, then set +the following environment variables: -**Recommendations:** +| Variable | Description | +| --- | --- | +| `DFNS_ORG_ID` | Your DFNS organization ID. | +| `DFNS_BASE_URL` | The DFNS API URL (defaults to `https://api.dfns.io`). | +| `DFNS_CRED_ID` | Your service account credential ID. | +| `DFNS_PRIVATE_KEY` | Your service account private key (PEM format). | +| `DFNS_AUTH_TOKEN` | Your service account authentication token. | -- **Development/Testing**: Use Wallet Gateway (internal) or Participant-based signing -- **Production (Enterprise)**: Use Fireblocks, Dfns, or Participant-based signing -- **Production (Managed)**: Use Blockdaemon, Dfns, or Participant-based signing +DFNS creates and activates Canton wallets directly through its validator integration: it +provisions a Canton-formatted key, registers the party on the network, and returns the wallet +ready for use. When signing, DFNS broadcasts the transaction to Canton in a single step and +returns the update ID. -The signing provider is selected per-party, so you can have different parties using different providers within the same Gateway instance. + +Only `Canton` and `CantonTestnet` network wallets are supported. + -## Key Management +## Choosing a provider -Each provider handles key management differently: +Base the choice on your security requirements, infrastructure, and compliance needs: -- **Wallet Gateway**: Keys are stored in the signing store database -- **Participant**: Keys are managed by the Canton participant node -- **Fireblocks**: Keys are stored in Fireblocks' secure infrastructure (HSM-backed) -- **Blockdaemon**: Keys are managed by Blockdaemon's infrastructure -- **Dfns**: Keys are managed by Dfns' secure infrastructure +- **Development and testing**: internal or participant-based signing. +- **Production (enterprise)**: Fireblocks, DFNS, or participant-based signing. +- **Production (managed)**: Blockdaemon, DFNS, or participant-based signing. -When migrating between providers, keys cannot be directly transferred. You'll need to: +## Migrating between providers -1. Create a new party with the new provider -2. Transfer any assets/contracts to the new party -3. Update your dApp to use the new party +Keys cannot be transferred directly between providers. To move a wallet to a different provider: -{/* COPIED_END */} +1. Create a new party with the new provider. +2. Transfer any assets or contracts to the new party. +3. Update your dApp to use the new party. From 6d0bf1bdf04eb6b438723765f4f87947bbde4564 Mon Sep 17 00:00:00 2001 From: Joel Lovera Date: Fri, 24 Jul 2026 12:04:07 +0200 Subject: [PATCH 2/5] iterate WG docs --- docs-main/docs.json | 20 +- .../integrations/wallet-gateway/apis.mdx | 137 ---- .../wallet-gateway/configuration.mdx | 604 ------------------ .../integrations/wallet-gateway/download.mdx | 160 ----- .../wallet-gateway/guides/manage-wallets.mdx | 69 -- .../{guides => operate}/configure.mdx | 8 +- .../wallet-gateway/operate/deploy.mdx | 6 +- .../networks-and-identity.mdx | 4 +- .../wallet-gateway/operate/security.mdx | 6 +- .../{ => operate}/signing-providers.mdx | 18 +- .../operate/troubleshooting.mdx | 4 +- .../integrations/wallet-gateway/overview.mdx | 6 +- .../wallet-gateway/quickstart.mdx | 10 +- .../reference/configuration-reference.mdx | 6 +- .../wallet-gateway/reference/user-api.mdx | 4 +- .../wallet-gateway/troubleshooting.mdx | 213 ------ .../integrations/wallet-gateway/usage.mdx | 82 --- .../wallet-gateway/use/approve-and-sign.mdx | 107 ++++ .../use/automate-with-user-api.mdx | 162 +++++ .../wallet-gateway/use/manage-wallets.mdx | 120 ++++ 20 files changed, 428 insertions(+), 1318 deletions(-) delete mode 100644 docs-main/integrations/wallet-gateway/apis.mdx delete mode 100644 docs-main/integrations/wallet-gateway/configuration.mdx delete mode 100644 docs-main/integrations/wallet-gateway/download.mdx delete mode 100644 docs-main/integrations/wallet-gateway/guides/manage-wallets.mdx rename docs-main/integrations/wallet-gateway/{guides => operate}/configure.mdx (94%) rename docs-main/integrations/wallet-gateway/{guides => operate}/networks-and-identity.mdx (98%) rename docs-main/integrations/wallet-gateway/{ => operate}/signing-providers.mdx (86%) delete mode 100644 docs-main/integrations/wallet-gateway/troubleshooting.mdx delete mode 100644 docs-main/integrations/wallet-gateway/usage.mdx create mode 100644 docs-main/integrations/wallet-gateway/use/approve-and-sign.mdx create mode 100644 docs-main/integrations/wallet-gateway/use/automate-with-user-api.mdx create mode 100644 docs-main/integrations/wallet-gateway/use/manage-wallets.mdx diff --git a/docs-main/docs.json b/docs-main/docs.json index 5d7ff4922..739c7131b 100644 --- a/docs-main/docs.json +++ b/docs-main/docs.json @@ -525,20 +525,22 @@ "integrations/wallet-gateway/overview", "integrations/wallet-gateway/quickstart", { - "group": "Guides", + "group": "Set up & operate", "pages": [ - "integrations/wallet-gateway/guides/configure", - "integrations/wallet-gateway/guides/networks-and-identity", - "integrations/wallet-gateway/guides/manage-wallets" + "integrations/wallet-gateway/operate/configure", + "integrations/wallet-gateway/operate/networks-and-identity", + "integrations/wallet-gateway/operate/signing-providers", + "integrations/wallet-gateway/operate/deploy", + "integrations/wallet-gateway/operate/security", + "integrations/wallet-gateway/operate/troubleshooting" ] }, - "integrations/wallet-gateway/signing-providers", { - "group": "Deploy & operate", + "group": "Use the Wallet Gateway", "pages": [ - "integrations/wallet-gateway/operate/deploy", - "integrations/wallet-gateway/operate/security", - "integrations/wallet-gateway/operate/troubleshooting" + "integrations/wallet-gateway/use/manage-wallets", + "integrations/wallet-gateway/use/approve-and-sign", + "integrations/wallet-gateway/use/automate-with-user-api" ] }, { diff --git a/docs-main/integrations/wallet-gateway/apis.mdx b/docs-main/integrations/wallet-gateway/apis.mdx deleted file mode 100644 index 64521620b..000000000 --- a/docs-main/integrations/wallet-gateway/apis.mdx +++ /dev/null @@ -1,137 +0,0 @@ ---- -title: "APIs" -description: "Wallet Gateway dApp API and User API reference" ---- - -{/* COPIED_START source="wallet-gateway:docs/dapp-building/wallet-gateway/apis/index.md@82ec39c9" hash="dbda9001" */} - -The Wallet Gateway exposes two JSON-RPC 2.0 APIs: one for dApps interactions and one for user interactions. Both APIs use the same base URL but different paths. - -## API Endpoints - -- **dApp API**: `/api/v0/dapp` - Used by decentralized applications to interact with wallets and submit transactions -- **User API**: `/api/v0/user` - Used by users to manage wallets, networks, and signing providers - -Both APIs follow the JSON-RPC 2.0 specification and use JWT-based authentication for secure access. - -## dApp API Reference - -The dApp API enables decentralized applications to connect to wallets, query ledger state, prepare transactions, and submit commands. This API is designed for programmatic access from web or mobile applications. - -**Authentication:** - -The dApp API requires a valid JWT token in the `Authorization` header: - -```text -Authorization: Bearer -``` - -**Full API Specification:** - -The complete OpenRPC specification is available at [openrpc-dapp-api.json](https://github.com/canton-network/wallet-gateway/blob/main/api-specs/openrpc-dapp-api.json). - -## User API Reference - -The User API enables users to manage their wallets, configure networks, manage identity providers, create parties, and interact with their wallet through the web UI. - -**Methods:** - -| Category | Method | Description | -| ------------------ | ---------------------- | ------------------------------------------------------------------- | -| Sessions | `addSession()` | Create a new session (unauthenticated, used for initial connection) | -| | `removeSession()` | End the current session | -| | `listSessions()` | List sessions for the current user | -| Networks | `listNetworks()` | List all configured networks | -| | `addNetwork()` | Add a new network configuration | -| | `removeNetwork()` | Remove a network configuration | -| Identity Providers | `listIdps()` | List all identity providers | -| | `addIdp()` | Add a new identity provider | -| | `removeIdp()` | Remove an identity provider | -| Wallets | `createWallet()` | Create a new wallet (party) on a network | -| | `listWallets()` | List all wallets for the current user | -| | `setPrimaryWallet()` | Set the primary wallet | -| | `removeWallet()` | Remove a wallet | -| | `syncWallets()` | Sync wallets with the ledger | -| | `isWalletSyncNeeded()` | Check if wallet sync is needed | -| Transactions | `sign()` | Sign a transaction | -| | `execute()` | Execute a signed transaction | -| | `getTransaction()` | Get a transaction by ID | -| | `listTransactions()` | List transactions | - -**Authentication:** - -Most User API methods require authentication via JWT token. However, the following methods are available without authentication: - -- `addSession()` -- `listNetworks()` -- `listIdps()` - -**Full API Specification:** - -The complete OpenRPC specification is available at [openrpc-user-api.json](https://github.com/canton-network/wallet-gateway/blob/main/api-specs/openrpc-user-api.json). - -## Server-Sent Events (SSE) Support - -The dApp API supports Server-Sent Events (SSE) for real-time notifications. Connect to the `/events` path relative to the dApp API base URL (e.g. `/api/v0/dapp/events`). Authenticate by passing the JWT token as the `token` query parameter (the `Authorization: Bearer` header is also supported): - -```javascript -const eventsUrl = new URL('events', dappApiUrl + '/') -eventsUrl.searchParams.set('token', jwtToken) -const eventSource = new EventSource(eventsUrl.toString()) - -eventSource.addEventListener('accountsChanged', (e) => { - /* ... */ -}) -eventSource.addEventListener('statusChanged', (e) => { - /* ... */ -}) -eventSource.addEventListener('connected', (e) => { - /* ... */ -}) -eventSource.addEventListener('txChanged', (e) => { - /* ... */ -}) -``` - -SSE connections receive real-time updates about: - -- Transaction status changes (`txChanged`) -- Account changes (`accountsChanged`) -- Session/connection state (`connected`, `statusChanged`) - -## Rate Limiting - -API requests are rate-limited to prevent abuse. The default limits can be configured in the server configuration. Rate limit headers are included in responses: - -- `X-RateLimit-Limit` - Maximum number of requests per window -- `X-RateLimit-Remaining` - Remaining requests in current window -- `X-RateLimit-Reset` - Time when the rate limit resets - -## CORS Configuration - -Cross-Origin Resource Sharing (CORS) is configured via the `allowedOrigins` setting in the server configuration. By default, all origins are allowed (`['*']`), but for production deployments, you should restrict this to known dApp origins. - -Example Configuration: - -```json -{ - "server": { - "allowedOrigins": [ - "https://my-dapp.example.com", - "https://another-dapp.example.com" - ] - } -} -``` - -Alternatively, you can allow all origins by setting `allowedOrigins` to `"*"`. - -```json -{ - "server": { - "allowedOrigins": ["*"] - } -} -``` - -{/* COPIED_END */} diff --git a/docs-main/integrations/wallet-gateway/configuration.mdx b/docs-main/integrations/wallet-gateway/configuration.mdx deleted file mode 100644 index fc513ddc4..000000000 --- a/docs-main/integrations/wallet-gateway/configuration.mdx +++ /dev/null @@ -1,604 +0,0 @@ ---- -title: "Configuration" -description: "Configure a remote Wallet Gateway" ---- - -{/* COPIED_START source="wallet-gateway:docs/dapp-building/wallet-gateway/configuration/index.md@82ec39c9" hash="82d4f3ee" */} - -This section covers the different ways the Wallet Gateway can be configured to support a variety of use cases and deployment scenarios. - -## Overview - -The Wallet Gateway configuration is a JSON file that defines: - -- **Kernel Settings**: Identity and client type information -- **Server Settings**: Network binding, ports, API paths, and admin user -- **Store Configuration**: Database connection and persistence settings -- **Bootstrap Configuration**: Initial identity providers and network definitions seeded on first run -- **Signing Store**: Optional database for key storage (when using internal signing) - -## Default Configuration Example - -Here is a minimalistic configuration example that can be used against a Splice localnet using SQLite storage and a mock OAuth setup. The mock OAuth configuration showcases how an IDP configuration would look. - -```json -{ - "kernel": { - "id": "remote-da", - "clientType": "remote" - }, - "server": { - "port": 3030, - "dappPath": "/api/v0/dapp", - "userPath": "/api/v0/user", - "allowedOrigins": ["http://localhost:8080", "http://localhost:8081"], - "admin": "operator" - }, - "store": { - "connection": { - "type": "sqlite", - "database": "store.sqlite" - } - }, - "signingStore": { - "connection": { - "type": "sqlite", - "database": "signingStore.sqlite" - } - }, - "bootstrap": { - "idps": [ - { - "id": "idp-mock-oauth", - "type": "oauth", - "issuer": "http://127.0.0.1:8889", - "configUrl": "http://127.0.0.1:8889/.well-known/openid-configuration" - } - ], - "networks": [ - { - "id": "canton:localnet", - "name": "LocalNet", - "description": "LocalNet configuration", - "identityProviderId": "idp-self-signed", - "auth": { - "method": "self_signed", - "issuer": "self-signed", - "audience": "https://canton.network.global", - "scope": "openid daml_ledger_api offline_access", - "clientId": "ledger-api-user", - "clientSecret": "unsafe" - }, - "adminAuth": { - "method": "self_signed", - "issuer": "self-signed", - "scope": "openid daml_ledger_api offline_access", - "audience": "https://canton.network.global", - "clientId": "ledger-api-user", - "clientSecret": "unsafe" - }, - "ledgerApi": { - "baseUrl": "http://localhost:2975" - } - } - ] - } -} -``` - -You can easily create a similar configuration file by running: - -```bash -wallet-gateway --config-example > config.json -``` - -To view the complete possible JSON Schema of the configuration file, see [Schema.md](https://github.com/canton-network/wallet-gateway/blob/82ec39c9/docs/dapp-building/wallet-gateway/configuration/schema.md). - -## Configuration Structure - -The configuration file has the following main sections: - -- **kernel**: Basic information about the Wallet Gateway identity -- **server**: Network binding, ports, API endpoint configuration, and admin user designation -- **store**: Database connection and persistence settings -- **bootstrap**: Initial identity providers and network definitions seeded when the database is first created -- **signingStore**: (optional) Secondary database for key storage when using internal signing - -## Configuring Kernel Settings - -The **kernel** section contains information that is served to dApps and used to uniquely identify the Gateway instance. - -**kernel:** - -- _id_ (required): A unique identifier for this Gateway instance. This should be a stable, unique string (e.g., `"my-gateway-prod"` or `"remote-da"`). -- _publicUrl_ (optional): The base URL used for redirecting clients. If not provided, it will be automatically derived from the server host and port settings. This is particularly important when running behind a reverse proxy or load balancer. -- _clientType_ (required): The type of client. For a remote Wallet Gateway, this should always be set to `'remote'`. - -**Example:** - -```json -{ - "kernel": { - "id": "my-production-gateway", - "clientType": "remote", - "publicUrl": "https://wallet.example.com" - } -} -``` - -## Configuring Server Settings - -The **server** section configures network binding, ports, and API paths. - -**server:** - -- _port_ (optional, default: `3030`): The port on which the Node.js server will bind. This port is also used for generating popup URLs in the discovery flow. -- _dAppPath_ (optional, default: `'/api/v0/dapp'`): The API path for dApp JSON-RPC requests. This is where dApps connect to interact with wallets. -- _userPath_ (optional, default: `'/api/v0/user'`): The API path for user JSON-RPC requests. This is used by the web UI and user-facing applications. -- _allowedOrigins_ (optional, default: `['*']`): CORS allowed origins. For production, specify exact origins instead of `'*'` for better security. Example: `["https://my-dapp.com", "https://another-dapp.com"]`. -- _requestSizeLimit_ (optional, default: `'1mb'`): Maximum request body size the server will accept. Use standard size notation (e.g., `'1mb'`, `'10mb'`, `'50kb'`). -- _requestRateLimit_ (optional, default: `10000`): Maximum number of requests per minute from a single IP address (this excludes health endpoints). -- _admin_ (optional): The user ID (JWT `sub` claim) of the admin user. When set, the matching user is granted admin privileges, allowing them to manage networks and identity providers through the User API and web UI. Other users can only view these settings. If omitted, no user has admin privileges and network/IDP management is restricted to the bootstrap configuration. - -**Example:** - -```json -{ - "server": { - "port": 3030, - "dAppPath": "/api/v0/dapp", - "userPath": "/api/v0/user", - "allowedOrigins": ["https://my-dapp.example.com"], - "requestSizeLimit": "10mb", - "requestRateLimit": 10000, - "admin": "operator" - } -} -``` - -**store:** - -- _connection:_ Configures the database connection. See [Configuring Store](#configuring-store) for details. - -**bootstrap:** - -- _idps:_ Configures the initial identity providers (IDPs) seeded when the database is first created. See [Configuring Identity Providers](#configuring-identity-providers) for details. -- _networks:_ Configures the initial networks seeded when the database is first created. See [Configuring Networks](#configuring-networks) for details. - -## Configuring Store - -The store connection determines where the Wallet Gateway persists its data, including sessions, wallet configurations, networks, identity providers, and transactions. - -**Available Storage Options:** - -Three storage backends are available: **memory**, **sqlite**, and **postgres**. - -**Recommendations:** - -- **Production/Test Environments**: Use **postgres** for reliability, scalability, and backup capabilities -- **Local Development**: Use **sqlite** for simplicity and persistence across restarts -- **Quick Testing**: Use **memory** for temporary setups (all data is lost on restart) - -> [!IMPORTANT] -> If using Docker or Kubernetes with the memory store, all data will be lost when the container/pod is recreated. SQLite will persist only if the database file is stored on a persistent volume. - -**PostgreSQL Configuration:** - -For production deployments, PostgreSQL is recommended due to its robustness, concurrent access support, and backup/restore capabilities. - -**postgres:** - -- _type_ (required): Must be `'postgres'` -- _host_ (required): The hostname or IP address of the PostgreSQL server -- _port_ (optional, default: `5432`): The port on which PostgreSQL is listening -- _user_ (required): The database user to connect with -- _password_ (required): The password for the database user -- _database_ (required): The name of the database to use (must exist) - -**Example:** - -```json -{ - "store": { - "connection": { - "type": "postgres", - "host": "db.example.com", - "port": 5432, - "user": "wallet_gateway", - "password": "secure-password", - "database": "wallet_gateway_db" - } - } -} -``` - -**SQLite Configuration:** - -SQLite is suitable for single-instance deployments and local development. It stores all data in a single file. - -**sqlite:** - -- _type_ (required): Must be `'sqlite'` -- _database_ (required): Path to the SQLite database file (e.g., `'store.sqlite'` or `'/var/lib/wallet-gateway/store.sqlite'`) - -**Example:** - -```json -{ - "store": { - "connection": { - "type": "sqlite", - "database": "store.sqlite" - } - } -} -``` - -**Memory Store Configuration:** - -The memory store keeps all data in RAM. Useful for testing but not suitable for any production use. - -**memory:** - -- _type_ (required): Must be `'memory'` - -**Example:** - -```json -{ - "store": { - "connection": { - "type": "memory" - } - } -} -``` - -### Database Recovery and Backups - -For production and sensitive environments, regular database backups are **strongly recommended**. - -**What's Stored in the Database:** - -The store database contains: - -- User sessions and authentication state -- Networks and identity providers (seeded from bootstrap configuration on first run, manageable by admin at runtime) -- Wallet configurations and party mappings -- In-flight transactions (pending signing or signed but not yet submitted) - -**What Happens Without Backups:** - -If the database is lost and cannot be restored: - -- All user sessions will be invalidated (users must log in again) -- Networks and IDPs will be re-seeded from the bootstrap configuration, but any runtime modifications made by the admin will be lost -- In-flight transactions will be lost (may require manual intervention) -- Wallet configurations referencing lost networks may need to be reconfigured - -**Backup Recommendations:** - -- **PostgreSQL**: Use `pg_dump` or automated backup solutions (e.g., pgBackRest, WAL-E) -- **SQLite**: Copy the database file regularly, ensuring no writes occur during the copy -- Set up automated daily backups with retention policies -- Test restore procedures regularly - -> [!IMPORTANT] -> If the wallet gateway is used as signing provider then clients private keys will be lost! It is therefor highly recommended -> to not use wallet gateway as signing provider in any important system. - -## Configuring Identity Providers - -Identity Providers (IDPs) are used for generating JWT tokens that authenticate against Canton validator networks. Each network must reference an IDP that provides or generates the required authentication tokens. - -IDPs are defined in the `bootstrap` section of the configuration and are seeded into the database when it is first created. After initial setup, IDPs can be managed at runtime through the User API or web UI by the admin user (see `server.admin`). - -**Supported IDP Types:** - -The Wallet Gateway supports two types of identity providers: **self_signed** and **oauth**. - -> [!IMPORTANT] -> For production environments, it is **highly recommended** to use an **oauth** IDP provider. Self-signed tokens should only be used for development and testing. - -**Self-Signed IDP:** - -Self-signed IDPs generate JWT tokens locally using a secret key. This is convenient for development but less secure for production. - -**self_signed:** - -- _id_ (required): Unique identifier that must match the `identityProviderId` referenced in network configurations -- _type_ (required): Must be `'self_signed'` -- _issuer_ (required): The issuer value that will be set in the JWT token's `iss` claim. This must match the issuer expected by the validator node - -**Example:** - -```json -{ - "bootstrap": { - "idps": [ - { - "id": "idp-self-signed", - "type": "self_signed", - "issuer": "self-signed" - } - ] - } -} -``` - -**OAuth IDP:** - -OAuth IDPs integrate with external OAuth 2.0 / OpenID Connect providers to obtain authentication tokens. This is the recommended approach for production. - -**oauth:** - -- _id_ (required): Unique identifier that must match the `identityProviderId` referenced in network configurations -- _type_ (required): Must be `'oauth'` -- _issuer_ (required): The issuer value that will be set in the JWT token's `iss` claim. This should match the issuer from your OAuth provider's configuration -- _configUrl_ (required): The OpenID Connect discovery endpoint URL. Typically follows the pattern: `${OAuthServerURL}/.well-known/openid-configuration` - -**Example:** - -```json -{ - "bootstrap": { - "idps": [ - { - "id": "idp-production", - "type": "oauth", - "issuer": "https://auth.example.com", - "configUrl": "https://auth.example.com/.well-known/openid-configuration" - } - ] - } -} -``` - -## Configuring Networks - -Networks represent different Canton validator nodes that clients can connect to through the Wallet Gateway. -Networks defined in the `bootstrap` section are seeded into the database when it is first created and serve as the default networks available to all users. After initial setup, networks can be managed at runtime through the User API or web UI by the admin user (see `server.admin`). - -**Network Configuration:** - -Networks is an array, so you can define multiple networks in a single configuration: - -**networks** (array): - -- _id_ (required): Unique identifier for the network. Should follow CAIP-2 format (e.g., `"canton:localnet"` or `"canton:production"`) -- _name_ (required): User-friendly name displayed in the UI (e.g., `"Local Network"` or `"Production Network"`) -- _description_ (optional): A description of the network shown to users -- _synchronizerId_ (required): The synchronizer ID used on the validator. If your validator has multiple synchronizers, create separate network configurations for each -- _identityProviderId_ (required): Must match the `id` of an IDP defined in the `idps` section -- _ledgerApi_ (required): Configuration object for the Ledger API: - - _baseUrl_ (required): The base URL of the Canton validator's Ledger API (e.g., `"http://localhost:2975"` or `"https://ledger.example.com"`) -- _auth_ (required): Authentication configuration for normal ledger operations. This is the method users go through in the UI — use `authorization_code` for interactive flows or `self_signed` for development -- _adminAuth_ (optional): Authentication configuration for admin operations. Only needed for operations requiring elevated privileges. This is used by the backend only — use `client_credentials` for machine-to-machine authentication - -**Authentication Methods:** - -The Wallet Gateway supports three authentication methods for network access: **authorization_code**, **client_credentials**, and **self_signed**. - -**Recommendations:** - -- **Production**: Use **client_credentials** for machine-to-machine authentication -- **Interactive/User-facing**: Use **authorization_code** for user-initiated flows -- **Development/Testing**: Use **self_signed** for local development - -**Authorization Code:** - -Used for interactive authentication flows where users grant authorization through their browser. - -**authorization_code:** - -- _method_ (required): Must be `'authorization_code'` -- _audience_ (required): The audience claim (`aud`) in the JWT token. Must match the audience expected by the validator -- _scope_ (required): Space-separated list of OAuth scopes. Typically includes `'openid daml_ledger_api offline_access'` -- _clientId_ (required): The OAuth client ID registered with the identity provider - -**Example:** - -```json -{ - "auth": { - "method": "authorization_code", - "audience": "https://canton.network.global", - "scope": "openid daml_ledger_api offline_access", - "clientId": "my-client-id" - } -} -``` - -**Client Credentials:** - -Used for machine-to-machine authentication. Recommended for production server deployments. - -**client_credentials:** - -- _method_ (required): Must be `'client_credentials'` -- _audience_ (required): The audience claim (`aud`) in the JWT token. Must match the audience expected by the validator -- _scope_ (required): Space-separated list of OAuth scopes. Typically includes `'openid daml_ledger_api offline_access'` -- _clientId_ (required): The OAuth client ID registered with the identity provider -- _clientSecret_ (required): The OAuth client secret for authenticating with the IDP - -**Example:** - -```json -{ - "auth": { - "method": "client_credentials", - "audience": "https://canton.network.global", - "scope": "openid daml_ledger_api offline_access", - "clientId": "my-service-client", - "clientSecret": "my-secure-secret" - } -} -``` - -**Self-Signed:** - -Used for development and testing. The Gateway generates and signs JWT tokens locally. - -**self_signed:** - -- _method_ (required): Must be `'self_signed'` -- _issuer_ (required): The issuer claim (`iss`) in the JWT token. Must match the issuer expected by the validator -- _audience_ (required): The audience claim (`aud`) in the JWT token. Must match the audience expected by the validator -- _scope_ (required): Space-separated list of scopes. Typically includes `'openid daml_ledger_api offline_access'` -- _clientId_ (required): The client identifier used in the token -- _clientSecret_ (required): The secret used to sign the JWT token. Must match the secret expected by the validator - -**Example:** - -```json -{ - "auth": { - "method": "self_signed", - "issuer": "self-signed", - "audience": "https://canton.network.global", - "scope": "openid daml_ledger_api offline_access", - "clientId": "ledger-api-user", - "clientSecret": "unsafe-secret-for-development" - } -} -``` - -**Complete Network Configuration Example:** - -```json -{ - "bootstrap": { - "networks": [ - { - "id": "canton:localnet", - "name": "Local Network", - "description": "Local development network", - "synchronizerId": "local", - "identityProviderId": "idp-self-signed", - "auth": { - "method": "self_signed", - "issuer": "self-signed", - "audience": "https://canton.network.global", - "scope": "openid daml_ledger_api offline_access", - "clientId": "ledger-api-user", - "clientSecret": "unsafe" - }, - "ledgerApi": { - "baseUrl": "http://localhost:2975" - } - } - ] - } -} -``` - -## Configuring Signing Store - -The signing store is an optional secondary database used for storing private keys when the Wallet Gateway is configured to act as a signing provider (using the `wallet-kernel` signing provider). - -> [!IMPORTANT] -> If you use the Wallet Gateway as a signing provider, private keys will be stored in the signing store database. This is **not recommended** for production environments with valuable assets. Use external signing providers (Dfns, Fireblocks, Blockdaemon, or Participant-based) for production. - -**Configuration:** - -The signing store uses the same connection configuration options as the main store. See [Configuring Store](#configuring-store) for available options (memory, sqlite, postgres). - -**When is Signing Store Required?** - -The signing store is only needed if: - -- You're using the `wallet-kernel` signing provider (internal signing) -- You want to store keys managed by the Wallet Gateway itself - -If you're using external signing providers (Dfns, Fireblocks, Blockdaemon, Participant), you can omit the `signingStore` configuration entirely. - -**Example:** - -```json -{ - "signingStore": { - "connection": { - "type": "sqlite", - "database": "signingStore.sqlite" - } - } -} -``` - -**Security Considerations:** - -- Store the signing store database file in a secure location with restricted access -- Use strong filesystem permissions (e.g., `chmod 600` for SQLite files) -- For PostgreSQL, use separate credentials with minimal privileges -- Consider encrypting the database at rest -- Regularly backup the signing store if it contains production keys -- Never commit signing store files to version control - -## Configuring for Different Environments - -**Environment-Specific Configuration Files** - -It is recommended to maintain separate configuration files for each environment (development, staging, production). This allows you to: - -- Isolate settings per environment -- Apply different security levels and policies -- Prevent accidental use of production credentials in development -- Simplify environment-specific deployments - -**Best Practices:** - -1. **Use separate files**: Create `config.dev.json`, `config.staging.json`, `config.prod.json` - -2. **Sensitive data**: Never commit sensitive values (passwords, secrets, API keys) directly in configuration files, especially if stored in version control - -3. **Environment variables**: Use environment variables to override sensitive configuration values: - - ```json - { - "bootstrap": { - "networks": [ - { - "auth": { - "clientSecretEnv": "OAUTH_CLIENT_SECRET" - } - } - ] - } - } - ``` - - Then set the environment variable when running: - - ```bash - export OAUTH_CLIENT_SECRET="my-secret" - wallet-gateway -c ./config.json - ``` - -4. **Access control**: Be aware that: - - Network and IDP configurations (excluding secrets) are visible to users with ledger access - - If configuration files are stored in shared repositories, anyone with read access can see non-secret configuration - - Use environment variables or secret management systems (e.g., HashiCorp Vault, AWS Secrets Manager) for sensitive values - -5. **Admin authentication**: The `adminAuth` configuration contains sensitive credentials and should be: - - Stored securely (not in version control) - - Rotated regularly - - Restricted to production environments where truly needed - -**Example Environment Setup:** - -**Development (config.dev.json):** - -- SQLite or memory store -- Self-signed authentication -- Localhost network endpoints -- Permissive CORS settings - -**Production (config.prod.json):** - -- PostgreSQL store -- OAuth authentication -- Production network endpoints -- Restricted CORS settings -- Secrets via environment variables - -{/* COPIED_END */} diff --git a/docs-main/integrations/wallet-gateway/download.mdx b/docs-main/integrations/wallet-gateway/download.mdx deleted file mode 100644 index 2db7d0d0c..000000000 --- a/docs-main/integrations/wallet-gateway/download.mdx +++ /dev/null @@ -1,160 +0,0 @@ ---- -title: "Download" -description: "Install and start the Wallet Gateway" ---- - -{/* COPIED_START source="wallet-gateway:docs/dapp-building/wallet-gateway/getting-started/index.md@82ec39c9" hash="e71f253b" */} - -This guide will help you get the Wallet Gateway up and running quickly. - -## Installation - -Choose your preferred installation method: - -**Global Installation (npm):** - -Install the Wallet Gateway globally using npm: - -```bash -npm install -g @canton-network/wallet-gateway-remote -``` - -After installation, you can run it from anywhere: - -```bash -wallet-gateway -c ./config.json -``` - -**Run with npx (No Installation):** - -Run the Wallet Gateway directly through npx without installing (tested with Node.js v24): - -```bash -npx @canton-network/wallet-gateway-remote -c ./config.json -``` - -This downloads and runs the latest version each time, useful for testing or one-off runs. - -## Quick Start - -1. **Create a Configuration File** - - First, generate an example configuration file: - - **Global Installation:** - - ```bash - wallet-gateway --config-example > config.json - ``` - - **npx:** - - ```bash - npx @canton-network/wallet-gateway-remote --config-example > config.json - ``` - -2. **Edit the Configuration** - - Open `config.json` and customize it for your environment. At minimum, you'll need to configure: - - **Store connection**: Database configuration (in-memory, SQLite, or PostgreSQL) - - **Networks**: At least one Canton network with its Ledger API endpoint - - **Identity Providers**: Authentication configuration for your networks - - See [Configuration](/integrations/wallet-gateway/configuration) for detailed configuration options. - -3. **Start the Gateway** - - **Global Installation:** - - ```bash - wallet-gateway -c ./config.json - ``` - - Or with a custom port: - - ```bash - wallet-gateway -c ./config.json -p 8080 - ``` - - **npx:** - - ```bash - npx @canton-network/wallet-gateway-remote -c ./config.json - ``` - - Or with a custom port: - - ```bash - npx @canton-network/wallet-gateway-remote -c ./config.json -p 8080 - ``` - -4. **Verify it's Running** - - Once started, the Wallet Gateway exposes three endpoints: - - **Web UI**: `http://localhost:3030` (or your configured port) - - **dApp JSON-RPC API**: `http://localhost:3030/api/v0/dapp` - - **User JSON-RPC API**: `http://localhost:3030/api/v0/user` - - Open the web UI in your browser to confirm it's running. - -## Command Line Options - -The Wallet Gateway supports the following command-line options: - -```text --c, --config Set config path (default: ./config.json) ---config-schema Output the config schema (JSON Schema) and exit ---config-example Output an example config and exit --p, --port [port] Set port (overrides config file) --f, --log-format Set log format: json or pretty (default: pretty) -``` - -Example: - -**Global Installation:** - -```bash -# Generate config schema -wallet-gateway --config-schema - -# Run with JSON logging -wallet-gateway -c ./config.json -f json -``` - -**npx:** - -```bash -# Generate config schema -npx @canton-network/wallet-gateway-remote --config-schema - -# Run with JSON logging -npx @canton-network/wallet-gateway-remote -c ./config.json -f json -``` - -## Configuration Schema - -To see the full JSON Schema for the configuration file, run: - -**Global Installation:** - -```bash -wallet-gateway --config-schema -``` - -**npx:** - -```bash -npx @canton-network/wallet-gateway-remote --config-schema -``` - -This outputs a complete JSON Schema that can be used for validation and IDE autocomplete support. - -## Next Steps - -- Read [Configuration](/integrations/wallet-gateway/configuration) to understand all configuration options -- Explore the [APIs](/integrations/wallet-gateway/apis) to understand how to interact with the Gateway -- Learn about [Signing Providers](/integrations/wallet-gateway/signing-providers) to configure transaction signing -- Check out the [Deployment](https://github.com/canton-network/wallet-gateway/blob/82ec39c9/docs/dapp-building/wallet-gateway/deployment/index.md) guide to host the Gateway with Docker or Helm -- Check [Troubleshooting](/integrations/wallet-gateway/troubleshooting) if you encounter any issues - -{/* COPIED_END */} diff --git a/docs-main/integrations/wallet-gateway/guides/manage-wallets.mdx b/docs-main/integrations/wallet-gateway/guides/manage-wallets.mdx deleted file mode 100644 index 0f1705693..000000000 --- a/docs-main/integrations/wallet-gateway/guides/manage-wallets.mdx +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: "Manage wallets" -description: "Create and manage wallets through the Wallet Gateway's User UI or User API." ---- - -Users interact with the Wallet Gateway in two ways: the **User UI** for people, and the -**User API** for scripts, custom UIs, and backend automation. Both manage the same wallets, -networks, identity providers, and sessions. This guide covers the User UI, common workflows, -and when to reach for the User API instead. - -The **dApp API** is separate: dApps call it (through the dApp SDK) when a user connects a -wallet. See [dApp API](/integrations/wallet-gateway/reference/dapp-api). - -## User UI - -The Wallet Gateway serves a web UI at its root URL (for example `http://localhost:3030`). Its main -pages are: - -| Page | Path | What it does | -| --- | --- | --- | -| **Login** | `/login` | Choose a network and IDP, then sign in (OAuth redirect or self-signed). | -| **Wallets** | `/wallets` | List, create, and remove wallets, and set the primary wallet. Default landing page. | -| **Transactions** | `/transactions` | List transactions and view status and details. | -| **Approve** | `/approve` | Review and sign or reject a transaction a dApp requested. | -| **Settings** | `/settings` | Manage networks and IDPs, view sessions, and see version info. | -| **Callback** | `/callback` | Internal OAuth redirect target after login. | - -Users log out from the layout control. Logout calls `removeSession`, clears local auth state, -and returns to `/login` (or closes the window if the UI was opened as an approval popup). - -## When to use which interface - -- **User UI**: best for end users. They log in, create and manage wallets, view transactions, - and approve dApp requests. No code required. -- **User API**: use it to drive wallet setup from scripts or a backend, build a custom wallet - UI embedded in your app, or automate session, network, IDP, and wallet operations. - -## Common workflows - -### Set up a wallet (User UI) - -1. Open the User UI and go to **Login**. -2. Select a network and IDP, then complete login (for example, OAuth). -3. On **Wallets**, create a wallet by choosing a network, signing provider, and party ID. - Optionally set it as primary. -4. Add networks or IDPs under **Settings** if needed (admin only). - -### Approve a dApp transaction - -1. A dApp calls `prepareExecute` through the dApp SDK. -2. The user is taken to **Approve** to review the transaction. -3. The user signs or rejects it, and the dApp is notified of the result. - -### Automate wallet setup (User API) - -1. Call `addSession()`, then complete your auth flow to obtain a JWT. -2. Call `listNetworks()` and `listIdps()` to discover available options. -3. Call `createWallet()` with the desired network and signing provider. -4. Use `listWallets()`, `sign()`, `execute()`, and related methods as your use case requires. - -See the [User API](/integrations/wallet-gateway/reference/user-api) for the full method list. - -## Sessions - -Users authenticate through an IDP, and the Wallet Gateway issues a **session** (a JWT) that the User -and dApp APIs use to authorize later calls. `addSession()` starts the connection, your auth -flow supplies the JWT, and `removeSession()` (or logging out) ends it. Sessions are stored in -the Wallet Gateway's database, so back it up to avoid invalidating active sessions. See -[Networks & identity providers](/integrations/wallet-gateway/guides/networks-and-identity). diff --git a/docs-main/integrations/wallet-gateway/guides/configure.mdx b/docs-main/integrations/wallet-gateway/operate/configure.mdx similarity index 94% rename from docs-main/integrations/wallet-gateway/guides/configure.mdx rename to docs-main/integrations/wallet-gateway/operate/configure.mdx index 30efc4f88..59c9dc63f 100644 --- a/docs-main/integrations/wallet-gateway/guides/configure.mdx +++ b/docs-main/integrations/wallet-gateway/operate/configure.mdx @@ -7,7 +7,7 @@ The Wallet Gateway reads a single JSON configuration file that defines who the W how it serves requests, where it persists data, and which networks and identity providers it starts with. This guide covers the file's structure and the kernel, server, and store sections. For networks and authentication, see -[Networks & identity providers](/integrations/wallet-gateway/guides/networks-and-identity). +[Networks & identity providers](/integrations/wallet-gateway/operate/networks-and-identity). For an exhaustive field reference, see the [Configuration reference](/integrations/wallet-gateway/reference/configuration-reference). @@ -66,7 +66,7 @@ A minimal configuration for a local setup looks like this: ``` Fill in `bootstrap.idps` and `bootstrap.networks` following -[Networks & identity providers](/integrations/wallet-gateway/guides/networks-and-identity). +[Networks & identity providers](/integrations/wallet-gateway/operate/networks-and-identity). ## Kernel @@ -174,13 +174,13 @@ transactions itself (the internal signing provider). It uses the same connection The internal signing provider stores private keys in the signing store database. Do not use it in production systems with valuable assets. See -[Signing providers](/integrations/wallet-gateway/signing-providers). +[Signing providers](/integrations/wallet-gateway/operate/signing-providers). ## Next steps - + Connect to a validator and configure authentication. diff --git a/docs-main/integrations/wallet-gateway/operate/deploy.mdx b/docs-main/integrations/wallet-gateway/operate/deploy.mdx index 83ef096f4..49c66b60b 100644 --- a/docs-main/integrations/wallet-gateway/operate/deploy.mdx +++ b/docs-main/integrations/wallet-gateway/operate/deploy.mdx @@ -11,7 +11,7 @@ and dApp API on one port. ## Before you deploy Make production choices in your configuration file before packaging it. See -[Configure the Wallet Gateway](/integrations/wallet-gateway/guides/configure) and the +[Configure the Wallet Gateway](/integrations/wallet-gateway/operate/configure) and the [Configuration reference](/integrations/wallet-gateway/reference/configuration-reference). - **Use a persistent store.** Prefer `postgres`. The `memory` store loses all data when a @@ -27,13 +27,13 @@ Make production choices in your configuration file before packaging it. See ## Docker Provide the configuration file and any required secrets to the container, and expose the -Gateway's port. Mount the config (and, for `sqlite`, a persistent volume for the database +Wallet Gateway's port. Mount the config (and, for `sqlite`, a persistent volume for the database file), then start the Wallet Gateway pointing at the mounted config. If you use the internal signing provider, its `signingStore` holds private keys. Put it on durable, access-controlled storage, or use a participant node or external custody provider -instead. See [Signing providers](/integrations/wallet-gateway/signing-providers). +instead. See [Signing providers](/integrations/wallet-gateway/operate/signing-providers). ## Helm diff --git a/docs-main/integrations/wallet-gateway/guides/networks-and-identity.mdx b/docs-main/integrations/wallet-gateway/operate/networks-and-identity.mdx similarity index 98% rename from docs-main/integrations/wallet-gateway/guides/networks-and-identity.mdx rename to docs-main/integrations/wallet-gateway/operate/networks-and-identity.mdx index ab1536ae2..ae658c97c 100644 --- a/docs-main/integrations/wallet-gateway/guides/networks-and-identity.mdx +++ b/docs-main/integrations/wallet-gateway/operate/networks-and-identity.mdx @@ -9,7 +9,7 @@ to authenticate against that validator. This guide covers both, plus the authent methods a network can use. Networks and IDPs are seeded from the `bootstrap` section on first run. After that, the admin -user (see `server.admin` in [Configure the Wallet Gateway](/integrations/wallet-gateway/guides/configure)) +user (see `server.admin` in [Configure the Wallet Gateway](/integrations/wallet-gateway/operate/configure)) can manage them at runtime through the User API or User UI. ## Identity providers @@ -176,4 +176,4 @@ without restarting, using the User API (`addNetwork`, `removeNetwork`, `addIdp`, `listNetworks`, `listIdps`) or the **Settings** page in the User UI. Runtime changes are stored in the database, so back it up to avoid losing them. See the [User API](/integrations/wallet-gateway/reference/user-api) and -[Manage wallets](/integrations/wallet-gateway/guides/manage-wallets). +[Manage wallets](/integrations/wallet-gateway/use/manage-wallets). diff --git a/docs-main/integrations/wallet-gateway/operate/security.mdx b/docs-main/integrations/wallet-gateway/operate/security.mdx index 24a914c98..43a9c0211 100644 --- a/docs-main/integrations/wallet-gateway/operate/security.mdx +++ b/docs-main/integrations/wallet-gateway/operate/security.mdx @@ -9,7 +9,7 @@ the relevant configuration. ## Authentication and identity - **Use OAuth / OpenID Connect IDPs.** Reserve self-signed tokens for development. See - [Networks & identity providers](/integrations/wallet-gateway/guides/networks-and-identity#identity-providers). + [Networks & identity providers](/integrations/wallet-gateway/operate/networks-and-identity#identity-providers). - **Use `client_credentials` for `adminAuth`.** Store admin credentials securely and rotate them regularly. - **Set `server.admin` deliberately.** Only the configured admin can manage networks and IDPs @@ -19,7 +19,7 @@ the relevant configuration. - **Do not use internal signing for valuable assets.** Use a participant node or an external custody provider (Fireblocks, Blockdaemon, DFNS). See - [Signing providers](/integrations/wallet-gateway/signing-providers). + [Signing providers](/integrations/wallet-gateway/operate/signing-providers). - **If you must run a signing store,** restrict filesystem permissions, consider encryption at rest, back it up, and keep it out of version control. See [Signing store security](/integrations/wallet-gateway/reference/configuration-reference#signing-store-security). @@ -27,7 +27,7 @@ the relevant configuration. ## Network exposure - **Restrict CORS.** Set `server.allowedOrigins` to known dApp origins instead of `"*"`. See - [Configure the Wallet Gateway](/integrations/wallet-gateway/guides/configure#server). + [Configure the Wallet Gateway](/integrations/wallet-gateway/operate/configure#server). - **Set `kernel.publicUrl`** to the external URL when running behind a proxy or load balancer. - **Tune rate and size limits.** Review `server.requestRateLimit` and `server.requestSizeLimit` for your traffic. diff --git a/docs-main/integrations/wallet-gateway/signing-providers.mdx b/docs-main/integrations/wallet-gateway/operate/signing-providers.mdx similarity index 86% rename from docs-main/integrations/wallet-gateway/signing-providers.mdx rename to docs-main/integrations/wallet-gateway/operate/signing-providers.mdx index 8ef6cea1f..11bfc61ab 100644 --- a/docs-main/integrations/wallet-gateway/signing-providers.mdx +++ b/docs-main/integrations/wallet-gateway/operate/signing-providers.mdx @@ -34,7 +34,7 @@ Stores private keys directly in the Wallet Gateway's signing store database and transactions itself. Suitable for development and testing only. It is available whenever a `signingStore` is configured; no other setup is required. See -[Configure the Wallet Gateway](/integrations/wallet-gateway/guides/configure#signing-store). +[Configure the Wallet Gateway](/integrations/wallet-gateway/operate/configure#signing-store). ```json { @@ -107,19 +107,3 @@ returns the update ID. Only `Canton` and `CantonTestnet` network wallets are supported. - -## Choosing a provider - -Base the choice on your security requirements, infrastructure, and compliance needs: - -- **Development and testing**: internal or participant-based signing. -- **Production (enterprise)**: Fireblocks, DFNS, or participant-based signing. -- **Production (managed)**: Blockdaemon, DFNS, or participant-based signing. - -## Migrating between providers - -Keys cannot be transferred directly between providers. To move a wallet to a different provider: - -1. Create a new party with the new provider. -2. Transfer any assets or contracts to the new party. -3. Update your dApp to use the new party. diff --git a/docs-main/integrations/wallet-gateway/operate/troubleshooting.mdx b/docs-main/integrations/wallet-gateway/operate/troubleshooting.mdx index ffd02c9b1..75c538786 100644 --- a/docs-main/integrations/wallet-gateway/operate/troubleshooting.mdx +++ b/docs-main/integrations/wallet-gateway/operate/troubleshooting.mdx @@ -55,7 +55,7 @@ The Wallet Gateway cannot connect to a configured network or Ledger API. wallet-gateway -c ./config.json -p 8080 ``` -- Check whether another Gateway instance is running: +- Check whether another Wallet Gateway instance is running: ```bash ps aux | grep wallet-gateway @@ -95,7 +95,7 @@ permissions: `DFNS_AUTH_TOKEN` set, credentials correct, and the service account has wallet-creation and signing permissions. -See [Signing providers](/integrations/wallet-gateway/signing-providers) for each +See [Signing providers](/integrations/wallet-gateway/operate/signing-providers) for each provider's setup. ## Debugging diff --git a/docs-main/integrations/wallet-gateway/overview.mdx b/docs-main/integrations/wallet-gateway/overview.mdx index 507cf1fba..ca037d34d 100644 --- a/docs-main/integrations/wallet-gateway/overview.mdx +++ b/docs-main/integrations/wallet-gateway/overview.mdx @@ -71,7 +71,7 @@ primary. dApps see these wallets as the accounts a user can transact with. **Signing providers.** Signing is delegated to a signing provider chosen per wallet, so different wallets in the same Wallet Gateway can sign through different providers. Keys stay with the provider you choose: a participant node, an external custody service, or an internal store for -testing. See [Signing providers](/integrations/wallet-gateway/signing-providers). +testing. See [Signing providers](/integrations/wallet-gateway/operate/signing-providers). ## Transaction lifecycle @@ -123,10 +123,10 @@ verifying the three endpoints. Install, configure, run, and verify a Wallet Gateway. - + Understand the configuration file, store, and server settings. - + Choose where transaction signing and key custody happen. diff --git a/docs-main/integrations/wallet-gateway/quickstart.mdx b/docs-main/integrations/wallet-gateway/quickstart.mdx index 6e26a0817..b9305903f 100644 --- a/docs-main/integrations/wallet-gateway/quickstart.mdx +++ b/docs-main/integrations/wallet-gateway/quickstart.mdx @@ -46,8 +46,8 @@ Open `config.json` and set, at minimum: - **Networks**: at least one Canton network with its Ledger API `baseUrl`. - **Identity providers**: how users authenticate against those networks. -See [Configure the Wallet Gateway](/integrations/wallet-gateway/guides/configure) for every option, and -[Networks & identity providers](/integrations/wallet-gateway/guides/networks-and-identity) to +See [Configure the Wallet Gateway](/integrations/wallet-gateway/operate/configure) for every option, and +[Networks & identity providers](/integrations/wallet-gateway/operate/networks-and-identity) to wire up authentication. @@ -90,13 +90,13 @@ autocompletion. ## Next steps - + All configuration options for kernel, server, and store. - + Connect to a validator and set up authentication. - + Create and manage wallets through the User UI or User API. diff --git a/docs-main/integrations/wallet-gateway/reference/configuration-reference.mdx b/docs-main/integrations/wallet-gateway/reference/configuration-reference.mdx index 753f9041f..8c7b1074b 100644 --- a/docs-main/integrations/wallet-gateway/reference/configuration-reference.mdx +++ b/docs-main/integrations/wallet-gateway/reference/configuration-reference.mdx @@ -6,8 +6,8 @@ description: "Full reference for the Wallet Gateway store backends, backups, sig This reference complements the task-oriented guides with the details you need for production: the store backends in full, backup and recovery, signing store security, and how to handle secrets across environments. For the config file's overall shape, see -[Configure the Wallet Gateway](/integrations/wallet-gateway/guides/configure). For networks and -authentication, see [Networks & identity providers](/integrations/wallet-gateway/guides/networks-and-identity). +[Configure the Wallet Gateway](/integrations/wallet-gateway/operate/configure). For networks and +authentication, see [Networks & identity providers](/integrations/wallet-gateway/operate/networks-and-identity). ## Store backends @@ -100,7 +100,7 @@ Recommendations: If the Wallet Gateway is used as the signing provider, the signing store holds private keys. If it is lost, those keys are unrecoverable. Do not use internal signing for any important system. See -[Signing providers](/integrations/wallet-gateway/signing-providers). +[Signing providers](/integrations/wallet-gateway/operate/signing-providers). ## Signing store security diff --git a/docs-main/integrations/wallet-gateway/reference/user-api.mdx b/docs-main/integrations/wallet-gateway/reference/user-api.mdx index 270e2b33f..772bad8fc 100644 --- a/docs-main/integrations/wallet-gateway/reference/user-api.mdx +++ b/docs-main/integrations/wallet-gateway/reference/user-api.mdx @@ -58,7 +58,7 @@ The complete OpenRPC specification is available at ## Rate limiting Requests are rate-limited to prevent abuse. Configure the limits in the -[server settings](/integrations/wallet-gateway/guides/configure#server). Responses include: +[server settings](/integrations/wallet-gateway/operate/configure#server). Responses include: - `X-RateLimit-Limit`: maximum requests per window. - `X-RateLimit-Remaining`: remaining requests in the current window. @@ -68,4 +68,4 @@ Requests are rate-limited to prevent abuse. Configure the limits in the Cross-origin access is controlled by `server.allowedOrigins`. It defaults to `["*"]`; in production, restrict it to known origins. See -[Configure the Wallet Gateway](/integrations/wallet-gateway/guides/configure#server). +[Configure the Wallet Gateway](/integrations/wallet-gateway/operate/configure#server). diff --git a/docs-main/integrations/wallet-gateway/troubleshooting.mdx b/docs-main/integrations/wallet-gateway/troubleshooting.mdx deleted file mode 100644 index 311b396d9..000000000 --- a/docs-main/integrations/wallet-gateway/troubleshooting.mdx +++ /dev/null @@ -1,213 +0,0 @@ ---- -title: "Troubleshooting" -description: "Common Wallet Gateway issues and fixes" ---- - -{/* COPIED_START source="wallet-gateway:docs/dapp-building/wallet-gateway/troubleshooting/index.md@82ec39c9" hash="f67950b4" */} - -This section covers common issues and their solutions when working with the Wallet Gateway. - -## Common Issues - -## Database Connection Errors - -**Problem:** The Gateway fails to start with database connection errors. - -**Solutions:** - -1. **PostgreSQL:** - - Verify the database exists: `psql -U postgres -l` - - Check connection credentials in your config file - - Ensure PostgreSQL is running: `pg_isready` - - Verify network connectivity and firewall rules - -2. **SQLite:** - - Ensure the directory exists for the database file - - Check file permissions (read/write access required) - - Verify disk space is available - -3. **Memory Store:** - - No configuration needed, but remember: data is lost on restart - -## Authentication Failures - -**Problem:** API calls return 401 Unauthorized errors. - -**Solutions:** - -1. **Invalid or Expired Token:** - - Ensure you're using a valid JWT token - - Check token expiration time - - Regenerate the token if necessary - -2. **Missing Authorization Header:** - - Include the Authorization header: `Authorization: Bearer ` - - Verify the header format is correct - -3. **Session Not Found:** - - Create a session using `addSession()` method first - - Ensure the session hasn't expired - - Check that you're using the correct user context - -## Network Connection Issues - -**Problem:** Cannot connect to configured networks or ledger API. - -**Solutions:** - -1. **Network Unreachable:** - - Verify the ledger API URL is correct in your network configuration - - Test connectivity: `curl /v2/version` - - Check firewall rules and network routing - -2. **Invalid Network Configuration:** - - Verify the `synchronizerId` matches the validator configuration - - Ensure the identity provider ID matches between network and IDP configs - - Check that authentication credentials are correct - -3. **SSL/TLS Issues:** - - For HTTPS endpoints, verify certificates are valid - - In development, you may need to use HTTP or configure certificate trust - -## Port Already in Use - -**Problem:** Error: `EADDRINUSE: address already in use :::3030` - -**Solutions:** - -1. Find and stop the process using the port: - - ```bash - # macOS/Linux - lsof -ti:3030 | xargs kill -9 - - # Or find the process - lsof -i :3030 - ``` - -2. Use a different port: - - ```bash - wallet-gateway -c ./config.json -p 8080 - ``` - -3. Check if another Gateway instance is running: - - ```bash - ps aux | grep wallet-gateway - ``` - -## Configuration Validation Errors - -**Problem:** Gateway fails to start with configuration errors. - -**Solutions:** - -1. **Validate your config against the schema:** - - ```bash - wallet-gateway --config-schema > schema.json - # Use a JSON schema validator tool - ``` - -2. **Check for common mistakes:** - - Missing required fields - - Invalid JSON syntax - - Type mismatches (strings vs numbers) - - Missing or incorrect IDP references in network configs - -3. **Use the example config as a template:** - - ```bash - wallet-gateway --config-example > my-config.json - # Edit my-config.json - ``` - -## Signing Provider Issues - -**Problem:** Transactions fail with signing errors. - -**Solutions:** - -1. **Fireblocks:** - - Verify environment variables are set correctly: `FIREBLOCKS_SECRET` and `FIREBLOCKS_API_KEY` - - Ensure API keys are valid and have proper permissions - - Verify Fireblocks API is accessible from your network - -2. **Participant:** - - Ensure the participant node is running and accessible - - Verify the party exists on the participant - - Check participant logs for signing errors - -3. **Blockdaemon:** - - Verify environment variables are set: `BLOCKDAEMON_API_URL` and `BLOCKDAEMON_API_KEY` - - Test API connectivity - - Ensure API key has signing permissions - -4. **Dfns:** - - Verify environment variables are set: `DFNS_ORG_ID`, `DFNS_BASE_URL`, `DFNS_CRED_ID`, `DFNS_PRIVATE_KEY`, and `DFNS_AUTH_TOKEN` - - Ensure the service account credentials are correct - - Confirm the service account has wallet creation and signing permissions - -## Debugging - -## Enable Debug Logging - -Set log level to debug for more detailed information: - -```bash -wallet-gateway -c ./config.json -f pretty -# Logs will show debug-level information -``` - -For structured logging (useful for log aggregation): - -```bash -wallet-gateway -c ./config.json -f json -``` - -## Check Logs - -Review the Gateway logs for error messages and stack traces. Common log locations: - -- Console output (when running directly) -- System logs (when running as a service) -- Container logs (when running in Docker/Kubernetes) - -## Verify API Endpoints - -Test that the Gateway is responding: - -```bash -# Health check (web UI) -curl http://localhost:3030 - -# dApp API status (requires authentication) -curl -X POST http://localhost:3030/api/v0/dapp \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer " \ - -d '{"jsonrpc":"2.0","id":1,"method":"status","params":[]}' -``` - -## Getting Help - -If you continue to experience issues: - -1. Check the logs for detailed error messages -2. Verify your configuration against the schema -3. Review the API specifications for correct usage -4. Check GitHub issues for similar problems -5. Review the configuration documentation for your specific setup - -## Log Levels - -The Gateway uses structured logging with the following levels: - -- **ERROR**: Critical errors that prevent operation -- **WARN**: Warning conditions that may cause issues -- **INFO**: Informational messages about normal operation -- **DEBUG**: Detailed diagnostic information - -Adjust log verbosity based on your needs. In production, INFO level is typically sufficient, while DEBUG is useful for troubleshooting. - -{/* COPIED_END */} diff --git a/docs-main/integrations/wallet-gateway/usage.mdx b/docs-main/integrations/wallet-gateway/usage.mdx deleted file mode 100644 index d5fc6a743..000000000 --- a/docs-main/integrations/wallet-gateway/usage.mdx +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: "Usage" -description: "Operating and using the Wallet Gateway" ---- - -{/* COPIED_START source="wallet-gateway:docs/dapp-building/wallet-gateway/usage/index.md@82ec39c9" hash="51f3cf2d" */} - -You can use the Wallet Gateway in two ways: - -- mainly through the **User UI** (Web UI) for end users -- or through the **User API** (for automation, custom UIs, or integration with your own systems). - -The **dApp API** is used by your dApp via the dApp SDK when users connect their wallet. See the [dApp SDK](/integrations/dapp-sdk/usage) for more details. - -This section describes typical workflows, the User UI, session handling, and when to use which interface. - -## User UI - -The Wallet Gateway serves a **Web UI** at the Gateway root URL (e.g. `http://localhost:3030`). Users manage wallets, approve transactions, and adjust settings there. - -**Main pages:** - -- **Login** (`/login`): Choose a network and identity provider (IDP), then sign in (OAuth redirect or self-signed). Unauthenticated users are redirected here when they need to log in. - -- **Wallets** (`/wallets`): List wallets, create new wallets (choose network, signing provider, party id), set the primary wallet, and remove wallets. This is the default landing page after login. - -- **Transactions** (`/transactions`): List transactions. View status and details for prepared, signed, and executed transactions. - -- **Approve** (`/approve`): Shown when a dApp requests a transaction (e.g. via `prepareExecute`). The user reviews the transaction and signs or rejects it. The dApp is notified of the result. - -- **Settings** (`/settings`): Manage networks and identity providers (add, edit, remove), view sessions, and see Gateway version info. - -- **Callback** (`/callback`): Used internally for OAuth redirects after login. Users are redirected back to the intended page (e.g. `/wallets`) or to the dApp. - -Users **log out** via the layout logout control. Logout calls `removeSession`, clears local auth state, and redirects to `/login` (or closes the window if the UI was opened in a popup for approval). - -## When to use which interface - -- **User UI**: Best for end users. They log in, create and manage wallets, view transactions, and approve dApp requests. No code required. - -- **User API**: Use when you need to: - - Drive wallet setup or management from scripts or your own backend. - - Build a custom wallet UI (e.g. embedded in your app) instead of the default User UI. - - Automate session, network, IDP, or wallet operations. - -- **dApp API** (via dApp SDK): Use from your **dApp** frontend. The SDK calls the dApp API to connect, list accounts, and prepare/execute transactions. Users approve via the Web UI or browser extension. See [dApp SDK usage](/integrations/dapp-sdk/usage) and [APIs](/integrations/wallet-gateway/apis) for details. - -## Typical flows - -**1. User sets up a wallet** - -- User opens the User UI and goes to **Login**. -- Selects network and IDP, completes login (e.g. OAuth). -- Lands on **Wallets**, creates a wallet (network, signing provider, party id), optionally sets it as primary. -- Can add networks or IDPs under **Settings** if needed. - -**2. dApp connects and sends a transaction** - -- Your dApp uses the dApp SDK: `connect()` → user is redirected to Gateway to log in if needed → `listAccounts()` → `prepareExecute(commands)`. -- User is sent to **Approve** to sign (or reject) the transaction. -- Once signed and executed, the dApp receives the result and can react to `onTxChanged`. - -**3. User checks activity and manages wallets** - -- User opens **Transactions** to list and inspect transactions. -- User opens **Wallets** to add wallets, change primary, or remove wallets. -- User opens **Settings** to manage networks, IDPs, or sessions. - -**4. Automated wallet setup (User API)** - -- Your script or backend calls `addSession()`, then your auth flow provides a JWT. -- Calls `listNetworks()` / `listIdps()`, then `createWallet()` with desired network and signing provider. -- Uses `listWallets()`, `sign()`, `execute()`, etc. as needed for your use case. - -## Next steps - -- Configure the Gateway: [Configuration](https://github.com/canton-network/wallet-gateway/blob/82ec39c9/docs/dapp-building/wallet-gateway/configuration/index.md) -- Explore User API and dApp API: [APIs](/integrations/wallet-gateway/apis) -- Set up signing: [Signing Providers](/integrations/wallet-gateway/signing-providers) -- Run and operate the Gateway: [Getting Started](https://github.com/canton-network/wallet-gateway/blob/82ec39c9/docs/dapp-building/wallet-gateway/getting-started/index.md), [Troubleshooting](/integrations/wallet-gateway/troubleshooting) - -{/* COPIED_END */} diff --git a/docs-main/integrations/wallet-gateway/use/approve-and-sign.mdx b/docs-main/integrations/wallet-gateway/use/approve-and-sign.mdx new file mode 100644 index 000000000..3affe3d22 --- /dev/null +++ b/docs-main/integrations/wallet-gateway/use/approve-and-sign.mdx @@ -0,0 +1,107 @@ +--- +title: "Approve & sign transactions" +description: "Review, approve, and track the transactions dApps ask the Wallet Gateway to run." +--- + +When a dApp wants to act on your behalf, it does not sign anything itself. It asks the Wallet +Gateway to run a transaction, and the Wallet Gateway routes it to you for approval and to your +signing provider for signing. This keeps approval and key custody under your control: private +keys never reach the dApp. This guide covers what you see on the **Approve** page, how to +approve or reject, and how to track a transaction afterwards. + +## How a transaction reaches you + +A dApp submits a transaction through the [dApp SDK](/sdks-tools/sdks/dapp-sdk/overview), which +calls the Wallet Gateway's dApp API. The Wallet Gateway prepares it against your validator, +queues it for your approval, has your signing provider sign it, and submits it to the ledger. + +```mermaid +sequenceDiagram + participant D as dApp + participant WG as Wallet Gateway + participant UI as User UI (Approve) + participant S as Signing provider + participant L as Ledger API + + D->>WG: prepareExecute + WG->>L: prepare + L-->>WG: prepared transaction + WG->>UI: queue for approval + Note over UI: You review and Approve + UI->>WG: approved + WG->>S: sign + S-->>WG: signed transaction + WG->>L: execute + L-->>WG: completion + WG-->>D: result +``` + +The dApp learns the outcome through the `txChanged` event, so once you approve and the +transaction executes, the dApp updates on its own. + +## Review a transaction + +When a dApp requests a transaction, the Wallet Gateway takes you to the **Approve** page (it may +open in a popup window if the dApp triggered it). There you can see: + +- The **wallet** (party) the transaction will act as. +- The **network** it will be submitted to. +- The **transaction details** the dApp prepared, so you can confirm it matches what you expect. + + +Only approve transactions you understand and expect. Approving signs with your wallet's key +through its signing provider and submits to the ledger — it cannot be undone. If anything looks +wrong, reject it. + + +## Approve or reject + +- **Approve** — the Wallet Gateway hands the prepared transaction to the wallet's + [signing provider](/integrations/wallet-gateway/operate/signing-providers), which signs it, + and then submits it to the ledger. The dApp is notified of the result. +- **Reject** — the Wallet Gateway discards the request and notifies the dApp that you declined. + Nothing is signed or submitted. + +If the **Approve** page opened as a popup, it closes and returns you to the dApp after you +decide. + +## Where signing happens + +Signing is delegated per wallet to the signing provider you chose when you created it — a +participant node, an external custody provider (Fireblocks, Blockdaemon, DFNS), or the internal +store for development. Your keys stay with that provider; approving in the UI authorizes the +provider to sign, but the key never passes through the dApp or the browser. See +[Signing providers](/integrations/wallet-gateway/operate/signing-providers). + +## Track a transaction + +Open the **Transactions** page to follow a transaction through its lifecycle and inspect its +details. Each transaction moves through these states: + +| Status | Meaning | +| --- | --- | +| **Pending** | Prepared and waiting for your approval. | +| **Signed** | Approved and signed by the signing provider, being submitted. | +| **Executed** | Submitted to the ledger and completed successfully. | +| **Failed** | Rejected, or failed during signing or submission. | + +Use this page to confirm a transaction executed, or to see why one failed. If executions fail +to start or never complete, see +[Troubleshooting](/integrations/wallet-gateway/operate/troubleshooting). + +## Next steps + + + + Log in and create, organize, and remove wallets in the User UI. + + + Sign and execute transactions programmatically. + + + Choose where signing and key custody happen. + + + See how dApps request transactions through the dApp API. + + diff --git a/docs-main/integrations/wallet-gateway/use/automate-with-user-api.mdx b/docs-main/integrations/wallet-gateway/use/automate-with-user-api.mdx new file mode 100644 index 000000000..01aa13d7b --- /dev/null +++ b/docs-main/integrations/wallet-gateway/use/automate-with-user-api.mdx @@ -0,0 +1,162 @@ +--- +title: "Automate with the User API" +description: "Drive wallet setup, signing, and transactions from a script or backend using the User API." +--- + +The User API is the JSON-RPC 2.0 API behind the User UI. Anything a person can do in the UI — +manage sessions, networks, identity providers, wallets, and transactions — you can do +programmatically with the same API. Use it to script wallet setup, build a custom wallet UI +embedded in your app, or automate operations from a backend. + +This guide walks through a typical automation flow. For the full method list, authentication +rules, and the OpenRPC specification, see the +[User API reference](/integrations/wallet-gateway/reference/user-api). + + +The User API drives **your own** wallets and setup. It is different from the +[dApp API](/integrations/wallet-gateway/reference/dapp-api), which dApps call through the dApp +SDK to connect to a user's wallet. + + +## Before you start + +You need: + +- A running Wallet Gateway you can reach (for example `http://localhost:3030`). See the + [Quickstart](/integrations/wallet-gateway/quickstart). +- At least one configured network and identity provider. See + [Networks & identity providers](/integrations/wallet-gateway/operate/networks-and-identity). +- A way to obtain a JWT from that identity provider for the user you are automating. + +All calls are JSON-RPC 2.0 `POST` requests to the User API base path +(`/api/v0/user` by default, configurable via `server.userPath`): + +```bash +curl -X POST http://localhost:3030/api/v0/user \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer ' \ + -d '{ "jsonrpc": "2.0", "id": 1, "method": "", "params": { } }' +``` + +Most methods require the `Authorization` header. Three methods are available without it so a +client can bootstrap a connection: `addSession()`, `listNetworks()`, and `listIdps()`. + + +Parameter shapes vary per method. Use the +[OpenRPC specification](https://github.com/canton-network/wallet-gateway/blob/main/api-specs/openrpc-user-api.json) +as the source of truth for exact request and response fields. + + +## Create a session + +Start the connection with `addSession()` (no authentication required), then complete your +identity provider's auth flow to obtain a JWT. Pass that JWT in the `Authorization` header on +every later call. + +```bash +curl -X POST http://localhost:3030/api/v0/user \ + -H 'Content-Type: application/json' \ + -d '{ "jsonrpc": "2.0", "id": 1, "method": "addSession", "params": { } }' +``` + +The Wallet Gateway issues a session tied to the authenticated user. List active sessions with +`listSessions()` and end the current one with `removeSession()`. + +## Discover networks and identity providers + +List what the Wallet Gateway offers before creating wallets. Both calls work without authentication. + +```bash +# List configured networks +curl -X POST http://localhost:3030/api/v0/user \ + -H 'Content-Type: application/json' \ + -d '{ "jsonrpc": "2.0", "id": 2, "method": "listNetworks", "params": { } }' + +# List identity providers +curl -X POST http://localhost:3030/api/v0/user \ + -H 'Content-Type: application/json' \ + -d '{ "jsonrpc": "2.0", "id": 3, "method": "listIdps", "params": { } }' +``` + +Admins can also manage these at runtime with `addNetwork()`, `removeNetwork()`, `addIdp()`, and +`removeIdp()`. Admin privileges are granted to the user configured as `server.admin`; see +[Configure the Wallet Gateway](/integrations/wallet-gateway/operate/configure#server). + +## Create and manage wallets + +Create a wallet by choosing a network and a signing provider, then manage the set with the +wallet methods. + +```bash +# Create a wallet (party) on a network +curl -X POST http://localhost:3030/api/v0/user \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer ' \ + -d '{ "jsonrpc": "2.0", "id": 4, "method": "createWallet", "params": { } }' +``` + +| Method | Description | +| --- | --- | +| `createWallet()` | Create a new wallet (party) on a network. | +| `listWallets()` | List all wallets for the current user. | +| `setPrimaryWallet()` | Set the primary wallet dApps default to. | +| `removeWallet()` | Remove a wallet from the Wallet Gateway. | +| `syncWallets()` | Sync wallets with the ledger. | +| `isWalletSyncNeeded()` | Check whether a wallet sync is needed. | + +## Sign and execute a transaction + +Once a wallet exists, sign and submit transactions with `sign()` and `execute()`, then read +status with the transaction methods. + +```bash +# Sign a prepared transaction +curl -X POST http://localhost:3030/api/v0/user \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer ' \ + -d '{ "jsonrpc": "2.0", "id": 5, "method": "sign", "params": { } }' + +# Execute a signed transaction +curl -X POST http://localhost:3030/api/v0/user \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer ' \ + -d '{ "jsonrpc": "2.0", "id": 6, "method": "execute", "params": { } }' +``` + +Read transactions with `getTransaction()` and `listTransactions()`. Signing is delegated to the +wallet's [signing provider](/integrations/wallet-gateway/operate/signing-providers), so the key +never leaves that provider. + +## Follow transactions in real time + +The dApp API exposes Server-Sent Events for real-time updates (`txChanged`, `accountsChanged`, +`connected`, `statusChanged`). If you are building a custom UI, subscribe to them instead of +polling. See [Real-time events](/integrations/wallet-gateway/reference/dapp-api#real-time-events-sse). + +## End the session + +When you are done, end the session: + +```bash +curl -X POST http://localhost:3030/api/v0/user \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer ' \ + -d '{ "jsonrpc": "2.0", "id": 7, "method": "removeSession", "params": { } }' +``` + +## Next steps + + + + Every method, authentication rules, rate limits, and the OpenRPC spec. + + + The same operations in the User UI. + + + How approval and signing work end to end. + + + Where each wallet's keys live and who signs. + + diff --git a/docs-main/integrations/wallet-gateway/use/manage-wallets.mdx b/docs-main/integrations/wallet-gateway/use/manage-wallets.mdx new file mode 100644 index 000000000..7363d2270 --- /dev/null +++ b/docs-main/integrations/wallet-gateway/use/manage-wallets.mdx @@ -0,0 +1,120 @@ +--- +title: "Manage wallets" +description: "Log in and create, organize, and remove wallets through the Wallet Gateway's User UI." +--- + +End users work with the Wallet Gateway through its **User UI**: a web app the Wallet Gateway +serves at its root URL. From it they log in, create and manage wallets, review transactions, and approve +requests from dApps. This guide covers logging in and managing wallets in the UI. To drive the +same operations from a script or backend, see +[Automate with the User API](/integrations/wallet-gateway/use/automate-with-user-api). + + +The **dApp API** is separate. dApps call it through the [dApp SDK](/sdks-tools/sdks/dapp-sdk/overview) +when a user connects a wallet; users never call it directly. See +[dApp API](/integrations/wallet-gateway/reference/dapp-api). + + +## The User UI + +The Wallet Gateway serves a web UI at its root URL (for example `http://localhost:3030`). Its +main pages are: + +| Page | Path | What it does | +| --- | --- | --- | +| **Login** | `/login` | Choose a network and identity provider, then sign in (OAuth redirect or self-signed). | +| **Wallets** | `/wallets` | List, create, and remove wallets, and set the primary wallet. Default landing page. | +| **Transactions** | `/transactions` | List transactions and view their status and details. | +| **Approve** | `/approve` | Review and sign or reject a transaction a dApp requested. | +| **Settings** | `/settings` | Manage networks and identity providers, view sessions, and see version info. | +| **Callback** | `/callback` | Internal OAuth redirect target after login. | + +## Log in + +1. Open the User UI and go to **Login**. +2. Choose a **network** and an **identity provider** (IDP). +3. Complete authentication: + - **OAuth / OpenID Connect**: you are redirected to your provider and back. + - **Self-signed**: a token is generated locally (development only). + +On success you land on **Wallets**. Unauthenticated users are redirected to **Login** +automatically whenever a page needs a session. + + +The networks and IDPs you can choose from are configured by the operator. To add more, an +admin manages them under **Settings** or in the configuration file. See +[Networks & identity providers](/integrations/wallet-gateway/operate/networks-and-identity). + + +## Create a wallet + +A wallet is a Canton **party** the Wallet Gateway manages for you on one network, signed by one +signing provider. + +1. On **Wallets**, choose **Create wallet**. +2. Select the **network** the wallet belongs to. +3. Select the **signing provider** that will hold the key and sign transactions for this + wallet. See [Signing providers](/integrations/wallet-gateway/operate/signing-providers). +4. Provide the **party ID** (or hint) for the wallet. +5. Optionally mark it as your **primary** wallet. + +Each wallet is tied to exactly one network and one signing provider, so you can keep different +parties on different networks or custody providers side by side in the same Wallet Gateway. + +## Set the primary wallet + +You can mark one wallet as **primary**. dApps that request your primary account receive this +wallet by default, so set it to the party you transact with most. Change it at any time on the +**Wallets** page. + + +Changing your primary wallet changes which party dApps default to. Connected dApps are notified +through the `accountsChanged` event and should re-read the primary account rather than caching +it. See [dApp API](/integrations/wallet-gateway/reference/dapp-api). + + +## Remove a wallet + +Remove a wallet from the **Wallets** page. This removes the wallet from the Wallet Gateway; it +does not delete the underlying Canton party or any on-ledger data. Removing the primary wallet +clears the primary selection until you set a new one. + +## View transactions + +The **Transactions** page lists transactions the Wallet Gateway has prepared, signed, or executed for +your wallets, with their status and details. Reviewing and approving transactions that dApps +request happens on the **Approve** page — see +[Approve & sign transactions](/integrations/wallet-gateway/use/approve-and-sign). + +## Sessions and logout + +When you log in, the Wallet Gateway issues a **session** (a JWT) that authorizes your later +calls to the User and dApp APIs. Sessions are created on login and stored in the Wallet +Gateway's database. + +Log out from the layout control. Logout ends the session (`removeSession`), clears local auth +state, and returns you to **Login** — or closes the window if the UI was opened as an approval +popup. You can view active sessions under **Settings**. + + +Sessions live in the Wallet Gateway's database. If the operator restores the database from a backup or +loses it, active sessions may be invalidated and users must log in again. See +[Networks & identity providers](/integrations/wallet-gateway/operate/networks-and-identity). + + +## Next steps + + + + Review, approve, and track transactions dApps request. + + + Drive wallet setup and transactions from scripts or a backend. + + + Understand the networks and login options an operator configures. + + + See where each wallet's keys live and who signs. + + From 6e1ea4053ecf3caa3f121a4847275d3c20d7dd75 Mon Sep 17 00:00:00 2001 From: katiepang-da Date: Wed, 29 Jul 2026 13:28:48 -0400 Subject: [PATCH 3/5] adding docs content for user ui --- docs-main/docs.json | 2 +- .../operate/networks-and-identity.mdx | 15 ++++ .../wallet-gateway/use/approve-and-sign.mdx | 16 +++-- ...anage-wallets.mdx => party-management.mdx} | 70 +++++++++++-------- 4 files changed, 65 insertions(+), 38 deletions(-) rename docs-main/integrations/wallet-gateway/use/{manage-wallets.mdx => party-management.mdx} (63%) diff --git a/docs-main/docs.json b/docs-main/docs.json index 739c7131b..0d356de91 100644 --- a/docs-main/docs.json +++ b/docs-main/docs.json @@ -538,7 +538,7 @@ { "group": "Use the Wallet Gateway", "pages": [ - "integrations/wallet-gateway/use/manage-wallets", + "integrations/wallet-gateway/use/party-management", "integrations/wallet-gateway/use/approve-and-sign", "integrations/wallet-gateway/use/automate-with-user-api" ] diff --git a/docs-main/integrations/wallet-gateway/operate/networks-and-identity.mdx b/docs-main/integrations/wallet-gateway/operate/networks-and-identity.mdx index ae658c97c..0296b27bf 100644 --- a/docs-main/integrations/wallet-gateway/operate/networks-and-identity.mdx +++ b/docs-main/integrations/wallet-gateway/operate/networks-and-identity.mdx @@ -66,6 +66,13 @@ Generates JWTs locally using a secret. Convenient for development, not for produ } } ``` +### Identity Provider Management in the Wallet Gateway +This guide is only for parties with administrator access. +1. Select the hamburger icon on the top right and click **Identity Provider**. +2. Review the list of available identity providers. +3. To **add**: click on **+ New** to add a new identify provider. +4. To **edit**: click on an identity provider card to make changes or delete it permanently. + ## Networks @@ -169,6 +176,14 @@ supply them through environment variables or a secret manager. See the [Configuration reference](/integrations/wallet-gateway/reference/configuration-reference#secrets-and-environments). +### Network Management in the Wallet Gateway +This guide is only for parties with administrator access. +1. Select the hamburger icon on the top right and choose **Network**. +2. Review the list of available networks. +3. To **add**: click on **+ New** to add a new network. +4. To **edit**: click on a network card to make changes or delete it permanently. +5. The connected network can be reviewed at the top of the pop-up showing a green dot: [network name] or in the network list with a green `Connected` tag. + ## Runtime management Once the Wallet Gateway is running, the admin user can add, edit, and remove networks and IDPs diff --git a/docs-main/integrations/wallet-gateway/use/approve-and-sign.mdx b/docs-main/integrations/wallet-gateway/use/approve-and-sign.mdx index 3affe3d22..c250258f6 100644 --- a/docs-main/integrations/wallet-gateway/use/approve-and-sign.mdx +++ b/docs-main/integrations/wallet-gateway/use/approve-and-sign.mdx @@ -1,5 +1,5 @@ --- -title: "Approve & sign transactions" +title: "Approve & Sign Transactions" description: "Review, approve, and track the transactions dApps ask the Wallet Gateway to run." --- @@ -9,7 +9,7 @@ signing provider for signing. This keeps approval and key custody under your con keys never reach the dApp. This guide covers what you see on the **Approve** page, how to approve or reject, and how to track a transaction afterwards. -## How a transaction reaches you +## How a Transaction Reaches You A dApp submits a transaction through the [dApp SDK](/sdks-tools/sdks/dapp-sdk/overview), which calls the Wallet Gateway's dApp API. The Wallet Gateway prepares it against your validator, @@ -41,20 +41,22 @@ transaction executes, the dApp updates on its own. ## Review a transaction -When a dApp requests a transaction, the Wallet Gateway takes you to the **Approve** page (it may +When a dApp requests a transaction, the Wallet Gateway takes you to the **Approve** page of the particular transaction (it may open in a popup window if the dApp triggered it). There you can see: - The **wallet** (party) the transaction will act as. - The **network** it will be submitted to. - The **transaction details** the dApp prepared, so you can confirm it matches what you expect. +If you accidentally closed the pop-up and lost the transaction approval page, reopen the User UI and navigate to **Activities** to review the transactions. + Only approve transactions you understand and expect. Approving signs with your wallet's key through its signing provider and submits to the ledger — it cannot be undone. If anything looks wrong, reject it. -## Approve or reject +## Approve or Reject - **Approve** — the Wallet Gateway hands the prepared transaction to the wallet's [signing provider](/integrations/wallet-gateway/operate/signing-providers), which signs it, @@ -65,7 +67,7 @@ wrong, reject it. If the **Approve** page opened as a popup, it closes and returns you to the dApp after you decide. -## Where signing happens +## Where Signing Happens Signing is delegated per wallet to the signing provider you chose when you created it — a participant node, an external custody provider (Fireblocks, Blockdaemon, DFNS), or the internal @@ -73,7 +75,7 @@ store for development. Your keys stay with that provider; approving in the UI au provider to sign, but the key never passes through the dApp or the browser. See [Signing providers](/integrations/wallet-gateway/operate/signing-providers). -## Track a transaction +## Track a Transaction Open the **Transactions** page to follow a transaction through its lifecycle and inspect its details. Each transaction moves through these states: @@ -89,7 +91,7 @@ Use this page to confirm a transaction executed, or to see why one failed. If ex to start or never complete, see [Troubleshooting](/integrations/wallet-gateway/operate/troubleshooting). -## Next steps +## Next Steps diff --git a/docs-main/integrations/wallet-gateway/use/manage-wallets.mdx b/docs-main/integrations/wallet-gateway/use/party-management.mdx similarity index 63% rename from docs-main/integrations/wallet-gateway/use/manage-wallets.mdx rename to docs-main/integrations/wallet-gateway/use/party-management.mdx index 7363d2270..0afbf12de 100644 --- a/docs-main/integrations/wallet-gateway/use/manage-wallets.mdx +++ b/docs-main/integrations/wallet-gateway/use/party-management.mdx @@ -1,11 +1,11 @@ --- -title: "Manage wallets" -description: "Log in and create, organize, and remove wallets through the Wallet Gateway's User UI." +title: "Party Management" +description: "Log in and create, organize, and remove parties through the Wallet Gateway's User UI." --- End users work with the Wallet Gateway through its **User UI**: a web app the Wallet Gateway -serves at its root URL. From it they log in, create and manage wallets, review transactions, and approve -requests from dApps. This guide covers logging in and managing wallets in the UI. To drive the +serves at its root URL. From it they log in, create and manage parties, review transactions, and approve +requests from dApps. This guide covers logging in and managing parties in the UI. To drive the same operations from a script or backend, see [Automate with the User API](/integrations/wallet-gateway/use/automate-with-user-api). @@ -23,21 +23,21 @@ main pages are: | Page | Path | What it does | | --- | --- | --- | | **Login** | `/login` | Choose a network and identity provider, then sign in (OAuth redirect or self-signed). | -| **Wallets** | `/wallets` | List, create, and remove wallets, and set the primary wallet. Default landing page. | -| **Transactions** | `/transactions` | List transactions and view their status and details. | +| **Parties** | `/parties` | List, create, and remove parties, and set the primary party. Default landing page. | +| **Activities** | `/activities` | List of activities and view their status and details. | | **Approve** | `/approve` | Review and sign or reject a transaction a dApp requested. | -| **Settings** | `/settings` | Manage networks and identity providers, view sessions, and see version info. | +| **Settings** | `/settings` | Manage `/networks` and `/identity-providers`, view sessions, and see version info. | | **Callback** | `/callback` | Internal OAuth redirect target after login. | ## Log in -1. Open the User UI and go to **Login**. -2. Choose a **network** and an **identity provider** (IDP). -3. Complete authentication: +1. Open the User UI and go to **Login** or **Connect**. +2. Select from the list of available CIP-0103-compliant providers or gateways. Or enter a custom remote gateway URL. +3. By selecting the **Wallet Gateway** option, a network of choice will be prompted. This network is associated with the connected validator or node, which needs to be configured within the validator or node settings. +4. Click **Connect** to authorize to view your parties. - **OAuth / OpenID Connect**: you are redirected to your provider and back. - **Self-signed**: a token is generated locally (development only). - -On success you land on **Wallets**. Unauthenticated users are redirected to **Login** +5. On success you land on **Parties**. Unauthenticated users are redirected to **Login** automatically whenever a page needs a session. @@ -46,26 +46,36 @@ admin manages them under **Settings** or in the configuration file. See [Networks & identity providers](/integrations/wallet-gateway/operate/networks-and-identity). -## Create a wallet +## Create a Party A wallet is a Canton **party** the Wallet Gateway manages for you on one network, signed by one signing provider. -1. On **Wallets**, choose **Create wallet**. -2. Select the **network** the wallet belongs to. -3. Select the **signing provider** that will hold the key and sign transactions for this +1. Navigate to the **Parties** list +2. Choose **+ New** +3. Provide the **Party ID** (or hint) for the wallet. +4. Select the **network** the wallet belongs to. +5. Select the **signing provider** that will hold the key and sign transactions for this wallet. See [Signing providers](/integrations/wallet-gateway/operate/signing-providers). -4. Provide the **party ID** (or hint) for the wallet. -5. Optionally mark it as your **primary** wallet. +6. Optionally mark it as your **primary** wallet. +7. Choose **Create party** Each wallet is tied to exactly one network and one signing provider, so you can keep different parties on different networks or custody providers side by side in the same Wallet Gateway. -## Set the primary wallet + +By the Parties header, you may click the refresh icon to reload your party list. If there is a party that was created outside of the Wallet Gateway, it may still appear but unable to access; showing a disabled status. + + +## Set Primary Party You can mark one wallet as **primary**. dApps that request your primary account receive this wallet by default, so set it to the party you transact with most. Change it at any time on the -**Wallets** page. +**parties** page. + +1. Locate the desired party card (newer party cards located at the bottom of the list) +2. Select **Set as primary** +3. Verify with a green `Primary` tag Changing your primary wallet changes which party dApps default to. Connected dApps are notified @@ -73,19 +83,19 @@ through the `accountsChanged` event and should re-read the primary account rathe it. See [dApp API](/integrations/wallet-gateway/reference/dapp-api). -## Remove a wallet +## View Activities -Remove a wallet from the **Wallets** page. This removes the wallet from the Wallet Gateway; it -does not delete the underlying Canton party or any on-ledger data. Removing the primary wallet -clears the primary selection until you set a new one. - -## View transactions - -The **Transactions** page lists transactions the Wallet Gateway has prepared, signed, or executed for -your wallets, with their status and details. Reviewing and approving transactions that dApps +The **Activities** page lists transactions the Wallet Gateway has prepared, signed, or executed for +your parties, with their status and details. Reviewing and approving transactions that dApps request happens on the **Approve** page — see [Approve & sign transactions](/integrations/wallet-gateway/use/approve-and-sign). +## Changing Wallet Providers +1. Select the hamburger icon on the top right and **Logout**. +2. Click **Login** or **Connect** in the dApp UI to trigger the pop-up. +3. Select a new provider to log into and follow its instructions. + + ## Sessions and logout When you log in, the Wallet Gateway issues a **session** (a JWT) that authorizes your later @@ -94,7 +104,7 @@ Gateway's database. Log out from the layout control. Logout ends the session (`removeSession`), clears local auth state, and returns you to **Login** — or closes the window if the UI was opened as an approval -popup. You can view active sessions under **Settings**. +popup. Sessions live in the Wallet Gateway's database. If the operator restores the database from a backup or From 82179c86ea5b10b7edd9e4000b7dd1e3badab8a7 Mon Sep 17 00:00:00 2001 From: katiepang-da Date: Wed, 29 Jul 2026 14:36:06 -0400 Subject: [PATCH 4/5] add images --- .../wallet-gateway/use/approve-and-sign.mdx | 18 +++++++++++------- .../wallet-gateway/use/images/addWallet.png | Bin 0 -> 21871 bytes .../use/images/approveDetail.png | Bin 0 -> 29102 bytes .../wallet-gateway/use/images/detail.png | Bin 0 -> 26799 bytes .../use/images/discovery-comp.png | Bin 0 -> 19702 bytes .../wallet-gateway/use/images/parties.png | Bin 0 -> 33529 bytes .../use/images/selectNetwork.png | Bin 0 -> 11617 bytes .../wallet-gateway/use/party-management.mdx | 12 ++++++++++-- 8 files changed, 21 insertions(+), 9 deletions(-) create mode 100644 docs-main/integrations/wallet-gateway/use/images/addWallet.png create mode 100644 docs-main/integrations/wallet-gateway/use/images/approveDetail.png create mode 100644 docs-main/integrations/wallet-gateway/use/images/detail.png create mode 100644 docs-main/integrations/wallet-gateway/use/images/discovery-comp.png create mode 100644 docs-main/integrations/wallet-gateway/use/images/parties.png create mode 100644 docs-main/integrations/wallet-gateway/use/images/selectNetwork.png diff --git a/docs-main/integrations/wallet-gateway/use/approve-and-sign.mdx b/docs-main/integrations/wallet-gateway/use/approve-and-sign.mdx index c250258f6..70a992782 100644 --- a/docs-main/integrations/wallet-gateway/use/approve-and-sign.mdx +++ b/docs-main/integrations/wallet-gateway/use/approve-and-sign.mdx @@ -48,13 +48,7 @@ open in a popup window if the dApp triggered it). There you can see: - The **network** it will be submitted to. - The **transaction details** the dApp prepared, so you can confirm it matches what you expect. -If you accidentally closed the pop-up and lost the transaction approval page, reopen the User UI and navigate to **Activities** to review the transactions. - - -Only approve transactions you understand and expect. Approving signs with your wallet's key -through its signing provider and submits to the ledger — it cannot be undone. If anything looks -wrong, reject it. - +transaction detail ## Approve or Reject @@ -67,6 +61,16 @@ wrong, reject it. If the **Approve** page opened as a popup, it closes and returns you to the dApp after you decide. +If you accidentally closed the pop-up and lost the transaction approval page, reopen the User UI and navigate to **Activities** to review the transactions. + +approve or reject a transaction + + +Only approve transactions you understand and expect. Approving signs with your wallet's key +through its signing provider and submits to the ledger — it cannot be undone. If anything looks +wrong, reject it. + + ## Where Signing Happens Signing is delegated per wallet to the signing provider you chose when you created it — a diff --git a/docs-main/integrations/wallet-gateway/use/images/addWallet.png b/docs-main/integrations/wallet-gateway/use/images/addWallet.png new file mode 100644 index 0000000000000000000000000000000000000000..0604081d9080ff695a5fb247ea34a057f45ed1a2 GIT binary patch literal 21871 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 Y(EF!Rc3R!QI>lQWDmuzFiZ-GD4T^#~RsaA1 literal 0 HcmV?d00001 diff --git a/docs-main/integrations/wallet-gateway/use/images/detail.png b/docs-main/integrations/wallet-gateway/use/images/detail.png new file mode 100644 index 0000000000000000000000000000000000000000..90d0e090ab5600b0cdd92634870fb8429a49abee GIT binary patch literal 26799 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 literal 0 HcmV?d00001 diff --git a/docs-main/integrations/wallet-gateway/use/images/discovery-comp.png b/docs-main/integrations/wallet-gateway/use/images/discovery-comp.png new file mode 100644 index 0000000000000000000000000000000000000000..ef25a21982fc87612badd6dc7b7803194fabfe13 GIT binary patch literal 19702 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
    pcUDmCUK%`K)4%6{+ZYUNZTE=<7Ze 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

    pcBX&Zc>)Oz^P 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 literal 0 HcmV?d00001 diff --git a/docs-main/integrations/wallet-gateway/use/party-management.mdx b/docs-main/integrations/wallet-gateway/use/party-management.mdx index 0afbf12de..eb22c2f3e 100644 --- a/docs-main/integrations/wallet-gateway/use/party-management.mdx +++ b/docs-main/integrations/wallet-gateway/use/party-management.mdx @@ -34,6 +34,9 @@ main pages are: 1. Open the User UI and go to **Login** or **Connect**. 2. Select from the list of available CIP-0103-compliant providers or gateways. Or enter a custom remote gateway URL. 3. By selecting the **Wallet Gateway** option, a network of choice will be prompted. This network is associated with the connected validator or node, which needs to be configured within the validator or node settings. +wallet gateway network selection + + 4. Click **Connect** to authorize to view your parties. - **OAuth / OpenID Connect**: you are redirected to your provider and back. - **Self-signed**: a token is generated locally (development only). @@ -57,6 +60,9 @@ signing provider. 4. Select the **network** the wallet belongs to. 5. Select the **signing provider** that will hold the key and sign transactions for this wallet. See [Signing providers](/integrations/wallet-gateway/operate/signing-providers). +add a new party + + 6. Optionally mark it as your **primary** wallet. 7. Choose **Create party** @@ -77,6 +83,8 @@ wallet by default, so set it to the party you transact with most. Change it at a 2. Select **Set as primary** 3. Verify with a green `Primary` tag +navigating between parties + Changing your primary wallet changes which party dApps default to. Connected dApps are notified through the `accountsChanged` event and should re-read the primary account rather than caching @@ -96,7 +104,7 @@ request happens on the **Approve** page — see 3. Select a new provider to log into and follow its instructions. -## Sessions and logout +## Sessions and Logout When you log in, the Wallet Gateway issues a **session** (a JWT) that authorizes your later calls to the User and dApp APIs. Sessions are created on login and stored in the Wallet @@ -112,7 +120,7 @@ loses it, active sessions may be invalidated and users must log in again. See [Networks & identity providers](/integrations/wallet-gateway/operate/networks-and-identity). -## Next steps +## Next Steps From d707f2fd0c39e6b62958db955b1e5118fdff0c99 Mon Sep 17 00:00:00 2001 From: katiepang-da Date: Wed, 29 Jul 2026 14:42:33 -0400 Subject: [PATCH 5/5] image updates --- .../wallet-gateway/use/images/addWallet.png | Bin 21871 -> 21841 bytes .../use/images/approveDetail.png | Bin 29102 -> 29068 bytes .../wallet-gateway/use/images/detail.png | Bin 26799 -> 26767 bytes .../use/images/selectNetwork.png | Bin 11617 -> 11621 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs-main/integrations/wallet-gateway/use/images/addWallet.png b/docs-main/integrations/wallet-gateway/use/images/addWallet.png index 0604081d9080ff695a5fb247ea34a057f45ed1a2..df587836bc01e0cf82458a74f6d86ab3aecab2cc 100644 GIT binary patch literal 21841 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

    mGpnPftWlBFz^}D2fdOKMcjX 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 Drf`qq diff --git a/docs-main/integrations/wallet-gateway/use/images/detail.png b/docs-main/integrations/wallet-gateway/use/images/detail.png index 90d0e090ab5600b0cdd92634870fb8429a49abee..8a881427ac358d168b2574ab09172c9bd5c3ebad 100644 GIT binary patch literal 26767 zcmd42byQSw-0lm~-7vI-(p>@rh_rM_Nh4CyokN2#lv2_iBHb`_N;gWUFd#L6G~CU5 zV%n+h8V2?v$s{w&VPIrx$P}u84`njEu(f z`x%u`Zg4w8gI!R2L%3Tr>9k$b>l`|qL##~V8A+~OiR^76hN2$Zc;p|4Y^?4g36k&3 zr0mocgBx=_ow!X<$UePRZAJFW4+;)bCjR17wH9^k>i@OHagAyXBkVHO`eTLYV8E#8 z_VhcpEsTS3QvlBjqmY zwX1<0vg7Uh&d1wM`kQk&$3^DOzko7Zp*IJ7st?K8dW zH~l5UHvpR9_vWm#p1_{~pN(GGoA{sh_jjIBcbZE-J@&$}6<*wB=wD^hz6w#@xrRvc&zN$}O^P6h|2Y-!SWe@<)59fT}alFJo z{azh^zp)! z0604bNvXj5=ZN79dhh@CQ)Bl{e zL_G&T=cX_ECInPVz!EHi<;^FVa1Lyhin$&2fXx+@s(`Pr5(vYFV_Nt1vhKVFWr~ z4AeAAi)D&e4@7)*L0*#@7W|JBGGqE92l$)?q_XzEe^|UtKPiCt3B#N>(oeb#jxlEf zFAg^xoH}3N{#_F}?`UMCp)kRg61!HpnqOtwa67n+1TL`N4WX*Gyv;l#({I=ZnAYQ& zSUI=LyFG)F|7y%ei`Mt13e1NR81h(hIbm*bBjMSfI(@9B{=KbR(=4!HgI;jmEe z)x%a@-eXYUMjb)GbN_vH>j=~Ilgg7nBDh!qPR*j{t^aPEwbwFwm)6ezoOF))J6#>9 z*7f8|Wr8XXR@(SgJ@Z=ed&g^>Ah%21X^h_eKiWMgKst?Wm!vr4oS5&M9Pv`IR~uH^ zyu4b4flDiG4> zQ$)Mzt@$grfBln>1FIX5tgAn~2S;8J3!VG(&W{R^77OO_@VT5-T1TJWSWW$3(W5C_ zIkzo2IDe)QyK8>Tch{HnSdYH{6gE`vO(>264vaUvoZ2{y*a^wzm$^$4?~`%!L-hDP z|Nb(oRC(C1dSC~ibfIt+8PtAIx*A)%8%xM&lnYEvJ8Wl)owtV)ubA{bZ`o+NyP8ie4K`23Uly^LnxN{#yj`FQhFxvBD$`^mI%1WH zQaftd;Ffe<4@Tn(wj5s%$ELCV4kqpkl8eQZh_52go8PLNL`B@-y|R9;2(Bc-2!2UF z{$hSM{NelDOSkKj_njB-Hz**d6z`RYAz`bu^%D2}q2umkyw@K8Mq@U{AKmTu+*H?` z|6L1gJU;YRMWC!*o9~$a;GFH;nM>}!(d(ZO!9Ak)d~9Orsk$GII8lgsWT25ixbH0- zx7u}VE3N*Su6dj#$wGY*eqbu`kQGyDnZ|3gEMBa^tD*A3mK|+N1h|-OGI_N?Z;BzP zr@Ws)f{5;`(=B~fFIz)w>F&ugmEmW}N>mb3g;rjSI|PqwiRcsL;gaw&t}?pm4=UZnVcWf=*o#|Hm2ih|7*Y zYhJC5_6wCZI(&=IETdg|gH*rqzX;?v#E`^Nr-*2YI7P#Ku|d`DrUtquZO?EQRHJ=0 zC{DdvWUUBBu?-&P(;= z^%|K14cMFapPs;sK~e#nr$PNWW2=0--P~^@->a|srZ>~6hHuY0F57vQT?T0xM0_6q zEvQ365p`$7g1Sa+3k0-0YJ?Z1#AORY3|9*0sT5VMl@C(Op8Mef6vn-iwz6DWmf_Mp zgqxyfxx=uj{3#3UAFD{AU}pShmfxtZEjoxB1Oq8&iChwD)VD^cbMGu}beA~KsVn3i zW=wOQOFHCn_q~90P#jC^C9ssb26a@Iruo)$vBOT9S5FlZ7EDO81OC0an$iYk;FzD- zV?^Z1pofJ%`g6kmTz71=N-o$a71icGzVY6;PVH&u5s(b(Dyb0Bff|x*tyMxXL zX8+^Kc#b!xwG<@4NequW>39V5-*pcLGWZ8fOjVx(i-9`$^y_5P@yNS3I?)A6Gj*^M z{)US-r*@7zgP*O#$IG62Affd!3S$ME}U_F@6nhH&&lgc zSGaHP6Tmz*{`^eIq`fE0Yn5`eXeVA_ zh1ScbCK+_KeW(5)b3M)@Kc+H9N|7$K6Pl$(h@MgY^L6-GfRZ2d+&0lvYCz|=Ed=p7 zHKZxTi~{16Z|u4FDHp8Gkk8Z5|IOGuTe1ydrp!0E^SbIY35(}R%$4U=fz(aGRf*x1 zeQ#He?X`PmB^LeNIxvzRumADh9aa%kwU#+GH}a$XTMnn_jaLJcbTsTj!X~8d zCd_xok0XOa9Wg~7-BouM?W^!Q|JiqvOFo>&W4P^T9Z$s9-g^&gL56>A2JT?9_4nXYYQG{*ZqF z91J$^Vk*4>TaVg;VuDsg8p9>J>rcZSCw@~`B?FZp4ntBj(DYFJfdg;atR zE4rN&P?U(Fe-l^-ra`i#S0g=~%XPX1Qd@7D14rI~!%%m1r~Wz-fmf`ce0sv3Sim3q(3@`o<$Fm@P6lZG-_@mnq{Nr3($iEnL32>|M4*Wr(gVEd#3-DLt^!kN;4$` z#6B%I^U+B73fA{FIxO`Zt+a*Ojs~M(SU{#O0f!^*jsl{D#)3p$Kcs6Z?-B!Gy3H_?9!+S+VHjyPRLS>v7m%`S`F~C_NvSu}UYP8+% z%+-`w^@82vNqKdLpiL<@DYr|03a_uyIwo{cx*g897@d>x)a=$)jKwoEYaWkkGoG(_ zuQx`Il0hX4eX+qL58bPsf~*H)_Q2cA&eVxHZu{CBbK6}usn@a$C z{WO;WQ^^9d+}9Qs%JG|&qlC>E2UIP+Xe%|V9yWW+8Cg0TdPg05Mcs`zpkeYht(61> zk$+HOLq0sfS1&7Hhl4EBL)mUNb2FqlQ8tbKCGuAj94_`$ehJ8vG+tMWt^2cNUzEpm z!ppl)lR1*`EMHckNJKWP#Dg^JfJz%Iw#&->vIN~wBuMOl%Ieu#!}v4*1=cLh;7x&k zJx->vs^1wuB-b@sXYJWXB3q{eiwbyle%DV&K6hemr?2NaL|N}BbJ(^Vo$CW!b#DsS z`%P<(lMY_z?SxpL7wu985@b*)F8TflD>+J3-cBo21G`64IIBPiclygjnRW@cmUq@j zf+g;ZeKQ0ki?srrMsZ4O$I?yvq}eD*n|ldU?PSBy57+Ui|E!i>zL=|C10qhxkf1#UTE$0&1Nug z&sf8gqGfHDn_W)*#MBiHD;dlh6h$x#XWk}NOo_q|9GG*Vf|U za18mwq+IFNd6`#hEd<1N!@GImA8!(x;f#_2@_}!^I_mTOv12Anx<1>DlnzA?_w4$3 z@}NZOO@HxVH^6-H!M!q8R*dI;6$2DD)W(8}RvZ1+?$d`bZA+s}$!@m<^_Hvb%l_tjjYOvS4@ME%6r-S2dh%Y2@lXdIpOg{{@qchgL zz15ldkklVq*l1rMD-fV4CL0E8CP)uq%2q5HhPI>+F|fj^6>3#0>C!?mIw##jr9ANTFQqrN9>}Asyqjr>b zT;vpNRItqVo24<1P+7U%Lp5bAy0FbfRYQ6F1p(tu#f2c*_E@AbY-9ofi=zf&OKx(Hp!b4WYx4ZQJBZsfkCmxn-YV8g+2M;eQEz9u0^A(x+Z-xOYjq8ClU%^sh^+m41nRjPpe_c^QC{bqM$G>16E6*?4hNHeFS5ETEe8vCA!n-P!+nCBw4niw)(qVT>i`h$#aJ2i**?=7N_9j&* zO6G=NTru15ueJ8;_&a@{&A!jHhZ>sQaowR9dhy0>p2-7St((h%w}*VR;H&k}tZ52@ z9_`^xJx48EYJra`W4;=6JM$yd>;(~aSG!V=*V8u(Z%uXO(-kE4FM{LXGbMUUhUMc{ zgPZ*^;_2{Si~H+J$t*$JX}LqS+c57CUtwQ5C||>d@vQi7wajdE30uD#jtka(F5i*^ zB-ex2-;FY}6K}}9xO40KrM~|f&3AQi!8N?zf-cG>&et_J=t4AKg|n4#q24#U>wehxiybSHDiDxwi$py@qevd86q@efx0U(f*B_gc zAmMdC;(pXsKTmm(9#cNO^f&z7YE(twx4+OdkfukTnp|pBw%$To5*dxN4@e!Mbx46E z3Oqe--tjI2A6UPmB$9EfJ@cikHz7Ndz~h$cFPO+lfd}ILrxN3TW$^!3Rq~%Wz;DQW>MVzB`G5})$Gq4Pa;SKz?bK<@uoE)THElmiLina2#tv^yeJ`* zGkf^I&a$3|`&*f{j)2|-2AQ6E+nJtR=}?O+K!tB!024(hd7;H^_q%N@UolI!j5#Sp zNZL<5Q=HbsZ>#)G+lNz~6dqH$e@83S^08E8XlO3KtIcJE{HOBe0R5e%x+4ePq_$L1 z?`>78qZ?j`r~T_rQx5&dqfq)@V7(@@{0BpW@>2G2o=jvu3xB}PIj?z7n70G)Votjb zp7^Q|-D>ovv+=?}94&Q!lpB8686|M}pBoO@-(8(f&E#=T6Gw;?xJgFh(^7?xnZ)rG zb7X@3TH(!Jj|)ZSJ?~d3Z%iSUV0zPQ$>v9U8L!&CW4%a%*z4Ecy<=m^XT8yrniG(R z_D);&hq{Rzf`Fd08m#(BR$7wQO}01i8!s&5TNe-so%4k3+~w! zzUqHn?Nb3LYn~?JWO5f5+1~!mn zv5t%AlDhf)uTGjHWU{qO)bIeoNtW$*8lJLgSr54y9T^mu$if29JiB}Q0|Qy|+pC&kAs-e* zMAU6f^e*B!(D3D2a4jKS<)hq=AIJ7D;Vi2>6N@0d;8*K>&v`FbyiCXXuNCNgn0?t0 zuUntx3w-)jtxuKw9>?<&vIWC*-`nj(v5wttay6?)B9#DV<8MuoF|s z6U5C)Dt_RL<&pY#{gaTB-C|kG$BrckL-b(d+Rcpj{Yt1pUo)m63I}k z8qfW`Uhfa_K(^@7Tlu>;SN95ZxDcJwG}Z%cuYgyu`v#|IAGL?_H5>`0rTmbnzpL%y zzBC{od|2wm!Gc0!cZ}jx5*cGyq=55!*GXc$KeKx>8V-4%tDtJ*$FcO2pX!0NWmzAA zxWRQrsQo=v#bYWwhTCwh>q_c&`FC{5NjfWe(B)}t!CHm?tt0r+l>LCmTUf+&t%^z^ zr$M#|(}b9AYD?;2!TaGMS}~Eu>Y{VQ>elN_eZen1oL;t3c`1K-YKo{Gm3+q_OhNF3 z<~7bAkar(OZ~QtdF7g}9VYAq9XITtkhegu%1VKp`eHnA2oNzxx$*29NWuksKHoy^6 zJ;&+zl1)V_7BVuSH!l%4Xj{2f>P>R|-5a;l_13Ro{W&@&GUIePg1)EAL-lie9WjN= zq_1LyM`BawzxmAS5`;u>6I?10xLIUGENcIh5%Mef^w9UGn_+-T+?{fgu4 zqZu|1!}`~)HTH;m2Qrz?QvQpJN0saLSE>!}yRFR}e^9f#)we7qC4z_Eqv zZu+EVBfhgWFMYQZBEkvnu+k^ZNPfI`!2O%bbpl;^C>w)&m)}C&R6c z0zE!(q5`R$dEbouPh9waV&47lIi#6WZU;Ey-5^VD47D6d+BiB1Diya6WXY--!r@QW zNW$-*VAh|%zw5GOKRiC%n*(#{RDdN(+F&4U+)U7VG>ypfc$Jp>#cXIn`Nm53lTF|L z`L#Dw)UAi(TW0<@RUO_%ajzp>V7}NX=`b@ArvMpfIFL_-14=E@C_%(ZL&{Rcy3uik z>M2{q+baqan-y3Ecz3LV`kNe$66F<-FcOHP`iD-!YN&bv~3o4U2(p<0((g&wD(LhtO2f zi@Guwm%TIHKRtAUi2DOeM)Z#04Ef?~%B0I>w~2RKOrHp(?wmQ#JgWSRp~{(f)WUt< z+cL}bQl+VV8Hm%s=|J`anPeGbAvA?GO_t%jPjklRu}3ioW~gLgJeCC8_M!X?SP-Q@c}kYk?r@d!j-!VBd8;=2*Y-_OqDA zF%BzV6Hp1V7HiTbr$nM+7Pt+Wnt$in9ZBV>Y7DN-lQRd#=NwJ^YQ;vVQab6brNrb%y9xT zE?2<~U;q?C$4JR{pD~SjIDQ|uT@J${vB200p48YpF&=9B2Dn0KB#|}ML81a37VtT! zLwkkf4T8kz#XbM#-)QoLIh^lJy_-@#C{^EQN(zHeN?q04}6?d%# zv8-eUNsN@9;9HOiMbCRdNr%oRy?U%ZSwX$4_>-Q<7`Go<+I z)dw+^p=yy$;C4RMCcqk?@!}?nn@u<~wxtU0TDPk9e*9$_-_Jh{)9R;_^!FyE>-*Yh z6Z=w*E`d*v7{q|f#AF1;jex2{*&|fsL0Y|P`gYA)$H8za1gV^+Qmo{HR__|ST>Qs{ zO5+-Q=uwOn1ECe1w;sA^^{LG7TkssNQjG)1-bZt6K3T9okP&i|RK1zxTZf)=quBiV zl9(_H$5Dm0Y{#33$PDAi*dUQ`4j|qisYi3(Z zsmKna7J@UKh;u*xf=U)ESo)K_kBXIpeFN>q&1XrTKYH^ER_6YU>}5gNi@g#hrZ!Gq zhgbG~s&a0%PohydmAisYg-7W_z4wF;k&A(8cWw!x$z1^UDr!iWg0z?zQheTA7PjH9 z)Dq+umrH6)j;bg&~OOh)1%_&gqnERWYc?3L@|LjhTXbt zO3>fK1*g${g!`0ZKcvTjXQq6aww7&1YG8O!`#N+IzI?h_vZ`?5q-2?nTKc{s-1*2> zMkqUqlia;5ZSzY$y?dc|FIn{(8$biIS;a`A^`c14UWf>g;GX1Xqi1W4CHVskNNga} zd3xSq6)#$;Kyal5QtVuuz%-vjnDaVO;Q(!~6y)K~rrsbIqj+k%A^ziY`sr%P-gA)8 zvx_(DrS>lS(Y`hMRkmC{FAJwWqP(^t)WJ&S)5BiWOb*%T!z79bwxUv!rz$A8f>u*b z+4E(48P0GMb5tf$To=xW8YaEOWm0@KG+7%_1FZKk#X+n%mZgcFM2IOdh4#b%qIur> z>MAzBimJjP9K|L10Kxt>_Nb`oa-P|bizU3Di`Kj!CZCY4g7! zrg)u^ie$Y4G3v9ox%}xzrBFNj2$v-3bPIhe&s_6X!-Why9*!nTL#2f|e#0^4`-k;V zf`J0gA5h=RAG$uGi=o*c476>@<i26wlZtzpvsNfPFEm ze{Vl)Ize4}d0XKNr}6>C_O#u!)#y&|+&LJw!&<3ykF)3ArrJ++D9G)&ZaO&my$2t` z&c1K{5(xb7(G~x1vBUr1 zSpZxIhy-k4X~d5q=fW=6t-$vC_ZMrW`^jYkX8Mie&{tS2-^v8AHurvcq1*$Q$X+O= zKo1ZIh=n^XHFBBc04aceo2NrbHDEj=MBV=M)#FfbLwDKws*)SY`?QT&+w|#n2-RBp z5ySd57II^E(>Fv_bZuV8aaP|U!j8+J8S;2v4=qTdu$+%3!Q!CA&z>hex>z)Q5=RiQ zCqqkr`)g2)&UY^_?yW-q86c88w&ksW8w19~^1Y3(_|~A>O!_~VQ5=ovbdATsd>p`) z-802J*dqdfH0Sefo9AKl8X!t%Pk&DYHm0Xk1Mc~Zk81&FB$?oCiJdCxr8Gh@=>2&I zn53qk_*Ko{dN4x6$JTfx*SKE&x{T|)>0)Esaff({X_bksFJik5e@BmCUna9Y(?TLj zyPU2fC>vN2arp;bLp8Wd+x2Hsg|2wx~k>+gS#MwLrQ4U6?GabTjC{Q(tJWq0kb zO`^ZxoKN;u)X$GXW;$!1<@QSNFeByvl;GMt(EfC zsI?>sKD{K(c$PRt$za+`%V9V$k<7=^h4L)+EDbl=q0I*iRaI&wF8JGJ$4{yw;%nq| zF=5WZ?Y~1DVAZG?&`v`f#gz#GGLt=YTx}PFfDRWZuEF-id1H0>;#_l+~bO4(^kvS;Ge6`U;C>X@ZHN^t7s?ETd4!hizhMnF}qLojESHj(jCC+ zd!#v@$*QJfKu9zjD!47-_Gi?4oaIo>+_(JK!t0DzIvtDOLRa%t2~l5zwRo3%BMFY( z9rkC-08)c>DsIn1hK2_)lDJ*WLEt@FUI8tv-fHvS@9@jxHTwRTD;ocjI&?fL(tcD1 z{Z@Bd@UFPe*NEn4-5Egd4cgl+x+&+6V3f4_E(st2WSKGXG;Eov6MR}RL8{K#G&i-@ zVH=6;5nfAuQNoxfL0S(|8CF^l(O=5Vv@n3T;EKEnO&om9#68R+)JL2{I!;8|uT4`q zl_GD?e(}6w5nt|VWrh$&K}gvh$%ZIKFQc1zaKQ2kopPl zS)QCXu8r6YOJ{9A+`@pEIbcx3{)6cR;f!#PHba5`=RENDSq^*h&&FJujG496SZHw3 zdY>ThQjvqExjR9!P$IA0Z0WuS7!&sj=5uCO+3`|i1JveSHkO43bzR<0t1!`s)OQJjQAFBmh7=4HbljDRac~|ggFo*y@E2Zu zFw{1;gI;{w49x`-k`A*35P?C{)RwIjP?K*{X!4_QT{DLX)rq|3KqTnR%#`@GAOcmN zNt3ECgiS#81yRK7q3q|cXf6=UnP8juQxA!HRvR5NKJ7v|{L%JoA+2?EXy*(L(>l5H z8c7j>O1DaMZ`(qi0hKyl02kVn8jvKqIMqu^gWl8vUdVe~ED}aFZ$kJ2!AReOdcc)Q z5_h%k<2*zXe7ZGgTAv-7Mi>bfF8;f1jy0XYQh60hAPIuJigeR%rwBg{sk|(ho-!rDHyeYR2zg-TCVptsxk6oR*iN$dQFq5uCe zxBk!L>;KU}WM|J1cKGjuFqPVRA{!5=6=MQSVf!3D^JG8G$1_E>E= zuCyXbanDasH^6_SUsoBoHBtey(IKlxv4o$T+X!@45xJ?|RNIJk1aKcsuL#m)Ma``)A#8~g3$F##}!YpX$)V!_@0xt2);bl_ibG5Kti)8}Balo!e= zvM6I_RH0zo=|Zj04#3=kB0~jf%AOD9R=scH1{Tw8Msto@z{s=W%OSr4^7K&(WRCos z@<2O^H+r6{_`hYJGN)5F;Du}IpWveIzHj{WS;Y4K=Ay<8OTqsYPc-4_XKh?<$zkf? z^~?z%qkT8BE}%Nn@Z|iD0h?7Sp3ggAWNZfIYX!}bLInosWW-&!hiuNRs`0WtSqH}wQL9o|`x3oPj={RObeJBidJz`FE@ zI!|-zS3iG35P7DZfpfNOVZj3=@mth|D7e_7K?7W3Wf_AsX0bU!O0#*ib4VcDkgW^I;F?|DT5|O}&;;uHzDka6ubzglF~-J-*O)RigrxX=NL8ry+PH+QJw&hH2!Lf21}|11E~@&u9yPX z)(^CMd7LA|+fp)~Eb=xj>7cqFW$qYJ@?0Bx-*bb|`av_;v8V+G3^vSSdab#bkB2<} zN4tUlVj$#?Cs8sb{DjW|dS^6lgykXl$8HB$`c6Uo9~AfSTg4xh$8IhTdVyL%LDs=i zlhZ4&BcpmRU>^a_OtC7C=+DhEjj1P;DHlT?ZZ(q9kDmF;g)!oAxkbQ#n~5GvA)XFz z1#3q$zVbDOw!)&BiKzRoK$F8#BQFpP*-<`G$Xz%efJoFlHvEC*7EmyJ<3Kn?z4g_4 z7^ov{T>#G<`NXlVY!`tgaaN@q0oaINa9=|cJ{5<2Sbg>|57%*5FiIZLtP9X9R_(9A zxX4!nxK-5dY{4AZ*1kqHq%l$IUan(#!~){UGF#!zHw#5+-(tFyNVZfgaQ(yF0I~ zX<0#1IT0?}#2YV6oB@o`Z&bq2!=Xf`@?FpiS!7-i&=H1C=o!*eilPgYsAWYD_yQ`8 zj|U;I7$pFV0h>KmJrsIe&IM5^VEKkBKgwe8wsc?Ym%S-{EFXWb3*Hc`Q&KQB49ya#a^Ldt;phil~*Be+F3=~E5%N_l$>n_ zSKIxzMhr$5?r@>p1F8c7e@4H}@tT;7TXpf0m*oO?f=NHGNg(vOe1u z|GrhAH@^$2C#IQ`*(p*i)uFq8BS}oQUyfi^mQO*vO6^KWfhiSSZ5K>QxV$4+WFm;U zWig*@*Uau?xC0WN(^VC~VyvQ6YT`2vwH$o|3rX54u=CHx`bSmy8HD*`;DQKynICKe z+)ey-hcb=}nN%F6uPcq)zPn)cMv&%MN_<`JtcTS*o}0E=7@;@1U+m9iRWjTK(e{!9 zdDx68Y&*z&kPt;aYj_Gt%y%S(YwF6fS+By7ES7)Qe*OnmyyT4yDfapw;?&UQ?dxw7 z{x2gE32ZO4`1|F-lR8U47s;}t8W=(#jFZfh4@oJmm`rigUlulcBg@y=aFDyVEZ(X+ zFyU=r4g>hsA`QVS6`CqP5JjPkPUKxi&SOHe#Vheejp_8wX+E2ZHu3Y&36Izwr4g@K zgi!2r%fXWDDS3|`v!R)Ov*h-Zq-3fAejN--3d%gjq;Jt|@&+D7t7SH}f_QL2{pcGd z`AST<)fHS^m7^@KZ0JksKI0arH)PrwF%^)wKCI!UUT?xcq_V`*JdqyphEUKW%DgC^ zl|!hO*yxDDq7>2WP~Ty>clUAfuUr0*h3fKF7N+nzs|62=_%Iirw`0LI{>j)}LUp)icT@3|Imnan-T zL{-QnaiYNxIQ#8pC@QfE%y1^){cVrQgmV%MlkW$1n-J*Wv0vhZs`;CEn%IQ@1pP!J zVxdiTTBm_kUTGB{9bRc^~Pr>?Xk;mK(zVpP6 zkS6z`mMJ+}n&g&2f{k-2t?imJ4Kk0?1lh&3SHQ5_OZ92R>N)NPG`=s+B@+-sk?DEE z+ZHXLtrU{Cn=8ZH3UWt9FUZO#k{F=m{VTVjG{JX;0P`+`oN*;rLo1W>G^-q`P6@@Z zl7`txNaqqUoi$vVvbhXA}js*Bam4r7|)?E%u;45|;%H)8wT zaa}%|K0cHyZ)%q7)#OmvxAanq%iZ?nc#0@_89{}${pPZvp$|$6e9T7YOc%R;1+gzd zB3%1taqC>{rg@r@3o-KXuJyusY~04mx4JX-V?7cY+3<#1KV5VyC9qA*O-y~+!a!Yq zw@kt9`|^iny;UC{)^pMO=poz16!nV4&$W_orxx|q9SQfi7s<(Rg|dc9O$bQP)8Iv$ z&ysKjBHnLydo?x)J(E#0V2{k`I@hM;N2o+%4cqn?n3aUV@=3uUEY^G(@zeDB><@1| z0!719p+qI6FUb87A;m8C!N|M6XG+!Gei>J2yY$=1|fOZ^cCCCnKZuL}ec<*QfB=Pcl^ob_A%0-KI^GnU_eWXBPw_5`u-53WX}> z*=LnPpHGj>WkAnVKI1@uj2mP#a# zR}T#%s@Lu`t( zKKA+=l-`m$1W8+amJ{w9YMwOeST3>LXeh~=S5b;Oe>ZH=X-lwazxkCRKOqDt9ykN z+p26!aE9+;;*h<4onnr`4cM5({@-=s3Kde5g8?t<>u3vrDfi{kht->Mroq`Y2vB8j%<^aUzL6?#((7xJs;k-}mL z5&nE9?D2P{F*nRvJzs*0X}ID_E>#A^R}%I9bZev_6!Ct*wC_72@7ng2Y_=lf_^T3c zzCiRA#_E-wo+_+Hhf|_MD6<0iWAzFiZx;xEBjwt|1#3Jzh2H!lyj>XWYIS(2mia3& z2Dmi`3&;U|1b^b?TP0T~ky6W=n#*yz!=T$k(CA+#Uh_4QAcZ7ZL*bOw-TiB2m}6oMD0Ck2 zcZWO-B2YNf@}T%pGn1N-fkq{_;WtM9fo&A(%rg--tMk%Qq-XgTSZ*E`ntXqfV;;}j zpGxun12g`g0NVdM4~bpv2F)BkRpFmDo6-%O3j)xS0H{>qK0yJ%5#s@6F&w}<nTW>97iGF$asCKjr=BU_eP>3Va;J1i-T+$m!>o7kTfVI$}V8 zuPc!0$|ez8jjEYoNKIR3yfz#ZauOLKaBLjX=X7-xriArq9sZM>-C|1}=K>2jgbQ$H@J z5w%2B@4Ph++B3Z|LAnS!U}U9WA%yk(HhS9RuZFo#Gx_NX0+R zoG1L*s4)n%L;KwjP7P}PVrHYP;w<%+{~^qK^`Ev0oReN0eGYp+fqa>{8)WSc=)~W# zuxwF@%X5^SGf~IoW?n!TPm%!Y6=rwYIwRb~#SVDmI1En1dRARuK%>t&!$RBrE+YWK z+*b|2|33BQDnP`_BEKPx5&`UBTEsz@sEZHVzr!Vp8FnZ&kBmlGGmSe9t;DQ!*T+9+$7Lt?=_+Jvg0%KA-;0Em{%q#mKd2CQ^81?cNCSYJJyu+9) z`^97HgNeCQMzd+@%=`K~z16UIS1!jyy_)Ts2D(QsL|DVYl^~MJwda2SQCFyw8Q&$Uyl-d zu$M;tigD2r#r`++B_Ia4t1RQk6~$N(`Sgo$MF18Bc)4(Zxb(G1;Yzp!k27}*o0#oUATJX^-1zmK&EQ=$tHLoaNj@r= zGl(Yk#;4^o!FG-J>83s%&vK#CSBr0%BN~cE%z|*CY0?9^7IvIoCD3VffyyRfL~bEt zS!jS-O2k40MINX7loEZc`ON{Td=BGouRf zfKfu5Vbox<*~DhnJ-{s&40cgr(aE)1|{IAULaDXG*Z-;|*&+z}Uvydji- z_)hPUtWS0(WE`0qkx0gay4e#`me^!MLrG}z<=l!n*5nhVXY6V-1n#bj%~K*9dM8LV zJ5t~d4N8XW_mj4x@5@P)@f5Cx%4hOp_i2hDdS}=(v={;wkK~!u7Gw3nkOvN?R%S4h(nP2y`SbbDH}Rb2+vvVMi>^rrR4u0jk+! z-fUfGxyaJrE;(7XFY-;j|JX21JPRoN=X%VXWao5aK z$F_6w=;N`n`bRT$=n0=^?W_$@21kng}C1%-T}ChbmQkv(n2EU=ey+I3H)IFR=(f{xC6J^1QV ziFSBJu4HGD*>j@(B;7vH9yM70LiP8#ITw|~UmMvP0_wxcUKz)WZ;H~dqc4B#?HF;p zAEZaah$;+t=fdW{ApiX&ICNk7+5HYhJ;@RtZpCxM9s@^Wdn9YZE0C}v1L z5nDDET?F}J#yg1M8pZVuDctBZf9aV;kxQ*>d)dgrWEKajutnIy4JmRE*ZB6 z(=nWi(EIh?{&GCT_uz zdmG1En;U9zYoXho)j~ZRl4YMV^m1yn(IhOqQK(L1WL#K&6#A>dGpuHvwwut#mm|w^ z*Ql*5oz~W}xj{I@d{f+EXELgdvY>KBf3_ld&2^GxHW*RnXK-z7z&al%`T1?d!@AFA zHt%7|2-EzyFoJ8|v{UY_S6V~NJjy$|oG~>td*KLVL6rSkJT-%FuUsq?)SZEjcbtIr zxVw9JbT|BJGE#E(^lB@95KOfr^J-_VTzUNF+rKi{6)hRlqDzZ(7Pnmc{)K|x?f0|@ zH^e?$Yx!Naqk>^&?%lAMlY*Dl-_9kc&i0*MB>}r6)XQ6zchoke0bW)NGB74i=`)Uj{KzG((Zl$&ALpm5C4C_ z&BG;;OmQ#nC&-CQEzGHsAi=Kkr7YQ}$dW9L ztTBj^>}Bjbk$v9_F=8^6b;Q_W?E5gbs2H+WvNe)0s0n2YBRdhv`ONS9|JQXMo(Jc_ z|G|0c!Cc?#8sGWc@B96_?~l)D)e9i?*7YLJ)q%q=p>_>;n9pw4i#${d-wW`2#kxO( zCD9Mu16v;%pvS4jDMnzGF6#=XMkB480-Q(VNKuM&mdTuwx1yNck$J-S|2L4Cul!@w|scHGJX5LbdxsiO&~e zLK;pWX0y#z^SIV@Z9G@?$!9+%>{w35Wvccg|LW>zcN0o}I+S_;eulj@Kh6k?yu&Z= zWs;?Y@ZmV!0ll=fFt~R19JbrM*oE6cB4INhII{&Ki-7JxOP)W8!vFzg;eYAQj~|J^ zTc1+gd7E_pdgtNpH-Xx-GIami;XiYDCs(Nc8UpeAtb_= zbcedDJ{T-#RtXT$HCC&Xn!`O5!mK40WXd%ylu9BayW7l8z}^X^*|Dn^5-Mck%j>9E zzkCJNPxCVA#qgZ*r@K2&wJJ|&+tpS_lxkxZt&@gu+Py)_$A=ApIoi{0vQ>1t15kuM z+_ia1j)BLa#>$;bCPWf~IBj!V35)w<8?iUXG}jK+MV~t+q<_papsGwQ7-LmYPqtka zwS>>Zcnc?RU@aD+H<<9Dzh55{(5G&a@$uUB=_Z3Z~lnaxVVIxCD#1uM!6+DT4k0>q4nJ9NYpuj=;5KVF`{)Sd9I4PI}m!OD>bE3r6m&(F;z*#Q^qVx zi1LB$W@Y#j<}h}nDU#J-=CD4)95%onWpF<9Zgat}J2ektxR*LI%V>vn=UQlfW#3Nc zpq%*p8jLyU5D>s(I*|zJ@zOJS95hi)9VWKs`!lV|Q<|C$AkKt{Wp2ll$DThHzsRZ- zOeLAA`4j1Rb}I+=3tFlYVjayPddY#h+N<2W4$=-+PNDJVnnd1xP#|Uq&2;p?FgXkJWAwJXGKj-F z3g~u&HO7-=}|Ph?IsAMrboo zhx+$LK0d6@-aU^~(VHStOJE6Q#bR6@M@YJvQVbQ&dyW2k>9|@{0hDfCUsUS*!olP=1Ko()7SVh3sxDT5VJ8u za@^8IrNU6&M3cV&xo}Zc_dJc?WM}MLayl6sg%nZ@FZrB~YYE}pr{;X7v8=E(=0{TU za`Q1yi)UiywNfFYVwX{Y!%IvU&MubDnRhHY(I~yM*{6zD_QpO@4;Xa5jZ) z&_hW*MZ;jL9d)1?j4Gl(Veg&YxnH7Q1BbEsrYmO;4~E6y)m;yV-3#B6Q&mS;uBP#Ovze ze3C=P%#0rda|#XjMZU}u5t4$}D{3xWG>(bSynTY+kSpbuxlfMX%ojbaQZGAsDb4fo z?q&kD)v9vxZR?e?pZ>hseEL#fd%p7cXs3VnOLGAqi4unKk?>K`IV)eG+ZS%6JntD{l!PQJOq1b00KQj zy>U%exuwwcCLvj)_gspsHn;Fe`+PH>v&!6UtXCKVpcVQxw7VRmmbR{v<;OoTi9w%!xq!1i9B&S)jW8hMN{t^_TfylnAe~FU77m)D`1ILDh>)XHGl~ zK6lXx-^eg>K}C6g5jXV42l6NB`YOX@%rDnv_*JM_(Oz5%{+k)B67q~m))HOxi9S@k zM*5ed_hQUhq|i>CUNB)V`y*HVV`85o%G*3NOrEv`ai%>h2Wj>t=N65Fyx~zPg5Ab9 zB6#3tYi+tQPAZc-K6v_-H7hO%uPtwB>1$3G#2}Cd`x(J8t*b4P(slLxku|SSxw|bitRZwT0X_YRX&|8| zti@b=L_1yl#(SnhUO)R0PaBcn-tl@4u@t-N6+ZX*0HgD6>ayW^nTF0J$~z?PQ?QbL zDIJ@v#!ZW>Pvkxs=S0pa?ZOXrvX}`W&qt%$u!ZDoUQ@$FZ=1vi4r{yeb1}~2TO~Eb zos?9|N2FFylYV_uTQgWxi=-pD4j2SJlZ4dh;O(+5;qw(H_xE2+wGWfTu9#|S2rPz4 zw9@-UdwJYIKTL}(l4@UBA06`pY6|HN!=D>nFAM^U-b@g-2a550_L+5<^XvHe(!txvwWZg$R-LPz#<|6e^OY1B zPkn=AfPL%zgv7hH78Mf!BA9*4(iKX{d(qEBNr?NjM71I-$iRMNZ7xzveY7;M?}u0|BIx1O#Z66q7q6Vh|U5*8dn6CN>Go2@+!GTfsldo=Ly0Up{uW&+BrL?;>}!>ki1EI}2-j&2xguIb(7)cA9;sZjwl zo2T0T%=IgzXcWqOn=#)IHjgiPk9xXcuJZUnL5AUE#Tk@VM_d*8{k8eiM#?)v<6f^Y zPd80}6OH+45&8#lgt;=v1Er@TEWhzC#*+}=C$#jt*n3Zm!@`Z}&rk%0#U4>^X3q__ zTNb7yDO+k|wI|)9Ig=Hag4AAfhn3GhWm1(b#5EaAEwQCF=_T0Nt+!C+?n#Z)~j&KG0MtsRQ$a*ShRe zKH#AyU!`+x0wc;gl?LdU=iSIAJOB0nmxLZ#cd^cfYvy?=_oRnwm>U2^qb4k%&fXU# zvnhy?i;z?Qy``%(e?xiZ#5~@Cg{_(l&&_&jh9U|+`z%rf6K0McVm0iC;D4EA?CT=% zcS*T*y7#ZuJH3shFmzak-k#_2n#=BJDq4C`=dJMFeca0;iaAW_O>=FTxo3FqvA)L) z#NNeH=$_nMKBTbC8+{V)PJ`&xanX^l>s{34TT~O|lfA&kbFsEks#{eju?qfIOH4n| zg1?ZVDLQIR?p{^7PNK-~bi<{gM-<7hAnz}yQ|l@lOUA{gg^VZli;vTfH!p144l!x? z3F|Bc3H!&lm==)VHdtgWK46hhaM$OZygKUWkVhu&5?I|`w0SpI0UPj>?pO4~X)3L~ z^FSKuR?Ht2c67MgyT+|=C)37daRz6dH=e7CLh@z1x|v$ul?c@BkK@}loT5wN+KMVY zKI4ix?)uE=By$t9LJ%hIWZ2Uy_PZ&W>fAdK$pBmW$FItG$1;Q0Ijr=T@(Lo0sBWw` z8QCjN{c3z=`L+5_B^06am1+B&^s|%b*?W_2FTlCAH=_n7)8gvBGjC-;Kfqy005ck1 z;SQ_TX-}R>kbH+1=i;dbU96-J)k6eY#LSm8G3OMq>*oNb=E_Rx;atKv z4uLIM94+z7p?{kqWS~VWR`|>OR(3H?Wy$9F?{ut&V zIJg&c@Rp&@?`|7bSx5ghX_FNY1CNn7>CNfvckHEG8{F9(%;$0Mk-H5U#|@{$Gz8ri zWo(u%r<;Aycj?(7d>a;rVXP>JBwSYVn={MA92!)Gcxif_+^}!=k{~gIUSuepOXIpZ zEG@k0NN&mwCVkKKkGFYt?@b&$+bHJax^VH>{8tQv8v0-n0m&crr4I>*fP*t`)=bfm-3=eD#JgW!?ylAAfx} zUS*)wo0yICcni7O7l$}likZ~{WlfgkvGAwi{_=(q$2(1&_7H^nS-3BsCMw6Mh7{Q{ zX5;9EXek@xI2~L6j5%6;>ZVlSiQ17}@^8^(b-L_u;q4`LoZ`w84cL~VcvS%-;DNn`b;zNk>Gw?6czPVV4g>~7L2S^9m%jMr3{Bgd2J6BSL{cy# zT25w0B1*N?U|#o77k8!9HsxYT3zr_H8%_=?vSb4j*B?UeM|cj+v7J{l_7?{&x1TGRNCHlQQMHrpPg z>6u!j4Iz02zX%F-v3&hM!Jy=Uz_}Qn|4}F9Xna=q;tSQ_%1WFHP88ONm z>#^(X$KKWMVEI1rQ*c_pf+a71gUH?CFnJJ!)XSuCxWudsgSIolo6#-(VX~vK!E8R6tda~AE@&-Ko)afwjVtTIhzHe&-QIHkk zq^|ME^mTAMyr3F>aGLg`Ztky!P3#+vgJh-Q0uMYi0VNKtRVp7;R|-hg@uKLD6Mm(s zUZrpu{w99)@vv1u87bGW`FzJVrv8~1_d(mJZ0B;&m3^L?Pz!8|qZT0AF(wJ9O$CAl zZqh9w7H{AAFWBHj%Ft-b75(-<%cBQa&F+9MoM;92PK&$3IfvVRs}*tKBReAe-a%&1 zYZED>6{_w_w(Z&j>83E{`;Qd#YaX^AthQd481a`X^X3?fn^^0fO;(%Q_#aj{?5|a0 zF38(`7<}ky;orZHrJ2$LT0HVgQOJ=SQ$73Nua1D-r$2N@BW*{Yb7V30|ISU9`==xT zy}FM$kmUT&4e7N6$$#bo&F`#Hzon1{11Q|jz+VbI|~%$ z*?Yr{6+pX-^1Fkeo(O-YWUx%WB;;D~q6rmC$O1=TmW;FJB5PA~digosZ&b2iDxj9@ zfI0Q+OIPjB0B;TFj%DUKJyP|Na`f%*%C}XwMQ`mI`q&Vv{r&UnD_8;7mNGEFKZ6}H zRWVk+dH82mfQ?#;LPfMSt;Bz|%i!^0t<2*XmU8S+j;C|cEFe8m=5!1jqZw*nu5H!4&T%lsJb!7=%@^Cc1?tKg++o$LmFQz}qTdpx2h{U*UIFwi$?H-AFwYiWMOhkun3X5Gmf7?}T z^a?pT)e4nE3&Ghvp${;>7)OxgGS3^2aoDv(V6f+gU}>PFqXr+d1@iQ(^Iw(J&zWD>ZI;fuT*G+|{>{~0LF<6=uu8am@ndB9wI?e(P*x^v4@ z)&5&?1sa*n2ShcAn?0g@WhC6t#3R9Pi)x1W4aqfeT2nDq>$&cRl2@hx&t>BeAKD?E zGuSFE)QzeLD2(T)-4RKGD>BfRKvR7i*Aiv9qEJqs@b`1p+WaT4X?>Gc0ig?#<0s+# zr+TXV+@wz2f5&n)n0R92jg0ezwHQB$@+j~{5yh;p^SMjwV3bzCZB! zAiHP7xA364MAOj;1Cheikc*I!V@B}^$<>Yvu&x}mQGuq^+{IFzu3?1CzU_F{4@rG( zdtoJ_HbNB$hw{JwJP{0cTx3l_P^_72ENEobHlC;Zg4iVvZ(eP4%S5NH1i`Wqx57Vj zqSedn+@71Hbgbf|zu`Nr`0u=lN$v#m8)R$^fq@o&d%nzE1>}|DT}o5w>1QGpH)Nbi zO9K2Cu=Ud1o{bt(bt3lKjtX2+5ngA!m$yg zEu#O9D8+52^l@-4S!Db`^b<)U%#@x(VU{~?tuOZ-mKC>AN}P;2tXpF)u0A74_dDNU zBk&%aEf1{jCMPiJRcrY(pT$kU6F@XqE0~quTeipstsbxnZhZ(%iZB94a^lpf@en1Y zbFS#=wZ+9ndB&pICukwJmpn2>HjdtBnHA`i5snuPqNgp(3OMfo#hk5Va{q}C0`#50 z?V$#|(G|?YllQ-&WYw_xj&g`w90vQ^cgh{yBde~6Ignpd9$?c}rG@-IUeqMK=S~yw zSl(%c=X+m&10XTdlZD<(lwf+giVR3q zre}L_BE}}EGP`z6Dlsj$HoaPEsvD6CKm0n{akXbIiigI7e*0^Bx}9%6IQ8%sKL_^S zRf0913z|>;`?;kRRCi}M9TGt@W?Bur!~g5L+W$N<@BcLN_kW2D{{Mshr+J-$hTtxi zf^bku6iL0H#j@k*a19+_pd4bTt=*eRZS2B;N3M;mu-F!kCvv@BkAX#d7NV|DFKwxb zd`La6|GB5e?jQU}A$scrn# zm9WkCqU9E(9~pq&Pysj?Xc5N9?!3A2n^dmK+35FW^K;_WslC@n{jdM@{}z+r)VOxk z13qL6%Y=HpiG7Y~Uc%>E2b_BTaHl$odN)kx59tg;V8NZ0XxR`yIiKM8XJ#aNM*?0T z=T58vH?+(=C5{haXOpOpB>ciR%h2K3`=fVif8J$|yf`{lPmpyC>mtX3`+|IkxLewFHL>mMnYV>-y z@2tDdU3Z=Do^$S5=dSyQWt2Vdw)cLY=hq$|G}RReaH(-oP*4b7E6Ho4pghSyK|y83 z#st2jSwFY{e8O>8GV($}!6SYAc!H9X3j)6R#7kRI7NusAb{F^p-Cjmb1_h-)8SmB# z1NfTITfxv<$IZ^$*UHlt1>$J$VwGQ?X@i2|!0}pMM%VAjeizDtZVEJ@l8?Xah#qj9f6}VUSJxAc632V#D~u`ARre?bqDZ zcjMeG=)ggxm33{E{aA(No%=3sc))L}8eHwVu79q@eSH0biv#%7FeCP+w5TXzDChF- zc!YrnSOmx7W(nSZe|IzRa%ymOI1=9ZN6>0>G{x#iHs8A0VSvHq74+fC?`|v0g3!Rs zHt*$d_ISqILS`9hO+q?RGRcRlshDb$7X7Hr+pB-`t*jdP_#M87N!Bkdd*8SA{@d%h z-?Lh%v&uW+9|n2(rwn;+P;avi{E4{W?n~>0wBc=0S+Cp6 zV>an;b`x=qHYFVXCC7<;!>06aj&%i=&laabgl>T|^7mVhqAYCb^9j~3epW16;Cx#G zLjN;Yp|hR_y?t|=E9UDer~zD+EFzcqxYDmj{KV;A+mm`2VaZt*2iW#gorcHy=5Z?{ zoc*($ranHk?)yz$13vJxn&HsNXWcIb}gEDZXcB zwN%^vvU4L(I4bP!CVIudAadh&d|i<>pI~*#OC-p3x%=oMG?cCLfB>#1p6<-4V@0=q zx(i$Pg5H>3UXDo7C$xcRUwJ;mr{aHhik=?jJLyp|owhGr%d=!&{_wMic_I#HCy!|snG719;bmFrTbfXxmuWR<3W*{z4=_JG?rG9II_Kj&A8KtoTijP8;0 za1tHOkFD<(ck>oeSoD5hN(AC5!Gt|mpL?i0fqQ=xm}Wq+X0f<*_WK(+l4ydKJj5T_ zQ=6Md^sw*z@HAw*rH71A@^~YT2zES%41Ru)6eU%irK3eU$tzCz9-`*YN zgu#c!(-{i+-Bvm+dFUUuyL%GCnTa!#@BUdtKWJUurfK@VhK4368uxa5QJp0p*A=Zv zk=jzv7jMha_hB}xW`_p&xVB6Tb+hoCk)ADOMyClgwkm6w$3|Zhh}bhKiPw-~g}q>y zeExGT>i+Be3$NWHlb$n^b;{6VN|V=5LnBw{8YS+AA|}1bd9Qr_oT{v!KX`lXcs8wY|BfsJ&)FD;H zPhj>-cJoCGc4JI;u_P?YzjFHpKpyPhs$4!ctF6yrqCb@yD6v2kA=9@+2YB zq1Q3DujRV`%x?Yp?B=?=!=vT+O9!Y?Str^G*fl)`zJ3F0@R6#A{RIsUqPv#`4+Oz- zKx^QPKLQ)T>VNHRWz`aHPxa`2SgmDN>O!2`gq7dEHJ&iVzwcoPsdl~Ww$H~s3|;Oy z^mf^v%$q5+-X$iO~{SO+$rF83l^DkM~ll%Qz z=so6^{dR_9RqMN222t~DMx@qr?b=G&qvRbhx4D2MTleVNNM@|<<`BR5eRWh+#wWBrum&f> zmy5y2#=5_9@LR?U9uN$!nN3x;m3bICLg0a8Di=dcKZFh>26GU(LR(8fmv`}$)?l6@ zb1$#uBa0ANph_*g!wnPwInU{yRcfPa_hQXvbJj6-edz+penvgf{E0u#-z#6ei-{2w zFsPto^k)n;xk#)tsb(4|0gT_i)c9oV)%I}wy+#uCS6SR#xtl?0`bQ}4WG~^Ncdsv3 z`WOr%5#-<(z(xE=w~qGU|K>6x`9b#b`hdl1z(R^XKj?(Dz-`swYh*c@Vp^%azlE*S zp6_ai;^ntgpN!SEtt4KjUK4O@k|yt6YWVs9Y%Rpv^i%ZgDE)>Z?S~dzNaGH-gI0&x z=}ij4`>BiWed1C=`C1>lgw=%XuQ*$nP#4W9D@=RW+oqj7TgDu=^f!=Ves zPrdetW=iDh&58k}@-5mhUfcSxb3dgp9d`0P9nbyzdhlVe{lZZT10mkSTJXA5_rt!` zX@?u(Vc^5jQH%;}lt%5fwBJMC z&wTfqJrt=y^E}$g%j4K|`|0y(o_gbtnN9fq%*Gw;&1&&~mdIHff2lA^sv1?O_K$~< z+7z^PULh!ZK*PxltFwJVn+IQ9G%yApMp=>vdz5|zDEEW}_qTns2X2ozHT-pmEz)KE z=Vvz@sOd@b(Jj#B8}nA)zItT$^FofKb7mX@Lidyq_2xfHtzh_H7AXxHGWM-LrLJ}$(VE3D(U<@~m zKA!s(`HsJhi_-q3vho&A@jy!x4}N#mmua1(5@t@ys{VJ4@_7G9G4xdNSfl9(9vvnH zJJ}c${T>en@WSo7)_T^%ziO*Xu~m?{m)xqmk1g)stAF4q2D(t8Am@t*Y-s2vbRdat zl?V;XjMDXXH)m|#z=AGhA0EOTgdl}t|2ZjHfigH=Xrzs@QNVn+q2dLqNdb_Sj-{%G zy)A+!q<&>joWG%_s#x8!M0|PBVc=?I>`2VU>I3RegUg82soTvf_vIhL8}_(!nrAS#skOr8T?y__6@`CY!9vf zeiJ-;^=^5!dXmya6IlF&c|4h6ORH|7%;NI?ug3ZX$6Z;N4meUUoyN75DS+)MSs*)r z*{)Ldp`<^1P(H97Wknga+E+tDhoju@GNb&kaq7n7m&Le#I1?!NQ`sc6b&j6f8$UzE zMn&{aR*N09vfKx9zSX&%^zGKU^GLdHMDOviQfUam;W!)&w+6r}tN+8f0d^jGSm@L2 zqQzBazxHvE4UgO3rvQ2Q9<4A00C}PR0_1@jISfi8h>znN&VFmC3y_yL1BJj_yr7{V z2Vn2w&KZEjI#?cg5Y_0(Va4N%+dz)|djN+2KO9z9{y)9a|I{J199pk@kh%aN0D!=z zlEWi)h&JnZhoSS?G}tA<-)Bb58x6E|cXMGdrIBS{35G{^{&m^QEN=tsyNkK?l*LN6I4f)7Ba6*px1if@10 z;czx*yekPg{!2_n%WSU?$`WXmd(u~CBpHn>L0RQ%ZKHwf#u{-GOHIy|XF0FD?6MS| zpK&b-UVqhCvWUgCMG1D(;`=kk(oxQPw6sNh<)<^9Q)KbtH$i+vgFaDiJDopKbbRv zvyoob_)x5g!DGkErH`qaD94rlIeVwg6Cu&W3n6&xL){x*0Nl!(C1Kq!YczLa(ey=T zuV5k4=UMg*Y-;3zpOFf=tl@|hewrBRr$EXDiDS<+X*z5sCq*U9F0JTmib{!LK#DfIzEw3cj(?Rchok+W+#!a4m*JF0Ez7B*t%BL%e?4kgHw}?OYz|tL@Rf1#Zji4OUkC^8F6X` zr$O{L`>AL?o8iciyX&TOa~<;_9>cmXqV6!C6&LxK3;bV^1gd4<{TQgq;kX)F<_lT* zhTA`o6~!yD2}T}f%u(v9T~r8b>|I7CEoxy`)7$(>($q|6Y(wr@0#xs}#?6p};@Xy! z_x!W&-Ck-%@rALm-oYREksp+ohz6gB`pep4=I%WuyN*0O4P8HSDooeencm}8W9PD4Tlv|uAevVuxs!8C-bL(;_(5F0pIXg~yiQ#NaNkSa`iH-XG$?2HVO==9}Ggdm`obQtN z$8*x6%2Vnh(1)j3F3);Stt0__$ooh6Ma&o8h0U(nMnUV3grkDk>8%dJ)tG&`q%i`K z&X`P1jvR{Snu~8WeN$YnD@D$pvy8D4{Pb24#mJ;yD=d>{9TjQ*79ZA_UREKH0nJ=K z2(mNA3}zG-;w}SI64`7I{?bd1G?V{q7Xm+=MA zCt?pB3?#@_>b*13Jl0GR@3}Ycerliyh-4594Hv(pxlT01^=KUaofeL|DF0l~_|L90 zl@oU>C40NwtCm46%4N`pxJeo{6+t{AS&#h}+(r3&pKu|_4<+!p!qj~D=S+^$N(>@! z5%t6KCpJzIAJ+=js;f*|cz)zdh&3u7Z{scy60X=_&R#zedWX{ycBd4j;6E2}shm|a ze~J#QNH;Ua!WNN~HdacPc0bK4teU1(ihN#+;hFJWuJBz-CbFoDSG?o``^+JE_Ex-IC&m<#ww)KILZ8x3#{Mnrr-(i3UX1M!`!6Mzt zDmkbA;M5!*5~rc6Leq-MF(Er-;3K`0CWlDHI(NI9u_=PBW~dR@mW4}t(J>?uKZMh^ zxTjk~LO8=LzL8lVc{RsB=1KDTij;Tv&|G)bE|I60qn5$bv)Hwybg@yIa7Zwff0WhCmzlv|zlk1m ziOb{7NbbA3W8#zdjuTOm8I^hMGmT+bwQRJ-X&pc8s~NsgdzB1`HN5$rI?aK`N*|mC)$?MlGG?c%3Z=H>Ot3CWBhO+Y&rGD46 z5YDRR#>;@yZGSbptZPeq-Ru&DITchC#vjMP1bmJ36;1W2tgAIPfApB=*xjffkB?1f zD%@$Q0YYQu*k7fK+ufU*!l)~|*6h%zZ&gWET6K(>H8S337hto+d${r{dkB^7N+#d1 z!1(j$99f(R*YO>rjd+tFpt#<;&Dk@W!Dg1!JmMPx^$ll1=R1lss~@Mt-MAhAZ0739 zQc3XQ`2Hx5{9jSW{}dMZFF@sg^^gE80NIq}`X8H$+@X#v9wElJ2P&hSYY#|k_Jh?x zbG4y6!FuLYkISfrWr>*+j!fm_Pvr*lbW;1@mrx=+kXNvELHIHV^K74?rk!JIFr%yo zz)??RUU{C3)EdjMpZsXEA4t)WA_Vu`dXCCaXl(uX^wR3zp9!ng?qGn*bz6;oWU^Xn zbhMiOBEtu0mm9|cJt22FV|#xWzs)xegJ5ZE1-x-Rsb9K)wQ*~E?gb0X8vHl_O$_f* zfGvU~#)XHsR$26PQ+GSe6xIQdru2lF9*{jt%dD1*jfl4P6p6e=lk_1sSqYDT3^Hr=_kqHfNWkX+0JI)!xg_ZpT8?z9n?f_3LdRB&cJ&mS`WU$TDwZ1 zdif%Nds8sv_Ht)elfn^a;PcEYs9X$TV!s`D1Oy{j&wVxT{afr|FO_%Q<&f~Mwo5WU zxi*O5_rqC%n9=D)WxwKZ5L@T&@Sm|OD}|l%ZK;QqRRQvcHpA(uF;aL?17|3LKFnIg2(qTLLDFo~-gkmnUuYud&i zM=0A6d~>c&pUOAf*#B?a5CWEvK9(CA^m$60hrzl-%4sf^~5vwS05mk*C}W-bq_XMV(|M_i3h>kV}qYjp$1p?qb)7E z3L6^T?L0xdy#^aT{YCF}PmG~)%Fk~dwsJa2{pAMl{D!=)e5JV44yBE-iQo@~Ctc*8 zZ$D2qXoC5AE2U|VK*ZUBhg~gy5Vu9ilGI&f{)}c%W~hYT8geDG*O|DsJy$QGvQgDI zI(Di2x+-;kZ$$34C9%%Z63P~I%fJB_lf48p1lR^&s$g|LJ+NE)YP}!njz|Il0A zLp)@&=XU4VdB4)fVr`0EoN$3pMdG>x0|&@s|H!((ueAE<(nF^32aP3!>Gr;eC|c^P zpKAKqu9zhC%GGttpg8Np{9#mnv5S_B{JZ@natXo&ajcc`cAve%(KUr)hcR4|{sAfx zcgxo8{6JX)qdH3&E=AazN`qQL==EG#&XS{D0v|g-zB@{0u0ua{?}VQbBs_RcK`Z=l zYvZk-_%W=CoGg#E91j0`C~3G4xA)p;y8G&JYNVnYxAuIUMB;cOG;y1uDwfP&TmNCt zygpR;-n*;J=u+lQMQ=hK`jI0yRms(sXsZ{pd&Ac?h)s6n5Ei7i7D+%9 zdBNzeOGLbuA0e#>Fj{X%Bl0>P6lTQwpum3?;_(eN?);{-}SlpC?V$M=(8SY#Sc@N+lXRM(o z14pb6jgsPeS3w1cS9c@IL8Wa+vYCG`$9a*ZCjDRn2AccJ%Dqbeq-)=S{+-X!3iU?E zt5THzfC>ezJA8OBZ@oF+RcqQ+BR`Cj+~L4K2~^7!sYi>*MdO~#a@ie9d*V+#^sk|F zHYnDDvnG_+G2#1AJ!~oxnj0wOjU}Z@@tejh)HdL6|86D1XLiNV$eDe(T2G(bJa9R2 z-N)tr(qp#x^&^*-C^9FDgurx$I*~)HKVW9V*|hk7;ZnJ;LV3hPyPNVXCp5=Lv&?Fn z=(Rgnl=GV`xuf1~_lDj8wEJoHJ=N?3fyZXZb7?V0H!+ww`#tB-Fh~alZCrQyeYfzS z#o|a0@)tq=_)xf+EBs=Y#Y+0L#|GHh4FgzAIeBG*Op&KK~fO6-hCP-Vq*c}{r`5(I{UxFqYpGup& zunZa^I?N=A_4TzM(1;N}h+CM{oz9Pq($B76%@sRGBWA|`OnkQKM#CcftIH#PzF@Qd zxP?{&&yeI&-;?>tvO0Bn{QCf;Y@MfPA@gbQ^)KrmTVsf!_yM4WP-cQH=<6`x=7BDP z3BKWbp*Jm|G=R}U1xcbcA{h8)RBx?t+qso#A`ARwl~y!DZ?OT}D^ZruduQ4S@BbRUL>g}70D{88xSUpsV)Mae<6n}~qdo$L&U0Eusq z)O|Ilr{jJ~=Tk^KroT-7bElh4qkl*4I{Q8~OWAbm7x_-a+kD)N{#JyoG?JW=Up0Ql zJ>lrFiq~UKK9QU7rF!en12pfi)c%pqyR#*F28sMQIzcB}Y=xca4_{;=tf}X<9Q~Ev z^NPmYl9yh4cE4S0a55>kF#0rXN_a%;Wx2^4xl0Cuf1((eKKgK+R`#CHwAI~8RoHqk zme+B%*n#&+iuFfGcIi(6m#8Nl5BE0%fFW!n+RqllFS4ChH%E+$se`rt-lK#I;b~@D z(H*Hnui1iuN1^*m-h>R&*~tABd>5w1;)a8}Rnc>qZm$q@QWQD{xm%!^WzNCfHibEV z{dWC<_W;AHxFDomxLC^q4Nk7#3EpiiMb=1aFV91Rl(Ux#d`D5DGqvsj@3g4T4maK_ zEai`=u->+SYkwq8eZ;Y}1DnSs&*t(YOB^1EeVKT+QX~Il`6gq0xnf?r|9$|Y!8anb8d;2&35UJQXcSFF2b6e@lL?07>g$i+|tacqM( z$QZKE-#pj#qt_|ActI$ksk7W}PdUe0Dn%+-+0a9|%P2x4_?hXKK%Cgx!E{d%@VNzH zLoBXrzo?=|7=8WBQfz4(3fhmbde>-gIK>qs&wjs}b#;_zC?HVBuc&tMhk3qofOY!+ z6CIk;VzmiKMd(smz9k0X6GF6$E}4xL*{GkZDXcG3*2W8%O)i_xefA___otY^rtp~w zASjINWo&K|FKuXUT1pDIlZR6NKNRA$6+Y)@7Z~fVed6p z$&g7cLn(1AvP$$h{5EEGXUO@!>~R7r3P`P}z!XuZ{UAw#`&OG}qfSJ%H??DgI1Qo% z!mp;7zw6MI;^Er3Ww?Sl++-B-0i;EQjDyS4jEyl_ED|BKG56%mNFW(uErlV4gr;fP zmG?Our0JZ$jPY%d>N@XfmuOLbi}}mpQ+q?@dBWU&>1b^bzb8uo?-7A)OFNS2#3H?i5v}~Rsjj(VF66;b4?;X3SEX( z@WxDW(piUZPZ$NTzebK{k7MkYEBCouM`923@+UrHNu1FNf-EHLG=ZkXsvRjmki$pg zgJySWxs^$yNuJTZaWEQK0P+bKI@0M;d~-@2*jEmDMJuD-*v=s11$cVbPXp~ujAEA} z$sB|mxxD=DJf+jieVyzzgoFa(!-f`xKBOy9zp|5d zUq%DaaRl&+u8di(A@RRoQS`wYj&lrEm{tQ|j!k3La0(l9HQuFaL1gVV!Q9QAewTNm zcmibI>~7hRbJz1;sM_4zjG)qY%Bf_$$zipq(3AZ*$+we*zGXG!2E$6#gB)&{z_*`v z@Z#k}nsbMn#x$O9)RhWAi%aP)Nva-ByZ#f8;6H^2|GBO3zu}NKq#1yM6AhHcD1~^6 zs7FzExx+W+U=08h>j0T%65f2hGMs&|4d4{3W5kfv--UXsM*sqJ*S!7~*JbKj4FGyn z8GS3&Sx8|~><98))=N=%l*9kX5O8G^JVXUgx*1opCwAFyYkylHzSC(J;&>NpkPP?^ zL;UknK!c8Tj92Uut>{tuT-aHTwZD=7#tJBZbo<(lej|#KCn-tEp|=}!L{hiziX}ye ztKmc%G0&m~U}OADA)Q|a!S1*K)p_Io=I~G?=+b>8liNfTI765RpnrqT^A3Yp^ACTw zy$pd0IBJjBOWiCw8TUU1r$!o0p#XOmOxPP_H8Wb`rw=;n10~-odF@rV3^%||M&-6j ze7Gat%}8#QHJ67t{(2+_h9O-6CA;6#4n@-~B+7|AWPzexDNtlD^=8iD7AF_T_c1)n#QI*OBWkuBd&Ev45DFq`9{PRMF)Fe^8KI;vBlL- zW;G&^L59rY94m%Z1uMr>G8yxyLQ8qgi9y8m{IdcTqvYe-A#>jh4UkMSuNCA9)AM1z z`{DVIVUk8l9Yt8F8Xl0dt2EyZ0+_hfT5lL%5TLEB7sSxx#t_os+E3*t!faI2__n-( zTT&NrhScOc<>U4shy3>0`>9t36Tv!}y8v7Ty@Bs?jykbZXI+68(cQr}`Wx)3{=Oq~ zIeeurGi2<`{sCw&5_mq$kLa=?UqK@x5(7S^6OpCC0A_qD^}&E|&O=lY22nkn3qKt+ z2w?0kt;!B53@WV{O>QVt{q*$u;?Uxy2BP#TC1y#k{RtYTcbrDYSZVE_$vhgQ4E0Gq zU>b>Ur@brV?b7?}{6&qH!(#u3%;EG4Y*a>icF+NU=X~3Re2{azR{fEec}-by;n9Fb zGU62p;AA?!AV3>=49d-)-kk5pBNT!NyJ1EVm;`aw;lx}<4bSrb<#oQ6GYwmt$PolU z#~ST1v!p)>lwXg*Ms@0a!5=!+r~(H+;EGWvS~&f9#cF2TNIzwp%~wSmI}}IGX>E-E zVyk$MrpiTAy}s(yG@7QMZ`9@s3FTHAwe<%L+->YQ1Un(zL8VAABjBUHOH85P)5#{? zwYX`Gs_JP)TLg@JiGtjp74RCIK?aFwioL9;Uz|^PHeWyLRW4P zPa~)4Kk!j9;4?5c0O9~r5Z{ypy>N%lA;p-*N7`Xjr5Q79npqrEfbK5MViDn8&xMoP zZBs7TP-`FSNV8t?QLB4UlU@&*As9bclgUP+zL*#peoDI}E}g$W+g#4u9y6As1QK-8 zJrkuz#|&EO^cRG!gxu`wO+Cj5lSV({@)OBkaYEN|VK3Iu3eL_Ph>)>7N=o3P#7dyT zY;m~s+y2y?%4^9;5;He#lhEYMuBMnPV9r51#A`OtT4t_kd=5l~c(QYp|5a^a@Lp$W zX^cOs_0Ea=r;Gl%WTynBU)pH1*33--OxS3{vrjab6yV-9-%jQjsD`nT$ZOfiH(O<7 z*(vO@L^d$ap+r3x%g$OI|52Za60S6IN}0&@kAp2{?)rZkmVPhyGK9fGdT9Ce+rRR_!-3{j$+V}xX9**UZ4bn4X0#O zV+Xuxbl#oRp*xO}8r=3_G2jD5Sq}Ev4^fjAGC~K}|bAuZ(%;SJJO_7+|cS+|aq`w%M)BI+8Mm870V$ktIEhpXL(HA%U#K>{~%i=Np`rk9n|2K5E|AsaH-&+On z{}O40qyNuFsFDak^+a`PGSpCAl0pkb*KO+RI?l{1Ki^A-96J_#&UREKq z3K;nb12WV}y2Nj$0Y%`EfP043kuSD+*^|W-qR;|1{Ga&uzO_SO06T1iy(fF5 z;y<8%n-LC{tM4xXqdwLVhgAx_C_k}~e$z<*=X8ObN*4io6z|SzPv~1xEL%^r?Z_q- zA+3U0U3WmyKc=l!U=-m$1%>u!zhFs>jCPmC#@-P1fbnh(_$Vo06s+GM=PQdYiL)Am zSVMANkc->=$VkL@B1s4gpo; zYh&7`vF4NeQPl#ohViTDFz3ELX>bvz@0d#!@Q=EuMy-jt*2cwoPHVHNr+Z*u_>D9-)iBZxHWfWNc8Qee8!2V3~fIN)%A8SUkrONfFjN zefKN?e=yJ~%=|P*#KU?7;6ME(m@xCI7zesiP-e~dMpScUqkKSz#Kg=i%Jldd9#Vwi zTOB+Xm!%$WR>Rn9^i#JTO};48-CIwy7f2O3MnS@7s)z-i=8cV6fOG+MFo)}TUAAT%-evdhJZ>;6KhatP=cAs^?1D=^Y+y5n;D-kHP)L}Ic z9pwlsjmiaP1_xkf=SC?`!3v6ND6-}}c1n>?%N&nKnOHG{SP;q}x zLqNw$fR>td`gu$=a<~md6XeyDZIKVmy%szvo!k4$F2`Lkvtkj^;{%WnSEo!pQMTVV()JM%UmPqm z2^)!L01#JUAn0blWn>B{(h7RTvyaB1N4ppL`!9?RKn{k`W;g+-S{5tqd|p(!?P;Ip z5tnyNon;Vjc7@fzLK5w(hJYk3Su&J}dh4OM%b=38loT7@$B2$Y)nn!U$LtmvDe~wC zMkjd+9`*Hl=KULpAsT7j)S!!1ksLbV9Uj#42UMFx|8ntu_S(>gdp?QP@08Dkil6g1 zIpC!%!DT?yO;8L%%uGL4AU!XD795Kaj0nOS$!tlW z;=7Cqn5)OpYrqUkvg0V;XoP@i5tom{*U3m0wz+su*xpw(qFnTtcYp!Q+MPQTG%?k? zWBvQhZ=h=$5o~O2nPTGGq~MAUgEsW=H?~Hwt>3h=f++CuJ=nqAF%5bY$GmUPkb^#m zkCf5r4Q(R|5lY5mrRG6#*5W7AqtxZ!#?)_=tb1jG+0ue^z?f`A12x{KB*R2XoPAmn zy5@0_%3CwwO%|Rdyzke2p(~zWICN((wB5_jJ8u}D-nP%%XZ9fs< z@ElG6O#vaXM!m%tp1YU-U1uZhT`{xV@@ULudzQkeFA)0SQ$;|3DsB(iM|EDQi}ugG z$OAa#H|i|jw@Syae!l#Er!uax2YG1X9JaMoF{n14-=*#+THt$Y)$vHRR0u)u@cAs~ zDrgD56bS<288)wOfKweU*d!|ypt$mQyoy!HCz3eT#AjicMV7pYOZ59v z(G1-6p&%=Os__x7y;}dy#=S)hp)Gk{3p_1)JvtPq;Uh!o`AZP$evXMoI$%Y?u_sz;QRL*H!1eKe1TcEcJ|k=b!v z{uMm@li?Sv1gs3plsGl`f*108qy6QF4To&$;C+ub}&7_}%h@93W^eKM(#r0w(&}|nXUMM3vi$+9_P|T}H zP5@nvk@8DLWPOlC453a8IP2mQi62SNfAQ?$-5K1r-Hy`FPDsHg_L$Y$1-ipm4?ae5 zQjlU-I!Cgo)#J*JZH9A?{{D3 zV|>7jSxPzY8YDSNJvG$=2gA$6?N6R1qMPh%n-H_$_+Hs)H61@PX^4%@=s|az*A@giBCq>HY9e8si@D8r6fcJY0?$B{4!c}{+63E zT38v6K?OE--_>AWAKb}~VbL`8cu>qnlvYPp;o+Tc6B1JM3*WGY2D@%K=R&z(t&sT3n#LrwKU~yp@*~ zBMXJq#^#o~T+LB`V%sYst4=)I#0)zqbkXY5gndXrp7C0}|76a=BmJG%ru8{}kiCfs z3-4xniDxU0s#FFO%anKamt1{u+;_^OoXUL>Desv@8%b+l@4bGZyPc)u_Z{RBXKdZa z3U;7wp#Zt(OC(+k#4OK?ZlTz$#%0On`DY4xQt+p?M|-5Nr+`YC3;i#Rr{67ou8Fr~ z)X_?@Qv5R88RwHyrhe5V->G*b-wEGIlN<`(5CT|RLs+P?Yz-I0er@OYu zr-p;%9jlquOlnt717FfG^7t&7>+J6A#De*U_3(C$W5EGT?H>l8)633qEm^41`w`lP z7iy6)N7ad6?-U*91~4hvGHXSOrsWH1CH)L(q!xCGclPrf76E(VxZ4O1JYAHoYh%jyI=3%{(ZEO$tjqoV<vSr+A$Gz(k23VgFWuru4JO4jwg3Qg07B*)=0G8#j94PF3&5A&`|ja8ce*?|3jkH!DL zApZZ2Lw4vA_?9OD)$-9x-mp^D_y+J~ci<+t|M~H08qjRr&;Kqyl0n|L3w69MON}4X znk6zG^>aWz$fS=vL-$@NRr^dmTqKtaAYj$0ZvbrL1%ToskBUB~0Grbq+dc~Fdq1lM z2iUVtbYi6dkc3xLZS?I$BdR~;zt;t(NdT!9c)JRW)>)f3#t1wb+OMSNJmtiYXKi0X zsh2N)&vmc@8bj4enl%F$7>|970>xD35QL-pMTf-aFU?a%zw1I4fXPEv3t(Iv@(& zWAfJf7vMe903o5xqxrWSqA7*$0MIk{-j(08s<)DcGFgKXy z*f@%^X=VIF%zLZnhro3icJ7=8Dbx@Fya3R=AGKKHFi{2(_b&pfwj8Ihxsd3B?tY7U@2++w9BwatH|cww+IdP_QLD##qOn)8 z_f#1vFL4x}E)<;k-C{e)ljks{*)#E$?X#D7thN83#?AX1c|T5_uM5q9|Krm>?1iQ9 zYgw;7xFFxL?ok&y%;6aL=;a;^I0Q2i1M!A{RB6~1;FEhZFilFiql$PM4Pxinjbo!H z&N@sV_a&5;79ej1A_!mcl#D0U%ukQXz)92bu^!tB14r2AJoJ9%nvkWSZPKDXyqLb3 za%k4)OKJMY!C9_kN>`w$)~in1vOVK@nsZ9+7xBoloThe)u9-HQ zoQ`L@n%@j#syd77{D*5z@L3{KKD0QvsLq(u zgXbv$J3#-6Kl7AfYd7Rc1j(|-3H(m?x=~_ct||5a51J01DZNKhp0$*Y&0&7P*g`JO z>$<(vi8!r|d_9$PQo1~*121Rs(ekfW=d`{cCYtr)buKz=+xZD3vZeA0c3&ijuHZvV zR|xWPkxHgy-av7lv9U}+@O<)02!O6^;t}t^;SsJ1)SVJ<0nl7mUpkI-lIG zTorefQ!}74Fd9dR>ajjFH);Y-!p8=`zUEJbfSd6o{|?v%>s2O6@}#7Ii8N1RLGex?_e~#YagO-y&d)1X7jWQreh~wT+~SRI(Zp zWjqOjm*=>z5ahiyHh?Ylhh7u^L?t^Bpl4s))S!4mV6^)CP@7Bv}tLwY%p`G(Za#^ z+eJy)uD+I5%=ZnH^wi0W@=-qv-({b?+02Qn-7u!NKqzT_XQrqC-&LIcqj;L}DD3qf zmg7n{+3NOhImZd;xzKPmP{`$rMhO+DTC3*cIcP6Rt!+hG3D= z%4Y}BQk~fmnAGPdLh^EuGv4^NrOw=rc}Se}QvKOhBpSZU(nz&xwSbAF58Of0<#U4T zqC|}z>j5cd_s$dH@IZE=ux$+;X$7Zcl`*wF3t9m(EYb9`?VLK}J(Z>Ie<@!U}gjZO#QW`A4k=Zv*76GZR z=sUy_z{raGR5}!gn)MTpWwt!&WOTMENgr8artSFZltxDi^xU85ky`{c!z%jqHK7)& zydSZBlsT>OPYLLYu1nuu*HI)2y%Q*0h)H}0UuSB$RxM^^917Gw_2eOM_fb<=iT%ly z?bOe?gFJ_n4k}e@P|U|`ViHm0W6~=wQdpa@N+61_>pv#5`HY;8bCR3;K^}I)*44Ie zbT$^2#Ugdhoiv@yR9Yx>Y7v>6WRUCx>DL40EuZX_;^)7#c~+C4K+t7oV#%h^iRAG1 zCw?qu$-HV*geb>vOn{7*;9nUX=@h0RE~rYt-NjJbOEIXvcPOiMl3_UcG0o!=ptP$j zH81DP1+ehXbg{>`mcMfDb`?6jE6c)J!$uxCub!{Vv9{$=$4MZ`iOmF>q411rJz2=; zK)9H!OzzxgnN5*0FQX17iQ`2wX=?E-U~VE1$w@jCW!?9RMHM|-%eQ?w<8b*Es*c(0 ztJ4POC9?N?i08vM4t6Hse%W6+M&-8lG%R+Izs6$yhDS-3*aBS{ll5LT%eoUujeNh2 zY5I7N^O`*!2A31G;I3TApJQ&Xc1V%ZS94uew>4a3&Wcd^68+F4aSx5`cjH?m&h|7{ z6nnL+%q3z!mK65FIFhIA%EAR{22gUI_$*?URjC3o$|BZBd^WNRD-&y%9a{4a+GJta z^+SAMwWd!zVah#0&Of)mQ@znOzfFoG*>9cuqE1<4es*0{8LX!|@XG&;Y*{ZvqlJar zKr_TPucb(g{d~2$Wo7Ba>pem6<$8?DfRmXU#%b}$y{bwL1C7u>nx}}lcmsXP2ha&( z78w+v;Zc8IrQCJD<77epYZewNRN67t0}8!|n3NyWAA#CWiWc>IZa)I#N+=rfb4&4l_Fo>VN(J1JW=vwCb{THPO57Zz&>VB4f$DZLaClBLh>Kt z=J`I&B#>Er6gi^_Xea=jM&X${q4R&Vch+A~why-#N$JuVkdhH;hAtVTyE_LEQBnly z5a}*SX~`K%#X%5;PKO@qfrpS17$gNLk@p_g_ndXkZ|{%qTIc)$um+gn+SlHny>FR- z1AB``S5pg=v*G_@F#{SqspfzTfOys)@G#BZ!&y7nWqo))Ta$(!y5b_A;!~eov1fYt zVrA7%!C0;c1TVty!x643I7ODD>Vcz;p}%O|QlDrdZB>;eur47W1tSVo4IA$V`j-A$ z<}!BUNQXG%FypU78Nq1RdeJP4eFAl0ZMN=g|ZUlx0dO$&wpe{F`+=OiMk-tKnypqy<00bb~XNzh-dv0BWxXNO#t>E&Bo8s-zEz zeETc5#17#$;p`3n(W91@LnJ9R0)|qS?+NY`tI@S~O5i@@v+Ao&;~2K))bgt0sXIr8 z9kl(YYGc|=3oo&^VO@{m$nYF{1JWYs=(!$SL5(~r+OJ|v)C&ZpGHe0g!ao2WZ2&xE z53_eWRLAD%d;6>w|KayQ&n)0)Qol z!pUyDs1qo}82+hK2st7?f&&z&yWMlpPopULX&yde<>GdgAdzFvHz}ZG{k;hw7JFE+ zsrr3mgG){N2?vk%CQHyQ(-b1oxEv)`VG_QVm`vVjB&Y(SXBnD6n|c8u!e?fOSs;h0 zDjwP?<1x6aFp|b;s8f>ANdq+vSA2!~R4bUN|NC)A)QFg%U^Q9TB|f*VUB+DV#B7VXvtNL!6~-Ip~8p$X6hSJRV0NilTR;f*veF5H@EM5+Y($33uuv_5d2sM++Ah7xfvba zPv$7j#nUOXH{BUdxOU#)G*oS@v0zgfCp_Qjn*_c2+PpK9o|Lr(xMkoQ<=`CeIDRNu zIw$)Gh*N2uFp8nl&`dU3l?kK19mjt*D$yGkbTD^2ptISKY&%P#E*2JgD-dba^Bzf7 zG0orY+=mYpnk506$riciqFnCO|>^IkSKib?1_PdMC=D~$Ie0J zz>I7k;O0>iQ)R4TrOwHAns|{8KNULpasNfKoG`9-Q)Ty_2VZt$346krI{At5vH`S6 zW^v%yva;ZK&a?pa+v+qyTD1#WnRVvZ=g9Dnp*#KVhDE~@&68lE`Clf&7>+~QW^?9` zKe3!-ag?)Xqw^Fo){wKVNYYq5*y_i^86nk;urqe!BL#2J#&Ace_a4(1>dPgo@q_`$ zg$R3z*e&BgGU62<;hQ~*ZL}=%hVB?c+g9=`e9z~=H8w{xrsEFt+asl~28Z28rGs&< znQz;rw~vYY6XfE0v-T;FFOJ9MSxody=W9=ux>wR=+ zHrJ7p3OLPRjb_g=QXJS6k-(@5(9)&=mhNiRHZ7gK$Nf6Dhp7BNM(R*)FR#yJ{ZYzg z5^WYb8EJRQELq=H&h!QSxKQ$!z-c7b?9EfX(TR`cjp~-pD2=M)|8!z8Gbee zcK%}>`1PNPvZJZjt}9K${~&23ZW~7JxU}OKj%pgybY+mzRZ40WuDz!07jM#EX?cYT z>=H7`Q+`m9TdeJpahPJ=CqOXl2SYq{jMLs2Rts5VrwD5JhF|ML(8@s$-zg)#Lk z%3{nP_HU*l>#;lHdEYa;v8S@TR{QW<^WEw78{^j_l=DJ(5NJjopS`?ie*CR(pk$3| zFc(5eA5pKzD?!0V2`9Zv+)OuBF%uD-fU6etzgW7xexAhsNFJRxu_a!pM4#vOoj8+D zb2Bk8P<&u`sD~oIJ+4pn@dhz^P}J3?EF@5-090iYb;q-jkh?IVhxQHBclFDJT-&@+ z)J1uq;d9wA_=1p4t@(WHIu~J;pSHl{9|o&f4Sxwu9T7F~^U)!-ooaOv{n5nGqJI7z zLMHFzUoP({>nQIRZ?~k+3}Q59>DGz23!as`qw4#7kEW-bAPMk<@yrU1*+}s#lV1Wg zDGSgG`P~||)9U7mJipZqY!m%$`Dr1n)|u7Z_yhys41yhWRS70_eT0pzqg>M2*n)q2 zbhd9Kd-bnJQ}mwFDQP37~nEVOUwRx<-YTr=_;$n5v0vZA#Ua z18afU37JVqUUhY2O^q4*j9AKghF4dnflzQ-jVO1ip$T+u20&lrDzhHlNC6i9%H;&5rp)-}zFWh@Gs;EmGd3 zC){=C54xYcmxb2SZFJc+98)pWh`0VMX-wh;e&U#cdFt++;dBaGx^cTN4#(9SIiYv6 zvMo+odNq=?Gw{xZTyS{n8u5aV}LK4fk4&y%6(#*)$S z-AOyAhxrO5Y83C{NFN3(^yf@~p-u3j$8a>-3ccCa^I|LdyXu27g2{Zh9<5LH zxqe$rFyptlDi>7Qw|?3$rNLXeidwV;EI&F_DeQXU&}Qf?TgYV;8Jo+&S)H%Kw8gEf z=v^3G_UgV4iB;xaER4Q4*-{;(4`VYU%8I9UA%w*W%ed?xm0QH2C7Z|}Y#-=K-%_z&=#oct zf6E&&UDSLZ&%o`MDJbrHdn!$haaJXdYK&^bw-2#a_<{kx8!?_Sb$Jrtl~9{?5Y*9M z4>E&}shzk~ux$8${NA&35?uDjrE%1@P2UN1F-zio?HduaJ7#P4alx#p%}l`nERf^D z`n1fr)jHvD_|xAJ5N!q$Oy4q+Yy^uUEM4um0@hT_$%g4Se(P#6{p~IN55}J+9_H$? zJbEREA4dSBeN8j~E=2>q(I`Cm1fZOMR~~?chv@$u@S}E-K+E-Et<9H)V~!t2G1O`* zy}-fsH}41fO3Ff0k6dJS8vwErPmI2h`S4<;8=v~)WR^FF-!cF~&sT8)zas+dkM!@m z&D6#($3OayElP1@YSVqXzr4&_aF&@-gf}$*l2v%tNg}C*){N$eyQATFD$C7D9mXS8 z=lE%y8`V)Olx*+_uesU!F3Wx=x+Glb=Vz%~o+o1vu|;(A1J5ky8#W`n6UI!LQ-zB@ zK7OcS?r!IwCjV@^t?Jt9OKe?)tz(HCfQRzj4^g-HK32ReDB0p+_|6-Uyh)@|v}?$h z-9kd^@u+Pf4<;7M{VeK-~G_9ClRSEGNQ~$oZ!6-ZvFm!0N#pQ zjs*bMeQnp{K!UHJ$O=)wB>nfR@Ij#*QGb*hUOg|H*IF3XS(p7Ohfn3pX0Sn2f~Mnl zY%&fr?`d@oB>qDWM|LUS2hq-c0bc9_86i;@Mx*#9AknKOm zZYBkfiBZ_>#GeM99jrLa)LKsT1KuCh2jrn2=J47nN@N`I4bXZuEBR8MDMB+qEvs}; zCs+6$vlW`aMwnUFbqawf@d4fs!E4Hbp5bSCDO!_<6U z;=Vpd5l0f*)IY0AJdS%gaYfbS^l|<{HejMNus1(uYrNp~0Ieir+8NU}4Suak-CXO1 z^>n^S72X0DFm?-b^ra)fB9B!<(nZ+7GL%$fDtynuYSi8FL)-^P8PHh;5_~WtLYc0^ zoABUNvtR$@#$KS6q;Hwt@$GZYYFF;fOl|4IsaTt`MNut``Ud}_K*lM-T?qC~j@plH zjXd%7`~;Y8+n(WzOelI)QQt0|jr4xO3YYWWy} zhgsP89bDZ7;|gT@`0dtI+UKApIqX~ za_Av8luzDVrt?*;Rb%y}#1c2p{9ZkFm*ON216)SSx&}171*|^{EP<0&fJ~Cl|$kr9XfwXFG6_`qXpWiP$ zy2o}H?rr=&Cf3xWOjkz}DepvU=FTt<~jDvZ#ugYbOrEt1)<*k|cny@d? zG9SA3h*JDW$IfQl$6^k}e9+(~Uac4-$NJ4?7K;>Xcf9dLfoQ|g2TK>ibTk^Lzl2i0 zStc6Z;&@-=KJ%R8@qOxJcG?thdTbK?>{Rw+_Hs2-$TeqXg*0EPK9Nm#mp_xtv~jsw zMhK?zcU^B}EiuVValtzCWr1Hl>$QoGRm?U$?m zNnAqUC5q~JLxIs9-C}uI%CJZSf=?=|x!g%5>_HK$E&N6}`r~AE4gYhAEac zibb_4bgXo1y^t1~)+NCk+aZVSz|C~rbUofa7oY|F6s2R7AyW-GrsYfOhkaQNlbMN0 z)2|5#UB6E|&qv4}{?N=6*2pYOX(4v1Bq1w%@LpXl-w*rhsBdSYMa%Hm)lhOI(teP( zvh-%A{v~hC@c2ZLPu=Sf45sA02}xOqE>kt-yn68q+tRNxfiK7CUW9|4+q6o{FEAh6 zS{nX=(%+rWAWzuyy`W5ck4F2*X6(?{m&U!+h2Qr021l|)RWHpa%Z;k-1n0=Y8Y-mQ z0?8;@2L|)f!{(IIDc1n{ZkCs(mryy?YqPR)(j-7B;6_vhRCcKg2$*U%!COziGdOj= z^`;NeuM!Agl3=YsezMAJjBhV_g^F(1STs6?64%RcVUA0G6u1bu35Fp?qlFL6uao@!kTQo22{%{rSR(w` zIU&X%rnni5@X6DHXtqn`Rd(KR;1T{UJ3r@DCPDp9Ubo83RngY14vLapG;$-q)njQ! zqQv1@n%zt=yB)myJ42l#Qb(Tt!l%Tr;8$-+PGIg4T)fa~LBfIp`&Bu81?m<{!pve7 ztJQz zU98|Bz2PDSlkXw}^+nm-qGv?V&w|0YjIcu{jix9D{Z{G$AYgy*GB3RASr_^B65D2G z(RMNJf2@nEON0Ar%{pL6^cqWwhS$q?z5>6K>$CK2Zowci+<-k`uu{)Jgxh_{NnH*t zgnt7hc&d`u>7xI@OTQ--8|fXg8839hT<+1YYyrrI7qMDVK!9=p*=vW{3oUAAnv)66 z;Fhen`($q=$q{Wbu!=+i=pB+GP%22`s!(-KHkQ&v_N+5)usMgxH;^+ZzHuB{)=&1v z8=GUZ!(+w0(x*3TCrmCX${a5FY5O%wGXwd@nF)LC8h#U|7H+B50Q3n!m(ur_Pl7eA?Rv%1tQzI&2b8M5Ia@u@CPp1Wv< zRN_GEUyVOUjE%~5Y=GpBG;;UcE0(tD#7_bVkpOL)9qG^uAN88F7*ylY53LrplPy=< z{0jJ=6Wo>SyT{V26AUIvL5mG}RPO~O{Y_Nbw}Ti`Q8GyLS+x^alj4Tsx}~zG7zC)O zwIi>>tYax~vye4wyD1whPVT0%cM4ePMOy*?hZPRG=KmL1-4XfztV682$?3|Qz_a4) z;q5MWgVwNyXiKu|T_~^=9{Hz1xvdVDL!lG>SC!-UZ;;CVS1ni53IAhDddW*&KC3_l z1fSk_O##q>*gLz9S6#rA_lN(G2xohM;QkBXw)X%GECs&MCF5dk;te0Xcr#Q+hTrG-l9axgGZ7-zKO$rE&~q zyo>3xlWWiGU!MM=$EdOyLgiMx{rzii@$Oh+ARAzSyDy<-hVvw9Oza;W#_LDnM^W&I z_PZL!%O&t6%zpNXHU8KHmbp8f%>hx(4h$J&+L{2XP2J;$nkf+VlwJ(3;Da_3PP+=b zEetgD|LFnv0A^rKf$lBvn+xt=khq7qFTj`<1)5hb*(a*Y z_o6aAR@GKQ>m79JJ=qAL@z#9b{fR+&kTE#Ky}@M9Di>RDftHQ>= zD`cg+dwh%S2B{9c77jkb4@B+3cPVjzCaf-Vucr$G3d$27L^nR+M>xRY)ASeuVdAx~F^j?~Y zhfkvF>7Z%mvPTc(Id6cid^zn8?(5*0>zGtIO>1-@^SLoQezs<{pd7P8;$>X^XR7J8 zb8M8(32;db5ipK1TQVjuH3<1InCPbJSw?nF%_esiv4fP#{jT{agT!z}{x*ypr^}N3 zf|goEopaV5po@fvE;~zf_r;e3ms?&YwA%)$n277%BukQ`Pcoewv?AF9R#JB|Nms)i zx|=^5$N{9ft29ZL;RiqIK?AQMX2T>4vBZOF5G0`MbSl^Jpiz4C)J!$Hy%P+v0$VpK zo)Fa)GVYiygsQ^hBxnldqOAtCHPYiMcI=Ov>P1G(vr}3$d@@sU_?DsG)!$bHS0vO~ za#JwyhSqLY4m2@}C8!!$@L5+k-Yp~dkbH1{<>Wf z%&bGsRWT@jYZp55qy~(3RgfgGOWvmep`q?2_F8r5Mod1EQ{l^LVW@I9XLU-`>oy^A z681G;kky54x1vH_SUeO32v>N5$6fsA!$y9!0sl9*7O^e66?%9rpla=SUfam}h0K@> zxNyLt6jgyB?0p>)th4G8EJO<;;1ueoymzy*jz|sN+&TJX<~f2tLJ4iwq>)k7!dV)p zh*R}~*&c9*U8u9&q+x(C&XmyV)OFY|xFws#sk1xVBFL_)d}%lCrSl45kpd$-*;zh5{K|=#S>hNz1z`O2{g|IMN{SR{+Fh1tvBiT>gvpg{|;lijez(Aus2s{%( zp|Kq+0CuGez_n}TlJ(SR!T9G9qRwKzC42PBI6RouqLwR8X2?|D3Xs8$ulRD>pWteF za*tEz_1Z8*rXB`pRM_+>ANQiI(o%tTlyip2gGc{}&OD)Ibocc4T-%qx7u!Al{TyAS z#-?2}sd@5B+V<5R(uhpG_jdTIYdJ zRR{;qFiR$2E*;G7Wv^;xJg`MSn#4|TQ&SoULQJ4zLEFqsjV#7uwsqFb+)}o@=GN%M z9nR#7rWzoN{YolEG)%qK#LN3-M)sD_T~%HM`vBez*xeo zU9mAav8M~oUVon|6W!=G8{-+WcDJ~GI4E?_RS3Ny=s9-jki;U~ou(McbmBTedHB2dEdQxf+c%IM=O;tUWdL{da{{j-lPVN8z diff --git a/docs-main/integrations/wallet-gateway/use/images/selectNetwork.png b/docs-main/integrations/wallet-gateway/use/images/selectNetwork.png index ca2b1e5d597410933af0157f8c012700e6944529..fc6ff738cd71b0011b02b9963ec3f04d4ec963cd 100644 GIT binary patch literal 11621 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