Программируемые данные
Спецификация диапазонов
Для взаимодействия со служебными данными реестра Irys во время выполнения смарт-контракта каждая транзакция указывает диапазон требуемых блоков данных (chunk range specifier). Эти диапазоны спроектированы в соответствии с Ethereum EIP-2930 access lists, что обеспечивает совместимость и эффективную интеграцию с существующими инструментами для разработчиков.
Формат задания диапазонов:
<partition_index>:<offset>:<chunk_count>partition_index (26 байт) — индекс раздела в Publish Ledger, содержащего первый блок.
offset (4 байта) — смещение первого блока внутри раздела.
chunk_count (2 байта) — количество последовательных блоков для выборки начиная с указанного смещения.
Такая структура позволяет точно определять данные, хранящиеся в разделах Irys, и эффективно извлекать их для выполнения.
Дополнительно, программируемые данные поддерживают Byte Read Ranges — механизм поверх диапазонов блоков, упрощающий доступ к определённым частям данных транзакции.
Формат для byte read range:
<index>:<chunk_offset>:<byte_offset>:<length>partition_index (26 байт) — индекс раздела в Publish Ledger, содержащего первый блок.
offset (4 байта) — смещение первого блока в разделе.
chunk_count (2 байта) — количество последовательных блоков, начиная со смещения.
Стоимость Программируемых данных
Базовая комиссия
Распаковка и десериализация данных для IrysVM создают вычислительную нагрузку, компенсируемую базовой комиссией для защиты от спама.
В тестовой сети:
базовая комиссия за 1 МБ Программируемых данных — $0.01;
минимальная стоимость транзакции с Программируемыми данными — $0.01.
Это обеспечивает доступность и одновременно сохраняет целостность системы.
Ценообразование при перегрузке / приоритетные комиссии
Стоимость доступа к данным в реестрах Irys динамически изменяется в зависимости от спроса и сетевой загрузки, по аналогии с моделью Ethereum.
При блоках тестнета в 30 секунд сеть может обрабатывать до 7500 блоков (chunk) на блок (≈250 блоков/сек). Каждый блок — это 256 KiB данных.
Рост комиссии: если используется более 50% вместимости блока, базовая комиссия линейно увеличивается до +12.5%, когда заполнены все 7500 блоков.
Снижение комиссии: если блоки не используются, базовая комиссия падает до -12.5% за блок, с минимальным порогом $0.01 и без верхнего лимита.
Такое ценообразование исключает резкие скачки стоимости и обеспечивает предсказуемую экономику даже при высокой нагрузке.
Доступность и синхронизация данных
Irys гарантирует высокую доступность данных благодаря механизму синхронизации, сочетающему peer-to-peer обмен и поиск на основе майнеров. Это обеспечивает доступность при любых условиях.
P2P-трансляция
Узлы транслируют транзакции с Программируемыми данными своим пирами, указывая, какие блоки у них уже есть.
Пиры, у которых нет блоков, могут запросить их у отправителя.
Запрос и ответ
Отправляющий узел отслеживает, какие пиры нуждаются в блоках, и отправляет их.
Получившие пиры повторно транслируют транзакцию, отмечая, у кого не хватает блоков.
Обращение к майнерам
Если пир не получил блоки в течение задержки распространения (200 мс в тестнете), он обращается к майнерам, ответственным за соответствующие разделы.
Реестр указывает реплики разделов, и узел случайным образом выбирает одну для получения данных.
Проверка данных для выполнения
Проверка транзакций для программируемых данных включает в себя проверку целостности и доступности запрошенных фрагментов. Узлы могут извлекать и проверять фрагменты несколькими способами:
Кэшированные распакованные блоки
Узлы используют ранее кэшированные, проверенные фрагменты, проверенные по их корням Меркла, обеспечивая готовность к выполнению IrysVM.
Локальные упакованные блоки
Если узел сам майнит раздел с нужными блоками, но имеет их только в упакованном виде:
Генерирует энтропию для указанного диапазона.
Распаковывает блоки.
Формирует Merkle-корень.
Находит транзакцию, разместившую блоки, через индекс блока.
Сравнивает рассчитанный Merkle-корень с хранимым в транзакции.
Если он действителен, делится распакованными блоками с пирами, у которых их нет.
Полученные распакованные блоки
При получении данных от пиров узел проверяет их, выполняя шаги 4–5 из процесса «Локальные упакованные блоки».
Запрос блоков у майнеров
Если кэш или пиры не помогли в пределах задержки (200 мс):
узел через реестр находит реплики раздела,
случайным образом выбирает реплику и запрашивает блоки,
при получении в упакованном виде — распаковывает и проверяет их по шагам 4–6.
Этот процесс обеспечивает точность и надёжность Программируемых данных перед их выполнением, поддерживая целостность взаимодействия смарт-контрактов.
Оригинал статьи: https://docs.irys.xyz/learn/protocol-overview/programmable-data
Последнее обновление