> For the complete documentation index, see [llms.txt](https://help.tokenpocket.pro/developer-cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.tokenpocket.pro/developer-cn/agentic-wallet/eip-7715-account-with-permissions.md).

# EIP-7715 Account with permissions

### 什么是 EIP-7715 <a href="#e4-bb-80-e4-b9-88-e6-98-af-eip-7715" id="e4-bb-80-e4-b9-88-e6-98-af-eip-7715"></a>

[EIP-7715](https://eips.ethereum.org/EIPS/eip-7715) 定义了一组 JSON-RPC 方法，让 AI Agent / DApp 可以向钱包请求**执行权限（Execution Permissions）**，在用户授权后，Agent / DApp 可在限定范围内代用户发起链上操作。

### 使用场景 <a href="#e4-bd-bf-e7-94-a8-e5-9c-ba-e6-99-af" id="e4-bd-bf-e7-94-a8-e5-9c-ba-e6-99-af"></a>

它解决的两类典型问题：

1. **高频交互体验差**：游戏、订阅等场景下，用户不必为每一笔操作单独签名。
2. **离线/后台执行**：用户授权后，Agent 或 DApp 可在用户不在线时按规则自动执行（如定投、限价单、周期性扣款）。

### 基本流程 <a href="#e5-9f-ba-e6-9c-ac-e6-b5-81-e7-a8-8b" id="e5-9f-ba-e6-9c-ac-e6-b5-81-e7-a8-8b"></a>

* DAPP/Agent 向用户钱包请求 特定的权限，比如每个月支出10 USDT作为某个功能的订阅费用。
* 用户审查后签名返回对应的权限内容
* DAPP/Agent 可以根据权限内容执行对应的链上操作，比如每个月赚走用户10 USDT

EIP-7715 与 [EIP-7710](https://eips.ethereum.org/EIPS/eip-7710)（Delegation）配合使用：钱包签发授权后返回 `context` 与 `delegationManager`，授权接收方（Session Account）调用 `redeemDelegations` 完成实际执行。

### 核心概念 <a href="#e6-a0-b8-e5-bf-83-e6-a6-82-e5-bf-b5" id="e6-a0-b8-e5-bf-83-e6-a6-82-e5-bf-b5"></a>

#### Permission（权限） <a href="#permission-e6-9d-83-e9-99-90" id="permission-e6-9d-83-e9-99-90"></a>

描述 **Session Account**（`to` 地址）可以代表 **用户账户**（`from` 地址）执行的行为范围。

```typescript
type BasePermission = {
  type: string; // 权限类型，如 erc20-token-periodic
  isAdjustmentAllowed: boolean; // 钱包是否允许用户调整请求额度
  data: Record<string, unknown>; // 类型相关参数
};
```

#### Rule（规则） <a href="#rule-e8-a7-84-e5-88-99" id="rule-e8-a7-84-e5-88-99"></a>

对权限施加额外约束。TokenPocket 当前主要支持 `expiry` 规则（授权过期时间）。

```typescript
type ExpiryRule = {
  type: "expiry";
  data: { timestamp: number }; // Unix 秒级时间戳
};
```

过期时间通过 `rules` 数组传入，不使用顶层 `expiry` 字段：

```typescript
rules: [{ type: "expiry", data: { timestamp: 1735689600 } }];
```

#### Session Account（会话账户） <a href="#session-account-e4-bc-9a-e8-af-9d-e8-b4-a6-e6-88-b7" id="session-account-e4-bc-9a-e8-af-9d-e8-b4-a6-e6-88-b7"></a>

* 对应请求中的 **`to`** 字段。
* 权限授予该地址；后续由该地址（或其控制的 Relayer）调用 `redeemDelegations`。
* 可以是 EOA 或智能账户

#### 授权响应关键字段 <a href="#e6-8e-88-e6-9d-83-e5-93-8d-e5-ba-94-e5-85-b3-e9-94-ae-e5-a-d-97-e6-ae-b5" id="e6-8e-88-e6-9d-83-e5-93-8d-e5-ba-94-e5-85-b3-e9-94-ae-e5-a-d-97-e6-ae-b5"></a>

| 字段                  | 说明                             |
| ------------------- | ------------------------------ |
| `context`           | 不透明权限上下文，redeem 时必须传入          |
| `delegationManager` | DelegationManager 合约地址         |
| `dependencies`      | 未部署账户的 factory 信息，需先部署再 redeem |

### TokenPocket 支持概览 <a href="#tokenpocket-e6-94-af-e6-8c-81-e6-a6-82-e8-a7-88" id="tokenpocket-e6-94-af-e6-8c-81-e6-a6-82-e8-a7-88"></a>

#### 支持的权限类型 <a href="#e6-94-af-e6-8c-81-e7-9a-84-e6-9d-83-e9-99-90-e7-b1-bb-e5-9e-8b" id="e6-94-af-e6-8c-81-e7-9a-84-e6-9d-83-e9-99-90-e7-b1-bb-e5-9e-8b"></a>

| 类型                      | 说明                  |
| ----------------------- | ------------------- |
| `erc20-token-periodic`  | ERC-20 周期性额度（每周期重置） |
| `native-token-periodic` | 原生币周期性额度            |
| `erc20-token-stream`    | ERC-20 流式额度（按秒线性累计） |
| `native-token-stream`   | 原生币流式额度             |

#### 常见支持链 <a href="#e5-b8-b8-e8-a7-81-e6-94-af-e6-8c-81-e9-93-be" id="e5-b8-b8-e8-a7-81-e6-94-af-e6-8c-81-e9-93-be"></a>

| Chain ID | hex      | 网络               | 状态          |
| -------- | -------- | ---------------- | ----------- |
| 56       | `0x38`   | BNB Chain        | online      |
| 1        | `0x1`    | Ethereum Mainnet | coming soon |
| 137      | `0x89`   | Polygon          | coming soon |
| 42161    | `0xa4b1` | Arbitrum One     | coming soon |
| 8453     | `0x2105` | Base             | coming soon |
| 10       | `0xa`    | Optimism         | coming soon |

实际可用链以 `wallet_getSupportedExecutionPermissions` 返回为准。

#### 支持的请求 <a href="#e6-94-af-e6-8c-81-e7-9a-84-e8-af-b7-e6-b1-82" id="e6-94-af-e6-8c-81-e7-9a-84-e8-af-b7-e6-b1-82"></a>

```typescript
optionalMethods: [
  "wallet_requestExecutionPermissions",
  "wallet_getSupportedExecutionPermissions",
  "wallet_getGrantedExecutionPermissions",
];
```

### 安全建议 <a href="#e5-ae-89-e5-85-a8-e5-bb-ba-e8-ae-ae" id="e5-ae-89-e5-85-a8-e5-bb-ba-e8-ae-ae"></a>

* 仅请求业务所需的最小权限与最短有效期。
* `to` 地址对应的私钥由 DApp/Agent 安全保管，勿泄露给用户无关方。
* 向用户清晰展示 `justification`（授权说明）与额度限制。
* 生产环境务必在请求前调用 `wallet_getSupportedExecutionPermissions` 做能力探测。
