Прошло 2 недели с момента запуска DevNet для тестирования сообществом, и мы очень довольны тем, как идут дела. Благодарим всех, кто уже присоединился к тестированию нового ядра! Как всегда, мы хотели бы пригласить всех, кто еще не участвовал, присоединиться и помочь.

Новая DevNet, использующая ARK Core v2, была запущена 2 недели назад. С тех пор мы исправили несколько ошибок и реализовали множество новых функций на основе отзывов сообщества. Кроме того, мы также начали тестирование динамических сборов и более высокой пропускной способности сети.

Изменения в цифрах

За последние 14 дней было:

  • 10 разных разработчиков, вносящих свой вклад в ядро.
  • 53 фиксируются в репозитории Core.
  • Изменено 166 файлов в репозитории Core.
  • 978 строк кода удалены из ядра.
  • В ядро ​​добавлено 3561 строка кода.

Тестирование

Мы начали тестирование динамических сборов на DevNet. Теперь каждый делегат может выбрать минимально приемлемую комиссию в зависимости от типа транзакции. Вот пример обычной транзакции с установленной комиссией всего 0,00000275 DѦ. До этого плата за v1 была статической 0,1 DѦ.

Пример TX с динамической комиссией от 0,00000275: https://dexplorer.ark.io/transaction/3585ce1b6840f6e2c63a1c5c6cbe2877ae95555030d917f3d32027d8f44254c4

Еще один тестируемый элемент - смещение вехи по высоте в файле конфигурации. Новая веха была установлена ​​на высоте блока 21 600, и с этого момента цепочка начала принимать блоки до 150 транзакций на блок. Это большое увеличение по сравнению с предыдущим значением по умолчанию, равным 50 TPB (что в настоящее время совпадает с MainNet). Этот успешный переход продемонстрировал уверенное увеличение количества транзакций в секунду в 3 раза, в результате чего предыдущие 6,25 транзакций в секунду достигли 18,75 транзакций в секунду. Хотя мы все очень рады этому успешному прыжку, помните, что мы все еще тестируем, и эти цифры могут измениться. Конечная пропускная способность может быть выше или ниже для MainNet, и требуется дополнительное тестирование, прежде чем завершать какие-либо числа TPS.

Пример блока со 150 TX внутри:
https://dexplorer.ark.io/block/4486277915989266225

Новые особенности

  • Плагин, готовый к блокчейну для P2P API - новый плагин для P2P API, который возвращает 503 Service Unavailable на определенных конечных точках, для которых требуется, чтобы блокчейн был готов. Для конечных точек v1 он вернет 200 Success с телом { success: false }, потому что именно так оно было обработано в устаревшем API P2P, где коды состояния не используются должным образом.
  • P2P Config API - добавляет новую конечную точку конфигурации в http://0.0.0.0:4000/config, где 4000 - это P2P-порт соответствующей сети, что означает, что он может варьироваться между main, dev и тестовая сеть. Он предоставляет такую ​​информацию, как версии ядра и сети, а также другую подробную информацию о плагинах и их состоянии.
  • Неизменяемое хранилище - предоставляет неизменное хранилище в виде нового пакета core-storage. Этот пакет использует https://facebook.github.io/immutable-js/ под капотом, поэтому все, что может быть сделано с помощью immutable.js, также может быть выполнено с помощью core-storage. core-storage - это только оболочка для immutable.js, позволяющая иметь общий экземпляр для информации в памяти, к которой все плагины и само ядро ​​могут получить доступ в любое время, не беспокоясь о том, что данные в нем будут изменены без сказал сделать так. Это хранилище можно использовать для одноранговых узлов, кошельков, состояния блокчейна, блоков и других элементов, где данные должны оставаться в том виде, в котором они были изначально сохранены.
  • Дисквалификация сверстников на основе критериев и запрет правонарушителей. Предыдущая система запретов была довольно жесткой и не учитывала тип правонарушения для введения запрета. Чтобы лучше оценивать нарушения со стороны коллег, мы внедрили метод __determineSuspensionTime. Проверки будут проводиться на рассматриваемом узле, чтобы определить справедливое время блокировки для каждой причины проблемы, вместо полной блокировки на 5+ часов. Теперь учитываются предыдущие правонарушения и определяется вес нарушения. Если общее количество нарушений достигнет 100, участник будет заблокирован на 1 день, так как он будет считаться рецидивистом.
  • Установка высоты слота - позволяет установить высоту в модуле слота криптопакета.
  • Включен CORS для конечной точки транзакций P2P - это соответствует конечной точке транзакций v1. В настоящее время конечная точка /peer/transactions используется в v1 для публикации транзакций.
  • Внутреннее событие, генерируемое через P2P API - когда фальсификатор и реле были запущены отдельно, генерируемые события никогда не достигли бы реле, поскольку реле и фальшивомонетчик были изолированы. Это вызовет указанное событие через API, чтобы убедиться, что реле будет уведомлено.
  • Регистрировать имена пользователей в фальсификаторе (через P2P API) - добавляет возможность регистрировать имена пользователей в фальсификаторе, поскольку ранее у него не было доступа к этим данным.
  • Возвращать идентификаторы широковещательной рассылки для лучшей обратной связи - конечная точка v2 возвращала только идентификаторы принятых, избыточных или недействительных транзакций. Если на сервере не включена динамическая комиссия, транзакции будут транслироваться до тех пор, пока не будет найден узел, который будет их подделывать, но пользователь не будет знать, что транзакция транслируется, а не сразу же принимается.
  • Настройки интерфейса командной строки тестера на конечных точках версии 2 - интерфейс командной строки тестера обновлен для использования только конечных точек версии 2, а также внесены некоторые другие небольшие изменения в тестер.

Исправленные ошибки

  • Обработка фиксированной транзакции - возникла проблема с тестом голосования. Также проблемы с мультиподписью, потому что комиссия составляет (keysgroup + 1) * fee, но охранник только сравнивал комиссию за передачу с постоянной комиссией.
  • Фиксированный блокчейн, не готовый для имен пользователей - если к P2P API будет отправлен запрос на получение имен пользователей до синхронизации узла, он выдаст 500. Это обрабатывает его, возвращая ответ с сообщением.
  • Номер порта трансляции при фильтрации одноранговых узлов - некоторые одноранговые узлы в списке одноранговых узлов сохранили порт в виде строки. В качестве меры предосторожности мы добавили принудительное приведение при фильтрации определенного однорангового узла на конечной точке v1 (/api/v1/peers/get).
  • Исправлена ​​ошибка 500 конечной точки избирателя делегата - если делегат не был найден на конечной точке v1 /api/v1/delegates/voters, он выдавал ошибку 500. Теперь изменения возвращают success: true и пустой массив (который соответствует текущей MainNet).
  • Исправлено, что новый делегат не обновлялся - когда пользователь кошелька регистрирует новое имя делегата, оно не индексируется в диспетчере кошелька. Это означает, что при пересчете веса голосов в конце каждого раунда этот кошелек не учитывается. Теперь это решено.
  • Конечная точка проводки транзакции для более точного соответствия v1 - ранее ответ от /peer/transactions всегда возвращал успешный, даже с недействительными транзакциями. Это изменяет ответ и приводит значения в соответствие с конечной точкой v1.
  • Исправления разбивки на страницы v2 - устранены проблемы с разбивкой на страницы конечных точек (например, orderBy missing, limit max not set) были решены.
  • Фиксированный номер порта трансляции в списке одноранговых узлов к номеру - в списке одноранговых узлов несовместимый JSON - все конечные точки; /peer/list, /api/peers и /api/v2/peers. Это вызывает проблемы для SDK (например, C ++), которые требуют строгого сопоставления типов, когда значение не может быть одновременно строкой или целым числом.
  • Фиксированный возврат пустого объекта вместо массива - возвращает пустой объект, соответствующий типу walletsByAddress.
  • Исправлен параметр запроса на удаление идентификатора для предотвращения ошибочного запроса голосов. Параметр идентификатора из пути приводил к созданию неправильного запроса при запросе.
  • Исправлена ​​отправка слишком большого количества запросов к реле в фальсификаторе - фальсификатор отправлял сигналы пробуждения всем реле вместо выбора одного, что приводило к избыточным запросам, приводящим в некоторых случаях к отсутствию блоков.
  • Возвращать высоту одноранговых узлов на конечных точках v2 - возвращать высоту одноранговых узлов при доступе к конечным точкам v2.
  • Исправления при перестройке MainNet - с изменениями кода версии 2 запрос был изменен с обновлениями кода, поэтому он был изменен, чтобы можно было перестроить MainNet.
  • Исправлен неправильный вызов метода в конечной точке приостановленных одноранговых узлов - конечная точка приостановленных одноранговых узлов не работала из-за вызова несуществующих методов.
  • Запускать P2P-сервер перед проверкой связи с одноранговыми узлами - изменение порядка запуска P2P-сервера. Предыдущий порядок означал, что узел будет пытаться подключиться к одноранговым узлам до того, как его собственный сервер будет в сети. Это приводит к тому, что другие одноранговые узлы пытаются проверить связь с сервером, который еще не подключен к сети, что приводит к его приостановке.
  • Исправлены тесты core-p2p и добавлен пакет в конфигурацию jest.
  • Исправлено изменение логики в getRandomPeer ›keys.filter, было слишком разрешительным.

Рефакторинг и другие коммиты

  • Сохранение реле, которое ответило на syncCheck и syncCall, до тех пор, пока форжинг не будет завершен - используя реле, которое ответило на synCheck, и убедитесь, что реле синхронизировано. Также нет смены хоста между получением состояния сети и транзакцией из пула. Это экономит время, так как привязка к хосту, который ответил и синхронизируется.
  • Очередь и тесты веб-перехватчиков - исключает использование очереди Redis для веб-перехватчиков. Теперь их сразу же рассылают. Также добавлены некоторые недостающие тесты для условий.
  • Использовать неизменяемую карту вместо объекта в качестве хранилища - использование собственной карты вместо объекта в качестве хранилища с добавленными тестами (все, записи, ключи, значения) и рефакторингом для замены собственной карты неизменяемой картой.
  • Снижение сложности P2P - сложность интерфейса P2P была довольно высокой (и остается), поэтому этот PR пытается немного уменьшить ее.
  • Docs for GraphQL - новая документация для функций внутри модулей и общее описание модулей до их назначения. Описательный подход к использованию и пониманию плагина GraphQL для Core.
  • Добавлены тесты GraphQL - добавлены приспособления для тестовых данных, запросов, ожидаемых результатов и истории. К каждому модулю добавлена ​​документация, точно описывающая его роль в процессе тестирования.
  • Использовать порт P2P для фальсификатора в конфигурации плагинов - изменение plugins.js для использования порта P2P по умолчанию для хоста фальсификатора.
  • Включен CORS для конечной точки конфигурации P2P.
  • В конфигурацию jest добавлен пакет основной базы данных.
  • В конфигурацию jest добавлены тесты основной цепочки блоков и пакет.
  • В конфигурацию jest добавлен пакет core-transaction-pool.
  • Включено ведение журнала действий с динамическими сборами.
  • Изменение имени БД Testnet.
  • В конфигурацию jest добавлен пакет core-forger.

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

Как я могу помочь с разработкой?

Если вы хотите помочь, примите участие и заработайте дополнительный ARK, обязательно прочитайте ARK GitHub Development Bounty и получите код:

Следите за нами в социальных сетях (Twitter | Facebook | Reddit), присоединяйтесь к нашему сообществу (Slack | Discord) и следите за обновлениями нашего блога на Medium и Steemit .