Алгоритмы, используемые в NEM

POI

Алгоритм POI (Proof Of Importance, доказательство значимостью) включает в себя три компонента:
  1. Количество монет на аккаунте.
  2. Активность аккаунта в совершении транзакций.
  3. Время нахождения аккаунта в сети.

При больших суммах на аккаунте бóльшую роль играет 1-й параметр, а 2-й и 3-й параметры слабо действуют, и POI работает почти как POS. Чем меньше сумма, тем сильнее влияние 2-го и 3-го параметров. Таким образом, аккаунт например со 100k XEM может увеличить свой коэффициент значимости до 3 раз за счёт своей активности и стабильности присутствия в сети, в то время как аккаунт со 100M XEM не сможет сделать этого.
https://forum.nem.io/t/i-dont-fully-understand-why-poi-is-sustainable/3194/9


Eigentrust++

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

Узлы, не связанные непосредственно, доверяют друг другу в том случае, если существует непрерывная цепь узлов между ними, доверяющих друг другу. При этом величина этого доверия определяется произведением последовательных оценок доверия вдоль этой цепи.
http://www.neural.ru/dictionary/EigenTrust

Eigentrust++ эффективнее Eigentrust. В чём отличие Eigentrust++ от Eigentrust?
  • Eigentrust++ отделяет транзакции, основанные на репутации, от ответных транзакций, которые могут быть недобросовестными.
  • Eigentrust++ основан на модели распространения доверия от узла к узлу и не использует единую модель доверия.
  • Eigentrust++ в разность между количествами успешных и неуспешных попыток коннекта двух узлов инкорпорирует общее количество транзакций между ними.
http://www.cc.gatech.edu/~lingliu/papers/2012/XinxinFan-EigenTrust++.pdf

В NEM алгоритм Eigentrust++ в совокупности с алгоритмом POI обеспечивает устойчивую работу сети и защищает её от недобросовестных и злонамеренных узлов.

Eigentrust++ полностью отделён от POI. В то время как POI является алгоритмом консенсуса для блокчейна, Eigentrust++ является системой репутации узлов. Eigentrust++ помогает защитить сеть от атак вредоносных узлов, которые намеренно посылают неправильные или неверные данные. Баллы доверия Eigentrust++ не являются глобальными, они локальны и важны для соседних узлов.

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


Синхронизация времени в NEM сети

В NEM используется собственный протокол синхронизации узлов по времени. В самом начале была мысль использовать NTP протокол, но впоследствии от этого способа синхронизации времени в сети NEM отказались, т.к. при таком подходе возникает зависимость от небольшого количества посторонних серверов.

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

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

Транзакции и блоки с плохими временны́ми метками (с отклонениями по времени более допустимых пределов) удаляются из сети. Таким образом устраняется влияние
  • злонамеренных узлов, устанавливающих неправильные метки времени
  • добросовестных узлов с очень большими отклонениями локального времени
  • плохих данных, возникающих из-за проблем с интернетом или в связи с большой занятостью одного из узлов


Синхронизация блокчейна

В NEM вопрос синхронизации блокчейна решён принципиально:
  • Публичные узлы.
    Для начала работы в кошельке необязательно загружать блокчейн (уже реализовано).

  • Если в настройках NCC указать ip публичного узла, то кошелек будет готов к работе всегда моментально. Подобным образом функционируют и лёгкие кошельки (Lightwallet, Nanowallet). Публичные узлы обычно это vps с работающей NIS 24/7, в настройках standalone версии NIS можно установить разрешённое количество подключаемых NCC (предел зависит от мощности компьютера, на котором NIS работает; рекомендованное число не более 10, но можно установить и 100.
  • Возможно чаще будет использоваться такой вариант публичных узлов. Те, кому необходимо
    постоянно работать с NEM, будут запускать для себя свой личный NIS 24/7 на каком-нибудь
    копеечном девайсе (обычный пользователь) или vps (продвинутый пользователь), и будут его
    использовать в качестве публичного только для себя (ну и для своих близких и друзей). В
    настройках NIS можно перечислить NEM адреса тех пользователей, которым будет разрешено
    подключение к этому публичному узлу.


  • Снимки блокчейна.
    Для начала работы в кошельке не нужно будет загружать полный блокчейн (в разработке).

  • NEM будет поддерживать т.н. сводный блокчейн для того, чтобы ускорить начальную
    синхронизацию узлов. Для этого в NEM будет два типа узлов: серверные узлы и обычные узлы.
    Каждый серверный узел будет хранить полный блокчейн. Обычные узлы будут подключаться к
    сети и запрашивать снимок [snapshot] блокчейна с серверных узлов. Снимок блокчейна будет
    создаваться ежедневно. Размер снимка [на порядок? нет данных] меньше размера блокчейна,
    таким образом синхронизация снимка будет происходить очень быстро, после чего клиенту
    останется синхронизировать оставшиеся блоки, которые были сделаны после снимка до
    текущего времени. После синхронизации этих блоков, клиент готов к взаимодействию с NEM
    сетью.

  • Источник: http://free.userboard.net/t140-topic