Реализация алгоритма NiPoPoW

Привет,

Мы, небольшая команда, реализовали около 95% прорывного научного предложения, описывающего неинтерактивные доказательства работы NiPoPoW . Вы можете найти нашу реализацию исходного кода алгоритма NiPoPoW на нашем GitHub .

В ходе реализации у нас возникло несколько вопросов, которые мы не смогли выяснить из вашего прорывного документа:

I. WebDollar использует схему Mini-Blockchain (аналогичную Ethereum) с использованием деревьев Патрика Меркла для хранения балансов всех ненулевых адресов и смарт-контрактов. Таким образом, для проверки баланса нам нужны только хэши SPV из дерева Патрика Меркла и доказательства, основанные на NiPoPoW последнего блока (который является последним блоком в блокчейне)… поэтому мы считаем, что нам не нужны доказательства инфикса. Я прав? Или нам нужен инфиксный или бархатный алгоритм NiPoPoW?

II. Алгоритм 2 Проверка

а) Мы предполагаем, что функция validChain проверит π и χ, чтобы проверить, что взаимные ссылки указывают на блок генезиса, а хеши вычисляются правильно.

б) Мой первый технический вопрос заключается в том, что мы не смогли понять, что такое предикат Q, используемый в алгоритме проверки 2. Является ли это «функцией», которая проверяет и подтверждает χ (проверка блоков PoW на основе цели (T), взаимосвязей? Я прав?) или как будет выглядеть предикат Q? Что еще предикат Q будет делать иначе, чем validChain (π, χ)
введите описание изображения здесь

III. Многоуровневое свойство

Мы не очень уверены, что получили заказ правильно.

Мы повторяем u' от [0 до всех u] и проверяем, что каждое u' должно обладать тем свойством, что для любого C*, включенного в C, обладающего свойством |C∗↑µ'| ≥ k1, C* должно иметь и последнее уравнение. в случае, если C* не удовлетворяет последнему уравнению, мы возвращаем false;

введите описание изображения здесь

IV. Плохость

Мы не смогли понять помеченный C* из функции badness.

а. Каков правильный порядок вычисления выражения C↓↑µ−1… сначала мы вычисляем C↓, а затем вычисляем на основе предыдущего результата ↑µ−1?
б. Как рассчитать C↓? Мы не смогли найти никакой идеи о том, как вычислить C↓, только C'↓, который является определением нисходящей цепочки C'↓ C определяется как C[C'[0] : C'[−1]].
в. Разве это не C'↓, а не C↓?

Встроенное изображение

Спасибо!

Ответы (1)

I. Это почти правильно. Единственное отличие состоит в том, что вам по-прежнему нужен суффикс χ, упомянутый в статье, который включает в себя самые последние |χ| = k блоков блокчейна. Это связано с тем, что «последний блок» нестабилен и может быть изъят (в случае, если в это же время добыт другой блок такой же высоты). Вы можете вывести «текущие» балансы только k блоков назад.

II.
а) Это правильно.
b) Предикат «Q» зависит от приложения. В вашем случае это может быть, например, заявление о том, что на балансе конкретного счета находится определенная сумма денег в определенный момент времени. т.е. Q будет таким: «Алиса держит 5 эфиров в блоке № 4 000 091».

III. Это правильно. Как правило, если не будет серьезной атаки на всю цепочку блоков, это свойство не нарушится (для соответствующего δ).

IV.
а) Да.
б) в) Вы правы. Вместо C↓↑µ−1 вместо этого должно быть C'↓↑µ−1. Я исправил ошибку, и мы обновим статью в новейшей версии. Большое спасибо, что указали на это!

Ответ кредиты: Дионисий Зиндрос