身份验证 (Authentication)
私有接口需要使用 Ethereum 钱包私钥进行签名。所有包含 signature 参数的请求都需要遵循以下流程。
签名规则
签名消息由以下部分按顺序拼接而成:
timestamp + method + path + body
timestamp: 毫秒时间戳method: HTTP 方法 (如 POST, GET, DELETE)path: 接口路径 (如 /api/v1/orders)body: 请求体 JSON 字符串 (如无 Body 则为空字符串)
签名算法
使用 secp256k1 曲线进行签名,消息需要使用 Ethereum 的 Personal Sign 格式。
Python 代码示例
import time
import json
from eth_account import Account
from eth_account.messages import encode_defunct
def sign_request(private_key, method, path, body=""):
timestamp = int(time.time() * 1000)
# 构造消 息
message_text = f"{timestamp}{method}{path}{body}"
message = encode_defunct(text=message_text)
# 签名
signed_message = Account.sign_message(message, private_key=private_key)
return {
"signature": signed_message.signature.hex(),
"timestamp": timestamp
}
# 示例:创建订单签名
body = json.dumps({
"symbol": "BTCUSDT",
"side": "buy",
"order_type": "limit",
"amount": "0.1",
"price": "65000"
})
auth_data = sign_request("0x...", "POST", "/api/v1/orders", body)
请求头 (Headers)
虽然签名参数通常放在请求体中,但我们也支持通过 Headers 传递。
| Header | 示例值 |
|---|---|
| X-ZTDX-TIMESTAMP | 1630000000000 |
登录流程 (Login Flow)
对于需要持久化 Session 的应用,可以先进行登录。
1. 获取 Nonce
在使用私钥登录前,必须先获取一个随机的 nonce。
请求
- Method:
GET - Path:
/api/v1/auth/nonce/:address - 特性:
nonce在成功登录后会 自增 1。- 在未登录前多次调用,返回的
nonce保持不变。
路径参数
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| address | string | 是 | Ethereum 地址(0x开头,42字符) |