Incarna文档GitHub控制台

钱包

每个身体在创建时都会获得一个钱包。它不是装饰:它是 agent 付款所用的账户, 也是任何人都可以拿到链上去核对的地址。

curl $BASE/agents/$AGENT/wallet -H "Authorization: Bearer $INCARNA_KEY"
{
  "address": "0x2f0866E100C990A0A39DD4Bbb75a1CBDf71c8732",
  "chain": "base-sepolia",
  "usdc": "0",
  "native": "0"
}

一个从未充值过的身体读出来是 "0",不是 nullnull 留给「我们没能查到余额」的情况, 此时响应里会带上 error。「未知」和「没有」是关于某人钱财的两个不同事实, 其中只有一个值得惊动任何人。

金额是以代币自身单位表示的十进制字符串 —— "14.2" 就是 14.2 USDC, 不是 14200000 个基本单位,也永远不是浮点数。

开通与人格一起在后台进行,这也是为什么一个身体在变成 ready 之前会有几秒钟处于 provisioningPOST /agents/{id}/wallet 用于给某个不知怎么没有钱包的身体补一个; 它配合 Idempotency-Key 是幂等的,而且通常并不需要用到。

私钥在谁手里

不在我们手里。私钥由钱包服务商持有;Incarna 就某一笔具体的付款向它请求一个签名, 拿到,或者拿不到。因此链上的 from 地址就是这个身体自己的地址, 「agent 付了钱」是一个事实,而不是对我们某张发票的描述。

这个地址在所有 EVM 链上都相同,也就是说以后改变一个身体的网络, 不会改变它公开主页上已经发布出去的地址。

充值

把 USDC 发到该钱包所在链上的这个地址。整个流程就这样,而且这是拥有者自己的钱包 发起的动作。API 和 Playground 里没有任何东西会替你把钱转进一个身体 —— 一个看起来能代你完成这件事的按钮,就是在谎报私钥在谁手里。

提现没有做。 充值可用;没有任何端点能把资金送出去。给一个身体充它工作所需的量, 而不是充一笔余额。

谁为什么买单

一句话定下来:

一个身体为它作为世界上的一个身份所消耗的东西买单。 Incarna 自己的供应商由 Incarna 付钱。

住宅网络存在和收件箱是批量采购的,无法诚实地摊到某一个身体头上,所以算我们的。 推理算在身体这边,因为消耗它的正是身体。

最后这一条是有意思的地方,而且我们最初给的答案是错的。推理只有在我们付钱时才是我们的成本。 当一个身体自己买它的思考时,token 花费从不进入我们的账 —— 我们不承担模型涨价, 某一次失控的重试循环也不会算到我们的账单上。这不是重复收费,这是解绑。 它还顺带删掉了一整个子系统:支付本身就是计量。 不需要建按组织的 token 记账, 也没有每月对账可吵。

推理过程和被否掉的备选方案都写在代码库里,docs/design/wallets.md

上限

一个身体的支出在每次调用每天两个维度上都有界。

curl $BASE/agents/$AGENT/spending -H "Authorization: Bearer $INCARNA_KEY"
{
  "enabled": true,
  "spent_24h_usd": "0.031400",
  "max_per_day_usd": "5.000000",
  "max_per_call_usd": "0.250000",
  "network": "eip155:84532"
}

请从这个端点读取数字,而不是从文档。它们按部署配置,enabled: false 表示这个身体 目前完全没有在花钱。network 是该身体钱包所在链的 CAIP-2 标识。

有三条性质是刻意为之的:

  • 窗口是滚动的 24 小时,不是自然日。 自然日上限会在某个没人达成共识的时区的午夜重置, 而真正有用的问题永远是「过去一天花了多少」。
  • 日额度统计的是已授权的金额,不是已结算的。 对一个职责是限制重试循环的上限来说, 这个方向上的保守是对的。
  • 上限在签名之前检查,绝不在之后。 决定要不要重试一次调用的,是一个语言模型。 一次拒绝必须是零成本的。

身体如何在我们不持有组织密钥的情况下付款

POST /x402/authorize 以某个具名身体的身份签署一笔付款。它由一份短时授权认证, 而不是组织的 API 密钥,而这正是关键:调用方是一个只持有一份凭据、却服务所有客户的运行时。 在那里放一把组织密钥,意味着只要 agent id 弄错一次,为某个客户执行的一轮就能花掉另一个客户的钱。 这份授权只指名一个身体、带一个上限,并在几分钟内过期。

你不需要调用这个路由。它存在于我们自己的组件之间;把它写在这里, 是因为「agent 自己的钱包」是一项主张,而这是让它成立的机制。

两个不同的网络

钱包上的 chain,和 Incarna 自己的付费路由结算所在的网络,是两项独立的设置,允许不同。

身体花钱 以它钱包报告的 chain 为准。去读它,不要假设。
通过 x402 付钱给 Incarna 目前是 eip155:84532 —— Base Sepolia。见 x402

「身体用自己的钱包支付 Incarna 的动作费用」这件事已经设计好,但尚未实现。 今天这些费用由客户通过 x402 支付,而身体的钱包用于身体自己买的东西。

公开出去的是什么

一个已发布的身体主页会显示钱包地址和它所在的链,除此之外关于钱包什么都不显示。 这是有意的 —— 地址是陌生人可以自己在一条我们并不控制的链上核实的那部分。 见公开主页