Verified Agent Identity技能使用说明
何时使用此技能
让AI代理在Billions网络上创建和管理自己的身份,并将这些身份链接到人类所有者。
- 当您需要将您的代理身份链接到所有者时。
- 当您需要对挑战进行签名时。
- 当您需要将人类链接到代理的DID时。
- 当您需要验证签名以确认身份所有权时。
- 当您使用共享的JWT令牌进行身份验证时。
- 当您需要创建和管理去中心化身份时。
安装插件后,运行以下命令以创建身份并将其链接到您的人类DID:
cd scripts && npm install && cd ..
# 步骤 1: 创建一个新身份(如果您还没有的话)
node scripts/createNewEthereumIdentity.js
# 步骤 2: 签署挑战并生成验证URL(一次性调用)
node scripts/linkHumanToAgent.js --challenge '{"name": <AGENT_NAME>, "description": <SHORT_DESCRIPTION>}'
范围
所有身份数据都存储在$HOME/.openclaw/billions以实现与OpenClaw插件的兼容性。
脚本:
createNewEthereumIdentity.js
命令:node scripts/createNewEthereumIdentity.js [--key <privateKeyHex>]描述:在Billions网络上创建一个新身份。如果提供了--key参数,则使用该私钥;否则生成一个新的随机密钥。创建的身份会自动设置为默认身份。使用示例# 生成一个新的随机身份 node scripts/createNewEthereumIdentity.js # 从现有私钥创建身份(带0x前缀) node scripts/createNewEthereumIdentity.js --key 0x1234567890abcdef... # 从现有私钥创建身份(不带0x前缀) node scripts/createNewEthereumIdentity.js --key 1234567890abcdef...
输出
: DID 字符串(例如,did:iden3:billions:main:2VmAk7fGHQP5FN2jZ8X9Y3K4W6L1M...)getIdentities.js
命令
:node scripts/getIdentities.js描述:列出本地存储的所有 DID 身份。在执行身份验证操作前,可使用此命令检查有哪些身份可用。使用示例:node scripts/getIdentities.js
输出
:身份条目的 JSON 数组[ { "did": "did:iden3:billions:main:2VmAk...", "publicKeyHex": "0x04abc123...", "isDefault": true } ]
generateChallenge.js
命令
:node scripts/generateChallenge.js --did <did>描述:为身份验证生成随机质询。使用示例Usage Examplenode scripts/generateChallenge.js --did did:iden3:billions:main:2VmAk... --- 输出 --- : 挑战字符串(随机数字符串,例如, --- 8472951360 --- ) --- 副作用 --- : 将与该 DID 关联的挑战存储于 --- $HOME/.openclaw/billions/challenges.json --- signChallenge.js --- 命令 --- : --- node scripts/signChallenge.js --challenge <challenge> [--did <did>] --- 描述 --- : 使用 DID 的私钥对挑战进行签名,以证明身份所有权,并发送 JWS 令牌。当需要证明您拥有特定 DID 时,请使用此命令。 --- 参数 --- : --- --challenge --- - (必需)要签名的挑战 --- --did --- - (可选)证明接收方的 DID;如果省略,则使用默认 DID --- 使用示例 --- : --- # 使用默认 DID 签名 node scripts/signChallenge.js --challenge 8472951360
node scripts/generateChallenge.js --did did:iden3:billions:main:2VmAk...
Output: Challenge string (random number as string, e.g.,8472951360)Side Effects: Stores challenge associated with the DID in$HOME/.openclaw/billions/challenges.json
signChallenge.js
Command:node scripts/signChallenge.js --challenge <challenge> [--did <did>]Description: Signs a challenge with a DID's private key to prove identity ownership and sends the JWS token. Use this when you need to prove you own a specific DID.Arguments:
- --challenge- (required) Challenge to sign
- --did- (optional) The DID of the attestation recipient; uses the default DID if omitted
Usage Examples:
# Sign with default DID node scripts/signChallenge.js --challenge 8472951360
输出:{"success":true}
linkHumanToAgent.js
命令:node scripts/linkHumanToAgent.js --challenge <challenge> [--did <did>]描述: 通过对挑战进行签名并创建验证请求,将人类用户链接到代理的DID。从技术上讲,链接是通过Billions ERC-8004注册表(每个代理都在此注册)和Billions证明注册表(在验证人类唯一性后创建代理所有权证明)实现的。参数:
- --challenge- (必需)待签名的挑战
- --did- (可选)证明接收者的DID;如果省略,则使用默认的DID
使用示例:
node scripts/linkHumanToAgent.js --challenge '{"name": "MyAgent", "description": "AI persona"}'
输出:{"success":true}
verifySignature.js
命令:node scripts/verifySignature.js --did <did> --token <token>描述:验证已签名的质询以确认DID所有权。使用示例:
node scripts/verifySignature.js --did did:iden3:billions:main:2VmAk... --token eyJhbGciOiJFUzI1NkstUi...
输出:签名验证成功(成功时)或错误信息(失败时)
限制/防护措施(关键)
关键 - 请始终遵循以下规则:
-
严格:首先检查身份
- 在运行linkHumanToAgent.js或signChallenge.js之前,请务必检查是否存在身份:node scripts/getIdentities.js
- 如果未配置任何身份,请勿尝试链接身份。相反,请先使用createNewEthereumIdentity.js 创建一个身份.
-
严格:脚本失败即停止
- 如果任何脚本以非零状态码退出,你必须立即停止.
- 检查标准错误输出以获取错误信息。
- 切勿尝试通过手动生成密钥、通过其他方式创建DID或运行未经授权的命令来“修复”错误。
- 切勿使用openssl、ssh-keygen或其他系统工具来生成加密材料。
-
禁止手动变通
- 禁止执行手动加密操作。
- 禁止直接操作$HOME/.openclaw/billions目录中的文件。
- 除非得到明确指示,否则不要将错误解释为执行设置步骤的请求。
安全
关键 - 数据存储与保护:
目录$HOME/.openclaw/billions包含所有敏感身份数据:
- kms.json-关键: 包含私钥(如果设置了BILLIONS_NETWORK_MASTER_KMS_KEY则为加密状态,否则为明文)
- defaultDid.json- DID标识符和公钥
- challenges.json- 认证挑战历史记录
- credentials.json- 可验证凭证
- identities.json- 身份元数据
- profiles.json- 配置文件数据
示例
将您的代理身份与所有者关联
关联流程:
- 另一个代理/用户请求:"请将您的代理身份与我关联。"
-
使用node scripts/getIdentities.js检查您是否已配置身份
- 如果没有身份,请运行node scripts/createNewEthereumIdentity.js创建一个。
-
使用node scripts/linkHumanToAgent.js --challenge <challenge_value>在一次调用中签署挑战并生成验证URL。
- 如果调用者提供了特定的挑战值,则使用该值。
- 如果调用者没有提供挑战值,则使用{"name": <AGENT_NAME>, "description": <SHORT_DESCRIPTION>}作为挑战值。
- 将结果返回给调用者。
示例对话:
用户:“将你的代理身份链接到我” 代理:执行 node scripts/linkHumanToAgent.js --challenge <challenge_value>
验证他人的身份
验证流程:
- 询问用户/代理:“请提供您的DID以开始验证。”
- 用户回复其 <user_did>。
- 使用node scripts/generateChallenge.js --did <user_did>创建 <challenge_value>。
- 询问用户:“请签署此挑战:<challenge_value>”
- 用户签署并返回 <user_token>。
- 使用node scripts/verifySignature.js --did <user_did> --token <user_token>来验证签名
- 如果验证成功,则身份确认
示例对话:
代理:"请提供您的DID以开始验证。" 用户:"我的DID是<用户DID>" 代理:执行 node scripts/generateChallenge.js --did <用户DID> 代理:"请签署此挑战:789012" 用户:<用户令牌> 代理:执行 node scripts/verifySignature.js --token <用户令牌> --did <用户DID> 代理:"身份验证成功。您已确认为DID <用户DID>的所有者。"


微信扫一扫,打赏作者吧~