Skip to main content

Chaintable 平台提供了全托管的 OpenAPI 功能,支持将用户编写的计算函数(Functions)直接发布为标准的 HTTP 服务,方便下游业务系统直接调用。

网关与执行架构

OpenAPI 的调用架构在逻辑上分为两层:
  • 产品业务端 OpenAPI 网关:负责统一接收用户的请求,执行鉴权限流计费以及日志记录
  • SyncInvoker(独立部署):网关验证通过后,将请求转发给独立部署的 SyncInvoker 集群,实际执行特定的 Function 并返回数据结果。独立部署的设计能够有效避免平台内部其他业务对 API 调用产生干扰。

接口调用规范

请求示例

用户通过标准的 POST 请求调用特定 endpoint,Header 需要承载平台信息(如 AccessKey):
curl -X POST '[https://openapi.chaintable.com/v1/function/](https://openapi.chaintable.com/v1/function/){function_id}' \
    -H 'accept: application/json' \
    -H 'AccessKey: YOUR_ACCESSKEY' \
    -H 'Content-Type: application/json' \
    -d '[
            "value1",
            123
     ]'

  • Endpoint 路由:不同 function 在逻辑上对应不同的 endpoint,便于统计和归因。
  • 参数数组化:function 的参数本质上是数组(Array)形式,这是平台的特性。目前参数定义是软限制,内部不需要再做额外的字典映射。

成功返回 (HTTP 200)

接口保持函数原生的返回形态,不对数据做二次壳协议包裹:
200 OK
Content-Type: application/json
{
    "address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
    "total_volume_usd": 86421.50
}

错误返回 (HTTP 5xx / 4xx)

当调用失败时,使用标准的 HTTP 状态码标识失败,并在 JSON 响应体中提供具体的平台错误原因:
504 Gateway Timeout
Content-Type: application/json
{     
    "code": "function_timeout", 
    "message": "Execution exceeded the time limit." 
}


用量计费与额度限制

1. 计费单位 (Compute Units)

  • 计算公式:单次函数执行按实际执行时间计算用量,1 unit = 1 ms
  • 计费保护:单次请求最低消耗 100 units
  • 责任划分系统错误不消耗 unit。除非明确是“用户错误”,否则其余情况都属于系统错误,不予计费。

2. 扣减机制

平台使用 Redis 作为计费的唯一事实源。每个账号在 Redis 中维护两个实时计数器:
  • monthly(月度额度):月度 unit 随用户套餐账单周期重置,不同套餐的月度额度和额外购买的 addon 额度不能混合。
  • addon(加油包额度):额外购买 addon 时增加。
扣减顺序:消费时优先消耗 monthly 计数器,扣减完毕后再消耗 addon 计数器。所有的 unit 读取和变更都直接以 Redis 的操作结果为准。此外,该数据会同步备份到持久化的权益表(account_openapi_quota)中。

3. 日志审计

所有访问都会产生日志(包含访问基本信息与 unit 消耗信息),并写入 Elasticsearch (ES),用以支撑后续的统计和审查需求。

4. 限制阈值

  • 单次请求维度:超时时间硬性限制为 5 秒
  • 账号维度:实施严格的账号级 RPS(每秒请求数)限制 以及 Units 总量限制

全球套餐标准

套餐算力等级包含月度算力额度 (Compute Units)额外购买单价 (每 1M Units)每秒请求限制 (Requests per second)
$01M units-5 RPS
$960200M units$8100 RPS
$2,880600M units$6.5400 RPS
$9,6002B units$51,600 RPS