Skip to content

feat: 无登录 infra 初始化页 (社区节点 onboarding, CC-40)#7

Merged
jhfnetboy merged 1 commit into
masterfrom
feat/infra-init-node-onboarding
Jul 10, 2026
Merged

feat: 无登录 infra 初始化页 (社区节点 onboarding, CC-40)#7
jhfnetboy merged 1 commit into
masterfrom
feat/infra-init-node-onboarding

Conversation

@jhfnetboy

Copy link
Copy Markdown
Member

无登录 infra 初始化页(CC-40): 社区 KMS+DVT 节点 onboarding 6步向导, 移植自 SDK node-onboarding-portal。

  • 属 infra/operator 层(EOA): operator 注入EOA自筹、owner key 不进浏览器、无需 AirAccount 登录; 底层全走 @aastar/sdk 0.42(onboardDvtNode/buildDvtPop), 页面只串线。
  • 路由 /node-onboarding; 用 YAA Layout(不带 requireAuth)。lib/sdk.ts 接缝已是 injected EOA 无需改。
  • bump @aastar/sdk 0.41→0.42。
  • ⚠️ SDK 0.42 /operator 泄 child_process 进浏览器 bundle(Foundry-CLI签名路径), next.config stub 掉; 应报 repo:sdk 让 SDK node-guard
  • 本地测: type-check ✅ + build ✅(/node-onboarding 静态路由)。本地/HSM 路径可跑; KMS-TEE gated CC-37。

https://claude.ai/code/session_01RajETCvboSvhadpqMbekNx

- app/node-onboarding: 移植自 aastar-sdk node-onboarding-portal/src (纯React), 6步向导(下载镜像→配置→连EOA→生成密钥→注册质押→身份)
- 属 infra/operator 层(EOA): operator 注入EOA自筹, owner key 不进浏览器, 无需 AirAccount 登录; 底层全走 @aastar/sdk (onboardDvtNode/buildDvtPop/KMS popSigner), 页面只串线
- 唯一接缝 lib/sdk.ts 已是 injected EOA, 无需改; 窄子路径 @aastar/sdk/operator + /core
- bump @aastar/sdk 0.41→0.42 (onboardDvtNode 需 0.42)
- ⚠️ SDK 0.42 /operator 子包 await import('child_process')(Foundry-CLI签名)泄进浏览器bundle → next.config turbopack.resolveAlias stub 掉; TODO(repo:sdk): SDK 侧 node-guard 该路径
- 本地/HSM 私钥路径可跑; KMS-TEE key-less 路径 gated CC-37; type-check + build 绿

Claude-Session: https://claude.ai/code/session_01RajETCvboSvhadpqMbekNx

@clestons clestons left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review — APPROVE [4-round: DeepSeek R1a+R1b → Opus R2 → Codex SKIPPED(post-R2 全 Low) → Opus R4]

架构对路:整个 portal 把 chain/keys/crypto 收敛进 lib/sdk.ts 一个文件,buildDvtPop 等直接委托 @aastar/sdk。没有阻断性问题。以下都是 Low / 上线前待办,不影响合入。

CONFIRMED (Low)

  • generateLocalBlsKey modulo bias (lib/sdk.ts) — BigInt(hex) % r 有取模偏置,约 9.8% 的低残差被 3:2 过采样。但 r≈2^254.86,实际熵损失 < 1 bit(不是初判的 14-15x),对一次性 keygen 无安全意义。建议改 rejection sampling 顺带干掉 sk<=0n 特判。
  • 前端 kmsPopSigner 零绑定校验 — 直接把 KMS /pop 响应整包返回,不验 popSig↔publicKey、不验 publicKey↔node_id。今天 kms-tee 路径 gated(未上线,走到就报错),所以是 Low;但 CC-37 上线后必须换成 SDK 里已带交叉校验的 popSigner(aastar-sdk#311),别在 client-only 页面里重造这个信任边界。
  • 明文 BLS 私钥落盘 + 进 DOMOnboardingWizard.tsx)— 有明确的「生产用 HSM/离线」警示 + demo 定位兜底,本地/测试路径可接受。
  • as unknown as never 双重强转(SDK client 接缝)— 抹掉了该 seam 的类型检查(viem 版本 skew,已注释)。建议用 overrides.viem 在依赖层统一版本,消掉强转。

MISSED (Low, R4 全量补扫)

  • kmsPopSigner 请求体永远发 { node_id: nodeIdOrPubkey },但入参标注是「node_id 或 pubkey」——传 pubkey 时会被错标成 node_id。今天无害(路径 gated),并入 CC-37 的 popSigner 委托一起改。

REJECTED(R1 误报,已驳)

  • 「BLS key 可能为 0」— 误报,if (sk<=0n) sk=1n 已把唯一的 0 残差重映射为非 0。
  • 「缺 import React」— 误报,Next.js "use client" + automatic JSX runtime 无需手动 import。
  • getRandomValues 可能被弱 polyfill」— 误报,真实浏览器就是 WebCrypto CSPRNG。

SUGGESTIONS

  • keygen 换 rejection sampling(去偏置 + 去特判)。
  • CC-37 上线前,把内联 kmsPopSigner 换成 SDK 的已校验 popSigner,让 pop 三元组绑定被强制而非信任中继。
  • child_process stub 与 as unknown as never 记成 SDK 侧 TODO(repo:sdk),SDK 出 browser-safe 子包 + 对齐 viem 后回退。

结论:APPROVE — 无阻断项。核心加密都委托给了 SDK,自造的两处(scalar keygen + 远端 PoP 信任)均为 Low,且 kms-tee 路径尚未上线。上线前落实 popSigner 委托即可。

Rounds: R1a/R1b DeepSeek(dual) → Opus R2(独立读, 全降 Low + 驳 3 误报) → Codex SKIPPED(post-R2 gate 全 Low) → Opus R4(终裁 + 补扫). head 7d1ae99.

@jhfnetboy
jhfnetboy merged commit 57f6d20 into master Jul 10, 2026
10 of 14 checks passed
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 10, 2026
@jhfnetboy
jhfnetboy deleted the feat/infra-init-node-onboarding branch July 10, 2026 18:47
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants