---
name: okx-x402-payer
description: "Этот навык следует использовать, когда пользователь запрашивает 'оплату работнику', 'отправку USDT', 'осуществление платежа через x402', 'выполнение ончейн-платежа', упоминает '付款', '支付USDT', 'x402', 'pay worker', '链上支付', 'settle payment', 'OKX支付', 'X Layer转账', или когда верификатор подтвердил действительность доказательства, и требуется выполнить ончейн-расчет в C2C-сделке. Этот навык является заключительным этапом в цепочке доверия VeriTask: он использует OKX в качестве посредника для выполнения бегазовой оплаты USDT с помощью подписи EIP-712 и EIP-3009 TransferWithAuthorization на X Layer. НЕ используйте, когда пользователь просто хочет проверить баланс кошелька (используйте okx-wallet-portfolio) или обменять токены (используйте okx-dex-swap)."
license: MIT
metadata:
author: veritask
version: "3.0.0"
homepage: "https://github.com/veritask/veritask"
openclaw:
requires:
bins: ["python"]
env: ["OKX_API_KEY", "OKX_SECRET_KEY", "OKX_PASSPHRASE", "CLIENT_PRIVATE_KEY"]
---
# НАВЫК: OKX x402 Payer
> **Роль**: Навык VeriTask для ончейн-платежей на стороне клиента, выполняющий платежи USDT без газа на X Layer через REST API OKX x402.
> **Входящие и исходящие данные**: `verifier` успешно завершил проверку → выполнение платежа этим навыком → вывод txHash + ссылка на обозреватель блокчейна.
> **Основные преимущества**: OKX выступает в качестве посредника, оплачивая газ (OKB), клиент только подписывает EIP-712 для выполнения ончейн-перевода.
---
## Предварительные проверки
| Элемент проверки | Требования |
|--------|------|
| Python 3.10+ | `python --version` |
| eth-account | `pip install eth-account` |
| requests | `pip install requests` |
| Ключи API OKX | `OKX_API_KEY`, `OKX_SECRET_KEY`, `OKX_PASSPHRASE` (переменные окружения) |
| Кошелек клиента | `CLIENT_PRIVATE_KEY` (переменная окружения, используется для подписи EIP-712) |
| Адрес контракта токена | `TOKEN_CONTRACT_ADDRESS` (переменная окружения, по умолчанию USDT) |
| (Опционально) Тестовая сеть | OKX X Layer Faucet: `https://web3.okx.com/xlayer/faucet` |
---
## Маршрутизация навыка
Агент должен вызвать этот навык, если выполнены следующие условия:
- Пользователь явно запрашивает оплату работнику.
- В C2C-процессе автоматически запускается после того, как `verifier` возвращает `is_valid: true`.
- Является последним шагом в внутренней организации `task-delegator`.
**Не следует вызывать**: Если пользователь просто хочет проверить баланс (следует перенаправить на OKX `okx-wallet-portfolio`); если пользователю требуется обмен (следует перенаправить на `okx-dex-swap`).
---
## Индекс команд
```bash
# Базовый вызов — оплата работнику 0.01 USDT (mainnet)
python {baseDir}/okx_x402_payer.py --to <worker_wallet> --amount 0.01
# Указание сети
python {baseDir}/okx_x402_payer.py --to <worker_wallet> --amount 0.5 --chain mainnet
# JSON-вывод для машинной читаемости
python {baseDir}/okx_x402_payer.py --to <worker_wallet> --amount 1.0 --json
```
### Описание параметров
| Параметр | Обязательный | Значение по умолчанию | Описание |
|------|------|--------|------|
| `--to` | Да | — | Адрес кошелька работника (получатель) |
| `--amount` | Нет | `1.0` | Сумма USDT для оплаты |
| `--chain` | Нет | `testnet` | `testnet` (chainIndex=195) или `mainnet` (196) |
| `--json` | Нет | — | Вывод в формате JSON |
---
## Последовательность действий
```
Шаг 1 → Создание EIP-712 TypedData (TransferWithAuthorization / EIP-3009)
domain: {name: "USD₮0", version: "1", chainId: 196, verifyingContract: 0x779ded...}
message: {from, to, value, validAfter, validBefore, nonce}
Шаг 2 → eth_account.sign_typed_data(private_key, ...) → получение v, r, s
Шаг 3 → POST https://web3.okx.com/api/v6/x402/verify → проверка, что isValid == true
Шаг 4 → POST https://web3.okx.com/api/v6/x402/settle → получение txHash
OKX выступает в качестве посредника, оплачивая газ (OKB), USDT напрямую переводится на кошелек работника.
```
---
## Примеры входных и выходных данных
**Входные данные:**
```bash
python okx_x402_payer.py --to 0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18 --amount 1.0 --json
```
**Выходные данные (PaymentResult):**
```json
{
"success": true,
"txHash": "0xabc123def456...",
"amount_usdt": 0.01,
"chain": "xlayer-mainnet",
"chainIndex": 196,
"explorer_url": "https://www.okx.com/web3/explorer/xlayer/tx/0x7de15cca..."
}
```
---
## Необходимые переменные окружения
| Переменная | Описание | Пример (Sandbox) |
|------|------|----------------|
| `OKX_API_KEY` | Ключ API OKX | `<YOUR_OKX_API_KEY>` |
| `OKX_SECRET_KEY` | Секретный ключ API OKX | `<YOUR_OKX_SECRET_KEY>` |
| `OKX_PASSPHRASE` | Парольная фраза API OKX | `<YOUR_OKX_PASSPHRASE>` |
| `CLIENT_PRIVATE_KEY` | Закрытый ключ кошелька клиента (в шестнадцатеричном формате) | `0xabc...` |
| `TOKEN_CONTRACT_ADDRESS` | Адрес контракта токена (USDT) | `0x779ded0c9e1022225f8e0630b35a9b54be713736` |
| `CHAIN_INDEX` | ID сети | `196` (mainnet) |
---
## Взаимодействие с другими навыками
| Шаг | Навык | Описание |
|------|------|------|
| 1 | defi-scraper (Worker) | Сбор данных |
| 2 | proof-generator (Worker) | Генерация ProofBundle |
| 3 | verifier | Проверка доказательства → `is_valid: true` |
| 4 | **okx-x402-payer** (Этот навык) | Ончейн-платеж USDT |
---
## Интеграция с другими навыками: OKX OnchainOS Skills
Этот навык глубоко интегрирован с навыками OKX onchainos:
- `okx-wallet-portfolio`: Проверка баланса USDT в кошельке клиента перед оплатой.
- `okx-dex-swap`: Если недостаточно USDT, сначала обмен других токенов на USDT.
- `okx-onchain-gateway`: В продвинутых сценариях прямая трансляция пользовательской транзакции.
---
## Нестандартные ситуации
- **Недостаточно средств**: OKX verify возвращает `isValid: false` → выводится сообщение об ошибке и предлагается пополнить кошелек.
- **Ошибка подписи**: Неправильный формат закрытого ключа или отсутствующие переменные окружения → четкое сообщение об ошибке.
- **Ошибка сети**: API OKX недоступен → рекомендуется проверить сетевое соединение или переключить конечную точку API.
- **Конфликт nonce**: Используется `os.urandom(32)` для генерации случайного nonce, чтобы избежать повторной отправки.