Setup
By now you should have:
- A running backend (duo-server + auth-svc) with the three backend env vars ready
- Credentials from Auth0, Google, WalletConnect, and FaceTec
Let's get the app running.
1. Install dependencies
Clone the repo:
git clone https://github.com/silence-laboratories/examples-hub.git
cd examples-hub/silent-shard-sdk/with-react-native
If you don't have NPM token, please contact us at [email protected].
Configure Your Package Manager
Configure your package manager with a private token provided by us to access the private registry.
- yarn v2
- yarn v1 / npm
- Create a
.yarnrc.ymlfile in the root of your project and add the following line:
npmScopes:
"silencelaboratories":
npmAlwaysAuth: true
npmRegistryServer: "https://registry.npmjs.org"
npmAuthToken: ${NPM_TOKEN}
- Create a
.npmrcfile in the root of your project and add the following line:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
- Add the npm token as an environment variable, e.g., in a terminal session run:
export NPM_TOKEN=your-npm-token
Then install dependencies:
yarn install
2. Configure environment variables
Copy the example file:
cp .env.example .env
Open .env and fill in all values. Here is the full annotated reference:
# ── Backend ──────────────────────────────────────────────────────────────────
# HTTP base URL of auth-svc
EXPO_PUBLIC_BACKEND_BASE_URL=http://localhost:9090
# WebSocket URL of duo-server (MPC cloud node)
EXPO_PUBLIC_CLOUD_NODE_URL=http://localhost:8080
# Hex verifying key — printed in duo-server logs on startup
EXPO_PUBLIC_CLOUD_NODE_VERIFYING_KEY=
# ── FaceTec ───────────────────────────────────────────────────────────────────
EXPO_PUBLIC_FACETEC_URL=https://api.facetec.com/api/v3.1/biometrics
EXPO_PUBLIC_FACETEC_DEVICE_KEY_IDENTIFIER=drJWjaXC1Cpez8PtsdI150Qi6rtlhy55
EXPO_PUBLIC_ENCRYPTION_KEY="-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5PxZ3DLj+zP6T6HFgzzk
M77LdzP3fojBoLasw7EfzvLMnJNUlyRb5m8e5QyyJxI+wRjsALHvFgLzGwxM8ehz
DqqBZed+f4w33GgQXFZOS4AOvyPbALgCYoLehigLAbbCNTkeY5RDcmmSI/sbp+s6
mAiAKKvCdIqe17bltZ/rfEoL3gPKEfLXeN549LTj3XBp0hvG4loQ6eC1E1tRzSkf
GJD4GIVvR+j12gXAaftj3ahfYxioBH7F7HQxzmWkwDyn3bqU54eaiB7f0ftsPpWM
ceUaqkL2DZUvgN0efEJjnWy5y1/Gkq5GGWCROI9XG/SwXJ30BbVUehTbVcD70+ZF
8QIDAQAB
-----END PUBLIC KEY-----"
# ── Google Sign-In ────────────────────────────────────────────────────────────
EXPO_PUBLIC_IOS_URL_SCHEME=com.googleusercontent.apps.YOUR_IOS_CLIENT_ID
EXPO_PUBLIC_WEB_CLIENT_ID=YOUR_WEB_CLIENT_ID.apps.googleusercontent.com
EXPO_PUBLIC_IOS_CLIENT_ID=YOUR_IOS_CLIENT_ID.apps.googleusercontent.com
# ── Auth0 ─────────────────────────────────────────────────────────────────────
EXPO_PUBLIC_AUTH0_DOMAIN=your-tenant.auth0.com
EXPO_PUBLIC_AUTH0_CLIENT_ID=your_auth0_client_id
EXPO_PUBLIC_AUTH0_AUDIENCE=silent-shard-boilerplate
# ── WalletConnect ────────────────────────────────────── ───────────────────────
EXPO_PUBLIC_WALLET_CONNECT_PROJECT_ID=your_project_id
# ── Internal faucet (optional, for testnet funding) ──────────────────────────
EXPO_PUBLIC_INTERNAL_FACUET_API_KEY=
EXPO_PUBLIC_INTERNAL_FACUET_URL=
3. Build and run
Generate native code then launch on your target platform:
# Generate native code for iOS and Android
npx expo prebuild --clean
# Run on specific platform
yarn ios # iOS Simulator
yarn android # Android Emulator
4. First run walkthrough
When the app launches for the first time:
- Sign-in screen — tap Sign in to authenticate with Auth0. You can use email/password or Google SSO if configured.
- Biometric setup — the app asks to enable Face ID / Fingerprint as an app lock. This protects the app from unauthorized access.
- Onboarding — a brief explanation of how MPC wallets work.
- Create wallet — tap Create Wallet to trigger the MPC key generation. Both ECDSA (EVM) and EdDSA (Solana) keyshares are generated in a single step.
- Home screen — your EVM and Solana addresses are displayed. The wallet is ready to use.
We recommend testing on a physical device. WalletConnect requires the camera to scan QR codes, and the backup/recovery flow uses FaceTec's 3D face scan — both require real camera hardware that simulators cannot provide.
When running on a physical device, update EXPO_PUBLIC_BACKEND_BASE_URL and EXPO_PUBLIC_CLOUD_NODE_URL from localhost to your machine's local IP address (e.g. http://192.168.1.x:9090) or use ngrok to create a public tunnel.
On an Android emulator, use 10.0.2.2 instead of localhost to reach your host machine.