Compliance
what the code does, what you decide.
You are the operator. Licensing, tax and consumer-protection duties in every market you publish to are yours. This page explains what TIDE does to keep that burden small, and where your decisions start. Nothing here is legal advice.
01How TIDE is built
| Constraint | How the code holds it |
|---|---|
| No custody | Keys are generated on the device and encrypted with AES-256-GCM in platform secure storage. No export endpoint, no server, no backup service (lib/core/security/vault_service.dart). |
| No order routing | Quotes come from Jupiter and the user's own device submits the transaction. No relayer, no batcher. |
| No custody of the fee | The fee is paid by Jupiter directly into your token account. |
| No recommendations | The feed describes on-chain activity; it does not advise. |
| No financing | No lending, margin or credit anywhere. |
A server that coordinates or submits transactions for users changes the legal nature of a wallet, even a non-custodial one. Keep signing and sending on the user's device.
02The feed reports, it does not advise
lib/core/compliance/feed_language.dart holds the allowed verbs (swapped, received, sent, detected, observed) and a list of forbidden words. test/feed_language_test.dart scans every user-facing string on the feed and fails on words such as "signal", "buy", "sell", "opportunity", "leaderboard", "ROI" or "win rate". Feed items carry no return, rank or score.
The optional Realised tab is off by default (realised_standings_enabled). Switched on, it shows realised results of followed wallets: arithmetic on a purchase and a later sale of the same token, both already confirmed on-chain, over a stated window. Open positions are counted but not valued, and nothing is projected or annualised (lib/core/standing/realised_standing.dart). It is not a ranking: wallets appear in the order the user followed them, there is no sort by result and no position number (StandingRepository.inFollowOrder). Do not turn it into a leaderboard or a "top traders" list.
03Copy execution
Alerting a user that something happened is different from trading for them. Copy execution is therefore a separate module:
- Kept apart. The rule engine, limits and settings screen live in
lib/core/copy/andlib/features/copy/. A few entry points elsewhere (the copy-trade action on the feed and on a profile, the settings link, the swap confirm step, app start-up) check whether the module is available; removing the module is a code change in those files, not a folder deletion. - Off three times.
copy_execution_enabledis off, each rule starts not armed, and the user confirms the mode once. - Gated on a self-declared region. The user types a two-letter country code in Settings; TIDE does not detect, geolocate or verify it. Copy execution is unavailable while no region is declared and when the declared region is the United States, Canada, the United Kingdom, Singapore, Hong Kong or Malaysia (
lib/core/compliance/jurisdiction_gate.dart). This is a declared-region check, not a geofence. You may add regions in the panel; the six cannot be removed there. If your licensing depends on where users really are, add your own verification. - Capped. $1,000 per trade, $5,000 per 24 hours, 5 % slippage, and a token allowlist that must not be empty.
Take licensing advice before you switch it on.
04Store rules
- Apple 3.1.5: a wallet app needs an Apple Developer account enrolled as an organisation.
- Apple 3.1.5: apps offering crypto futures must come from a licensed institution. TIDE has no futures or perpetuals; do not add them to an iOS build.
- Google Play: publishing a crypto wallet is subject to Google Play's cryptocurrency exchange and software wallet policy. Keep TIDE non-custodial and check the current policy for each market before release.
05Before launch
- Your own terms and privacy policy are published and linked.
- Your fee is decided and disclosed. TIDE shows it on the quote before confirm.
- You decided whether to enable copy execution, with advice.
- You checked your position in every market you publish to.