Харвестинг: Теория и практика

Здесь будет обсуждатся тема харвестинг:

Локальный харвестинг

Как и в любой криптовалюте, чтобы поощрить участвующие в работе сети NEM узлы, им по определённому алгоритму начисляются монеты. В NEM этот процесс называется харвестингом (буквальный перевод с англ. - сбор урожая). Алгоритм харвестинга, применяемый в NEM, назвали POI - доказательство значимостью. Собственно харвестингом занимается не узел как физическая единица или NIS, работающая на узле, а аккаунты через эту NIS. На одном IP может работать только одна NIS, т.е. один узел это одна NIS, но через одну NIS может харвестить любое количество аккаунтов. При поощрении аккаунта учитываются три фактора:

количество монет на аккаунте
активность аккаунта в транзакциях
время нахождения монет на аккаунте

В итоге вычисляется интегральный коэффициент значимости аккаунта (Importance of account to the NEM cloud), который показывает, с какой вероятностью данный аккаунт “найдёт” очередной блок для блокчейна; комиссии с транзакций, включённых в этот блок, зачисляются на его счёт. Коэффициент значимости аккаунта выражается в продецимилле, он же базисный пункт, экзотическая единица измерения долей, 1‱ = 0,01% = 0,0001.

Чтобы харвестинг стал возможен, необходимо одновременное выполнение нескольких условий:

аккаунт должен быть активирован (с него должна быть совершена хотя бы одна исходящая транзакция)
активная часть баланса должна быть ≥ 10.000 XEM
    как следствие, с момента появления на балансе общей суммы ≥ 10.000 XEM должно пройти определённое время, прежде чем достаточная её часть станет активной, созреет (см. далее).

С момента появления на аккаунте суммы, до момента когда можно будет начать харвестинг, пройдёт не фиксированное время, а время, зависящее от суммы. Точная формула:
где m - общая сумма на аккаунте, в тысячах XEM,
___t - время ожидания харвестинга, суток,
___скобки-нижние уголки означают целую часть числа в сторону уменьшения (функция Айверсона пол).

Например (см. график), если сумма:
___>100k XEM, то харвестинг начнётся не более чем через сутки,
___=50k XEM, то харвестинг начнётся через промежуток времени от 2 до 3 суток,
___=20k XEM, то харвестинг начнётся через промежуток времени от 6 до 7 суток и т.д.

Почему это происходит.
Фактический баланс, сумма, которую вы видите в браузере, делится на две части: активную (vested) и пассивную (unvested). Для харвестинга активная часть баланса должна быть ≥ 10.000 XEM. В определённые моменты времени (на блоках, абсолютные номера которых кратны 1441: 11441, 21441, 3*1441 , …), 1/10 пассивной части баланса превращается в активную часть баланса. Поэтому большие суммы начинают харвестить быстро, а “небольшим” суммам (в пределах от 10k XEM до 100k XEM) потребуется несколько суток, чтобы накопить достаточную активную часть.
Счета в Nemesis полностью активны с самого начала (однако их также надо активировать хотя бы одной исходящей транзакцией, иначе харвестинг не начнётся).

Если активная часть баланса < 10k XEM, то при попытке начать харвестинг будет получена ERROR 700.
Если активная часть баланса ≥ 10k XEM, но уже харвестит другой аккаунт, то будет сообщение ERROR 306.

В инсталлируемом (Installer) клиенте NEM может харвестить только один аккаунт. В автономном (Standalone) клиенте по умолчанию также могут харвестить 4 аккаунта. Но в автономном клиенте можно в файле конфигурации NIS config.properties изменить допустимое количество аккаунтов, которые будут харвестить, прописав своё значение переменной
nis.unlockedLimit =
Рекомендуемый разработчиками предел этой величины - не более 10. Практически, если хватит мощности компьютера, можно установить этот предел и 100.

Автономный (Standalone) клиент более гибкий в работе и в настройках, чем инсталлируемый (Installer). Если запустить NIS + NCC, а потом Close Program (чтобы закрыть NCC, останется одно терминальное окно NIS), то активированные аккаунты будут продолжать харвестить на продолжающей работать NIS. Вкладку браузера или сам браузер после этого можно закрыть.
Аналогично при делегированном харвестинге. NIS работает на компе A, NCC на компе B. Активировали через NCC аккаунты, комп B выключили. Активированные аккаунты будут продолжать харвестить на продолжающей работать NIS. Можно настроить одну NIS на удаленную работу с несколькими NCC, редактируя файл config.properties в папке nis.

Делегированный харвестинг

Для чего нужен делегированный харвестинг?

Для безопасного харвестинга. Безопасность достигается за счёт того, что приватный ключ делегируемого аккаунта не уходит в сеть.
Для удобства. Комп A может быть VPS или одноплатный компьютер вроде Raspberry, на котором 24/7 будет работать NIS, обеспечивая круглосуточную поддержку сети и круглосуточный харвестинг. С компа B (это может быть и мощный компьютер и слабенький смартфон) будем иметь к этой NIS постоянный горячий доступ, и на компе B будем включать любой NEM кошелёк только по мере необходимости, эпизодически.

Далее в тексте упоминаются компьютеры A и B, хотя физически это может быть один компьютер. Так сделано для бóльшей ясности изложения. Рассмотрим пример активации и запуска делегированного харвестинга. Сценарии, конфигурации и т.д. могут быть различными, но производимые действия в целом одинаковы.

Активация делегированного харвестинга.

Шаг 1. Запускаю Standalone NIS & NCC на компе A с открытым портом 7890. Открываю кошелёк AA с аккаунтом NAAA…, на нём может быть любая сумма (хоть нулевая) и его необязательно активировать. Через NCC GUI контролирую и при необходимости настраиваю узел через окно Settings:

Код:
Auto-boot:
Node name > [здесь любое имя английскими буквами или это поле можно не заполнять]
Account > Primary Account
Auto boot when a wallet opened > Yes

Если поле Node name не будет заполнено, именем узла будут являться первые 10 символов адреса из поля Account, расположенного ниже. Дожидаюсь завершения синхронизации локального узла NIS (зелёной инфополоски NIS is synhronized!), после чего можно выключить NCC: Close Program. Терминальное окно NCC закроется, останется только терминальное окно NIS.

Шаг 2. На компе B с закрытым (из соображений безопасности) портом 7890 запускаю только Standalone NCC. Контролирую и при необходимости изменяю настройки Settings:

Код:
Remote Server:
Protocol > HTTP
Host > <здесь IP компа A или localhost, если NIS крутится на этом же компе>
Use default port > Yes
Port > 7890
Auto boot when a wallet is opened > No

С этого момента работающий NCC на компе B отражает информацию и работает в паре с удаленной NIS компа A, запущенной на шаге 1. Открываю кошелёк BB с аккаунтом NBBB…, содержащим большýю сумму. Нажимаю “Delegated harvesting”, в открывшемся окне заполняем строки

Код:
Wallet’s password > …
Due by (hours) > 1 (время жизни транзакции, активирующей делегированный харвестинг, до включения в блок; от 0 до 24 часов. Это не время действия делегированного харвестинга, как можно подумать по причине нечёткой формулировки названия параметра. Делегированный харвестинг прекратит свое действие только тогда, когда мы его целенаправленно отключим и/или деактивируем, см. далее.)

За активацию делегированного харвестинга с аккаунта снимается комиссия 10 XEM. В графе Sender/Recipient транзакции активации фиксируется адрес NCCC…, который можно увидеть в View Account Details > ® Address.
Далее появляется надпись “Activating delegated harvesting…”. Теперь должно пройти 360 блоков (это примерно 6 часов), и тогда делегированный харвестинг может быть начат. Компьютеры A и B теперь могут быть выключены на 6 часов.
Примечание. Шаг 1 и шаг 2 можно поменять местами.

Запуск делегированного харвестинга.

Шаг 3. По прошествии 360 блоков включаем компьютеры (на компе A нужна только работающая NIS, а проще было его не отключать после шага 1); в аккаунте NBBB… видим “Delegated harvesting is active”. Если перед этим работал локальный харвестинг, то он автоматически отключится. Но активация делегированного харвестинга не запускает его автоматически; для запуска делегированного харвестинга ещё надо нажать “Start delegated harvesting”. После чего NCC можно выключить “Close Program”, как впрочем и сам комп B.
На вкладке Harvested blocks аккаунта NBBB… наблюдаем находимые блоки. Однако, если открыть Blockchain Explorer, то увидим, что эти блоки принадлежат аккаунту NCCC… с нулевым количеством XEM (это адрес делегированного харвестинга ® Address).

Делегированнный харвестинг будет оставаться активированным до тех пор, пока не запустим процесс его деактивации на компе B, “Deactivate delegated harvesting”. За деактивацию делегированного харвестинга снимается комиссия 10 XEM. Далее в течение 360 блоков наблюдаем надпись “Deactivating delegated harvesting…”. В течение этого времени делегированный харвестинг будет оставаться активированным и может продолжать работать (если работает NIS и он был запущен).

Если узел NEM на компе A будет перезагружен (NIS будет остановлена и вновь запущена), то удалённый харвестинг после этого придётся рестартовать с компа B (Start delegated harvesting). Чтобы этого избежать, в конфиг файле nis можно в параметре Bootkey указать приватный ключ аккаунта делегированного харвестинга NCCC… (узнать его можно в NCC, Show Remote Account’s PRIVATE key).

Было:

Должно стать как-то так:

Теперь при старте / перезапуске NIS делегированный харвестинг будет стартовать автоматически, и с указанным именем узла.

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

Дополнительных приватных ключей делегированного харвестинга можно указать более одного, в этом случае они перечисляются подряд, с разделением вертикальной чертой (|, пайп), без пробелов:

Код:
nis.additionalHarvesterPrivateKeys = |

Возникает закономерный вопрос. Если я буду знать IP чьего-то компьютера, на котором запущен NIS, я смогу сесть к нему на хвост? Ну, во-первых, ничего плохого в этом нет, товарищам надо помогать ) Но если по какой-то причине такое нежелательно, например компьютер слишком слаб и без того работает на пределе, то возможность таких подключений можно либо ограничить либо совсем исключить.

На этот случай в файле конфигурации NIS прописывается количество аккаунтов, которые будут харвестить через данный NIS. По умолчанию харвестить могут 4 аккаунта. Чтобы была возможность харвестинга например только для двух аккаунтов, в файле конфигурации ...package\nis\config.properties прописываем nis.unlockedLimit = 2 и т.д. (gimre рекомендует эту величину устанавливать не более 10). Однако теоретически сесть на хвост можно, если успеть активировать делегированныя харвестинг прежде, чем это сделает хозяин узла, хотя практически доступный для этого промежуток времени столь мал, что попасть в него будет нереально.
Кроме того, можно перечислить адреса тех харвестеров, которым разрешено удалённо харвестить на данном аккаунте:

Код:
    nis.allowedHarvesterAddresses = <address>

Если адресов несколько, то они разделяются символом | (вертикальный слеш, пайп), без пробелов:

Код:
    nis.allowedHarvesterAddresses = <address1>|<address2>|<address3>

Если этот параметр неопределён, то разрешено всем в пределах допустимого количества.

Не будет лишним отметить, что:

Делегированный харвестинг для данного аккаунта может быть активирован из NCC через любую NIS.
Делегированный харвестинг для данного аккаунта должен быть стартован из NCC через конкретную NIS, которая будет харвестить для данного аккаунта. Вообще, можно одновременно стартовать делегированный харвестинг для одного аккаунта на более чем одной NIS, но суммарное количество находимых блоков останется тем же что и в случае с одной NIS.

Публичные NEM узлы и суперузлы

Все узлы в сети NEM, на которых работает NIS, являются публичными, видимы и их IP можно взять здесь:
https://www.nodeexplorer.com/
http://explorer.ournem.com/#/nodelist (суперноды отмечены)
http://www.nemnodes.org/nodes/ (суперноды отмечены)
Но среди публичных узлов есть узлы, запускаемые эпизодически или работающие на слабых компьютерах, а есть высокопроизводительные узлы, работающие круглосуточно, ежесуточно контролируемые по специальной программе (контроль 4 раза в сутки, с интервалом примерно в 6 часов) и поощряемые за стабильность работы. Эти высокопроизводительные узлы назвали суперузлами или супернодами.

Суперузлы работают круглосуточно и имеют достаточную производительность, и их можно использовать для оперативного подключения любых NEM кошельков без необходимости запуска NIS. При условии, что не исчерпан лимит подключаемых к ним аккаунтов. Можно ли харвестить делегированно на суперузлах? Да. Стоит ли харвестить на них делегированно? Нет, потому что будет зависимость от стабильности работы публичного узла. Любое его отключение (например для обновления софта) потребует повторного старта делегированного харвестинга на стороне NCC. Поэтому для стабильного харвестинга надо запустить свой узел NIS и настроить его в соответствии со своими потребностями.

Харвестинг в Nanowallet

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

Управление делегированным харвестингом в Nanowallet находится здесь:
Services > Delegated Harvesting > Manage delegated account
Управление делегированным харвестингом для мультиподписных аккаунтов в Nanowallet пока не реализовано (и в NCC тоже).

Как запустить делегированный харвестинг в Nanowallet (на японском, но с картинками):
http://godtanu.hateblo.jp/entry/2017/01/11/023007

Что в Nanowallet надо скопировать, чтобы его можно было в дальнейшем восстановить?

Можно сохранить:

или сразу кошелек / кошельки в целом
или избирательно аккаунт / аккаунты

Аккаунт = это один адрес, он существует вне зависимости от кошельков. Но аккаунты можно сгруппировать в кошельки. Кошелёк может содержать в себе 1 или более аккаунтов.

  1. Для сохранения кошелька в случае с Nanowallet надо сохранить две вещи:

    его файл *.wlt
    пароль от кошелька

Одно без другого бесполезно.

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

Чтобы сохранить кошелек на вкладке Account (нарисован человечек) > Wallet & keys > Backup wallet … дальше все будет очевидно. Сохранять файл кошелька (как и пароль) надо более чем в одном месте.

  1. Для сохранения аккаунта в случае с Nanowallet надо сохранить приватный ключ аккаунта.
    Приватный ключ аккаунта здесь: Account > Wallet & keys > Private key …

Опять же надо определиться со способом хранения подобной инфы. Оптимальным вариантом я считаю использование KeePass или подобных программ.

Ньюансы делегированного харвестинга

Параметры делегированного харвестинга привязаны к файлу кошелька

Если деактивировать / активировать делегированный харвестинг аккаунта, то адрес, публичный и приватный ключи делегированного харвестинга не меняются. Но при условии что работа продолжается в том же кошельке. Если аккаунт перенести в другой кошелёк (это может произойти например в случае утери файлов wlt&adb кошелька), то все параметры делегированного харвестинга (адрес, публичный и приватный ключи делегированного харвестинга) будут другими, даже если применять к новому кошельку тот же самый пароль. Вот почему в ряде случаев важно сохранять не только приватные ключи важных аккаунтов, но и файл кошелька wlt (Nanowallet) или файл кошелька и адресной книги wlt&adb (NCC), в которых они находятся:

запуск/перезапуск суперузла желательно производить из одного и того же кошелька, с тем чтобы оставался постоянным публичный ключ делегированного харвестинга.
управление (старт / стоп) активированным делегированным харвестингом аккаунта будет невозможно, если этот аккаунт открыть в другом кошельке (с другим файлом *.wlt).

Автостарт делегированного харвестинга

Как его включить см. Настройки автономной (Standalone) версии клиента.

Даже если в конфиге NIS прописан автостарт делегированного харвестинга, пока не сделан первоначальный старт “Start delegated harvesting” из кошелька, автостарт работать не будет. Убедитесь, что кнопка управления харвестингом в кошельке находится с состоянии “Stop delegated harvesting”.

Ньюанс делегированного харвестинга на “чужих” NIS:
Если в NIS, которая осуществляет делегированный харвестинг, не прописан автостарт делегированного харвестинга для нашего аккаунта, её отключение = стоп делегированного харвестинга. Т.е. придется всё время контролировать статус делегированного харвестинга, чтобы вовремя его вновь стартовать. Своя работающая 24/7 NIS избавит от этой проблемы.

Активация / деактивация, старт / стоп делегированного харвестинга

Делегированный харвестинг для данного аккаунта может быть активирован / деактивирован из кошелька через любую NIS.
Делегированный харвестинг для данного аккаунта должен быть стартован / остановлен из кошелька через конкретную NIS, которая будет харвестить для данного аккаунта.

Несколько аккаунтов, одна NIS и делегированный харвестинг

Это типичная ситуация, когда несколько аккаунтов стартуют делегированный харвестинг на одной NIS. Количество таких аккаунтов ограничивается параметром

Код:
nis.unlockedLimit = **

в файле конфигурации …package\nis\config.properties.

Можно указать NEM адреса конкретных аккаунтов, которым будет разрешено харвестить на данной NIS, в параметре

Код:
nis.allowedHarvesterAddresses =

Один аккаунт, несколько NIS и делегированный харвестинг

Стартовать делегированный харвестинг с одного аккаунта на нескольких NIS можно, но это не имеет смысла, т.к. суммарное количество харвеста для такого аккаунта останется тем же.

Этот контент был создан Винни Пухом и скопирован с его блога с его разрешения.

Оригинал находится тут: http://free.userboard.net/t112-topic

1 Like

:gem::rocket:Для развития NEM RU сообщества создан кошелек для доната :moneybag::moneybag::

NBBGXF-PAF5DH-4PKCBS-XEUIVE-SE4IGL-SUTEU4-QX66.

Все средства пойдут на то, чтобы сделать NEM более популярным в русскоговорящем мире. Это пойдет на пользу всему сообществу, в том числе, косвенно, повлияет на цену. Будем предоставлять отчеты по использованию средств.

Кошелек мультиподписный:
:pushpin:Winnie (автор блога http://free.userboard.net/f10-forum)
:pushpin:John Galt (создатель чата NEM RU)
:pushpin:Sailor (модератор в чате NEM RU)
:pushpin: АлексейС (модератор в чате NEM RU).

Наш чат в Телеграмм: https://t.me/NEMru