返回顶部
8

8004-agent8004代理

>

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 0.0.2
安全检测
已通过
1,369
下载量
免费
免费
1
收藏
概述
安装方式
版本历史

8004-agent

8004 Agent 技能 v0.0.1

在链上注册AI代理(ERC-8004),并通过 SIWA(使用代理登录) 进行身份验证。

概述

ERC-8004(无需信任的代理)提供了三个链上注册表,作为每条链的单例部署:

  • - 身份注册表 — ERC-721 NFT。每个代理获得一个唯一的 agentId(tokenId)和一个指向JSON注册文件的 agentURI。
  • 声誉注册表 — 从客户到代理的反馈信号(评分、标签)。
  • 验证注册表 — 第三方验证者证明(zkML、TEE、质押重执行)。

SIWA(使用代理登录) 是一种挑战-响应身份验证协议(受SIWE / EIP-4361启发),代理通过签署结构化消息来证明对ERC-8004身份的所有权。参见 references/siwa-spec.md



安全架构

完整详情references/security-model.md

代理的私钥是其链上身份的根源。必须保护其免受提示注入、意外泄露和文件系统窥探。

原则:私钥绝不进入代理进程

所有签名都委托给一个密钥环代理服务器——一个独立的进程,持有加密的私钥,仅暴露HMAC认证的签名端点。代理可以请求签名,但即使在完全被攻破的情况下(通过提示注入执行任意代码),也无法提取密钥。

代理进程 密钥环代理服务器(端口3100)
(自动检测自 (持有加密私钥)
KEYRINGPROXYURL)

createWallet()
|
+--> POST /create-wallet
+ HMAC-SHA256 头部 ---> 生成密钥,加密到磁盘
<-- 仅返回 { address }

signMessage(hello)
|
+--> POST /sign-message
+ HMAC-SHA256 头部 ---> 验证HMAC + 时间戳(30秒窗口)
加载密钥,签名,丢弃密钥
<-- 返回 { signature, address }

为什么这是安全的:

属性详情
密钥隔离私钥存在于独立的操作系统进程中;从不进入代理内存
传输认证
对方法 + 路径 + 主体 + 时间戳进行HMAC-SHA256;30秒重放窗口 |
| 审计追踪 | 每个签名请求都记录时间戳、端点、源IP、成功/失败 |
| 攻破限制 | 即使完全接管代理,也只能请求签名——无法提取密钥 |

环境变量:

变量使用者用途
KEYRINGPROXYURL代理代理服务器URL——私有(例如 http://keyring-proxy:3100)或公共
KEYRINGPROXYSECRET
两者 | HMAC共享密钥 |
| KEYRINGPROXYPORT | 代理服务器 | 监听端口(默认:3100) |
| AGENTPRIVATEKEY | 代理服务器 | 十六进制编码的私钥(0x...)——使用现有钱包而非生成新钱包 |
| KEYSTOREPASSWORD | 代理服务器 | 加密文件密钥库的密码(使用 AGENTPRIVATE_KEY 时不需要) |

自动检测:当设置了 KEYRINGPROXYURL 时,KEYSTOREBACKEND 自动默认为 proxy——无需手动设置。当在代理服务器上设置了 AGENTPRIVATEKEY 时,KEYSTOREBACKEND 默认为 env。
代理服务器默认使用AES加密的V3 JSON密钥库(scrypt KDF)存储密钥。要使用现有钱包,请在代理服务器上设置 AGENTPRIVATEKEY——密钥在运行时保存在内存中(无需加密文件)。

密钥库API

@buildersgarden/siwa/keystore 模块仅暴露以下操作——均不返回私钥:

createWallet() → { address, backend } // 创建密钥,仅返回地址
signMessage(msg) → { signature, address } // 通过代理签名,密钥从不暴露
signTransaction(tx) → { signedTx, address } // 相同模式
signAuthorization(auth) → SignedAuthorization // EIP-7702委托签名
getAddress() → string // 仅公共地址
hasWallet() → boolean

使用代理后端时,getSigner() 不可用——请改用 signMessage() / signTransaction()。

重要提示:安装并使用SDK

代理必须使用 @buildersgarden/siwa SDK 与密钥环代理交互。SDK自动处理HMAC认证。

步骤1 — 安装SDK(如果环境中尚未提供):

bash
npm install @buildersgarden/siwa

步骤2 — 设置环境变量:

KEYRINGPROXYURL=https://your-keyring-proxy.up.railway.app
KEYRINGPROXYSECRET=

步骤3 — 使用SDK函数(切勿直接调用代理HTTP端点):

typescript
import { createWallet, signMessage, getAddress } from @buildersgarden/siwa/keystore;

const info = await createWallet(); // SDK内部处理HMAC认证
const { signature } = await signMessage(msg); // SDK内部处理HMAC认证
const address = await getAddress(); // SDK内部处理HMAC认证

SDK从环境变量读取 KEYRINGPROXYURL 和 KEYRINGPROXYSECRET,并自动构建正确的HMAC头部。

备用方案:手动HMAC认证(不使用SDK)

如果绝对无法安装SDK(例如非Node.js环境、受限运行时),可以使用下面描述的HMAC协议直接调用代理HTTP端点。尽可能优先使用SDK。

每个请求所需的头部(GET /health 除外):

头部
Content-Typeapplication/json
X-Keyring-Timestamp
当前时间的Unix纪元毫秒(例如 1738792800000) |
| X-Keyring-Signature | 负载字符串的HMAC-SHA256十六进制摘要(见下文) |

HMAC负载格式——一个由四个部分组成的字符串,用换行符(\n)分隔:

{METHOD}\n{PATH}\n{TIMESTAMP}\n{BODY}

部分
METHODHTTP方法,大写(始终为 POST)
PATH
端点路径(例如 /create-wallet、/sign-message) | | TIMESTAMP | 与 X-Keyring-Timestamp 头部相同的值 | | BODY | 原始JSON请求体字符串(例如 {} 或 {message:hello}) |

计算签名:

HMAC-SHA256(secret, POST\n/create-wallet\n1738792800000\n{}) → 十六进制摘要

时间戳窗口: 服务器拒绝时间戳与服务器时间相差超过 30秒 的请求。

示例 — 创建钱包(无SDK的Node.js):

typescript
import crypto from crypto;

const PROXYURL = process.env.KEYRINGPROXY_URL;
const SECRET = process.env.KEYRINGPROXYSECRET;

async function proxyRequest(path: string, body: Record = {}) {
const bodyStr = JSON.stringify(body);
const timestamp = Date.now().toString();
const payload = POST\n${path}\n${timestamp}\n${bodyStr};
const signature = crypto.createHmac(sha256, SECRET).update(payload).digest(hex);

const res = await fetch(${PROXY_URL}${path}, {
method: POST,
headers: {
Content-Type: application/json,
X-Keyring-Timestamp: timestamp,
X-Keyring-Signature: signature,
},
body: bodyStr,
});

if (!res.ok) throw new Error(${path} failed (${res.status}): ${await res.text()});
return res.json();
}

// 使用
const wallet = await proxyRequest(/create-wallet); // { address, backend }
const addr = await proxyRequest(/get-address); // { address }
const sig = await proxyRequest(/sign-message, { message: hello }); // { signature, address }

示例 — 创建钱包(Python):

python
import hmac, hashlib, json, time, requests, os

PROXYURL = os.environ[KEYRINGPROXY_URL]
SECRET = os.environ[KEYRINGPROXYSECRET]

def proxy_request(path, body=None):
if body is None:
body = {}
body_str =

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 erc8004-agent-1776357029 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 erc8004-agent-1776357029 技能

通过命令行安装

skillhub install erc8004-agent-1776357029

下载

⬇ 下载 8004-agent v0.0.2(免费)

文件大小: 24.51 KB | 发布时间: 2026-4-17 15:40

v0.0.2 最新 2026-4-17 15:40
No file changes detected since the previous release.

- Version bumped to 0.0.2 with no functional or documentation updates.
- No user-facing or internal changes; behavior is identical to v0.0.1.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部