Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
7ed3df2
feat: app structure, navigation, theming (no WDK)
Jul 7, 2026
e2c0714
Merge branch 'feature/project-setup' into develop
Jul 7, 2026
59e9ef8
refactor: DI repositories provider + TanStack Query data layer
Jul 9, 2026
eb85c76
Merge branch 'feature/Implement-Repository-Query-Provider' into develop
Jul 9, 2026
1b67c0d
Updated gitignore
Jul 9, 2026
35e3f6a
feat(wdk): initialize WdkAppProvider + worklet runtime
Jul 14, 2026
dac46f7
feat(wdk): real wallet data, send, and lifecycle integration
Jul 20, 2026
8c73fe9
Created Welcome Screen UI
Jul 20, 2026
9a49e65
Merge branch 'feature/Add-WDK-SDK-Stack' into develop
Jul 20, 2026
5c13c7e
Integrated Recovery Phrase Hidden Screen with 12 and 24 words option
Jul 21, 2026
5226582
Integrated Recovery Phrase Revealed Screen with 12 and 24 words option
Jul 21, 2026
597bcfe
Merge branch 'feature/Recovery-Phrase-Screen' into develop
Jul 21, 2026
ad73f69
Integrated Password setup and Unlock screen, This is an app passowrd …
Jul 22, 2026
b6aefe8
Merge branch 'feature/create-password-screen' into develop
Jul 22, 2026
e18280b
Created backup your wallet screen
Jul 22, 2026
2dae9da
Integrated cloud backup flow with icloud and google drive options on …
Jul 22, 2026
1dd3302
Merge branch 'feature/cloud-backup-flow' into develop
Jul 22, 2026
ec03f15
Integrated Import Wallet Flow
Jul 22, 2026
83f54d0
Merge branch 'feature/import-wallet-flow' into develop
Jul 22, 2026
bc8d0aa
added readme and other required documents
Jul 22, 2026
6f64e80
updated .env.example file
Jul 22, 2026
919791f
Home Screen Wallet Tab UI Completed with real api and functionality
Jul 23, 2026
535ae9b
Integrated Receive Screen
Jul 23, 2026
0be6e62
Implemented multiple account functionality, showing chains and tokens…
Jul 24, 2026
b6da314
Merge branch 'feature/home-screen' into develop
Jul 24, 2026
20f1064
Implemented Send - Amount Screen
Jul 24, 2026
dd54b69
Implemented send-confimration and send-success screen with live services
Jul 24, 2026
8b28309
Fixed automatically account listing on import of wallet- now all acti…
Jul 28, 2026
2ed8859
Merge branch 'feature/home-screen' into develop
Jul 28, 2026
79faf0c
Implemented Activity Tab
Jul 30, 2026
4292963
Merge branch 'feature/home-screen' into develop
Jul 30, 2026
49a5f8f
Address PR review feedback: disabled-state styling, network labeling,…
Jul 31, 2026
60cfdac
Merge branch 'fix/pr-review-changes' into develop
Jul 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
157 changes: 153 additions & 4 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,4 +1,153 @@
EXPO_PUBLIC_WDK_INDEXER_BASE_URL=https://wdk-api.tether.io
EXPO_PUBLIC_WDK_INDEXER_API_KEY=PUT_WDK_API_KEY_HERE
EXPO_PUBLIC_TRON_API_KEY=PUT_HERE
EXPO_PUBLIC_TRON_API_SECRET=PUT_HERE
# ══════════════════════════════════════════════════════════════════════════
# Copy this file to .env and fill in what you need. The app boots fine with
# NONE of these set — a given network/feature just won't work until it's
# configured. See docs/CLOUD_BACKUP.md and docs/ENVIRONMENT.md for the full
# setup walkthroughs referenced throughout this file.
# ══════════════════════════════════════════════════════════════════════════

# ── Bitcoin ──────────────────────────────────────────────────────────────
# A Blockbook-compatible HTTP endpoint. IMPORTANT: must include the /api
# suffix — the client does plain string concatenation with no normalization,
# so a base URL without /api silently hits the wrong path and gets back an
# HTML error page instead of JSON.
# Testnet3 (safe, free, no sign-up): https://tbtc1.trezor.io/api
# Mainnet: https://btc1.trezor.io/api
EXPO_PUBLIC_BTC_PROVIDER=https://tbtc1.trezor.io/api
#
# Only set this when EXPO_PUBLIC_BTC_PROVIDER points at a testnet — leave
# blank/unset for real mainnet. This is what makes the app correctly say
# "Bitcoin (Testnet)" vs plain "Bitcoin" everywhere a network name is shown,
# matching whatever's ACTUALLY configured rather than a hardcoded guess.
EXPO_PUBLIC_BTC_NETWORK_LABEL=Testnet
# If you ever repoint EITHER provider to real mainnet, just clear the
# matching *_NETWORK_LABEL var (leave it blank) — the display label updates
# automatically, no code change needed.


# ── Ethereum family (EIP-7702 gasless) ──────────────────────────────────────
# Three separate networks, each needing its own provider/bundler/paymaster —
# genuinely different chains, not variants of one config. All use
# @tetherto/wdk-wallet-evm-7702-gasless.
#
# Bundler/paymaster: Pimlico and Candide both support EIP-7702
# UserOperations — see each provider's own dashboard for a free/testnet API
# key. Omit *_PAYMASTER_URL entirely if your bundler URL already serves both
# roles (true for both Pimlico and Candide) — don't duplicate the same URL
# in both fields.
#
# "Ethereum" here means Sepolia testnet by team decision — see the note
# below. Arbitrum and Polygon are real mainnet, by the same decision (their
# testnets, Arbitrum Sepolia and Polygon Amoy, were evaluated and explicitly
# ruled out — see docs/WDK_INTEGRATION.md).

# Ethereum — Sepolia testnet (chain 11155111). Genuinely free to test with —
# no real funds or gas costs involved, safe to experiment on freely.
EXPO_PUBLIC_EVM_ETHEREUM_PROVIDER=https://ethereum-sepolia-rpc.publicnode.com
EXPO_PUBLIC_EVM_ETHEREUM_BUNDLER_URL=https://api.pimlico.io/v2/sepolia/rpc?apikey=YOUR_PIMLICO_KEY
EXPO_PUBLIC_EVM_ETHEREUM_PAYMASTER_URL=https://api.pimlico.io/v2/sepolia/rpc?apikey=YOUR_PIMLICO_KEY
#
# Same idea — only set this when the Ethereum provider above points at a
# testnet. Leave blank/unset for real mainnet.
EXPO_PUBLIC_EVM_ETHEREUM_NETWORK_LABEL=Sepolia
# If you ever repoint EITHER provider to real mainnet, just clear the
# matching *_NETWORK_LABEL var (leave it blank) — the display label updates
# automatically, no code change needed.

# Arbitrum One — ⚠️ REAL MAINNET, REAL MONEY. Gas sponsorship here is NOT
# free the way Sepolia is; it draws on your bundler provider's real
# balance/credits the moment you send something. Using Arbitrum's own
# official public RPC (no rate-limit surprises like drpc.org's free tier).
EXPO_PUBLIC_EVM_ARBITRUM_PROVIDER=https://arb1.arbitrum.io/rpc
EXPO_PUBLIC_EVM_ARBITRUM_BUNDLER_URL=https://api.pimlico.io/v2/arbitrum/rpc?apikey=YOUR_PIMLICO_KEY
EXPO_PUBLIC_EVM_ARBITRUM_PAYMASTER_URL=https://api.pimlico.io/v2/arbitrum/rpc?apikey=YOUR_PIMLICO_KEY

# Polygon PoS — ⚠️ REAL MAINNET, REAL MONEY, same caution as Arbitrum above.
# STILL on drpc.org's free tier as of this writing — this project has
# already hit drpc.org's per-request batch-size limit once (see
# docs/TROUBLESHOOTING.md), and this network hasn't been moved off it yet.
# If you see repeated timeout/failure patterns specifically on Polygon,
# this is the first thing to suspect — consider a dedicated provider
# (Alchemy/Infura) instead, especially for any real, sustained usage.
EXPO_PUBLIC_EVM_POLYGON_PROVIDER=https://polygon.drpc.org
EXPO_PUBLIC_EVM_POLYGON_BUNDLER_URL=https://api.pimlico.io/v2/polygon/rpc?apikey=YOUR_PIMLICO_KEY
EXPO_PUBLIC_EVM_POLYGON_PAYMASTER_URL=https://api.pimlico.io/v2/polygon/rpc?apikey=YOUR_PIMLICO_KEY

# Optional — a different smart-account implementation than the package's
# own documented SimpleAccount example (used by default if left blank).
EXPO_PUBLIC_EVM_DELEGATION_ADDRESS=


# ── Pricing (CoinGecko) ────────────────────────────────────────────────────
# Powers the real USD total/fiat values on Home, Review, and Activity.
# Works WITHOUT a key (CoinGecko's public host, rate-limited). Add a key
# only if you hit rate limits:
# https://docs.coingecko.com/docs/setting-up-your-api-key
EXPO_PUBLIC_COINGECKO_API_KEY=


# ── Transaction history (WDK Indexer API) ──────────────────────────────────
# Powers the Activity tab. REQUIRED — nothing shows up there without a real,
# registered key. Free registration: https://wdk-api.tether.io/register
#
# Two real, structural limitations (not bugs — see docs/WDK_INTEGRATION.md):
# - Native ETH has NO transaction history available through this API at
# all (its Token type is exactly "usdt" | "xaut" | "btc" — there's no
# "eth"). ETH is excluded from Activity results, not silently shown
# as empty.
# - This API treats "sepolia" as a distinct blockchain from "ethereum" —
# since EXPO_PUBLIC_EVM_ETHEREUM_* above actually points at Sepolia,
# that mapping is handled internally (src/wdk/indexer.ts), but it WOULD
# need updating if Ethereum is ever repointed to real mainnet.
EXPO_PUBLIC_WDK_INDEXER_API_KEY=


# ── Tron — currently ON HOLD, not wired up ────────────────────────────────
# gasfree.io is mid-migration to a new API version; wdk-wallet-tron-gasfree
# isn't in the compiled worklet right now (see wdk.config.js). No env vars
# needed until it's re-added — this section intentionally left empty.


# ── Cloud Backup — iOS CloudKit ───────────────────────────────────────────
# See docs/CLOUD_BACKUP.md for the full Apple Developer Portal walkthrough.
# None of these are required for the app to run — only for the iCloud
# backup option specifically.

# Format: iCloud.<your-own-bundle-id> — use YOUR app's actual bundle
# identifier (io.tether.wdkstarterreactnative by default), not a container
# borrowed from another app. A shared/reused container risks the wallet-ID
# collision issue documented in docs/ARCHITECTURE.md.
EXPO_PUBLIC_CLOUDKIT_CONTAINER_ID=iCloud.io.tether.wdkstarterreactnative

# From icloud.developer.apple.com/dashboard → API Tokens. Type: "User
# authentication token (Web Services)". Sign in Callback MUST be "URL
# Redirect", not "Post Message" — the latter silently doesn't work with
# this app's WebView-based sign-in.
EXPO_PUBLIC_CLOUDKIT_API_TOKEN=

# Any URL you choose — doesn't need to be real/reachable, since this app
# intercepts the redirect before it loads. Must match, character for
# character, the Sign in Callback URL Redirect registered for the token above.
EXPO_PUBLIC_CLOUDKIT_CALLBACK_URL=


# ── Cloud Backup — Google Drive (iOS + Android) ───────────────────────────
# See docs/CLOUD_BACKUP.md for the full Google Cloud Console walkthrough
# (three separate OAuth clients: Android, iOS, Web).

# Web Application OAuth Client ID — project-scoped, not app-scoped, so it
# can be reused across multiple apps in the same Google Cloud project.
#
# The value below is a PUBLISHED DEMO web client — usable as-is for local
# development. DEMO ONLY: do not ship this in a production build; set up
# your own via docs/CLOUD_BACKUP.md.
EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID=518914426511-um41gv98teak4u327nablql8bpb4vonb.apps.googleusercontent.com

# iOS OAuth Client ID — a SEPARATE credential from the Web client above
# (bound to your iOS bundle identifier, not a SHA-1). Needed because this
# app lets a person choose Google Drive on iOS too, not just Android. Also
# requires the reversed client ID registered as a URL scheme in app.json's
# google-signin plugin config — see docs/CLOUD_BACKUP.md section 3, or
# sign-in fails silently on iOS with no useful error.
#
# Pairs with the demo Web client above — same DEMO ONLY caveat applies.
EXPO_PUBLIC_GOOGLE_IOS_CLIENT_ID=518914426511-c46v1j9olhu5trra830bfo13cdj3ge4h.apps.googleusercontent.com
18 changes: 18 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,21 @@ app-example
# E2E tests
test/apps/

node_modules/
.expo/
dist/
ios/
android/
npm-debug.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision
*.orig.*
*.bundle
*.bundle.js
web-build/
.wdk-bundle/
.wdk/
.env
59 changes: 0 additions & 59 deletions .prettierignore

This file was deleted.

32 changes: 0 additions & 32 deletions .prettierrc.js

This file was deleted.

Binary file not shown.
Loading