124 lines
5.3 KiB
Markdown
124 lines
5.3 KiB
Markdown
# 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-aggregation–compatible 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).
|