FastPQ
FastPQ - это Iroha Я ... STARK Проверка пути для выбранных эффектов исполнения. Это не заменяет нормальное выполнение транзакции или консенсус. Транзакции все еще проходят ISI, IVM, и Sumeragi как обычно; FastPQ Использует детерминистский свидетель исполнения и превращает поддерживаемые эффекты в доказательные партии.
В настоящее время интеграция хоста имеет три основных пути:
- прозрачные цифровые трансферты активов, зафиксированные во время исполнения блоков
- Nexus верифицированные релеи полосы, на обложке доказательства которых AXT находится связывающее устройство FastPQ
- Прозрачные вспомогательные устройства для проверки сообщений SCCP, которые упаковывают доказательство FastPQ в открытый конверт с проверкой
Перевод пути свидетельства
Прозрачные числовые перечисления создают структурированную транскрипту передачи, когда инструкция мутирует балансы.
- исходный счет, учетный счет назначения, определение активов и сумма
- балансы отправителя и получателя до и после передачи;
- хэш пункта входа транзакции, используемый в качестве хэша партии
- справка о полномочиях, полученная из представляемого счета
- Digest Poseidon для однодельтавых транскриптов
При передаче партии используется одна транскрипта с несколькими дельтами, в этом случае отсутствует дизест Poseidon.
При завершении блока Iroha группирует эти транскрипты на хэш-точку входа. Свидетель выполнения затем несет как первоначальные пакеты транскриптов, так и переходные партии FastPQ, подготовленные для проверки.
Каждая передача дельты становится двумя переходными рядами:
| Рынок | Форма ключа | Предварительная оценка | После стоимости |
|---|---|---|---|
| Дебет отправителя | asset/<asset-definition>/<source-account> | баланс отправителя до | баланс отправителя после |
| Кредит получателя | asset/<asset-definition>/<destination-account> | баланс получателя до | баланс получателя после |
Цифровые значения нормализуются на целые свидетельские единицы. Значение отклоняется для партий FastPQ, если оно не может быть представлено как неотрицательное u64 в выбранной десятичной шкале.
Государственные взносы
Каждая партия перехода FastPQ содержит публичные вводы, которые связывают доказательство с контекстом блока и исполнения:
| Ввод | Значение . |
|---|---|
dsid | Идентификатор пространства данных , кодируемый как небольшие байты . |
slot | Время создания блоков преобразовано в наносекунды |
old_root | Корень родительского государства , полученный из свидетеля исполнения . |
new_root | Послегосударственный корень , полученный от свидетеля исполнения . |
perm_root | Приверженность Poseidon к разрешениям на активную роль |
tx_set_hash | Hash над сортированными транзакциями и времени-триггер entrypoint hashes |
Хост использует fastpq-lane-balanced в качестве канонического параметра для этих партий.
Математическая модель
В данном разделе описывается арифметика, выполняемая текущим Rust проверщиком и верификатором. Все полевые операции ниже находятся над первостепенным полем "Золотой кусок":
FastPQ использует Poseidon2 F Для полевых обязательств губка имеет ширину t = 3, процентная ставка r = 2, и мощности 1. Хеш поглощает элементы поля в блоках скорости-2 и добавляет один элемент поля . 1 до окончательной пермутации:
Байтные струи упакованы в 7-байтные маленькие эндианские конечности, поэтому каждая конечность находится строго ниже p:
Хеш-поле, разделенные по домену, представлены следующим образом:
Для хэшей, которые начинаются с дигестов байт-домена, FastPQ отображает первые восемь маленьких байтов в поле:
Здесь Hash означает iroha_crypto::Hash::new Iroha, 32-байтный перевод Blake2bVar, если формула не называет Poseidon2 или SHA-256.
Полевая арифметика
Код Rust представляет элементы поля как канонические значения u64 в [0,p). Добавление и вычитание:
Умножение сначала вычисляет 128-битный продукт:
Затем Reduction Goldilocks использует идентификацию:
Если:
Затем редуктор вычисляет:
Использование условно добавляет или вычитает p до тех пор, пока результат не будет каноническим. Подписанные целые числа, такие как дельта баланса, встроены:
Посейдон2 Пермутация
Состояние пермутации Poseidon2:
Его S-коробка:
FastPQ использует четыре полные раунды, пятьдесят семь частичных раундов, затем еще четыре полных раунда. c_r = (c_{r,0}, c_{r,1}, c_{r,2}) является:
Частичный раунд:
Все добавления и умножения находятся в F. Каноническая матрица MDS:
Хеш-поле начинается с нулевого состояния. Для каждого полного блока со скоростью-2 (u,v):
В последнем блоке добавляется: 1 элемент накладки до последней пермутации. x_0.
Обязательность для публичных входов
Хост кодирует идентификатор пространства данных, записывая его значение u64 в первые восемь небольших байтов поля 16-байта:
Время создания блоков преобразуется из миллисекунд в наносекунд:
Хеш-счет транзакции - это хэш байтового домена над сортированными хэшами входных точек:
где h_i являются сортированными хэшами транзакций и входных точек времени-выбудителя. В доказательной публике IO, если perm_root или tx_set_hash все равно нулю, проверка заполняет значения обратного действия:
Цифровая нормализация
Для каждой дельты передачи целевая десятичная шкала представляет собой максимальную измельченную шкалу по количеству и обе балансовые снимки:
Значение Numeric с мантиссами m и шкалой q принимается только при условии, что m >= 0 и q <= s. Его свидетельское значение FastPQ:
Нормализованный результат должен соответствовать u64.
Канонический порядок
Перед строительством следов партия сортируется по переходному клавишу, рангу работы и индексу первоначального вставления:
Обязанность заказа представляет собой хэширование поля Poseidon2 над доменом fastpq:v1:ordering и кодированием Norito сортированных переходов:
где P представляет собой упаковку 7 байтов, E - кодирование Norito, D_o - fastpq:v1:ordering, а T* - сортированный переходный список.
Уравнения передачи
Для суммы передачи a, баланса отправителя f и баланса получателя t, FastPQ подтверждает нормированные значения свидетелей перед созданием следа:
Затем переходные строки кодируют:
Внутри следа, подписанные дельты сокращаются до F:
Факультативный дигест передачи единой дельты выполняет кодируемое предварительное изображение передачи:
Для транскриптов многодельта-передач текущий формат требует отсутствия этого высокого уровня переваривания.
Приемный орган переписывает транскрипты передачи:
Ряд следов
Пусть сортированный переходный список содержит n реальные строки. Длина следа - следующая сила двух:
Ряды 0..n-1 активны; ряды n..N-1 - это ряды заполнения. Каждый реальный ряд имеет один набор выбора операции:
Все колонки выборщика - булевые:
Поисковые строки разрешения - это точные строки предоставления роли и отзыва роли:
Для рядов численных операций:
Строитель также следит за дельтами на активы:
Только строки мят и сгорания обновляют счетчик подачи:
Метаданные и колонны следов пространства данных являются хэшами полей, полученными до материализации ряда:
Хаш метаданных, хаш пространства данных и слот стабильны по смежным строкам следов:
Перенос столбцов Меркель
Если отсутствует доказательство хоста, проверка синтезирует детерминистический путь из клавиши строки, предварительного баланса и того, является ли ряд стороной отправителя или приемника.
Для синтетических путей ароматная соль fastpq:smt:from для линий отправителя и fastpq:smt:to для линий приемника:
Синтетический лист и внутренние узлы являются:
Следы записывают кусочек . b_l, брат и сестра s_l, входный узел x_l, и выходный узел x_{l+1} На каждом уровне, с соглашением кода:
Хаши разрешения
Разделы предоставления и отмены роли расшифровывают свидетель разрешения:
Таблица разрешений хоста сортирует записи по батам роли, батам разрешения и батам эпохи, затем создает дерево Poseidon2 Merkle:
Уровни необычной ширины дублируют последний элемент.
Отслеживание обязательств
Для каждой колонки следов c, FastPQ сначала интерполирует значения колонны над доменой следов и хэширует вектор коэффициента:
Корень следа - корень Посейдона2 Меркеля над обязательствами столбцов:
Окончательное обязательство отслеживания - это хэш байта над доменом, набором параметров, формой отслеживаний, дигестом колонки и корнем отслеживание:
где D_c является fastpq:v1:trace_commitment.
Состав AIR
Значение составления V1 AIR представляет собой линейную комбинацию местных остатков ряда.
Для каждой соседней пары рядов (i,i+1) проверка вычисляет:
Остатки rho следуют в кодовом порядке:
Для рядов с числовыми колонками:
И для стабильных бачек контекстных колонк:
Проверщик пересчитывает A_i для откровенных рядов из выборки и проверяет его по отношению к стоимости состава, обязавшейся в соответствии с корнем Merkle соединения AIR.
Продукт поиска
Аккумулятор поиска разрешений использует задачу Fiat-Shamir gamma. При оценке расширения низкой степени s_perm и perm_hash работающий продукт:
Доказательства:
Низкое расширение
Пусть omega_T является генератором домена следов, omega_E - генератором доменов оценки и g - конфигурированным косетом. Для колонны следов с значениями v_i интерполяция дает коэффициенты a_j, такие, чтобы:
Увеличение низкой степени оценивает один и тот же полиномиал на косе:
Использование вычисляет это, умножая коэффициенты на полномочия косетного компенсирования до FFT:
а затем оценивать a' на домене оценки.
В настоящее время CPU FFT - это итеративная трансформация радикс-2 Кули-Туки над бит-обратными входами. L, полудлина H=L/2, и корень стадии:
каждый бабочек вычисляет:
Обратная FFT выполняет ту же трансформацию, что и omega^{-1} и масштабирует по размеру обратного домена:
Корни каталога проверяются перед использованием:
Для более мелких доменов, полученных из кореня каталога, генератор является:
Ряд и листья
После LDE, FastPQ hashes на каждом ряду по всем LDE колонки. m колонки:
Если хаши ряда по-прежнему находятся в домене следов, а не в домене оценки, провер интерполирует и расширяет одну колонку хаша ряда с помощью того же процесса coset LDE.
Мерклские открытия
Значения LDE группируются в части:
Каждый кусок листа:
Родители Меркл:
Нередкие уровни дублируют последний узел. Пути запроса проверяются путем хэширования слева или справа в соответствии с паритностью индекса листа запроса на каждом уровне.
Для листья с индексом i путь (s_0,\ldots,s_{d-1}) проверяется против корня R повторением:
Проверка проходит только тогда, когда:
AIR листья ряда следов:
AIR составные листья:
Открытие запроса LDE также проверяет, присутствует ли значение, открываемое на индексе оценки i, в его аутентифицированной части:
FRI Складка
FRI обязуется AIR оценки состава. Для каждого раунда l транскрипты пробивают вызов beta_l. Слой заполняется на множественное количество арности, повторяя последнее значение. Каждая группа размером с arity складывается в:
где a представляет собой значение FRI. Проверщик проверяет для каждой выбранной образцом цепочки запросов:
и удостоверяет подлинность каждой открытой группы FRI по соответствующему корню слоя FRI.
Транскрипция Fiat-Shamir
Канонический каталог параметров маркирует хэш транскрипта как SHA3-256. Нынешняя реализация провера и верификатора выводит байты вызова с iroha_crypto::Hash::new, который является 32-байтомным дигестом Blake2bVar, а затем уменьшает первые восемь небольших эндианских байтов на F:
Призывы вызова добавляют полный перевод к состоянию транскрипта.
- публичная IO, протокольная версия, параметровая версия и название параметра;
- LDE корень и корень следов
gamma- Составные проблемы AIR
alpha_0,alpha_1 - AIR корень следов и корень состава AIR
- поиск грандиозный продукт
- Корни слоев FRI и вызовы
beta_l - индексы запросов с выборкой
Запросная выборка продолжает рисовать 32-байтные дигесты вызова и читать их в виде небольших отрезков u64 до тех пор, пока она не получит запрошенное количество уникальных индексов:
Образец сборки возвращается в сортированном порядке.
Повторное воспроизведение проверки
В первую очередь проверяющий пересчитывает обязательство партии:
и требует:
Он также восстанавливает общественность IO:
Каждое поле должно соответствовать публичному IO байту за байтом доказательства. Затем проверяющий восстанавливает ту же транскрипт и получает такую же:
Для каждого запроса, сделанного по образцу q, он проверяет:
и:
В настоящее время AIR открытие композиции должно быть удостоверено под R_air_composition. В настоящее время FRI цепь затем начинается с того же A_q и должны завершаться в завершенном завершении FRI лист под терминалом FRI корень.
Что проверяет Притча
Прежде чем создать след, проверщик FastPQ канонизирует порядок партии по переходному клавишу, рангу работы, и порядка введения. Переводные строки также требуют метаданных транскрипта. Партия с переводными строками, но без транскриптов передачи является недействительной.
Для переводных транскриптов проверки на стороне провизора включают:
- баланс отправителя не должен поступать ниже
sender_afterдолжен быть равенsender_before - amountreceiver_afterдолжен быть равенreceiver_before + amount- Перепись должна охватывать каждый переводный ряд в партии.
- Digest Poseidon с одной дельтой, если присутствует, должен соответствовать предварительным изображениям транскрипта.
- при условии, что детерминированные синтетические доказательства должны расшифровываться в виде версии 1; отсутствующие пути заполнены детерминистическими синтетическими доказательствами
Отслеживание содержит колонки селектора для передачи, монетки, сжигания, предоставления ролей, отмены ролей, набор метаданных и строки поиска разрешений. - Да . Числовые строки операций также содержат подписанные дельты, действующие дельта на активы и счетчики поставок.
Проверка Лейна
irohad запускает проверку FastPQ при запуске, если проверка может быть инициирована. Проверка представляет собой задачу в фоне с ограниченной очередью. После того, как блок производит свидетель выполнения, путь commit отправляет работу проверки, содержащую хэш блока, высоту, вид и свидетель.
Если полоса не работает или очередь заполнена, работа пропущена и обычная обработка блоков продолжается. Это означает, что фоновый проверный полос - это не прием транзакций или шлюз консенсуса. Это путь проверки производства над состоянием, который уже выполнен.
По проезжей части строят проверку:
parameter = "fastpq-lane-balanced"
execution_mode = auto | cpu | gpu
poseidon_mode = auto | cpu | gpuauto позволяет проверяющему выбрать доступный бэкэнд. cpu Пин исполнение к CPU. gpu предпочитает GPU исполнение, с CPU fallback, когда обратный конец не может использовать запрашиваемые ядра.
Проверка
FastPQ проверка доказательств восстанавливает каноническую партию обязательства и заменяет общественную транскрипцию. Проверщик проверяет версию протокола, версию параметров, пределы воспроизведения, обязательства по отслеживанию, публичные вводы, пробные отверстия Merkle, AIR открытия, и FRI цепочка запросов.
Ограничения повторяния по умолчанию включают:
| Ограничение | По умолчанию |
|---|---|
| Переходные строки | 256 |
| Размер полного груза партии | 256 KiB |
| FRI слои | 16 |
| Вопросы открытия | 128 |
Nexus Проверенные реле
Nexus AXT свидетельские конверты могут включать в себя AxtFastpqBinding. Когда RegisterVerifiedLaneRelay исполняет, Iroha:
- проверяет обложку релевого полоса и материалы прочности FastPQ
- проверяет пространство данных и корень манифестирования
- декодирует оболочку доказательств AXT
- требует
fastpq_binding - восстанавливает партию FastPQ из этой связки
- декодирует встроенное доказательство FastPQ
- вызовет проверяющего FastPQ на перестроенную партию и доказательство
В случае успешной проверки Iroha сохраняет VerifiedLaneRelayRecord, содержащий ссылку на реле, оригинальную конвертку, хеш-нагрузку доказательства, высоту проверки, корень манифестирования и связывание FastPQ.
В линейных релевых конвертах также есть компактный FastPQ доказательный материал. Материал представляет собой перечисление идентификатора полосы, идентификатора пространства данных, высоты блока, высоты проверки, хэширования заголовков блоков, хэширование расчетов и корня манифеста. Слияние эстафеты допускается только в том случае, если у него есть как доказательный материал QC, так и действительный FastPQ.
AXT Обязательная математика
Для Nexus AXT конверты, AxtFastpqBinding пустые параметры по умолчанию для fastpq-lane-balanced; пустой идентификатор проверщика и версия по умолчанию fastpq и v1; тип заявления сокращается и уменьшается.
Публичные входы AXT FastPQ представляют собой определённые байт-хаши:
Переходные ключи AXT:
В заявке authorization вставляется строка "дополнительная часть":
и ряд метаданных, обязывающий политику выдачи разрешений. В заявке compliance вводятся две строки метаданных: одна для политики, а другая - для целевых пространств.
Для tx_predicate и value_conservation используется выраженная величина эффекта, если связь содержит положительную сумму источника или назначения. В противном случае код получает ограниченную детерминирующую величину:
Затем используются те же уравнения передачи:
Синтетические идентификаторы учетной записи отправителя и получателя генерируются из ключевых семян:
Хеш для передачи партии:
Манифест партии AXT переводится как SHA-256 над кодированием Norito канонического связывающего устройства:
SCCP Прозрачное подтверждение сообщения
В помощном ящике SCCP также используется FastPQ для прозрачных доказательств передачи сообщений с перекрестной цепочкой. Этот путь отделен от фоновой полосы проверки irohad. Он создает партию FastPQ непосредственно из пакета доказательств сообщений SCCP и манифеста, а затем заворачивает полученное доказательство для открытой проверки.
В партии SCCP используются fastpq-lane-balanced и три перехода метаданных:
| Ключ . | Операция |
|---|---|
sccp:transparent:v1:statement | MetaSet |
sccp:transparent:v1:context | MetaSet |
sccp:transparent:v1:payload | MetaSet |
Его публичные вводы получены из прозрачного внутреннего доказательства SCCP:
| FastPQ вход | SCCP источник |
|---|---|
dsid | Первые 16 байтов переваривания Blake2b над заявлением hash |
slot | Высота завершения |
old_root | Нагрузка на загрузку |
new_root | Корень обязательства |
perm_root | Хеш-блок окончательности |
tx_set_hash | Заявление хэш |
Канонические кодеры SCCP записывают целые числа небольшим эндианом и кодируют массивы байтов переменной длины, как:
Прозрачная последовательность публичных вводных байтов является:
Прозрачные байты заявления - это конкаценация версии, семейства цепочек, локальных и контрагентных доменов, модель безопасности, управление якорем, кодек учетной записи, модель окончательности, целевая цель верификатора, семья бэкэнд-верификатора, поля длиной префиксированной цепочки/бэкэнд/манифеста, хэш с обязательным назначением; Ключ к кодеку учетной записи, тип полезной нагрузки, публичные байты ввода и хэш полезной загрузки.
Идентификатор пространства данных FastPQ для этого пути доказательства - это первые шестнадцать байтов другого префиксированного диджета Blake2b:
партия SCCP FastPQ является точно:
Затем сортировка по тому же правилу заказа FastPQ.
В настоящее время OpenVerify обязательства проверщика SHA-256 на SCCP имя задней части сообщения и канонический FastPQ описатель верификатора:
Сырье FastPQ доказательство Norito-кодируются в StarkFriOpenProofV1, Затем упакованный в OpenVerifyEnvelope с задней панелью Stark. SCCP проверка восстанавливает то же самое FastPQ партия из пакета и манифеста, проверяет метаданные открытого конверта верификации, и обращается к FastPQ верификатор на перестроенной партии и доказательство.
Параметровые наборы
Канонный каталог параметров раскрывает два набора параметров. В настоящее время проездная полоса проводника использует fastpq-lane-balanced.
| Параметр | Цель . | Поле | Хаши | FRI |
|---|---|---|---|---|
fastpq-lane-balanced | сбалансированная пропускная способность | Золотолосы квадратное расширение | Обязательства Poseidon2, каталог SHA3 | Арита 8, взрыв, 8, 46 вопросов |
fastpq-lane-latency | трассы с чувствительным к задержке | Золотолосы квадратное расширение | Обязательства Poseidon2, каталог SHA3 | Аритет 16, взрыв 16, 34 запроса |
Оба целятся на 128-битную безопасность и используют размер домена отслеживания 2^16. Код воспроизведения транскрипта Rust V1 в настоящее время выводит байты задачи Fiat-Shamir с помощью iroha_crypto::Hash::new вместо того, чтобы прямо призывать SHA3-256.
Точные постоянные каталога, используемые провайдером Rust, являются:
| Постоянно . | fastpq-lane-balanced | fastpq-lane-latency |
|---|---|---|
target_security | 128 | 128 |
grinding_bits | 23 | 21 |
trace_log_size | 16 | 16 |
trace_root | 0x002a247f81c6f850 | 0x6a9f4eb38fb9b892 |
lde_log_size | 19 | 20 |
lde_root | 0x60263388dbbf9b2a | 0x9c9c3a571b6f89ac |
permutation_size | 65,536 | 65,536 |
lookup_log_size | 19 | 20 |
omega_coset | 0x6af325e825ad5c18 | 0x3a5fd4171e3c3a4d |
fri_arity | 8 | 16 |
fri_blowup | 8 | 16 |
fri_max_reductions | 8 | 6 |
fri_queries | 46 | 34 |
Конфигурация
Конфигурация FastPQ размещена под zk.fastpq.
[zk.fastpq]
execution_mode = "auto"
poseidon_mode = "auto"
# Optional telemetry labels.
device_class = "apple-m4"
chip_family = "m4"
gpu_kind = "integrated"
# Optional Metal backend tuning.
metal_queue_fanout = 3
metal_queue_column_threshold = 24
metal_max_in_flight = 5
metal_threadgroup_width = 128
metal_trace = false
metal_debug_enum = false
metal_debug_fused = falseТе же маркировки выполнения и телеметрии могут быть отменены на irohad:
irohad --fastpq-execution-mode auto
irohad --fastpq-poseidon-mode cpu
irohad --fastpq-device-class apple-m4
irohad --fastpq-chip-family m4
irohad --fastpq-gpu-kind integratedОкружающие переменные также поддерживаются для полей конфигурации. FastPQ-специфические переменные включают:
FASTPQ_EXECUTION_MODEFASTPQ_POSEIDON_MODEFASTPQ_DEVICE_CLASSFASTPQ_CHIP_FAMILYFASTPQ_GPU_KINDFASTPQ_METAL_QUEUE_FANOUTFASTPQ_METAL_COLUMN_THRESHOLDFASTPQ_METAL_MAX_IN_FLIGHTFASTPQ_METAL_THREADGROUPFASTPQ_METAL_TRACEFASTPQ_DEBUG_METAL_ENUMFASTPQ_DEBUG_FUSED
Показатели
При включении телеметрии FastPQ экспортирует показатели для выбора бэкэнда и поведения металла в течение времени выполнения:
| Метрический | Значение . |
|---|---|
fastpq_execution_mode_total | Запрошенный и решенный режим выполнения по бакетам заднего кода и ярлыкам устройств |
fastpq_poseidon_pipeline_total | Запрошенный и решенный путь трубопровода " Посейдон " |
fastpq_metal_queue_depth | Металловой лимит очереди, максимальное количество в полете, количество отправки и окно выборки образцов |
fastpq_metal_queue_ratio | Металлическая очередь занята и соотношения перекрытия |
fastpq_zero_fill_duration_ms | Продолжительность заполнения хоста для металлических путей |
fastpq_zero_fill_bandwidth_gbps | Выделенная нулевая полоса пропускания |
Для общего отбора производительности используйте эти сигналы с консенсусом и сигналами очереди, перечисленными в Способность и показатели .
Соответствующая ссылка
- Схема модели данных для получения деталей типа
FastpqTransitionBatchFastpqPublicInputsTransferTranscriptAxtFastpqBindingLaneFastpqProofMaterialirohadFastPQ опционы