Services & costs
accounts, keys, who pays.
Every outside service the product can use: what to request, what to send, where the key goes, how to test it, and what to use while you wait. Then the costs, and who pays each one.
The commands on this page are written for macOS and Linux shells. On Windows, run them in Git Bash or WSL, where they work as written. In PowerShell, set a variable with $env:NAME="value" instead of export. Flutter, Node.js and the Firebase and FlutterFire CLIs run natively on Windows; iOS and macOS builds need a Mac.
01What you need, in order
| Service | Needed for | Without it |
|---|---|---|
| Firebase (Blaze) | Everything server-side | The wallet runs, but no settings, sign-in, push or PRO |
| Reown project ID | WalletConnect | WalletConnect shows "WalletConnect not configured" |
| 0x and / or 1inch key | Executable swaps on EVM chains, and your fee on them | EVM swaps use a direct DEX router where one is known (no fee) or show an estimate marked "~ Indicative via CoinGecko" |
| Solana fee token accounts | Your fee on Jupiter swaps | Solana swaps run without your fee |
| Apple and Google server credentials | Checking PRO purchases | Purchases cannot be verified; grant PRO by hand |
| Transak partner account | Buying crypto by card | Leave the on-ramp off |
| Alchemy, Helius, Moralis, explorers, Anthropic | Faster data, history, NFTs, Portfolio Brain | Public endpoints and fewer features |
Provider dashboards change their menus often. These steps say what to create, not every click. Each provider's own docs have the current path.
02Firebase
- Create the project and switch to BlazeSee Installation. Cloud Functions and Secret Manager need Blaze.
- Set a budget alertIn the Google Cloud billing settings for the project. It warns you; it does not stop spending.
Meanwhile: the package's placeholder firebase_options.dart lets the wallet start without Firebase, so you can try the app first.
03Reown (WalletConnect)
- Create a projectAt cloud.reown.com, create a project for your wallet. Use your own app name and website.
- Copy the Project IDPut it in
REOWN_PROJECT_IDincrypto_wallet/.env, or in Admin → System Config → Remote API Keys → WalletConnect / Reown Project ID. - Restrict itIf the dashboard offers allowed domains or app IDs, add your web domain and bundle ID.
Test: open a dApp's "Connect wallet → WalletConnect" in a desktop browser, scan the QR code from the wallet's WalletConnect screen. The dApp shows your wallet as connected.
Web build: the relay uses a WebSocket (wss://). The included firebase.json allows it with connect-src 'self' https: wss:. If you host elsewhere with your own Content-Security-Policy, include wss: in connect-src.
040x API key
- Create an account and an appAt dashboard.0x.org. Copy the API key.
- Add it
ZEROX_API_KEYin.env(spelled exactly like that), or Admin → System Config → Remote API Keys → 0x Protocol API Key, then publish. - Read their termsCheck 0x's current plan limits and its own fees on swaps. Your fee is added separately (how).
Test the key with the same endpoint the app uses. A JSON price means it works; 401 means the key is wrong or missing.
curl -s "https://api.0x.org/swap/allowance-holder/price?chainId=1&sellToken=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&buyToken=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&sellAmount=10000000000000000" \
-H "0x-api-key: <your-0x-key>" -H "0x-version: v2"
Meanwhile: the swap screen shows indicative prices or direct-router quotes, and the fee can stay off.
051inch API key
- Create a keyAt portal.1inch.dev.
- Add it
ONEINCH_API_KEYin.env, or Admin → System Config → Remote API Keys → 1inch API Key.
Test:
curl -s "https://api.1inch.dev/swap/v6.0/1/quote?src=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&dst=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&amount=10000000000000000" \
-H "Authorization: Bearer <your-1inch-key>"
One of the two keys is enough to get started. With both, the app asks both at the same time and takes the first usable quote, unless you set a preferred aggregator in Admin → Swap Config (ParallelChainAwareSwapQuoteSource in lib/core/swap/swap_quote_service.dart).
06Solana fee token accounts
Jupiter needs no key. To earn your fee on Solana, your Solana fee wallet needs an associated token account for each token users swap into (why). The app checks this before every Jupiter quote; if the account is missing, that swap runs without your fee.
- Create the accountsFor the tokens users receive most, for example USDC and USDT. With the Solana command-line tools:
spl-token create-account <token-mint> --owner <your-solana-fee-wallet>. Most Solana wallet apps also create the account when the wallet first receives that token. Each account costs a small refundable SOL deposit. - Check oneAn empty
"value":[]means the account does not exist yet:
curl -s https://api.mainnet-beta.solana.com -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"getTokenAccountsByOwner","params":["<your-solana-fee-wallet>",{"mint":"<token-mint>"},{"encoding":"jsonParsed"}]}'
Meanwhile: leave the Solana fee wallet empty. Solana swaps work without a fee.
07Apple: App Store subscription checks
- Join the Apple Developer Program as an organisationApple accepts crypto wallets only from organisations (store notes).
- Create the subscriptionAn auto-renewable subscription with your product ID (PRO setup, with Apple's guide linked there).
- Create an App Store Server API keyFollow Apple's guide Creating API keys to authorize API requests. You get a key ID, an issuer ID and a
.p8file that downloads once. - Fill
functions/.envAPP_STORE_KEY_ID,APP_STORE_ISSUER_ID,APP_STORE_PRIVATE_KEY(the .p8 text in double quotes, line breaks as\n),APPLE_BUNDLE_ID(your iOS bundle ID) andPRO_WEEKLY_PRODUCT_ID. Thenfirebase deploy --only functions.
Test: buy with a sandbox tester in a TestFlight build, then read the log of the function the app calls:
cd crypto_wallet
firebase functions:log --only validatePremiumEntitlement -n 50
Success logs Premium entitlement validated. "App Store entitlement verification is not configured." means the variables are missing.
Meanwhile: grant PRO by hand in Admin → Users, for example to store reviewers.
08Google: Play subscription checks
- Create the subscriptionWith the same product ID and a weekly base plan (Google: create and manage subscriptions).
- Create a service account and give it accessEnable the Google Play Android Developer API, create a service account with a JSON key and grant it access to your app in Play Console, as described in Google's Getting started with the Play Developer API.
- Fill
functions/.envGOOGLE_PLAY_SERVICE_ACCOUNT_JSON= the JSON on one line. Deploy the functions.
The app passes the user's account token with every purchase; the server refuses a subscription bought by a different account (how it works).
Test: buy as a license tester from an internal testing track and read the same log. "Google Play entitlement verification is not configured." means the variable is empty; "credentials are malformed" means the JSON is not on one valid line.
Google can take a while before a new service account works; if checks fail at first, wait and retry before changing anything.
09Transak (buy crypto by card)
- Apply as a partnerAt Transak's partner sign-up. Expect a business verification (KYB): company documents, your app, the countries you serve. Transak decides what they need.
- Test in stagingUse a staging key and Admin → Monetization → On-Ramp Configuration → environment Staging. The app then opens Transak's staging site.
- Go liveWhen Transak approves you, switch to the production key and Production.
Meanwhile: keep the on-ramp off. Any revenue share is between you and Transak.
10Optional data providers
| Provider | Variable | Adds |
|---|---|---|
| Alchemy | ALCHEMY_API_KEY | Faster EVM data on Ethereum, Optimism, Polygon, Base, Arbitrum, Avalanche |
| Helius | HELIUS_API_KEY | Solana NFTs and asset data |
| Moralis | MORALIS_API_KEY | NFT metadata, prices, history |
| Etherscan family | ETHERSCAN_API_KEY and the per-chain keys | Transaction history |
| Anthropic | Secret CLAUDE_API_KEY (server only) | The optional Portfolio Brain PRO feature |
11Third-party services and costs
The purchase covers the source code. Every service below runs on your own accounts and is billed to you by the provider, or to your users where noted. Prices change; check each provider's current pricing before you launch.
Your purchase covers the source code only. It includes no API credit, no hosting and no provider plan. Every outside service runs on your own account, under your own agreement with that provider, and anything you use beyond a provider's free tier is billed to you by that provider — not by us and not by the marketplace. That applies to every service this product can call: Firebase on the Blaze plan; 0x and 1inch for EVM swap quotes; Jupiter for Solana swap quotes; Reown (WalletConnect); Alchemy, Helius, Moralis, the Etherscan-family block explorers and the public RPC endpoints for chain data and history; CoinGecko, DexScreener and Birdeye for prices; the fiat on-ramp partner you enable (Transak, MoonPay or Ramp); and Anthropic if you switch on Portfolio Brain. Free tiers, rate limits and prices belong to each provider and change without notice, so read their current pricing before you launch and set a budget alert wherever one is offered. We cannot grant, extend, discount or refund any third-party usage.
| Cost | Who pays | Notes |
|---|---|---|
| Firebase Blaze usage (functions, Firestore, hosting, Secret Manager, backups) | You | Pay as you go. Set a budget alert. |
| Domain and web hosting | You | Optional; Firebase Hosting or any static host works |
| RPC and data providers (Alchemy, Helius, Moralis, explorers) | You | Free tiers exist; paid plans as you grow |
| Jupiter, CoinGecko, DexScreener, Birdeye and the public RPC endpoints | You | Called without a key by default, on each provider's free public tier, which is rate-limited. CoinGecko and Birdeye also take an optional key (COINGECKO_API_KEY, BIRDEYE_API_KEY). Heavier use needs that provider's paid plan, billed to you. |
| 0x and 1inch API plans | You | Check plan limits and the provider's own swap fees |
| Reown (WalletConnect) | You | Check Reown's current plans |
| Transak | Card fees are paid by the buying user | Terms are in your contract with Transak |
| Apple Developer Program | You | Yearly membership |
| Google Play Console | You | One-time registration |
| Store commission on subscriptions | Taken from your subscription income | Set by Apple and Google |
| Anthropic (Portfolio Brain) | You | Only if you set CLAUDE_API_KEY |
| Network fees (gas) for sends, swaps and approvals | Your users | Paid in the chain's coin from the user's own wallet |
| Your swap fee | Your users | Added to their swap when you turn it on (earnings) |
| Solana token account deposits | You | A small refundable SOL amount per fee token account |