尚未检测到更新。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.