DVT program hub —— 把 AirAccount #70 (DVT co-signer)落地
本 issue 把 AirAccount 侧 DVT 设计(docs/design/dvt-solution.md,已 merged PR #71 ,4 轮 review APPROVE)汇到这里,作为 DVT program 的协调中心 。yet-dvt 是 program hub + BLS 共签节点实现 ;其它仓库各提供自己那一块(协作关系,非被统领)。
📍 进度入口(最新状态看这三条评论 · 2026-06-14)
本 issue 当决策看板 ;规范正文进各仓库 docs/design/*.md 走 PR。最新协商状态与待办全在下面三条评论:
决策看板 + 跨仓库回复一致性核对(先看这条) → #issuecomment-4702108909
含 A 决策状态表 + B 一致性核对(谁还没对齐)+ 7 条「谁该回谁」待回复清单。
协商项 code format #1 — BLS 签名 preimage / messagePoint 绑定格式 → #issuecomment-4702069726
现状:airaccount-contract(lead)已定稿决策 B hash_to_curve(userOpHash, DST),节点零返工;待 aastar-sdk 对齐 + chore(deps): bump actions/checkout from 6 to 7 #110 定 proof tuple/signerMask 位序。
协商项 admin for signer #2 — DVT 策略治理(来源 / 生命周期 / 接口) → #issuecomment-4702074390
提案:YetAnotherAA-Validator/docs/design/dvt-policy-governance.md。
看板更新 — SP 两条权威答案 + 每账户 scoped 限额模型 → #issuecomment-4702143353
SP #283 已定:proof tuple=(signerMask,sigG2)、signerMask=slot 位序、Decision 2 staked-validation(C1/C2 accepted);新增「每账户 合约+资产+数额 自定义限额」模型(复用 AirAccount grant-session 原语)。
IPolicyRegistry 6 问 → chore(deps): bump actions/checkout from 6 to 7 #110 ack(Blocker-1 解除,2026-06-15) → #issuecomment-4703894384
airaccount-contract chore(deps): bump actions/checkout from 6 to 7 #110 owner 确认 SP 的 6 个 IPolicyRegistry 对齐默认:Q1 ALLOW/REQUIRE_DVT/REJECT(预留 REQUIRE_EXTRA)· Q2 per-policy windowSeconds rolling · Q3 additive · Q6 wire-format-agnostic —— 4 项 ✅;2 处有意分歧(附代码依据) :Q4 ETH 哨兵=0xEeee…EEeE(非 address(0)) 、Q5 governance=OZ TimelockController+2-of-3 RecoveryService(非自实现 timelock,因 registry 是独立单例、不受账户 EIP-170 约束) 。→ 球回 SP :据此定稿 IPolicyRegistry + 实现 registry body。
✅ 协商已收敛 —— 四家全部 feedback: aastar-sdk(接受 B、撤回 A、tuple/slot 位序锁定)· airaccount-contract #110 (4 项全确认;scoped 原语 TokenConfig+SessionKeyValidator 已上线 v0.18.0-beta.2,缺 sender-keyed staked registry 外壳)· SuperPaymaster #283(Decision 1+2 权威定稿)· AirAccount #70 (#1 /#2 /§10 最终 +1)。
🟢 已定稿 :preimage=B(节点零返工)· proof tuple=(signerMask,sigG2) · signerMask=注册 slot 位序 · Decision 2=staked-validation(sender-keyed todaySpent)· 产品默认值(2 天时间锁 / 2-of-3 RecoveryService / 自定义合约+资产+数额,不走 oracle / DVT 现可选未来必选)· scoped 限额复用 grant-session 字段形状。
🏁 协商全面 CLOSED(SP 已 confirm),进入实现阶段。 SP 补充一条 DST 修正 :SP 自己的 BLS.sol 误用 _NUL_,须改为终态 _POP_(这是 SP 自身返工 ,非 YAA 节点——YAA 节点 + 黄金向量本就用 _POP_,仍零返工,且充当正确 DST 的参照基准)。
🟢 冻结终态 :DST=BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_ · proof=(signerMask,sigG2)/slot 位序 · PolicyRegistry=新建 per-sender/staked/governance-gated(资产原生额度,无 oracle;2 天时间锁 + 2-of-3 RecoveryService;节点策略源==slash 源)。
🔧 实现阶段(各仓库 against 冻结决策) :SP v5.4 顺序 =(1)改 BLS DST _NUL_→_POP_ →(2)freeze 黄金向量 (message→msgG2)+(slot keys→pkAgg) →(3)出 IPolicyRegistry。**【2026-06-15 更新】(3) 的 IPolicyRegistry 6 个对齐问题已由 #110 ack 解除(见进度入口第 5 条):SP 按 Q4=0xEee…、Q5=OZ TimelockController 定稿接口 + 实现 registry body。**下游:#110 建 registry(复用 TokenConfig+Session 形状)· AirAccount 接 KMS 闸门 · aastar-sdk 收口组装 · YAA 节点 PolicyService 接链上第 1 层读取(待 IPolicyRegistry)。
一句话
DVT = 一组独立链下验证节点 ,对大额/高风险操作按各自策略 BLS12-381 门限共签 ,使「单把 owner key 被盗 = 全损」退化为「必须同时攻破 owner key + 门限内独立策略节点才损」。
⚠️ 命门(dvt-solution.md 反复强调)
安全增益全部来自「独立性」,不来自「再签一次」。 盲签(拿到请求就签 / 不跑独立策略 / 私钥与 owner key 同环境)→ DVT 形同橡皮图章。价值全部来自 CA 改不了的独立信号 :① 独立 BLS 私钥 ② 独立策略(链上/节点本地,CA 无权改)③ 独立确认通道(不经 CA,直连用户另一设备)。
co-signer 角色不卡 R-1 (比验证者角色强的地方):它不验「签名来自真 NXP 芯片」,只断言「≥门限个独立节点按策略批准」——即使 KMS 是假 TEE(威胁模型向量 V5),大额操作仍要独立节点共签。所以 co-signer 是 V5 在 R-1 收口前的现实缓解手段。
跨仓库分工(各自拥有自己那块)
组件
仓库
职责
DVT 节点软件 (BLS 门限共签 + 各自跑策略)
本仓库 yet-dvt
program hub + 节点实现
ROLE_DVT 合约 (角色注册/质押/退出/slash + BLS 公钥注册/聚合验证)
SuperPaymaster
链上角色与经济约束
KMS 共签集成 (大额 op 需 ≥门限 DVT 聚合共签才放行)
AirAccount
主签名方 + 集成点
链上验门限聚合签名
account contract
智能账户验证组合签名
客户端运行时聚合 (收集 KMS 主签 + DVT BLS 聚合 → 提交)
aastar-sdk
运行时「汇聚者」
激励绑「正确执行策略」 (贡献 SBT,非签名次数)
PGL / MushroomDAO
防盲签的经济约束
运行时的真正「汇聚者」是 SDK (客户端收集各方签名)+ 链上 account/SuperPaymaster (验门限)。yet-dvt 提供节点 + 程序协调,不是运行时调度中心。
防 DVT 自身被攻破
门限(≥N of M) :单节点失陷不致命。
多样性 :不同运营者/法域/软件栈(同质化会被同一漏洞或同一法律强制一锅端)。
激励绑正确执行 :绑「签名次数」= 节点为攒积分盲签 → 毁掉安全价值。
落地路线(建议)
yet-dvt:定节点协议(BLS12-381 聚合、策略接口、独立确认通道)+ 参考实现。
给各协作仓库提 issue:SuperPaymaster(ROLE_DVT)、AirAccount(KMS 共签集成)、account-contract(链上验)、aastar-sdk(客户端聚合)、PGL(激励)。
co-signer 角色(B)先行(不卡 R-1);验证者角色(A)依赖 chore: fix README license badge — MIT → Apache 2.0 #37 /R-1,靠后。
参考
AirAccount docs/design/dvt-solution.md(两角色 + 独立性命门 + co-signer 缓解 V5 不卡 R-1 + 与 KMS 互补 + 实现路线)
AirAccount docs/design/threat-model-ca-adversary.md(V5 假 TEE)、docs/dKMS.md(去中心化 KMS:BLS 聚合 + 链上策略 + slash + VRF)
BLS 聚合签名节点参考:本仓库 YetAnotherAA-Validator
上游:SuperPaymaster v5 ROLE_DVT + PGL 贡献记录
cc AirAccount #70 。本 issue 由 AirAccount 侧汇总发起;yet-dvt 作为 program hub 协调推进。
DVT program hub —— 把 AirAccount #70(DVT co-signer)落地
本 issue 把 AirAccount 侧 DVT 设计(
docs/design/dvt-solution.md,已 merged PR #71,4 轮 review APPROVE)汇到这里,作为 DVT program 的协调中心。yet-dvt 是 program hub + BLS 共签节点实现;其它仓库各提供自己那一块(协作关系,非被统领)。📍 进度入口(最新状态看这三条评论 · 2026-06-14)
本 issue 当决策看板;规范正文进各仓库
docs/design/*.md走 PR。最新协商状态与待办全在下面三条评论:含 A 决策状态表 + B 一致性核对(谁还没对齐)+ 7 条「谁该回谁」待回复清单。
现状:airaccount-contract(lead)已定稿决策 B
hash_to_curve(userOpHash, DST),节点零返工;待 aastar-sdk 对齐 + chore(deps): bump actions/checkout from 6 to 7 #110 定 proof tuple/signerMask 位序。提案:
YetAnotherAA-Validator/docs/design/dvt-policy-governance.md。SP #283 已定:proof tuple=
(signerMask,sigG2)、signerMask=slot 位序、Decision 2 staked-validation(C1/C2 accepted);新增「每账户 合约+资产+数额 自定义限额」模型(复用 AirAccount grant-session 原语)。airaccount-contract chore(deps): bump actions/checkout from 6 to 7 #110 owner 确认 SP 的 6 个 IPolicyRegistry 对齐默认:Q1
ALLOW/REQUIRE_DVT/REJECT(预留 REQUIRE_EXTRA)· Q2 per-policywindowSecondsrolling · Q3 additive · Q6 wire-format-agnostic —— 4 项 ✅;2 处有意分歧(附代码依据):Q4 ETH 哨兵=0xEeee…EEeE(非address(0))、Q5 governance=OZTimelockController+2-of-3 RecoveryService(非自实现 timelock,因 registry 是独立单例、不受账户 EIP-170 约束)。→ 球回 SP:据此定稿IPolicyRegistry+ 实现 registry body。✅ 协商已收敛 —— 四家全部 feedback: aastar-sdk(接受 B、撤回 A、tuple/slot 位序锁定)· airaccount-contract #110(4 项全确认;scoped 原语
TokenConfig+SessionKeyValidator已上线 v0.18.0-beta.2,缺 sender-keyed staked registry 外壳)· SuperPaymaster #283(Decision 1+2 权威定稿)· AirAccount #70(#1/#2/§10 最终 +1)。🟢 已定稿:preimage=B(节点零返工)· proof tuple=
(signerMask,sigG2)· signerMask=注册 slot 位序 · Decision 2=staked-validation(sender-keyed todaySpent)· 产品默认值(2 天时间锁 / 2-of-3 RecoveryService / 自定义合约+资产+数额,不走 oracle / DVT 现可选未来必选)· scoped 限额复用 grant-session 字段形状。🏁 协商全面 CLOSED(SP 已 confirm),进入实现阶段。 SP 补充一条 DST 修正:SP 自己的
BLS.sol误用_NUL_,须改为终态_POP_(这是 SP 自身返工,非 YAA 节点——YAA 节点 + 黄金向量本就用_POP_,仍零返工,且充当正确 DST 的参照基准)。🟢 冻结终态:DST=
BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_· proof=(signerMask,sigG2)/slot 位序 · PolicyRegistry=新建 per-sender/staked/governance-gated(资产原生额度,无 oracle;2 天时间锁 + 2-of-3 RecoveryService;节点策略源==slash 源)。🔧 实现阶段(各仓库 against 冻结决策):SP v5.4 顺序 =(1)改 BLS DST
_NUL_→_POP_→(2)freeze 黄金向量(message→msgG2)+(slot keys→pkAgg)→(3)出IPolicyRegistry。**【2026-06-15 更新】(3) 的 IPolicyRegistry 6 个对齐问题已由 #110 ack 解除(见进度入口第 5 条):SP 按 Q4=0xEee…、Q5=OZ TimelockController 定稿接口 + 实现 registry body。**下游:#110 建 registry(复用 TokenConfig+Session 形状)· AirAccount 接 KMS 闸门 · aastar-sdk 收口组装 · YAA 节点PolicyService接链上第 1 层读取(待IPolicyRegistry)。一句话
DVT = 一组独立链下验证节点,对大额/高风险操作按各自策略 BLS12-381 门限共签,使「单把 owner key 被盗 = 全损」退化为「必须同时攻破 owner key + 门限内独立策略节点才损」。
安全增益全部来自「独立性」,不来自「再签一次」。 盲签(拿到请求就签 / 不跑独立策略 / 私钥与 owner key 同环境)→ DVT 形同橡皮图章。价值全部来自 CA 改不了的独立信号:① 独立 BLS 私钥 ② 独立策略(链上/节点本地,CA 无权改)③ 独立确认通道(不经 CA,直连用户另一设备)。
co-signer 角色不卡 R-1(比验证者角色强的地方):它不验「签名来自真 NXP 芯片」,只断言「≥门限个独立节点按策略批准」——即使 KMS 是假 TEE(威胁模型向量 V5),大额操作仍要独立节点共签。所以 co-signer 是 V5 在 R-1 收口前的现实缓解手段。
跨仓库分工(各自拥有自己那块)
防 DVT 自身被攻破
落地路线(建议)
参考
docs/design/dvt-solution.md(两角色 + 独立性命门 + co-signer 缓解 V5 不卡 R-1 + 与 KMS 互补 + 实现路线)docs/design/threat-model-ca-adversary.md(V5 假 TEE)、docs/dKMS.md(去中心化 KMS:BLS 聚合 + 链上策略 + slash + VRF)ROLE_DVT+ PGL 贡献记录cc AirAccount #70。本 issue 由 AirAccount 侧汇总发起;yet-dvt 作为 program hub 协调推进。