broker.toml (xeon e5 2695v4 (x2) на huananzhi x-99 fd8 plus, 256 ram (ecc/reg), 1 tb nvme, RTX 3070ti + RTX 4070 ti super)
caution wet floor
Это цена за мегацикл (миллион циклов RISC-V), выраженная в нативном токене сети (например, ETH).
- Чем выше цена, тем выгоднее тебе как пруверу, но тем меньше задач ты получишь (клиенты выбирают дешевые предложения).
- Чем ниже цена, тем больше задач, но ниже доход с каждой.
Текущее значение:
mcycle_price = "0.0000005" # 0.0000005 ETH за 1 млн циклов
Как выбрать оптимальное значение?
- Сравни с другими пруверами:
- Проверь среднюю цену в сети (например, через блокчейн-эксплорер или чаты сообщества).
- Если большинство ставят
0.0000004, а ты0.0000005, твои таски будут брать реже. - Учитывай свои затраты:
- Тестовый режим:
Рекомендация для старта:
mcycle_price = "0.0000004" # Баланс между спросом и доходом
Разбираем параметр mcycle_price_stake_token в конфигурации broker.toml Boundless.
Что это?
- Это цена за мегацикл (миллион RISC-V циклов), но выраженная в стейкинг-токене Boundless (не в ETH или другом нативном токене).
- Используется для заказов, оплаченных стейкинг-токенами (например, если у клиента закончился депозит или заказ с истёкшим сроком).
Текущее значение:
mcycle_price_stake_token = "0.0001" # 0.0001 стейкинг-токена за 1 млн циклов
Как выбрать оптимальное значение?
- Сравнение с
mcycle_price(в ETH) - Рыночная конкуренция
- Если другие пруверы ставят
0.00008StakeToken, твоя цена (0.0001) может быть менее привлекательной. - Если сеть перегружена спросом, можно повысить цену.
- Стейкинг-мотивация
Рекомендация:
mcycle_price_stake_token = "0.00008" # Более конкурентная цена
В запрос добавил, что стейк-токен usdc:
Оптимальная настройка mcycle_price_stake_token для USDC
Исходя из вашей конфигурации и экономики, вот детальные рекомендации:
1. Текущая ситуация:
- Ваша цена: 0.0001 USDC за 1 млн циклов (0.01 цента)
- При 200,000 мегациклов/час: 20 USDC/час (нереалистично высокий доход)
- Проблема: Цена занижена относительно стоимости электричества и оборудования
2. Как рассчитать минимальную цену:
- Себестоимость вычислений:
- Электричество: $0.05/час (500 Вт × $0.1/кВт·ч)
- Амортизация оборудования: ~$0.10/час (примерно $900/год на 2 GPU + CPU)
- Итого: $0.15/час — минимальный доход для безубыточности.
- Минимальная цена:
3. Рекомендуемые значения:
| Цель | Значение (USDC/млн циклов) | Доход при 50k Mcycles/час | |---------------------|---------------------------|--------------------------| | Агрессивная конкуренция | 0.00003 | $1.5/час | | Баланс спроса/дохода | 0.00005 | $2.5/час | | Премиум-сегмент | 0.0001 | $5/час |
[market] mcycle_price_stake_token = "0.00005" # Оптимальный баланс
Оптимальная настройка peak_prove_khz для вашей конфигурации
1. Что означает параметр peak_prove_khz?
- Это оценка пиковой производительности вашего кластера в килогерцах (тысячах циклов в секунду).
- Используется системой для:
- Расчета пропускной способности прувера
- Автоматического ограничения принимаемых задач, чтобы избежать перегрузки
- Значение можно определить через бенчмаркинг с помощью Bento CLI или на основе реальных данных выполнения заказов.
2. Анализ вашего текущего значения
peak_prove_khz = 100 # 100,000 циклов/сек
- Ваш кластер заявляет способность обрабатывать 100,000 RISC-V циклов в секунду.
- В пересчете на мегациклы: 0.1 мегацикла/сек или 360 мегациклов/час.
- Это значение слишком низкое для вашего мощного оборудования (2× Xeon + 2× GPU).
- Фактически вы искусственно ограничиваете свой доход.
peak_prove_khz = 5000 # 5,000,000 циклов/сек
Почему именно 5000 kHz?
- Баланс между доходом и стабильностью:
- Заниженная цифра (
100 kHz) приводит к недогрузке оборудования. - Завышенная (
9,800 kHz) может вызвать перегрев/перегрузку. - 5000 kHz — компромисс для 70-80% загрузки.
- Проверка через Bento CLI:
Запусти тест для точной калибровки:bento benchmark --cycles 10000000 --gpu # Пример команды (уточни в документации)
Оптимальная настройка max_mcycle_limit для вашего оборудования
1. Что означает параметр?
max_mcycle_limit = 8000= 8 миллиардов циклов (8000 × 1 млн)- Это максимальный размер задачи, которую ваш прувер готов выполнять. Задачи сложнее будут автоматически отклоняться.
2. Как выбрать значение для вашего сервера?
- Производительность системы (
peak_prove_khz): - При
5000 kHz(5 млн циклов/сек): - Это разумно, но можно увеличить лимит для более сложных (и дорогих) задач.
- Стабильность работы:
- Экономическая выгода:
max_mcycle_limit = 15000 # 15 млрд циклов (баланс между доходом и стабильностью)
Оптимальная настройка max_journal_bytes
1. Что делает параметр?
max_journal_bytes = 10000ограничивает максимальный размер журнала (журнал — это данные, которые нужно отправить в блокчейн для подтверждения выполнения задачи).- Если журнал превышает этот размер — задача автоматически отклоняется.
2. Как выбрать значение?
- Блокчейн-лимиты:
- Например, в Ethereum максимальный размер данных в транзакции — ~128 KB (но лучше держаться ниже).
- В других сетях (Solana, Polygon) лимиты могут быть выше.
- Экономическая целесообразность:
- Ваша конфигурация:
3. Рекомендуемые значения
| Сценарий | Значение (max_journal_bytes) | Комментарий | |------------------------------|--------------------------------|----------------------------------| | Консервативный (тесты) | 10_000 (10 KB) | Минимум для простых задач | | Стандартный | 100_000 (100 KB) | Баланс стоимости и гибкости | |
Для сложных вычислений | 1_000_000 (1 MB) | Если сеть поддерживает большие журналы |
max_journal_bytes = 100000 # 100 KB (оптимально для большинства сценариев)
Разбор параметра min_deadline (минимальное время до дедлайна)
Что это значит?
min_deadline = 300означает, что ваш прувер будет брать в работу только те задачи, у которых до дедлайна осталось не меньше 300 секунд (5 минут).- Это защита от ситуаций, когда времени может не хватить на выполнение и отправку результата в блокчейн.
Зачем это нужно?
- Техническая страховка:
- Если взять задачу с дедлайном 1 минута → можно не успеть её выполнить и отправить proof → потеря вознаграждения.
- 5 минут — минимальный "буфер" для гарантированного завершения.
- Оптимизация работы:
Как выбрать значение?
Оптимальная настройка lookback_blocks для вашего прувера
1. Что делает этот параметр?
lookback_blocks = 300означает, что при запуске прувер будет проверять последние 300 блоков в блокчейне на наличие незакрытых заказов.- При среднем времени блока 12 секунд это охватывает примерно 1 час истории блокчейна.
2. Как выбрать правильное значение?
- Частота перезапусков прувера:
- Если перезапускаете редко (раз в сутки) — можно увеличить до
1000-2000блоков (~3-6 часов) - Для частых рестартов достаточно
300 - Загрузка сети Boundless:
- При высокой активности (много заказов) лучше уменьшить до
150-200для быстрого старта - При низкой — увеличить для поиска большего количества заказов
- Производительность ноды:
3. Рекомендуемые значения
| Сценарий работы | Значение (блоки) | Примерное время охвата | |--------------------------|------------------|------------------------| | Тестовый режим | 100-200 | 20-40 минут | | Стандартная работа | 300-500 | 1-2 часа | | После длительного простоя | 1000-1500 | 3-5 часов |
4. Особенности для вашей конфигурации
С вашим оборудованием (2× Xeon + 2× GPU) оптимально:
lookback_blocks = 500 # ~100 минут истории при 12s/блок
Оптимальная настройка max_file_size для вашего прувера
1. Что делает этот параметр?
max_file_size = 50_000_000(50 МБ) ограничивает максимальный размер файлов (входных данных/образов), которые прувер будет загружать для обработки задач.- Файлы больше указанного размера автоматически отклоняются.
2. Как выбрать правильное значение?
- Типичные задачи в сети Boundless:
- Для большинства zk-доказательств достаточно 1-10 МБ
- ML-модели могут требовать 20-100 МБ
- Видео/аудио обработка - до 500 МБ
- Ваши аппаратные возможности:
- 256GB RAM - легко обработает файлы до 1GB
- 1TB NVMe - достаточно места для временных файлов
- Сетевой канал - учитывайте скорость загрузки
- Экономическая целесообразность:
3. Рекомендуемые значения
| Тип задач | Значение (байты) | Комментарий | |---------------------|-------------------|----------------------------------| | Легкие вычисления | 10_000_000 (10MB) | Для стандартных zk-proof задач | | Универсальное | 50_000_000 (50MB) | Подходит для большинства ML | | Ресурсоемкие задачи | 200_000_000 (200MB)| Для обработки медиа и больших моделей |
4. Оптимальная настройка для вашего железа
max_file_size = 200_000_000 # 200MB
Оптимальная настройка max_fetch_retries для вашего прувера
1. Что делает этот параметр?
max_fetch_retries = 2определяет, сколько раз прувер будет повторять попытку загрузки входных данных (например, файлов или изображений) при возникновении ошибок сети или временной недоступности URL.- Если не задано, используется значение по умолчанию (обычно 1-3 попытки).
2. Как выбрать правильное значение?
- Стабильность источников данных:
- Если URL часто недоступны или медленные — увеличьте количество попыток
- Для надежных источников можно уменьшить
- Тип задач:
- Таймауты соединения:
3. Рекомендуемые значения
| Сценарий работы | Значение | Комментарий | |--------------------------|----------|----------------------------------| | Стабильная сеть | 2 | Баланс между надежностью и скоростью | | Ненадежные источники | 3-5 | Увеличивает шансы на успешную загрузку | | Очень важные задачи | 5 | Максимальные попытки для гарантии |
4. Оптимальная настройка для вашей конфигурации
max_fetch_retries = 3 # 3 попытки (оптимальный баланс)
Оптимальная настройка max_concurrent_proofs для вашего оборудования
1. Что делает этот параметр?
max_concurrent_proofs = 2ограничивает количество доказательств (proofs), которые могут обрабатываться одновременно- Это критически важный параметр для управления нагрузкой на ваши GPU
2. Анализ для вашей конфигурации
3. Рекомендуемые значения
| Конфигурация | Значение | Обоснование | |-------------|---------|------------| | Консервативная | 2 | По одному proof на GPU (текущая настройка) | | Оптимальная | 3 | Использует 4070 Ti Super для двух proofs + 3070 Ti для одного | | Агрессивная | 4 | Максимальная загрузка (требует мониторинга температуры) |
4. Оптимальная настройка
max_concurrent_proofs = 3 # Лучший баланс производительности
- RTX 4070 Ti Super будет обрабатывать 2 proofs одновременно (благодаря 16GB VRAM)
- RTX 3070 Ti - 1 proof
- CPU-потоки распределяются автоматически
Оптимальная настройка max_concurrent_preflights для вашего сервера
max_concurrent_preflightsограничивает количество одновременных задач предварительной оценки (preflight), которые определяют стоимость выполнения заказа- Защищает систему от перегрузки при массовой обработке входящих запросов
max_concurrent_preflights = 8 # Оптимально для вашего сервера
3. Обоснование выбора
| Значение | Плюсы | Минусы | Подходит для |
| 4 (по умолчанию) | Стабильность | Недоиспользование CPU | Слабых серверов | | 8 (рекомендуем) | Полная загрузка 10-12% CPU | Минимальные задержки | Вашего железа |
| 12+ | Макс. производительность | Риск конфликтов | Спец. задач |
Оптимальная настройка max_critical_task_retries для промышленного сервера
1. Назначение параметра
Параметр max_critical_task_retries = 10 определяет:
- Максимальное количество попыток повтора для критических системных задач
- После исчерпания попыток процесс аварийно завершается
- Защищает от бесконечных циклов при фатальных ошибках
# Производственная среда (high-availability) max_critical_task_retries = 15 # Тестовый режим/разработка # max_critical_task_retries = 3
1. Что делает balance_warn_threshold?
Это пороговое значение баланса кошелька, при котором система начнёт выдавать предупреждения в логах. Если баланс упадёт ниже указанного значения, вы увидите сообщения типа:"Warning: Submitter balance below threshold (0.1 ETH)".
2. Как выбрать значение?
Критерии:
- Стоимость транзакций в сети:
- Если газ дорогой (например, в Ethereum), установите более высокий порог (например,
0.5–1.0), чтобы успеть пополнить баланс до исчерпания. - Для дешёвых сетей (например, Polygon) хватит
0.1–0.3. - Частота отправки транзакций:
- Если ваш прувер активно участвует в тасках (много
lockinRequest/submitProof), ставьте запас0.3–1.0. - Для редких операций достаточно
0.1. - Тип токена:
Пример для вашего случая:
1. Что делает lockin_gas_estimate?
- Это предполагаемый лимит газа для операции
lockinRequest(резервирование таска прувером). - Используется для:
- Если не задан, система использует консервативное значение (например, 400-500k газа).
Рекомендуемые значения:
| Сценарий | Значение (lockin_gas_estimate) | Обоснование | |------------------------------|-----------------------------------|-----------------------------------------------------------------------------| | Стандартные EVM-сети | 200000–300000 | Базовый лимит для большинства операций (например, Arbitrum, Polygon). | | Ethereum Mainnet | 300000–500000 | Высокий газ из-за сложности контрактов и конкуренции. | | Свои контракты | 500000+ | Если контракт имеет сложную логику (например, много вычислений on-chain). |
Для вашего случая:
- Начните с
300000и мониторьте логи:lockin_gas_estimate = 300000 - Если видите ошибки
out of gas— увеличивайте на 50-100k. - Если транзакции проходят с большим неиспользованным газом (
gas_used << gas_limit) — уменьшайте.
1. Что делает fulfill_gas_estimate?
- Оценивает затраты газа для операции подтверждения выполнения (
fulfill), которая обычно сложнее, чемlockin(может включать проверку proof, запись в контракт и т.д.). - Влияет на:
2. Рекомендуемые значения
Для вашей конфигурации (2×Xeon E5-2695v4, RTX 3070 Ti + 4070 Ti Super) и разных сетей:
| Сеть/Тип задачи | Значение fulfill_gas_estimate | Обоснование | |--------------------------|----------------------------------|-----------------------------------------------------------------------------| | Ethereum Mainnet | 700000–1,200,000 | Высокие комиссии, сложные контракты (например, с верификацией zk-proof). | | Arbitrum/Polygon | 500000–800,000 | Оптимизированные L2, но fulfill может требовать больше газа, чем lockin. | | Тестовая сеть | 400000–600,000 | Для тестов можно снизить (но зависит от контракта). |
Стартовое значение:
fulfill_gas_estimate = 750000 # Средний вариант для L2/L1
1. Что делает этот параметр?
- Оценивает затраты газа на операцию верификации zk-SNARK доказательства (алгоритм Groth16) в смарт-контракте.
- Используется для:
2. Рекомендуемые значения для разных сетей
| Сеть | Диапазон значений | Обоснование | |---------------------|-------------------------|------------| | Ethereum Mainnet | 200,000 - 400,000 | Высокие базовые комиссии, сложные операции верификации | | Arbitrum/OP | 150,000 - 300,000 | Оптимизированные L2, но верификация всё равно ресурсоёмка | | Polygon | 120,000 - 250,000 | Более дешёвые вычисления, но зависит от нагрузки сети | | Тестовые сети | 100,000 - 200,000 | Для отладки можно использовать меньшие значения |
Для вашей конфигурации (2×Xeon + RTX 3070 Ti/4070 Ti Super) рекомендуем начать с:
groth16_verify_gas_estimate = 250000
1. Что делает параметр?
- Определяет количество попыток опроса статуса доказательства (
proving status) перед тем, как система засчитает временный сбой как ошибку. - Решает проблемы:
2. Оптимальное значение для вашей системы
Рекомендация:
status_poll_retry_count = 5 # Увеличьте с 3 до 5
Обоснование:
- Мощные GPU (3070 Ti + 4070 Ti Super):
- Генерируют proof быстрее среднего, но могут возникать микрозадержки из-за:
- Дополнительные попытки компенсируют это.
- Сетевые условия:
- Если вы используете удалённые RPC-ноды (например, QuickNode/Alchemy), их ответы могут быть нестабильны при высокой нагрузке.
- Для локальной ноды (если развёрнута) хватит и
3, но для облачных эндпоинтов лучше5. - Баланс между скоростью и надёжностью:
Рекомендации по настройке параметра status_poll_ms для вашей конфигурации:
status_poll_ms = 500 # уменьшите с 1000 до 500 мс
- Мощное оборудование требует более частого опроса:
- Ваши GPU (RTX 3070 Ti + 4070 Ti Super) способны генерировать proof значительно быстрее среднестатистических систем
- Уменьшение интервала позволит быстрее получать статус выполнения и оперативнее реагировать на изменения
- Баланс между нагрузкой и эффективностью:
- При значении 500 мс вы получите хороший баланс между:
- Достаточно частым опросом для быстрого обнаружения завершения proof
- Отсутствием излишней нагрузки на RPC-ноду
- Для локальных нод можно уменьшать до 200-300 мс
- Для удаленных нод (Infura/Alchemy) лучше оставить 500-700 мс
- Связь с другими параметрами:
- Мониторинг и корректировка:
1. Что делает proof_retry_count?
Параметр определяет количество повторных попыток для всего процесса генерации доказательства (proof), если что-то пошло не так. Это критически важно, потому что:
- Процесс proof — многоэтапный (создание задачи + опрос статуса).
- Ошибки могут быть временными (сеть, API, нагрузка на GPU).
- Повторная попытка может спасти дорогостоящие вычисления.
2. Рекомендуемое значение для вашей системы
proof_retry_count = 2 # Увеличьте с 1 до 2
- Мощные GPU:
- Ваши RTX 3070 Ti и 4070 Ti Super генерируют proof быстро, но:
- При параллельной работе двух карт возможны конфликты ресурсов.
- Из-за динамической нагрузки (разгон/троттлинг) возможны сбои.
- 2 попытки дадут системе шанс автоматически исправить временные ошибки.
- Стабильность сети:
- Если вы используете облачные RPC (Infura/Alchemy), их API иногда может «затыкаться».
- 1 попытка — слишком рискованно (можно потерять результат работы GPU).
- Баланс между надёжностью и производительностью:
Для параметра proof_retry_sleep_ms = 500 (задержка между повторными попытками генерации доказательства) рекомендации зависят от вашей инфраструктуры и нагрузки. Вот анализ:
Рекомендации:
- Стандартное значение (500 мс):
- Подходит для большинства случаев, если ваш сервер стабилен, а сетевые задержки минимальны.
- Оптимально для баланса между скоростью реакции и нагрузкой на систему.
- Увеличение до 1000–2000 мс:
- Если возникают частые ошибки из-за высокой нагрузки на GPU (например, конкуренция между задачами на RTX 3070 Ti и 4070 Ti Super).
- Помогает снизить вероятность перегрузки API или драйверов NVIDIA.
- Уменьшение до 200–300 мс:
Что учесть:
- GPU Load: Две карты (особенно 4070 Ti Super) могут создавать конкуренцию. Если proof-задачи требуют много ресурсов, увеличение задержки снизит риск ошибок.
- Сеть: Если prover взаимодействует с удаленным API, добавьте запас на сетевые задержки.
- Логирование: Мониторьте логи (
debugрежим) на предмет ошибокproof_retry. Если видите частые ретраи — увеличивайте значение.
Пример для вашей конфигурации:
proof_retry_sleep_ms = 1000 # Компромисс между скоростью и стабильностью для 2x GPU
Если после тестов заметите, что ретраи редки, можно уменьшить значение для ускорения работы. Для старта лучше оставить 1000 мс.