SYG-CPP - Майнер адресов на C++

:!: Внимание!
С выходом Yggdrasil v. 0.4 изменился способ генерирования IPv6-адресов Yggdrasil. Раньше использовались хеши ключей curve25519, в версии 0.4.x используются ключи ed25519. Данная статья писалась еще во времена версий 0.3.x.

Источник: https://yggdrasil-network.github.io/2021/06/19/preparing-for-v0-4.html

SYG-CPP - это майнер адресов Yggdrasil, написанный на языке C++. По своей сути является логическим продолжением майнера SYG, выполненного на bash. Разработка ведется пользователем acetone, однако сделать свой вклад в развитие может каждый желающий, предложив свои изменения в репозитории проекта (GitHub не используется принципиально). Майнер поддерживает три основных режима работы: майнинг по паттерну, т.е. явному вхождению символов в конечном адресе (например, двойное двоеточие или cafe:babe и т.п.), режим майнинга высоких адресов (для понимания зачем нужны высокие адреса, читайте эту статью) и поиск по регулярному выражению, а также гибридный режим: одновременный поиск по имени и высоте. В версии 3.3 «worldwide» была добавлена возможность работы с meshname-доменами: их отображение в общем выводе с IPv6 адресом и ключами, а также майнинг данных доменов по паттерну и регулярному выражению. В версии 3.4 «subnetlover» появился ряд дополнительных функций: конвертация IP в meshname-домен и обратная конвертация meshname-домена в IPv6.

Первый релиз v1.0-hothead датируется 11 августа 2020 года. Сравнительный тест с майнером на Golang в режиме майнинга по имени показал стабильное преимущество SYG-CPP примерно на 15% (бенчмарк первых версий, 11.08.2020). Версия syg-cpp 3.0 «Vort» имеет преимущество в ~100 раз. По некоторым данным, разработка майнеров на Golang полностью остановлена, т.к. их максимальная оптимизация дает около 25% от производительности аналогичного продукта на C++. На момент версии SYG-CPP 3.X перспективу разработки имеет только майнер на видеокартах (CUDA, OpenCL), т.к. дальнейшая оптимизация майнинга на процессоре не даст значительного прироста. Один такой майнер анонсирован пользователем под ником frodo_buggins: ссылка на git-репозиторий.

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

Механика процесса

Эта глава объясняет базовую механику работы майнера SYG-CPP. Также она призвана пояснить доступным языком (насколько это возможно) алгоритм образования IPv6 адресов Yggdrasil, т.к. читать оригинальный код на Golang с англоязычными комментариями может оказаться затруднительно.

Узлы сети сообщаются друг с другом путем обмена открытыми ключами шифрования. Из открытого ключа каждый узел по определенному алгоритму самостоятельно выводит IPv6 адрес абонента на другом конце. Передача информации на каждый отдельный адрес шифруется соответствующим публичным ключом. Благодаря этому Yggdrasil считается защищенной меш-сетью со сквозным шифрованием.

Необходимые алгоритмы для создания адреса: x25519 (ассиметричное шифрование на эллиптической кривой Curve25519), SHA512 (хеш-сумма), и функция преобразования битовой информации в IPv6. В SYG-CPP для получения пары ключей и выведения хеша от открытого ключа используется библиотека libsodium (до версии 2.0 использовалась библиотека OpenSSL. От нее отказались, т.к. libsodium показывает результат почти что в два раза лучше, т.е. быстрее). С версии 3.0 используются переписанные библиотечные функции.
Иллюстрация наглядно отображает процесс формирования адреса из ключа. Учитывая, что в режиме майнинга адресов высокого порядка функция преобразования битовой информации в завершенный IPv6 адрес происходит только при нахождении наибольшего количества лидирующих единиц в хешэ, т.е. фактически при майнинге работает только урезанная функция, считающая лидирующие единицы, майнинг адресов высокого порядка в происходит быстрее.

На выходе майнер выдает связку ключей и IPv6 адрес с инструкцией по его применению: для этого требуется изменить EncryptionPublicKey и EncryptionPrivateKey в файле конфигурации Yggdrasil (C:\ProgramData\Yggdrasil\yggdrasil.conf или /etc/yggdrasil.conf).

Скриншоты

Ссылки

Git
Sourceforge

Пользователи, сделавшие вклад в развитие SimpleYggGen-CPP: orignal, lialh4, R4SAS, Vort, filarius

Обсуждение

Олег, 2023/10/31 15:03
Прекрасно собирается в:
olej@R420:~/2023/Yggdrasil$ gcc --version
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Но сборка разваливается в:
olej@nvme:~$ cat /etc/debian_version
12.1
olej@nvme:~$ gcc --version
gcc (Debian 12.2.0-14) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

С ошибками вида:
olej@nvme:~/2023/Yggdrasil/Yggdrasil.mining/SimpleYggGen-CPP/build$ make -j
[ 33%] Building CXX object src/CMakeFiles/sygcpp.dir/parameters.cpp.o
[ 66%] Building CXX object src/CMakeFiles/sygcpp.dir/main.cpp.o
In file included from /home/olej/2023/Yggdrasil/Yggdrasil.mining/SimpleYggGen-CPP/src/main.cpp:9:
/home/olej/2023/Yggdrasil/Yggdrasil.mining/SimpleYggGen-CPP/src/main.h:29:13: error: field ‘PublicKey’ has incomplete type ‘Key’ {aka ‘std::array<unsigned char, 32>’}
29 | Key PublicKey;
| ^~~~~~~~~
In file included from /usr/include/c++/12/bits/std_thread.h:39,
from /usr/include/c++/12/thread:43,
from /home/olej/2023/Yggdrasil/Yggdrasil.mining/SimpleYggGen-CPP/src/main.h:10:
/usr/include/c++/12/tuple:1595:45: note: declaration of ‘Key’ {aka ‘struct std::array<unsigned char, 32>’}
1595 | template<typename _Tp, size_t _Nm> struct array;
| ^~~~~
...

Ошибка (одна и та же) повторяется, естественно, много раз по коду...
Что-то там поменялось в хедер-файлах определениях C++ для версии 12!

newbie, 2023/10/31 15:28
https://notabug.org/acetone/SimpleYggGen-CPP
d4708, 2023/10/31 19:15
Сайт notabug.org что-то сильно лагает последнее время, только у меня?
newbie, 2023/10/31 19:17
Да, он давно уже так - то доступен, то нет…
Олег, 2023/11/06 19:18, 2023/11/06 20:13
issue недельной давности: https://notabug.org/acetone/SimpleYggGen-CPP/issues/27
Никакого ответа.

Олег, 2023/11/06 19:27, 2023/11/07 13:53
Проект как не собирался, так и не собирается в других свежих дитрибутивах, предыдущий был LMDE6, а теперь:
$ cat /etc/debian_version
12.2
С теми же ошибками.

Только авторизованные участники могут оставлять комментарии.
yggdrasil/address_miners/simpleygggen_cpp.txt · Последнее изменение: 2023/10/10 18:06 — 127.0.0.1
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki