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

5.3 KiB
Raw Permalink Blame History

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 (or MetaMask 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.

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.

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 and 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 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).
  3. Push to GitHub. If the Snap is allowlisted, submit a version update via the MetaMask update form.

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 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.


RPC methods

What RPC methods are available?

See the table in packages/snap/README.md or 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 and 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.