Polymarket — не обычная биржа. Чтобы выставить ордер, нужно пройти два уровня авторизации: подписать данные по EIP-712 и добавить HMAC-SHA256 заголовок. Многие интеграции решают это просто: хранят приватный ключ на сервере. Это удобно для разработчика, но плохо для пользователя.
Есть способ лучше — разделить подпись и отправку. Разберём на примере копитрейдинга, где нужно повторять сделки за другими трейдерами быстро и без лишних телодвижений.
Почему это вообще проблема
CLOB-биржа Polymarket требует подпись каждого ордера. Если сервер хранит ключ, то взлом сервера — это потеря всех средств пользователей. Даже если ключ зашифрован, он всё равно лежит в месте, которое атакуют.
Копитрейдинг добавляет к этому требование скорости: увидел чужую ставку — надо повторить её, пока цена не ушла. Схема, где каждую сделку вручную подтверждают через интерфейс биржи, не подходит. Но и отдавать ключ на сервер — перебор.
Схема: подписывает браузер, отправляет сервер
Приватный ключ всегда остаётся в MetaMask. Сервер готовит всё для подписи, а после подписи — проксирует ордер на биржу. Такую архитектуру можно собрать из трёх частей:
- Backend собирает неподписанный ордер и подтягивает актуальную цену;
- MetaMask подписывает типизированные данные EIP-712 на стороне клиента;
- Backend добавляет HMAC-заголовки и отправляет подписанный ордер в CLOB API.
Приватный ключ не покидает MetaMask. Никогда.
Это ключевой момент. Сервер даже не видит ключ — он видит только подпись.
Как выглядит процесс по шагам
- Пользователь нажимает «Копировать сделку» на карточке трейдера.
- Backend принимает параметры: market slug, outcome, amount, address кошелька.
- Backend формирует типизированные данные EIP-712 — domain, types, order — и отдаёт их клиенту.
- Браузер вызывает метод eth_signTypedData_v4 через MetaMask. Пользователь видит понятное окно с параметрами ордера и подтверждает.
- Backend получает сигнатуру, формирует HMAC-SHA256 подпись сообщения вида timestamp + POST + /order + body.
- Backend отправляет ордер на Polymarket и возвращает результат.
Вся операция занимает меньше минуты — это реально работает.
Безопасность против удобства
| Критерий | Ключ на сервере | Подпись в MetaMask |
|---|---|---|
| Где хранится ключ | В базе или в env-переменной | В кошельке пользователя |
| Риск при взломе сервера | Полная потеря средств | Максимум — подпись, но не ключ |
| Пользовательский опыт | Полностью автоматически | Одно подтверждение на сделку |
| Сложность разработки | Низкая | Средняя: нужно собрать EIP-712 данные и HMAC на бэкенде |
| Подходит для пассивной торговли | Да | Только если пользователь готов нажимать кнопку |
Разница видна сразу. Подпись в MetaMask — это компромисс между автоматизацией и безопасностью. Для копитрейдинга он почти идеален.
Типичные ошибки при реализации
- Хранить API secret от Polymarket на фронтенде. Секрет нужен только бэкенду, иначе его украдут.
- Не проверять актуальность цены на бэкенде перед формированием ордера. Если цена ушла, подпись уже бессмысленна.
- Путать domain в EIP-712. У Polymarket домен фиксированный, любое расхождение — и биржа отклонит подпись.
- Игнорировать timestamp и nonce. Повторная отправка той же подписи может привести к дублю ордера.
- Логировать подписанные ордера целиком. В логах могут оказаться данные, которые позволят подделать запрос.
Когда такая схема не подходит
Если нужна полностью автономная торговля 24/7 — например, бот, который сам следит за трейдерами и мгновенно повторяет сделки — MetaMask не вариант. Нельзя заставить пользователя жать кнопку каждые несколько минут.
Тогда придётся либо хранить ключ в защищённом окружении на сервере, либо использовать депозит на биржу и торговать в рамках её систем. Это другая модель риска, и она должна быть явной для пользователя.
Вывод
Схема с подписью в MetaMask и HMAC-проксированием на бэкенде решает главную проблему копитрейдинга на Polymarket: приватный ключ не покидает кошелёк, но сделки всё равно проходят быстро. Для интеграций, где нужно повторять ставки за другими трейдерами, это надёжный шаблон. Берите его за основу — и не храните ключи там, где их могут украсть.
Комментарии (0)
Войдите, чтобы комментировать.
Пока нет комментариев. Будьте первым.