Files
2026-03-02 12:14:14 -08:00

124 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Chain 138 Snap — FAQ
Frequently asked questions about the Chain 138 Snap (MetaMask).
---
## General
### What is the Chain 138 Snap?
A MetaMask Snap that adds **Chain 138** (DeFi Oracle Meta Mainnet) and **ALL Mainnet** (651940) support inside MetaMask: network parameters, token list, market data (USD prices), swap quotes, and bridge routes (CCIP and Trustless). It uses a token-aggregation (or compatible) API that you configure.
### Why use this Snap?
MetaMask supports Chain 138 as a custom EVM network, but native **Swaps**, **Portfolio Bridge**, and **USD pricing** do not include Chain 138. This Snap provides in-wallet swap quotes, bridge routes, and market data by calling your API, so users get feature parity without waiting for upstream support.
### What is the Snap ID?
**Production:** `npm:chain138-snap` (after installing from npm or the MetaMask Snaps Directory).
**Development:** `local:http://localhost:8000` when running the dev server.
---
## Installation and usage
### How do I install the Snap?
1. Install [MetaMask](https://metamask.io/) (or [MetaMask Flask](https://metamask.io/flask/) for development).
2. From a dApp or the companion site, connect and add the Snap using the ID `npm:chain138-snap`.
### Do I need MetaMask Flask?
- **Production:** No. Once the Snap is allowlisted, it installs in standard MetaMask.
- **Development:** Yes, for testing before allowlisting. Use [MetaMask Flask](https://metamask.io/flask/).
### Why do market data, swap quote, and bridge routes not work?
Those features require the dApp to pass **`apiBaseUrl`** (your token-aggregation service base URL) when invoking the Snap. Without it, the Snap cannot fetch data. See [INTEGRATORS.md](../INTEGRATORS.md).
### Can I use my own API or JSON URLs?
Yes. You can pass:
- **`apiBaseUrl`** — base URL of a token-aggregationcompatible API (networks, token list, bridge, quote endpoints).
- **`networksUrl`** — direct URL to a networks JSON (overrides API for networks).
- **`tokenListUrl`** — direct URL to a token list JSON.
- **`bridgeListUrl`** — direct URL to a bridge routes JSON.
See [INTEGRATORS.md](../INTEGRATORS.md) and [TESTING_INSTRUCTIONS.md](../TESTING_INSTRUCTIONS.md).
---
## Development
### How do I run the Snap locally?
From the repo root: `pnpm run start`. The companion site and Snap are served at http://localhost:8000. Use MetaMask Flask and connect to that URL.
### How do I run tests?
- **Unit (Jest):** `pnpm run test`
- **E2E (Playwright):** `pnpm run test:e2e` (run `npx playwright install` once)
See [TESTING_INSTRUCTIONS.md](../TESTING_INSTRUCTIONS.md) for full manual E2E.
### The companion site shows "Set GATSBY_SNAP_API_BASE_URL"
Set `GATSBY_SNAP_API_BASE_URL` in `packages/site/.env` (copy from `.env.production.dist`) to your token-aggregation API base URL so the site can pass `apiBaseUrl` to the Snap. Restart the dev server after changing env.
### How do I publish a new version?
1. Bump version in `packages/snap/package.json`.
2. From repo root: `pnpm run build` then `pnpm run publish:snap` (see [PUSH_AND_PUBLISH.md](../PUSH_AND_PUBLISH.md)).
3. Push to GitHub. If the Snap is allowlisted, submit a version update via the [MetaMask update form](https://docs.metamask.io/snaps/how-to/get-allowlisted/#5-update-your-snap).
---
## Permissions and security
### What permissions does the Snap use?
- **snap_dialog** — show dialogs (e.g. bridge routes, market data).
- **endowment:rpc** (dapps: true) — handle RPC from dApps.
- **endowment:network-access** — fetch data from the configured API/URLs.
No key-management or account APIs are used. See [SECURITY.md](../SECURITY.md) and `packages/snap/snap.manifest.json`.
### Is an audit required for allowlisting?
No. The Snap does not use key-management APIs, so a third-party audit is not required for the MetaMask Snaps Directory. See [ALLOWLIST_SOURCE_AND_COMPLIANCE_CHECKLIST.md](../ALLOWLIST_SOURCE_AND_COMPLIANCE_CHECKLIST.md).
---
## RPC methods
### What RPC methods are available?
See the table in [packages/snap/README.md](../packages/snap/README.md) or [TESTING_INSTRUCTIONS.md](../TESTING_INSTRUCTIONS.md). Summary: `hello`, `get_networks`, `get_chain138_config`, `get_chain138_market_chains`, `get_token_list`, `get_token_list_url`, `get_oracles`, `show_dynamic_info`, `get_market_summary`, `show_market_data`, `get_bridge_routes`, `show_bridge_routes`, `get_swap_quote`, `show_swap_quote`.
### How do I call the Snap from my dApp?
Use `wallet_requestSnaps` to install and `wallet_invokeSnap` to call methods. Example in [INTEGRATORS.md](../INTEGRATORS.md) and [packages/snap/README.md](../packages/snap/README.md).
---
## Troubleshooting
### Snap not appearing in MetaMask Flask
- Ensure the dev server is running on port 8000 and you opened http://localhost:8000.
- Check the browser console for errors and refresh the page.
### API calls failing (CORS, 404)
- Ensure your token-aggregation API allows the Snap/site origin in CORS.
- Verify `apiBaseUrl` is correct (no trailing slash) and the endpoints (e.g. `/api/v1/networks`, `/api/v1/report/token-list`) exist and return valid JSON.
### Permission errors
- Confirm `snap.manifest.json` includes `endowment:network-access` if you call APIs. Reinstall the Snap after changing the manifest.
For more, see the **Troubleshooting** section in [TESTING_INSTRUCTIONS.md](../TESTING_INSTRUCTIONS.md).