Это машинный перевод. Оригинал на английском здесь: Update 23 February, 2023
Больше всего на свете проблема надежной децентрализованной и распределенной сети заключается в асинхронности: мы просто не можем гарантировать, что «сообщение A» прибудет раньше «сообщения B», или даже прибудет ли оно вообще. С несколькими узлами все в порядке, но в секции с десятками узлов количество возможных комбинаций событий и сообщений огромно, и это является реальной проблемой для размышлений. На этой неделе мы рассмотрим Stateright, очень полезный инструмент для проверки наших алгоритмических предположений, поскольку он пробует все различные возможности.
Общий прогресс
@bochaco тестирует реакцию сети на разные размеры фрагментов, в том числе то, как она обрабатывает карты данных. Небольшие фрагменты передаются быстрее, но они создают гораздо большие карты данных, поэтому нам приходится рекурсивно самошифровать их, пока они не станут меньше размера chunk_size
. Есть и другие довольно технические компромиссы, но в основном мы ищем оптимальный размер для наших фрагментов.
@anselme и @dirvine просматривают поле «причина» для DBC SpentProofs — доказательство транзакции. Это новое поле, которое содержит причину расходов. Это может быть хэш оплаченных кусков, номер заказа на поставку или какой-либо другой ярлык. Важно то, что старейшины смогут сказать, действительна она или нет (например, если это оплата за один блок, соответствует ли Tx цене хранения данных?).
Зачем это делать? Упрощение и безопасность. Это может означать, что мы можем избавиться от необходимости подписывать данные старейшинами. Таким образом, больше нет риска «атаки по старому ключу», когда злоумышленник получает предыдущий ключ и может использовать его для проверки данных. С этим дизайном подписи старых старейшин больше не будут действительны.
Поток:
- Клиент запрашивает цену для хранения данных: 1 SNT, пожалуйста
- Клиент переоформляет 1 СНТ ДБК для старших со ссылкой на данные как причину ДБК
- Клиент сообщает старейшинам, что он потрачен, отправляя записи SpentBook для этого DBC (записи содержат «причину»)
- Старейшины проверяют эту причину и обновляют свои SpentBooks.
- DBC теперь официально потрачен по причине
- Клиент запрашивает у нынешних старейшин подписанную копию этой записи SpentBook.
- Как только клиент получает достаточное количество подписей, он может сохранить данные, предоставив подписанную копию записи SpentBook в текущем разделе вместе с данными.
- Старейшины проверяют, подписан ли раздел (это означает, что большинство старейшин видят ту же причину), запись SpentBook относится к данным и сохраняет их.
Мы продолжаем удалять блокировки чтения/записи в коде для повышения производительности и упрощения (без многопоточности, если в этом нет крайней необходимости). @joshuef работает над удалением большого вокруг самого состояния node
.
Как уже заметили некоторые прозорливые члены сообщества, @oetyng моделирует упрощенную версию платежной сети.
@chriso работает над улучшением интерфейса командной строки, включая переработку команды обновления.
А @davidrusu застрял в Stateright.
Государственное право
Stateright — это библиотека Rust, которая обещает оказать большую помощь в тестировании предположений. По сути, это средство проверки модели, которое просматривает все возможные комбинации событий, чтобы проверить, верно ли заявленное предположение.
Децентрализованные сети трудно моделировать по целому ряду причин: узлы могут умереть, узлы могут быть византийскими, сообщения могут приходить с задержкой, сообщения могут поступать не по порядку или вообще не поступать, вы можете столкнуться с непредвиденными условиями гонки и т. д., и т. д. Stateright помогает мы работаем через все эти возможности.
Например, мы можем захотеть узнать, возможна ли двойная трата DBC с нашим текущим дизайном. Мы моделируем предположение «Двойная трата невозможна» в коде, добавляем его в нашу существующую кодовую базу и устанавливаем для него Stateright. Затем Stateright будет проходить через каждую комбинацию, как это разрешено в нашей модели алгоритма. Это задержит сообщения, приведет к сбою двух старейшин одновременно и отправит события не по порядку. Как только он исчерпал все возможности и не смог удвоить трату, мы получаем красивую зеленую галочку — наше предположение верно. Каждое найденное состояние было правильным.
Если что-то выходит из строя, он дополнительно перенаправляет нас в графический интерфейс, где мы можем просмотреть сообщения, которые привели к сбою, и выяснить, в чем заключалась проблема.
Самое замечательное, что он пробует все, а не только подмножество возможных комбинаций. В децентрализованных сетях вас убивают крайние случаи, и с Stateright, в отличие от других методов, использующих выборку, вы можете быть уверены, что он охватывает их все. Могут быть миллионы комбинаций, которые нужно выполнить, но пока мы правильно записали предположения, это довольно быстро.
Другое дело, что это большая помощь в итеративном исправлении нашего кода. Это несколько дополнительных функций, которые мы можем добавить в нашу производственную кодовую базу для проверки моделей. Скорее всего, мы будем использовать это для написания определенных фрагментов производственного кода и делать это в модели. Когда модель удовлетворена, мы берем этот производственный код и загружаем его в Safe.
Вы можете узнать больше оut Stateright в документах или из этого видео, хотя это вступление довольно техническое.
Более того, вот ссылка на наши текущие эксперименты. Для любопытных/любопытных просто клонируйте этот репозиторий GitHub - maidsafe/stableset-experiments. Мы используем основную ветку от Stateright, поэтому вам также нужно будет клонировать ее в ту же папку, где вы клонировали репозиторий экспериментов.
Имейте в виду, однако, что это реальные экспериментальные данные Safe Labs, которые значительно меняются день ото дня, когда мы повышаем ставку в наших поисках простоты.
Если вы выполните cargo run --release
, а затем откроете http://127.0.0.1:3000, вы увидите графический интерфейс. Затем вы можете вручную щелкнуть, какие сообщения отправлять, или нажать «выполнить до завершения», и он покажет вам, где находятся любые текущие проблемы. Имейте в виду, что у нас почти всегда возникают проблемы, поскольку мы итеративно тестируем, так что не расстраивайтесь, это на самом деле здорово .
Полезные ссылки
Не стесняйтесь отвечать ниже со ссылками на переводы этого обновления для разработчиков, и модераторы добавят их сюда.
Как проект с открытым исходным кодом, мы всегда ждем отзывов, комментариев и предложений сообщества - так что не стесняйтесь, присоединяйтесь и давайте вместе создадим безопасную сеть!