Skip to main content

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.

  • Create a .yarnrc.yml file in the root of your project and add the following line:
npmScopes:
"silencelaboratories":
npmAlwaysAuth: true
npmRegistryServer: "https://registry.npmjs.org"
npmAuthToken: ${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:

  1. Sign-in screen — tap Sign in to authenticate with Auth0. You can use email/password or Google SSO if configured.
  2. Biometric setup — the app asks to enable Face ID / Fingerprint as an app lock. This protects the app from unauthorized access.
  3. Onboarding — a brief explanation of how MPC wallets work.
  4. Create wallet — tap Create Wallet to trigger the MPC key generation. Both ECDSA (EVM) and EdDSA (Solana) keyshares are generated in a single step.
  5. 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.