Аутентификация
Чтение данных рынков публично. Торговые эндпоинты требуют API-ключи и подпись HMAC-SHA256 на каждом запросе. Ключи выводятся один раз из подписи кошелька и используются повторно.
Без хранения средств
Ваш приватный ключ никогда не покидает ваше устройство. API-секрет лишь подписывает запросы — он не может двигать средства. Ордера авторизуются подписью вашего кошелька и сеттлятся в блокчейне.Получите API-ключи#
Подпишите сообщение кошельком и обменяйте его на тройку ключей: apiKey, secret, passphrase. Храните их безопасно (например, в переменных окружения) — секрет показывается один раз.
POST
/clob/auth/derive-api-keyimport { TradingClient } from "@market/sdk";
// 1) Sign this exact message with your wallet (e.g. via viem/ethers):
const signature = await wallet.signMessage({ message });
// 2) Exchange the signature for credentials:
const creds = await TradingClient.deriveApiKey(
"https://globet.market/clob",
"0xYourWallet",
signature
);
// => { apiKey, secret, passphrase }Подпись запросов#
Каждый авторизованный запрос несёт пять заголовков. Подпись — это HMAC-SHA256 (hex) от канонического сообщения из таймстампа, метода, пути и тела запроса.
| Заголовок | Значение | Описание |
|---|---|---|
poly_addressreq | string | Адрес вашего кошелька (0x…). |
poly_api_keyreq | string | Полученный API-ключ. |
poly_passphrasereq | string | Полученная passphrase. |
poly_timestampreq | string | Unix-секунды. Должно быть в пределах ±30с от времени сервера. |
poly_signaturereq | string | HMAC-SHA256 hex от канонического сообщения (ниже). |
Каноническое сообщение
Подписываемая строка — этоtimestamp + METHOD + path + body без разделителей. path — только путь URL (без хоста и query). body — точная отправляемая JSON-строка (пусто для GET).import { createHmac } from "crypto";
function signedHeaders(opts: {
secret: string; apiKey: string; passphrase: string; address: string;
method: string; path: string; body?: string;
}) {
const timestamp = Math.floor(Date.now() / 1000).toString();
const message = timestamp + opts.method.toUpperCase() + opts.path + (opts.body ?? "");
const signature = createHmac("sha256", opts.secret).update(message).digest("hex");
return {
poly_address: opts.address,
poly_api_key: opts.apiKey,
poly_passphrase: opts.passphrase,
poly_timestamp: timestamp,
poly_signature: signature,
};
}Полный подписанный запрос#
Список ваших открытых ордеров с ручной подписью:
import requests
headers = signed_headers(
secret, api_key, passphrase, address,
method="GET", path="/orders",
)
r = requests.get("https://globet.market/clob/orders", headers=headers)
print(r.json())Рассинхрон времени
Если получаете ошибки401, проверьте часы. Таймстамп должен быть в пределах ±30 секунд от сервера. Время сервера: GET /clob/time.