账户抽象
在 NeuroChain 上,账户是一把 ML-DSA-65 密钥,而不是合约,因此账户抽象内置于协议之中,而不是由钱包合约模拟。它涵盖三件事:由他人支付 gas、受限的密钥代你行事,以及 AI 代理安全地同时使用这两者。
赞助 gas
gas 池是预留出来用于支付交易手续费的 NRO。
| 谁支付手续费 | 何时 |
|---|---|
| 发送方自己的池 | 只要池中余额足以支付手续费 |
| 网络的新用户赞助方 | 钱包能覆盖转账金额但付不起手续费时(只持有别人转给他们的那笔金额的新用户) |
| 发送方的余额 | 其他情况 |
规则:
- 每笔交易的赞助手续费最多为
NEUROCHAIN_MAX_SPONSORED_FEE(100 000 uNRO)。 - 赞助手续费与其他手续费一样被销毁并支付给提议者。
- 新用户赞助方是
NEUROCHAIN_GAS_SPONSOR(默认neuro:faucet.vault);其池在创世时一次性注入NEUROCHAIN_GAS_SPONSOR_FUND(1 000 000 NRO),之后通过存入补充。
| 操作 | 端点 | 签名目标 |
|---|---|---|
| 向你的池存入 NRO | POST /api/v1/sponsor/deposit(address、amount) | neuro:system.sponsor |
| 取回 | POST /api/v1/sponsor/withdraw(address、amount) | neuro:system.sponsor |
| 池余额 | GET /api/v1/sponsor/:address | — |
会话密钥
会话密钥是一把独立的 ML-DSA-65 密钥,由你的主密钥授权代表你的账户行事——在你设定的限制之内:
| 限制 | 字段 | 含义 |
|---|---|---|
| 作用范围 | scope | 该密钥可以转账的目标地址(逗号分隔),或用 * 表示任意地址 |
| 支出上限 | cap | 该密钥在整个生命周期内可转移的 uNRO 总额 |
| 有效期 | expiry_block | 密钥有效的最后区块高度;必须是未来的高度 |
POST /api/v1/session/grant
{
"account": "neuro:<15 hex>.human",
"session_pk": "<会话公钥,hex>",
"scope": "neuro:<10 hex>.app",
"cap": 5000000,
"expiry_block": 120000,
"signature": "…", "public_key": "<主密钥>", "nonce": 1791200000000
}之后,会话密钥以该账户的身份签署普通交易(from = 你的地址,public_key = 会话密钥)。每个验证者都在共识中检查:
- 签名对该会话密钥有效;
- 该账户授予过这把密钥,且未被撤销;
- 当前高度没有超过
expiry_block; - 目标在
scope之内; - 已花费金额加上本次金额不超过
cap。
只有交易成功应用时才记录支出。随时可以用 POST /api/v1/session/revoke(account、session_pk)撤销;用 GET /api/v1/session/list/:account 列出授权。
会话密钥永远不能做的事: 管理 Sentinel 信任列表,或确认、取消被暂扣的转账——这些都需要主密钥。因此代理可以发起一笔有风险的转账,但只有你本人才能批准。
测试情况: 一项在多个验证者上进行的网络测试确认:支出上限在并发交易下依然有效,重放的交易会被拒绝,撤销在每个节点上都会生效。
.agent 账户
.agent 地址是为 AI 代理账户准备的付费名称——由你的 .human 钱包注册、由你的密钥控制,用于持有代理的 gas 池和会话密钥。它不是验证者,也不持有质押。价格按名称长度计算,与自定义名称相同(地址 → 名称价格)。
POST /api/v1/agents/register(name、owner;签名目标 neuro:system.agent),GET /api/v1/agents/:address。
通过 MCP 接入 AI 代理
neurochain-mcp 服务器为 AI 助手(Claude Code、Claude Desktop、任何 MCP 客户端)提供链上读取权限,并在持有会话密钥时提供 nc_transfer、nc_call_contract 和 nc_deploy——但永远不提供主密钥。配置、全部工具和限制:AI 代理(MCP)。