Как сделать майнер на python

Обновлено: 08.07.2024

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

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

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

Создание нового блока представляет собой решение определенной математической задачи. Необходимо найти такой хеш блока, который был бы меньше значения, определяемого сетью. Это значение называется сложность (difficulty). Оно регулируется сетью, чтобы время создания блока было более-менее предсказуемо. Майнер, который первый решит задачу, получает всю награду. Награда за блок на сегодняшний день составляет 11 300,93 ETN, что примерно равно 146,2 доллара.

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

Чтобы стать участником сети Electroneum, необходимо скачать пакет программ с официального сайта. Выбираем direct miner для своей платформы. После скачивания и распаковки нужно синхронизироваться с сетью — скачать все уже сгенерированные блоки. Для разработки и тестирования лучше пользоваться тестовой сетью с пониженной сложностью.

Теперь смело запускаем синхронизацию:

Далее создаем кошелек для начисления заработка:

Ответив на все вопросы, получаем публичный адрес в файлике .address.txt . Если лениво заморачиваться с развертыванием сервера Electroneum, можно воспользоваться онлайн-сервисом nodes.hashvault.pro:26968 .

Продолжение доступно только участникам

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

Duino-Coin - это криптовалюта, которую можно добывать с помощью Arduino, плат ESP, Raspberry Pi, компьютеров и многого другого

включая маршрутизаторы Wi-Fi, умные телевизоры, смартфоны, умные часы, SBC, MCU, и графические процессоры. Все, что угодно!


Ключевые возможности Техническая спецификация
💻 Поддержка большого числа платформ
👥 Дружное быстрорастущее сообщество
💱 Легко использовать и обменивать
🌎 Доступно везде и всегда
🆕 Полностью оригинальный проект
😊 Просто для новичков
💰 Эффективно по затратам
⛏️ Легко добывать
📚 Проект с открытым исходным кодом
♾️ Количество монет: Бесконечное (до декабря 2020 года: 350 тысяч монет)
😎 Предварительная добыча: ⚡ Время транзакции: Моментально
🔢 Дробность: до 20ти знаков после запятой
🔤 Логотип: DUCO (ᕲ)
⚒️ Алгоритмы: DUCO-S1, DUCO-S1A, XXHASH +больше в планах
♐ Награды: поддерживается "системой Kolka", помогающей справедливо вознаграждать майнеров

Официальные руководства по началу работы, созданию учетной записи и настройки майнеров на различных устройствах доступны на официальном сайте.
Часто задаваемые вопросы и ответы, помощь по устранению неполадок можно найти на нашем [Вики].

Официальные кошельки Официальные майнеры


Начало работы с Duino-Coin

Самый простой способ начать работу с Duino-Coin - это загрузить последнюю версию для вашей ОС.
После загрузки распакуйте архив и запустите нужную программу. Больше устанавливать ничего не нужно.

Если вы хотите запускать программы из исходного кода, вам нужно установить наш репозиторий. Ниже описано как это сделать в дистрибутивах на основе debian (например, Ubuntu, Debian, Raspbian):

Если вы работаете в Windows, скачайте Python 3, затем наш репозиторий, извлеките его из архива и откройте папку с помощью командной строки. В CMD введите:

Примечание для пользователей Windows: убедитесь, что python и pip добавлены в вашу PATH переменную среды

После этого вы можете приступить к запуску программного обеспечения (например, python3 PC_Miner.py или py PC_Miner.py ).

Программное обеспечение было созданно нашим сообществом

Другие майнеры, работающие с Duino-Coin:

    - Майнинг аддон для медиацентра Kodi от SandUhrGucker - Скрипт Python для майнинга Duino-Coin на маршрутизаторах от BastelPichi - Майнинг с меньшим количеством подключений на нескольких устройствах от DoctorEenot - MicroPython майнер для плат ESP от fabiopolancoe - Python майнер для Nintendo 3DS от PhereloHD & HGEpro - Майнер в докере от Alicia426 - Самый быстрый из доступных майнер от colonelwatch - Простой майнер NodeJS от DarkThinking - Майнер на чистом C от phantom32 & revox От yippiez От its5Q
      от revox от revox от revox от revox от joaquinbvw

    Другие инструменты:

      - ESP8266 в качестве хоста для рига ардуин по I2C от ricaun помощник по устранению неполадок от Lulaschkas панель CLI майнинга от dansinclair25 от SandUhrGucker для Chrome и производных от LDarki сайт статистики от siunus написанные на Java от kyngs официальный бот Discord от Bilaboz

    Этот список будет активно обновляться. Если вы хотите добавить программное обеспечение в этот список, отправьте pull request или свяжитесь с одним из разработчиков.

    Руководство по wDUCO

    Duino-Coin - это гибридная валюта. Это означает, что она может быть конвертирована в wDUCO, "DUCO wrapped" это DUCO который использует сеть Tron . В настоящее время для него не так много применений, кроме простого хранения средств во внешнем кошельке или обмена wDUCO на другой токен на JustSwap. Руководство по использованию wDUCO доступен в wDUCO wiki.

    Вклад в развитие - это то, что делает сообщество с открытым исходным кодом таким удивительным местом для обучения, вдохновения и творчества. Мы высоко ценим любой вклад, который вы вносите в проект Duino-Coin.

    • Сделайте форк проекта
    • Создайте свою ветвь
    • Зафиксируйте свои изменения
    • Убедитесь, что все работает так, как задумано
    • Сделайте pull request

    Исходный код сервера, документация для вызовов API и официальные библиотеки для разработки собственных приложений для Duino-Coin доступны в разделе полезные инструменты .

    Некоторые из официально протестированных устройств (DUCO-S1)

    Duino-Coin в основном распространяется по лицензии MIT. Дополнительные сведения см. в файле "LICENSE". Некоторые сторонние включенные файлы могут иметь разные лицензии - пожалуйста, проверьте их "ЛИЦЕНЗИОННЫЕ" заявления (обычно в верхней части файлов исходного кода).


    1. Duino-Монеты ("DUCOs") зарабатываются майнерами с помощью процесса, называемого майнингом.
    2. Майнинг описывается как использование алгоритма DUCO-S1 (описано в Duino-Coin Whitepaper), в котором поиск правильного результата математической задачи дает майнеру вознаграждение.
    3. Майнинг может быть официально выполнен с использованием процессоров, плат AVR (например, плат Arduino), одноплатных компьютеров (например, плат Raspberry Pi), плат ESP32/8266 с использованием официальных майнеров (другие официально разрешенные майнеры описаны в верхней части README).
    4. Майнинг на графических процессорах, ПЛИС и других высокоэффективных аппаратных средствах разрешен, но с использованием только "ВЫСОКОЙ" сложности майнинга.
    5. Любые пользователи, использующие майнеры на уровне сложности, не подходящем для их оборудования (см. список сложности) будет автоматически удален и/или заблокирован.
    6. Любые пользователи, замеченные в использовании неподходящего и/или "Оверклокнутого" оборудования, будут заблокированы вручную или автоматически в сети без предварительного уведомления.
    7. Запрет включает в себя блокировку доступа пользователя к его монетам вместе с удалением учетной записи.
    8. Только монеты заработанные легально имеют право на обмен.
    9. Пользователи, замеченные в злоупотреблении VPN (или аналогичных) с намерениями например обхода ограничений, могут быть удалены без предварительного уведомления.
    10. Множественные учетные записи, используемых для обхода ограничений, могут быть заблокированы без предварительного уведомления.
    11. Счета могут быть временно приостановлены для проведения расследования нарушения данных правил ("нарушение" или "злоупотребление").
    12. Запрос на обмен, направленный на официальную биржу DUCO ("официальная биржа"), может быть отложен и/или отклонен в ходе рассмотрения.
    13. Запросы на обмен, поданные на официальную биржу, могут быть отклонены из-за нарушений данных правил и/или низкого финансирования.
    14. DUCOs пользователя могут быть удалены, если нарушение будет доказано.
    15. Настоящие условия предоставления услуг могут быть изменены в любое время без предварительного уведомления.
    16. Каждый пользователь, использующий Duino-Coin, соглашается соблюдать вышеуказанные правила.


    1. На главном сервере мы храним только имена пользователей, хэшированные пароли (с помощью bcrypt) и электронные почты пользователей в качестве данных их учетных записей.
    2. Электронные почты не являются общедоступными и используются только для связи с пользователем, когда это необходимо, подтверждая обмен на DUCO-Exchange и получения другой информации (планируется на будущее).
    3. Балансы, транзакции и данные, связанные с майнингом, находятся в открытом доступе API JSON.
    4. Политика конфиденциальности может быть изменена в будущем с предварительным уведомлением.

    Попробую написать серию статей по одной программке на Python, а точнее по одному телеграм боту, которого довелось написать. На текущий момент (10.03.2018) это последний проект, который делал на питоне. Содержание примерно будет таким:

    1. Получение ТЗ и первые мысли по программе;
    2. Набросок основных функций;
    3. Набросок бота ;
    4. Коддинг основных функций и бота;
    5. Перенос бота на сервер и запуск.

    После очередного моего видео на youtube, ко мне постучался человек в телеграм с вопросом, смогу ли я написать бота-оповещалку для их пула. На что я дал конечно положительный ответ, но для начала попросил посмотреть что из себя представляет сам пул, а то вдруг там какие заморочки есть и не смогу закодить бота. Глянув пул (не буду его светить, чтобы не было рекламы) выяснилось, что сам пул простенький и самое главное, на пуле настроен API.

    • не подтвержденный баланс
    • не выплаченный баланс
    • сколько выплачено за 24 часа
    • сколько всего намайнено
    • сколько ригов сейчас трудится
    • информация по каждому ригу — имя, хэшрейт, сложность.
    • регистрируем нового бота в телеграм
    • создаем базу данных со структурой: id, chat_id, wallet, lang
    • делаем три файла: файл конфигурации; файл с основным классом, в котором будут все функции с нашей базой данных и работой с API; файл с самим ботом, который будет постоянно запущен
    • тестируем все на локальной машине
    • переносим на сервер, ставим нужные модули, демоны, настраиваем и радуемся жизни.

    Есть такой интересный вопрос — как данные будут добавляться в базу?

    bitcoin

    Bitcoin — всеобщий любимец из числа криптовалют. Новшество, которое он привнес, — решение проблемы двойного расходования при помощи блокчейна — цепочки блоков информации. Вместо того чтобы хранить значения в централизованном банке, блокчейн формирует децентрализованную систему.

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

    Хм, на что же это похоже? На какую структуру данных? Точно! Это же связный список!

    Внедряем ООП

    Для начала нам нужно внедрить в наш класс связного списка некоторые принципы ООП (объектно-ориентированного программирования). Да, поначалу это кажется сложным. Но если мы хотим, чтобы наш блокчейн был защищенным, нам нужно сделать кое-какие вещи приватными. Этот принцип называется инкапсуляцией. Суть его в том, что некоторые поля и методы делаются доступными только изнутри класса. Поскольку мы не хотим, чтобы кто-то мог нарушить структуру нашей криптовалюты, нам нужно ограничить возможность взаимодействия с ней.

    Давайте сначала перечитаем класс Node , который мы создали ранее. Изменим его имя на Block , поскольку теперь он будет представлять один блок блокчейна. Также добавим пару импортов, которые будут использоваться в классе.

    Стоит отметить, что блокчейн обладает парой отличительных свойств. Во-первых, он отличается иммутабельностью, т. е. записи в нем трудно изменить (если вообще возможно). Во-вторых, он публичный. Да, именно так. Блокчейн Bitcoin-а это публичные записи, вы можете просмотреть их хоть сейчас.

    В настоящий момент данные нашего узла хранятся просто как data. При помощи дот-нотации кто угодно может получить к ним доступ и изменить их: my_block.data = "One Million Dollarssss" . Нас это не устраивает. Мы можем сделать это поле приватным, добавив к имени data двойной символ подчеркивания ( __data ), а затем создав специальный метод, позволяющий пользователям читать данные (т. е. публичный доступ сохранится).

    Теперь давайте напишем метод, позволяющий пользователям читать значения. В ООП мы называем это get -методом, с его помощью мы просто возвращаем значение желаемого поля.

    Прокачиваем наш связный список

    Как сделать хеш блока? В блокчейне это делается так: вы берете хеш предыдущего блока и видоизменяете его, используя суперсекретный алгоритм хеширования. Вы можете сделать свой алгоритм сколь угодно сложным, но он может быть и очень простым:

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

    Итак, у нас есть функция хеширования, теперь нужно вызвать ее в конструкторе. Вызывать нужно непременно после определения __data .

    Наконец, нужно обновить метод append() . Вместо data мы в качестве параметров будем передавать имя транзактора и сумму. Затем, прежде чем создать новый блок, мы получим последний хеш и передадим его в Block месте с другими данными. После этого добавим блок к концу цепочки.

    Делаем цепочку неизменяемой

    Как вы помните, блокчейны отличаются неизменяемостью (иммутабельностью). То есть изменить их очень сложно. Это свойство завязано на том, что каждый хеш зависит от сохраняемых в блоке данных (по крайней мере в нашей функции). При изменении значения в блоке должны обновиться все хеши во всех последующих блоках. Если блоков всего несколько, это не займет много времени, но представьте, что у нас очень длинная цепочка, а ее обновление имеет временную сложность O(N).

    Для обновления суммы транзакции мы создадим специальный метод. Блокчейн Bitcoin-а вполне может быть реализован как-то иначе, но у нас ведь просто его подобие. В ООП это называется set -методом. Он принимает новое значение и устанавливает скрытое значение data, исключая прямое вмешательство пользователя. Не забудьте вызвать функцию make_hash , чтобы получить обновленный хеш для блока.

    Для каждого блока нам нужно получить его обновленный хеш и сохранить его как prev_hash . Затем, перейдя к следующему блоку, мы обновляем его хеши, используя хеш предыдущего блока. Мы будем делать это при помощи скрытого метода __update_hashes() .

    В нашем методе __update_hashes() мы принимаем в качестве параметра предыдущий хеш, сохраняем его в __data , а затем используем функцию make_hash() для создания хеша текущего блока.

    Вот и все! Мы создали базовый функционал нашего блокчейна.

    Проверяем

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

    Давайте создадим первый блок. Передадим в него имя и сумму. Предыдущий хеш для первого блока в цепочке — всегда 0.

    Теперь добавим еще несколько блоков.

    Вы увидите следующий вывод:

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

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

    Все прошло по плану! Вы создали собственную криптовалюту! Ну ладно, нечто похожее на нее. Если вам интересно, можете сделать форк оригинального кода Bitcoin и на его основе создать что-то свое. Код доступен на GitHub.

    Читайте также: