Skip to content

身份 ​

.human 地址最初是单个公钥的纯函数。身份让地址的生命周期超越这把密钥:控制该地址的密钥集合保存在链上状态中,因此密钥可以轮换,丢失后可以恢复——而地址、余额、名称和历史都保持不变。

首次轮换前后 ​

状态谁控制该地址
从未轮换,也未设置恢复派生出该地址的那把密钥(address = f(公钥))
身份记录已存在仅限记录中的密钥。原始密钥一旦被移除就不再有效

身份记录在你第一次轮换密钥或设置恢复时创建。付费名称(.node、.app、.vault、.agent)跟随拥有它们的 .human 钱包的身份。

bash
curl -s "$GATEWAY/api/v1/identity/neuro:<15 hex>.human"
# { "address": "…", "keys": ["<pk1>", "<pk2>"], "version": 2, "rotated_at": 4210, "recovery": { … } }

轮换密钥 ​

POST /api/v1/identity/rotate,携带 owner、add(要添加的公钥,或留空)、remove(要移除的公钥,或留空),由一把当前有效的密钥对以下内容签名:

nc-rotate|<owner>|<add>|<remove>|<nonce>
  • 最后剩下的一把密钥不能被移除。
  • 签名覆盖了确切的变更内容,因此任何人都无法在传输途中篡改。
  • 在每个验证者上于共识中执行。

迁移到新设备的典型做法:先在旧设备上添加新密钥,再用新密钥移除旧密钥。

社交恢复 ​

如果所有密钥都丢失了,守护人可以恢复访问权限。

设置 ​

POST /api/v1/identity/recovery/setup——由一把有效密钥签名:

字段规则
guardians一个或多个 .human 地址,不能是你自己的
threshold需要多少位守护人批准:从 1 到守护人数量
timelock达到阈值后需要等待的区块数,留给你否决的时间

恢复仅适用于 .human 地址。

恢复 ​

  1. 请求——在新设备上调用 POST /api/v1/identity/recovery/request,携带 target(你的地址)和 new_key,由新密钥签名。状态为 pending。
  2. 批准——每位守护人调用 POST /api/v1/identity/recovery/approve(target、guardian)。批准数达到阈值时,请求变为 armed,并设定 executes_at = now + timelock。
  3. 执行——到达 executes_at 时,每个验证者自动把该身份的密钥替换为 new_key。

在执行之前的任何时刻:

谁可以端点
你,使用任意有效密钥否决POST /api/v1/identity/recovery/cancel
守护人拒绝POST /api/v1/identity/recovery/reject
请求发起者撤回POST /api/v1/identity/recovery/withdraw

读取:GET /api/v1/identity/recovery/:addr(配置和未完成的请求)、GET /api/v1/identity/guardian-of/:addr(你在守护谁)、GET /api/v1/identity/recovery/initiated/:pk(由某把新密钥发起的请求)。

谨慎选择时间锁

时间锁是你发现一笔并非由你发起的恢复的时间窗口。太短,合谋的守护人可能在你反应过来之前夺走地址;太长,真正的恢复也要等那么久。

计划中 ​

身份记录的用途不止于承载密钥:还包括基于链上行为建立的信誉、对该信誉的零知识证明,以及让其他链读取它的 IBC v2 数据包。这些目前都尚未实现。