Skip to content

Smart Account 策略交易

概述

通过 TEE(Trusted Execution Environment)解决方案,使用智能账户(Smart Account)实现自动化策略交易,涵盖限价单、止盈止损(TP/SL)、清仓等场景,同时支持 Solana 和 EVM 链。


一、Smart Account(SA)核心概念

1.1 SA 定义

已将账户下的多链私钥安全传送给 TEE 服务器的用户被标记为 SA 用户:

  • 通过升级现有 EOA 助记词 wallet 的 account 激活
  • 或创建新的 account
  • 只有 SA 用户可以进行策略交易,其他用户为普通 EOA 用户
  • 一旦标记为 SA,永久保持该标记(即便关闭 TEE 功能)
  • SA 只能在助记词类 wallet 下使用

1.2 使用有效期

  • 默认 7 天有效期(从激活/延长 SA 起算)
  • 过期后 TEE 删除用户私钥,SA 被 disable
  • 关闭期间:SA 订单暂停,不可触发执行,但可正常过期
  • 重启后:用户可选择主动唤醒所有暂停订单,或取消所有订单

二、订单鉴权

2.1 鉴权机制

钱包鉴权接口参数:

方向字段
入参accountId、address、chainId、teeId、command、signMsg、signature
出参accountId、address、chainId、teeId、teeIsActive、command

2.2 意图签名(Intent Signing)

下策略单签名示例:

Chain Index: 501
Strategy Type: Swap
Recipient: jqJw52AgRtdHNmKuxaXSg1ATtTK6JXwTxe4RAuG97jg
Created At: 2025-09-02T10:30:00+09:00
Expired At: 2025-10-24T15:30:00+09:00
From Token: 11111111111111111111111111111111
To Token: So11111111111111111111111111111111111111112
From Amount: 1000000000
Min Return Amount: 1000000000

查询订单签名:

Strategy Type: ReadOrders
Created At: 2023-09-24T18:00:00+09:00
Expired At: 2025-09-24T18:30:00+09:00

取消订单签名:

Strategy Type: CancelSingleOrder / CancelAllOrders
Order Id: 123456

2.3 JWT 认证

通过钱包静默签名完成 JWT 生成,保护敏感数据(用户订单数据),授权一次全站通用。

sequenceDiagram
    participant User as 用户
    participant Wallet as 钱包
    participant Passport as Passport SDK
    participant Store as AuthStore
    participant API as 后端 API

    User->>Wallet: 触发登录
    Wallet->>Passport: 检查链支持 & 静默签名支持
    Passport->>Passport: passport.login(needSign, isSilent)
    Passport-->>Store: authToken → AUTHENTICATED

    Note over User,API: API 请求携带 JWT
    User->>API: 请求 + Header: X-Web3-Auth
    API-->>User: 正常响应

    Note over User,API: Token 过期场景
    User->>API: 请求 + 过期 Token
    API-->>Passport: 返回错误码 10026
    Passport->>Store: removeToken → UNAUTHENTICATED

三、订单存储与查询

3.1 多数据源查询

订单列表查询需融合多个数据源:

入口说明
PC OpenOrders当前活跃订单
PC OrderHistory历史订单
App Ordersorder + orderHistory 按时间倒序
Transactionsorder + orderHistory 按时间倒序(cursor: createTime, orderId)

3.2 多数据源分页方案

游标分页 + 内存排序:

graph TB
    A["查询请求<br/>携带两个数据源的游标"] --> B["并行查询两个数据源<br/>各查 pageSize 条"]
    B --> C["内存合并排序<br/>取前 pageSize 条"]
    C --> D{"结果集包含<br/>哪些数据源?"}

    D -->|"两个源都有"| E["返回结果 + 两个游标<br/>各取最后一条的点位"]
    D -->|"只有源A<br/>源B有数据"| F["源A游标=最后一条<br/>源B游标=第一条+1"]
    D -->|"只有源A<br/>源B无数据"| G["源A游标=最后一条<br/>源B游标=null"]
    D -->|"都无数据"| H["无下一页"]

四、订单流程

4.1 市价 Swap + TP/SL + 清仓

graph TB
    subgraph 用户下单
        A["用户创建市价 Swap<br/>+ 附加 TP/SL"] --> B["意图签名"]
        B --> C["后端创建策略单"]
    end

    subgraph Swap执行
        C --> D["触发市价交易"]
        D --> E["TEE 验证 + 签名"]
        E --> F["广播交易"]
        F --> G{"链上结果"}
    end

    subgraph 后续处理
        G -->|成功| H["创建 TP/SL 子订单"]
        G -->|失败| I["策略单标记失败"]
        H --> J["监听价格信号"]
        J --> K["触发止盈/止损"]
        K --> L["TEE 签名 + 广播"]
    end

4.2 TEE 状态变更对订单影响

stateDiagram-v2
    [*] --> 挂单中: 创建策略单
    挂单中 --> 交易中: 信号触发
    交易中 --> 成功: 链上确认
    交易中 --> 失败: 链上失败
    挂单中 --> 系统暂停: TEE/SA 状态变更
    系统暂停 --> 挂单中: TEE 重新激活 + 用户唤醒
    系统暂停 --> 已取消: 用户取消 / 过期
    挂单中 --> 已过期: 超过有效期

五、EVM 支持

5.1 授权流程

  • 授权时机:触发消息发送后,策略交易验证是否需要授权
  • 确定 from token 的策略(市价+TP/SL、限价):下单时授权
  • 不确定 from token 的策略(Copy Trade):触发时再授权
  • 授权金额:默认无限授权

5.2 Nonce 管理

EVM 链上的 nonce 管理面临两大挑战:

问题描述
低 gas 卡单需要获取卡单交易 nonce 进行加速
Nonce 冲突同一用户多策略被同一信号并发触发

方案对比:

维度方案一(不管理 nonce)方案二(本地 nonce 管理)
实现每次从链上查最新 nonce,批内内存自增本地派发 nonce,管理生命周期
优点方案简单,支持批量广播保证 nonce 连续,支持 nonce 重用和卡单解锁
缺点卡单影响后续订单,并发场景成功率低方案复杂
结论✅ 采用

5.3 回滚处理

graph TB
    subgraph 三种方案
        A["方案一<br/>等待基本不可逆终态<br/>ETH ~13min / BSC ~7.5s"]
        B["方案二<br/>等待 N 个区块确认<br/>ETH ~36s / BSC ~4.5s"]
        C["方案三<br/>监听回滚事件<br/>实时修正订单"]
    end

    D["交易结果回调"] --> C
    E["Auto Sell 场景"] --> B

    style C fill:#e8f5e9
    style B fill:#fff3e0

回滚场景分析:

回滚类型影响处理方式
失败 → 成功正常创建 TP/SLTrigger 正常处理
成功 → 失败资损风险回滚删除 TP/SL
成功 → 成功(数量变化)可能资损用最新状态覆盖 TP/SL

结论:Auto Sell 场景实时处理,如果回滚到达时 TP/SL 已触发则跳过,未触发则覆盖。


六、Trigger 业务

6.1 订单状态流转

graph LR
    subgraph 触发场景
        A["止盈/止损"]
        B["抄底/追涨"]
    end

    subgraph 异常处理
        C["信号超时"] --> D["中断"]
        E["风险代币"] --> F["终止订单 + 推送"]
        G["余额不足 / Gas 不足"] --> H["关闭订单"]
        I["不满足 minReceive / 预执行失败"] --> J["重置触发器"]
        K["TEE 验证/签名失败(未知)"] --> L["重试 N 次后关闭"]
        M["TEE 签名失败(未授权)"] --> N["关闭订单 + 推送"]
        O["广播/链上失败"] --> J
    end

6.2 Trigger → Trade 交互

json
{
  "eventType": 7,
  "chain": 501,
  "userWalletAddress": "XXX",
  "orderInfo": {
    "strategyOrderId": "123456",
    "strategyMode": 3,
    "fromTokenAddress": "XXX",
    "fromTokenAmount": "100.0",
    "toTokenAddress": "XXX",
    "teeVerifyData": { }
  },
  "executeUntilMillis": 1750390482000
}

七、Trade 交易流程

7.1 Solana 流程

主要复用 TG TEE 交易流程,改动:验证服务与签名服务合并到签名服务中,通过 SDK 接入。

7.2 EVM 交易流程

graph TB
    A["收到触发消息"] --> B["询价(批量)"]
    B --> C{"需要授权?"}
    C -->|是| D["发送 Approve 交易"]
    D --> E["等待授权确认"]
    C -->|否| F["TEE 验证 + 签名"]
    E --> F
    F --> G["广播 Swap 交易"]
    G --> H["等待链上结果"]
    H --> I{"交易状态"}
    I -->|成功| J["回调 Trigger<br/>更新订单状态"]
    I -->|失败| K["标记失败<br/>等待下次信号"]

7.3 TEE 验证 & 签名 SDK

签名接口合并验证和签名:/external/api/v2/sign

新增 intent 字段:

  • intent.signature:用户意图签名(Base64),端上透传
  • intent.data:签名原文(UTF-8 编码)
  • intent.extra:附加验证数据(pool token0/token1、fee 等)

八、SA 校验流程

前端 SA 状态校验链(15+ 检查状态):

graph TB
    START["开始检查"] --> C1{"系统就绪?"}
    C1 -->|否| WAIT["等待加载"]
    C1 -->|是| C2{"钱包已连接?"}
    C2 -->|否| S1["未连接钱包"]
    C2 -->|是| C3{"支持的钱包?"}
    C3 -->|否| S2["不支持的钱包"]
    C3 -->|是| C4{"已安装插件?"}
    C4 -->|否| S3["未安装插件"]
    C4 -->|是| C5{"版本支持 SA?"}
    C5 -->|否| S4["版本过低"]
    C5 -->|是| C6{"SA 服务正常?"}
    C6 -->|否| S5["服务异常"]
    C6 -->|是| C7{"SA 账户已创建?"}
    C7 -->|否| S6["SA 未创建"]
    C7 -->|是| C8{"SA 账户活跃?"}
    C8 -->|否| S7["SA 已关闭"]
    C8 -->|是| C9{"链支持?"}
    C9 -->|否| S8["不支持该链"]
    C9 -->|是| C10{"即将过期?"}
    C10 -->|是| S9["⚠️ 即将过期(警告)"]
    C10 -->|否| OK["✅ 正常"]

知识图谱

graph TB
    subgraph SA基础
        A["Smart Account<br/>TEE 托管私钥"]
        B["7天有效期<br/>过期自动删除私钥"]
        C["意图签名<br/>Intent Signing"]
    end

    subgraph 订单系统
        D["策略单<br/>限价/TP/SL/清仓"]
        E["订单鉴权<br/>JWT + 静默签名"]
        F["多源分页查询<br/>游标 + 内存排序"]
    end

    subgraph 执行引擎
        G["Trigger<br/>信号触发"]
        H["Trade<br/>TEE验证+签名+广播"]
        I["回滚处理<br/>方案二/三混合"]
    end

    subgraph EVM扩展
        J["授权管理<br/>无限授权"]
        K["Nonce 管理<br/>链上查询+批内自增"]
        L["广播回调<br/>状态流转"]
    end

    A --> D
    A --> E
    B --> D
    C --> D
    D --> G
    G --> H
    H --> I
    D --> J
    J --> K
    K --> L