Обновление Safe Network 🇷🇺 19 ноября 2020 г

Это машинный перевод. Оригинал на английском здесь: Safe Network Dev Update - November 19, 2020

Резюме

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

Безопасный клиент, узлы и qp2p

План проекта безопасных сетевых передач
План проекта безопасного клиента
План проекта безопасного сетевого узла

Во-первых, на этой неделе в qp2p мы реализовали пул соединений. Это означает, что если узел хочет подключиться к одноранговому узлу, и соединение было открыто ранее (и все еще открыто), мы будем повторно использовать существующее соединение вместо того, чтобы устанавливать новое. Это повышает производительность, поскольку установление соединения обходится дорого (помимо прочего, оно включает в себя рукопожатие TLS). Это также улучшает эргономику, потому что пользователям qp2p больше не нужно беспокоиться о кешировании соединения. Мы также реализовали дедупликацию соединений, что означает, что несколько одновременных попыток подключения к одному и тому же узлу будут разрешаться в одно и то же соединение, вместо того, чтобы открывать каждое отдельное соединение. Это снова улучшает производительность.

Мы вернулись к репликации фрагментов данных Blob на sn_node. Начиная с 4-кратного коэффициента репликации, взрослые сети будут нести основную ответственность за их хранение. Мы переносим старую реализацию из хранилищ до асинхронного режима в новую кодовую базу, адаптируя ее к последним изменениям в хранении, запросах и т. Д. На этой неделе мы также провели небольшое техническое обслуживание по всем направлениям, выследив скрытую распаковку. s, expectиpanic`s от нашего производственного кода и тестов, что существенно стабилизирует нашу кодовую базу и перехватывает все исключения. Это лучшая практика, которую мы слишком долго откладывали. Обратите внимание на то, что в ближайшие несколько дней в наши ящики будут добавлены дополнительные проверки CI, чтобы они не проникли обратно в наш код.

Мы потратили немного времени на исследование и размышления о том, как API в конечном итоге должны будут развиваться для поддержки подписи запросов от клиента с использованием нескольких пар ключей, а не только одной. Например, клиент может захотеть сохранить файл, который будет принадлежать общедоступному ключу, в то время как оплата за такую ​​операцию будет производиться с использованием второго открытого ключа, которому принадлежат средства, и, возможно, третья пара ключей может использоваться клиентом для шифрование содержимого файла. На данный момент это не то, что мы считаем приоритетным, это скорее PoC, который поможет нам определить проблемы и понять, как в конечном итоге развить наши клиентские API.

CRDT

Работа над динамическим членством в DSB продолжается, и на этой неделе наш консультант написал тестовый пример, демонстрирующий проблему одновременного выполнения операций с данными, когда участник покидает группу. Правильная реализация динамического членства всегда должна проходить проверку, в то время как наша текущая наивная реализация терпит неудачу, так что теперь у нас есть что-то конкретное, с чем можно рассчитывать.

С этой целью мы рады недавнему научному докладу авторов AT2 под названием Dynamic Byzantine Reliable Broadcast. В нем приводится цитата: «* первая спецификация примитива динамического византийского надежного вещания (dbrb), который поддается асинхронной реализации *». Другими словами, эта статья дает формально проверенное решение именно нашей проблемы.

В настоящее время наш консультант рассматривает этот документ, а также другое возможное решение с использованием так называемого Generation Clock, для которого может не потребоваться так много сетевое общение.

Маршрутизация

План проекта

Как упоминалось в обновлении на прошлой неделе, на этой неделе была одобрена и объединена работа по разрешению присоединения узла с тем же именем. Это означает, что любой повторно присоединяющийся узел будет немедленно перемещен с половиной его возраста, если уменьшенный вдвое возраст больше, чем MIN_AGE (в настоящее время «4»). Это сделано для предотвращения злонамеренных перезапусков.

Во время внутреннего тестирования мы заметили, что узел генезиса иногда понижался слишком быстро, это было связано с недавним изменением, когда мы теперь создаем узлы со случайным диапазон возрастов на этапе запуска. Чтобы решить эту проблему, мы решили Запустить первый узел с более высоким возрастом, который в настоящее время установлен на 32. Теперь он объединен с мастером. Это гарантирует, что узел Genesis остается стабильным в качестве старейшины в течение достаточно долгого времени, что упрощает многие вещи для тестирования и настройки тестовой сети.

Текущая работа по улучшению обнаружения потерянных одноранговых узлов продвигается хорошо. Мы уже воспользовались новой функцией объединения соединений в qp2p, которая позволила нам упростить код. Некоторые начальные интеграционные тесты показывают, что рефакторинг работает хорошо. Этот PR сейчас проходит финальную проверку и тестирование и, надеюсь, скоро будет объединен.

Чтобы гарантировать, что, когда ресурсы узла будут близки к исчерпанию, будут поступать новые узлы для распределения рабочей нагрузки, мы собираемся разрешить узлам указывать маршрутизации, принимать новые узлы или нет. Это ограничение на то, когда сеть принимает новые узлы, также поможет предотвратить атаки Сибиллы, не позволяя потенциальным злоумышленникам добавлять неограниченное количество узлов по своему желанию.

В дополнение к этому мы также стремимся внести некоторые изменения, чтобы помочь нам узнать точный статус маршрутизации во время запуска сети и после него, у нас есть два текущих PR Индикация для запуска раздела и запуска события PromotedToAdult и уведомлять об изменении ключа во время перемещения. Эти незавершенные изменения помогут нам гарантировать, что маршрутизация работает так, как задумано, и должны быть завершены в ближайшее время после согласования дизайна API между узлами и маршрутизацией.

Полезные ссылки


Не стесняйтесь отвечать ниже со ссылками на переводы этого обновления для разработчиков, и модераторы добавят их сюда.

Как проект с открытым исходным кодом, мы всегда ждем отзывов, комментариев и предложений сообщества - так что не стесняйтесь, присоединяйтесь и давайте вместе создадим безопасную сеть!