OpenBytes 网络 API 端到端工作流,用于 AI 代理。包括钱包签名认证、链上充值监控、消费者 API 密钥生命周期管理...
OpenBytes Control Plane Skill. 此技能从API使用角度描述OpenBytes网络的端到端操作工作流程. .是一项面向实际任务的技能,主要用于Wallet基于签名的认证流程.;On-cha。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
该技能从API 使用视角描述 OpenBytes 网络的端到端运维工作流。
前提假设:
https://gateway.openbytes.ai84532请根据需要将所有 替换为实际的网关 URL。
注意:消息签名必须由用户使用其 EVM 钱包完成。Agent 仅可发起挑战并验证签名;不可生成签名。
import { Wallet } from "ethers";
const wallet = Wallet.createRandom();
console.log("Address:", wallet.address);
console.log("Private Key (save this securely!):", wallet.privateKey);
或使用 viem:
import { createWallet } from "viem/accounts";
const wallet = createWallet();
console.log("Address:", wallet.address);
console.log("Private Key (save this securely!):", wallet.privateKey);
切勿泄露您的私钥。请备份并将其存储在安全位置。
"wallet_address": "0x...",
"chain_id": "8453"
message 进行链下签名。curl -sS -X POST "/v1/auth/wallet/verify" -H "Content-Type: application/json" -d '{ "wallet_address": " ", "nonce": "random-nonce", "signature": " " }'
成功响应(简化版):
{
"login_token": "sess-...",
"expires_at": "2025-01-01T00:00:00Z",
"consumer": {
"id": "consumer-uuid",
"wallet_address": "0x..."
},
"session": {
"id": "session-uuid"
}
}
login_token(以 sess- 开头)用作会话令牌:
Authorization: Bearer 发送。列举可用模型
curl -sS -X GET "/v1/models"
检查项:
Authorization: Bearer sess-... 请求头中。Authorization: Bearer 。消费者使用 API 密钥访问模型,无需维持会话。
需提供有效的会话令牌(即第 1 节中获取的 login_token)。
curl -sS -X POST "/v1/consumer/api-keys" -H "Content-Type: application/json" -H "Authorization: Bearer " -d '{ "label": "my-key" }'
响应示例(请安全保存 api_key;该值仅返回一次!):
{
"id": "key-uuid",
"api_key": "sk-consumer-...",
"prefix": "sk-cons",
"suffix": "abcd",
"label": "my-key",
"status": "active",
"created_at": "2025-01-01T00:00:00Z"
}
请立即切换至此 API 密钥,用于推理、余额及用量相关调用:
export OPENBYTES_API_KEY="sk-consumer-..."
随后使用:
curl -sS -X GET "/v1/balance" -H "Authorization: Bearer $OPENBYTES_API_KEY"
curl -sS -X GET "/v1/consumer/api-keys" -H "Authorization: Bearer "
curl -sS -X DELETE "/v1/consumer/api-keys/ " -H "Authorization: Bearer "
密钥状态将被设为 revoked;此后使用该密钥的调用将因鉴权失败而报错。
充值操作在链上执行(将 USDC 转入 ConsumerDeposit 合约),由链下索引器追踪。API 提供结果验证能力。
您可使用自建 RPC 节点;Base Sepolia 默认 RPC 地址为 https://sepolia.base.org。
0x10065E7b353371DD2e12348e7094cC774638EbEB0xB0E9ebf19AB710d3353c7F637DC55329d9727dCcfunction deposit(uint256 amount)验证余额:
curl -sS -X GET "/v1/balance" -H "Authorization: Bearer "
响应示例:
{
"balance_usdc": "123.45",
"total_spent": "10.00"
}
此功能用于允许某账户连接至运营商账户,以便运营商可便捷为您充值。该操作需对结构化消息进行钱包签名,且签名必须由子钱包生成。
端点:
curl -sS -X POST "/v1/consumers/me/parent" -H "Content-Type: application/json" -H "Authorization: Bearer " -d '{ "parent_wallet": " ", "issued_at": 1710000000, "signature": " " }'
注意事项:
ethers.verifyMessage(message, signature) 验证签名,且恢复出的地址必须与子钱包地址一致(不区分大小写)。此为标准 EIP-191 个人消息签名(与 SIWE 流程相同)。issued_at 为Unix 秒级时间戳,须满足:距当前时间不超过 5 分钟,且不得超前超过 1 分钟。Authorize parent for OpenBytes Parent wallet:Child wallet: Issued at:
为父钱包地址小写形式。 为子钱包地址小写形式(即签名者)。 与请求体中发送的 Unix 秒级整数完全一致。伪代码(客户端):
const issuedAt = Math.floor(Date.now() / 1000);
const parentWallet = parentWalletAddress.toLowerCase();
const childWallet = childWalletAddress.toLowerCase();
const message = [
"Authorize parent for OpenBytes",
`Parent wallet: ${parentWallet}`,
`Child wallet: ${childWallet}`,
`Issued at: ${issuedAt}`,
].join("\n");
const signature = await wallet.signMessage(message); // EIP-191 personal_sign
成功响应(201):
{
"parent_consumer_id": "consumer-uuid",
"parent_wallet_address": "0x...",
"created_at": "2025-01-01T00:00:00Z"
}
常见错误:
400 INVALID_REQUEST 请求体无效400 SIGNATURE_EXPIRED issued_at 超出有效时间窗口404 PARENT_NOT_FOUND 未找到父账户400 SELF_PARENT 不可声明自身为父账户401 SIGNATURE_MISMATCH 签名非来自子钱包409 ALREADY_SET 父账户已设置在处理 OpenBytes 网络运维支持任务时,请遵循以下最佳实践:
、 等)。error.code 及上下文选择修复步骤。相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章