尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗QOP is a simple, minimal and secure messaging app built on top of minip2p.
Messages travel peer to peer. Identity lives on chain. A small API sponsors invitation-gated registration and later phone-approved add/remove device actions. It never holds owner secrets and does not choose pairing endpoints.
contracts/). A Solidity contract maps a permanent handle to an owner address and raw Ed25519 device keys. It is the single source of truth for who owns which handle. Registration starts invitation gated and can be opened permanently by the registration admin.api/). Verifies owner-signed EIP-712 intents and relays gas for registration and add/remove device actions. Clients still confirm account and device membership over RPC.mobile/). An Expo app that generates keys on device, registers through the API, links additional devices, resolves peers from the chain, and chats over minip2p. Each transport connection is verified against the registry with a bounded authorization cache.cli/). Links a separate device key with phone approval, then runs as the same account. Phone-composed text can be handed off to a reachable CLI over /qop/sync/1; the CLI persists it in messages.db and retries while it runs.packages/identity/). Shared key derivation, EIP-712 domains and intents, recovery key encoding, and wire codecs.packages/protocol/). Pairing codecs and the shared registry/session/chat pieces used by phone and CLI.| Path | Package | Description |
|---|---|---|
contracts/ | Foundry | QOPIdentityRegistry and its protocol tests |
api/ | @qop/api | Registration and device-action relay service (Effect, Postgres, viem) |
cli/ | @qop/cli | Phone-approved device linking and diagnostic chat |
mobile/ | mobile | Expo app (Expo Router, minip2p, Effect) |
packages/identity/ | @qop/identity | Identity primitives shared by the API, CLI, and app |
packages/protocol/ | @qop/protocol | Pairing, registry reads, and live-session authorization |
web/ | @qop/web | The qop.sh site and docs (Blume) |
Each package has its own README with details on configuration and operation.
Clone the repo, pull the contract submodules, and install dependencies:
git submodule update --init --recursive
pnpm install
Start Anvil, then deploy the registry. For local development the admin and signer may be Anvil test accounts.
anvil
REGISTRATION_ADMIN=0x... \
REGISTRATION_SIGNER=0x... \
forge script --root contracts contracts/script/DeployQOPIdentityRegistry.s.sol:DeployQOPIdentityRegistry \
--broadcast \
--private-key 0x... \
--rpc-url http://127.0.0.1:8545
Note the deployed registry address. See contracts/README.md for the full policy and deployment requirements.
Copy api/.env.example to api/.env, then set the registry address, chain ID, RPC URL, database URL, and the two private keys. REGISTRATION_PRIVATE_KEY must match the REGISTRATION_SIGNER used at deploy time. RELAYER_PRIVATE_KEY pays gas and should be a separate, funded key.
pnpm --filter @qop/api db:push
pnpm --filter @qop/api admission:create
pnpm --filter @qop/api dev
admission:create prints a single use code to hand to a user. See api/README.md for the registration flow and routes.
Copy mobile/.env.example to mobile/.env and point EXPO_PUBLIC_API_URL, EXPO_PUBLIC_RPC_URL, EXPO_PUBLIC_REGISTRY_ADDRESS, and EXPO_PUBLIC_REGISTRY_CHAIN_ID at the services above. Physical devices and emulators need addresses that can reach your development machine, so 127.0.0.1 usually does not work.
pnpm --filter mobile ios
pnpm --filter mobile android
Both commands build a native development client and connect it to Metro. See mobile/README.md for the manual verification checklist that exercises the native transport.
pnpm check # lint, package tests, and typecheck
pnpm check:contracts # forge fmt, lint, and tests
pnpm fix # apply lint and format fixes
Automated tests cover the identity library, the API, the SQL and store lifecycle in the app, and the contract. They do not exercise the native P2P transport, which needs two development builds.