майнер на питоне код

Реализуем свой Bitcoin на языке программирования Python

Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

Как же создать новый Bitcoin, и что для этого нужно – рассмотрим в этой статье.

Простая монета (SimpleCoin) – простая, небезопасная и не до конца реализованная версия блокчейн криптовалюты на Python. Основной задумкой проекта была идея реализовать максимально похожую, простую и рабочую версию Bitcoin. Если вы тоже хотите создать что-то свое, вам стоит обратиться к Bitcoin Repository.

Вступление

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

С чего начать?

Первое, что необходимо сделать, – установить requirements.txt.

майнер на питоне код. new bitcoin 1. майнер на питоне код фото. майнер на питоне код-new bitcoin 1. картинка майнер на питоне код. картинка new bitcoin 1. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.В проекте должен быть файл конфига miner_config.py с таким содержимым:

Далее два важных шага:

Важное замечание: не запускайте майнер в среде разработке Python, а только в консоли, т. к. он использует параллельные процессы, которые не работают в IDL-e.

Как это работает?

майнер на питоне код. new bitcoin 3. майнер на питоне код фото. майнер на питоне код-new bitcoin 3. картинка майнер на питоне код. картинка new bitcoin 3. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

miner.py запускает 2 параллельных процесса:

майнер на питоне код. new bitcoin 2. майнер на питоне код фото. майнер на питоне код-new bitcoin 2. картинка майнер на питоне код. картинка new bitcoin 2. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

Заключение

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

Источник

Python Blockchain — Создание майнеров

Для включения майнинга нам нужно разработать функцию майнинга. Функциональность майнинга должна генерировать дайджест по заданной строке сообщения и предоставлять подтверждение работы. Давайте обсудим это в этой главе.

Функция дайджеста сообщения

Мы напишем служебную функцию sha256 для создания дайджеста по данному сообщению —

Функция sha256 принимает сообщение в качестве параметра, кодирует его в ASCII, генерирует шестнадцатеричный дайджест и возвращает значение вызывающей стороне.

Функция майнинга

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

Например, если вы укажете уровень сложности 2, сгенерированный хэш для данного сообщения должен начинаться с двух 1 — например, 11xxxxxxxx. Если уровень сложности равен 3, сгенерированный хэш должен начинаться с трех 1 — как 111xxxxxxxx. Учитывая эти требования, мы теперь разработаем функцию майнинга, как показано в шагах, приведенных ниже.

Шаг 1

Функция майнинга принимает два параметра — сообщение и уровень сложности.

Шаг 2

Уровень сложности должен быть больше или равен 1, мы обеспечиваем это следующим утверждением assert:

Шаг 3

Мы создаем префиксную переменную, используя заданный уровень сложности.

Обратите внимание, что если уровень сложности равен 2, префикс будет «11», а если уровень сложности равен 3, префикс будет «111» и т. Д. Мы проверим, существует ли этот префикс в сгенерированном дайджесте сообщения. Чтобы переварить само сообщение, мы используем следующие две строки кода:

Весь мой код показан здесь —

Для вашего понимания мы добавили оператор print, который печатает дайджест-значение и количество итераций, необходимых для выполнения условия перед возвратом из функции.

Тестирование функции майнинга

Чтобы проверить нашу функцию майнинга, просто выполните следующее утверждение —

Когда вы запустите приведенный выше код, вы увидите вывод, похожий на приведенный ниже —

Обратите внимание, что сгенерированный дайджест начинается с «11». Если вы измените уровень сложности на 3, сгенерированный дайджест начнется с «111», и, конечно, для этого потребуется больше итераций. Как видите, майнер с большей вычислительной мощностью сможет добывать данное сообщение раньше. Вот как шахтеры конкурируют друг с другом за получение своих доходов.

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

Источник

Майнинг Bitcoin на Python

С точки зрения дилетантов, биткойн — это бухгалтерская книга. Гроссбух — это набор транзакций. Давайте разберемся в этом на примере.

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

Потом, скажем, парень с овощами идет к врачу и платит 10 долларов за медицинский осмотр. Запись в бухгалтерской книге будет — владелец овощей платит врачу 10 долларов.

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

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

Blockchain and Transactions

В биткойн-бухгалтерской книге все транзакции хранятся блоками. Она содержит миллионы транзакций с момента изобретения bitcoin. Она содержит несколько блоков для этих транзакций, которые растут с каждым днём.

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

Скажем, есть цепочка из пяти блоков — Блок1, Блок2, Блок3, Блок4 и Блок5. Тогда Блок1 будет указывать на Блок2, Блок2 будет указывать на Блок3 и так далее.

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

Биткойн Криптография и Майнинг

Протокол Bitcoin имеет некоторый механизм безопасности для обнаружения мошенничества. Он использует криптографию для обеспечения безопасности транзакций. Для его реализации используется криптографическая функция под названием SHA256.

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

На Python мы можем сгенерировать это хэш-значение с помощью приведенного ниже кода:

В bitcoin блок состоит не только из набора транзакций. В нём есть как предыдущий хэш, так и nonce (число один раз).

Я объясню, что такое «нонс», но сначала пойми это. Мы преобразовываем все в блоке в строку и генерируем хэш для этого блока. В любой момент времени есть особое требование, чтобы сгенерированный хэш имел в начале x число нулей.

Допустим, хэш, генерируемый блоком, равен 03a5x4bh34bh2jkiig243gh. Согласно требованию, нам нужны первые четыре цифры как ноль. Вот тут и появляется nonce. Количество нулей, которое нам нужно в нашем хэше, известно как сложность.

Добыча биткойна — это процесс угадывания nonce, который генерирует хэш с первым числом X нулей. Он состоит из сложных вычислений, в которых мы пытаемся найти требуемое значение нонсе.

В чем польза от добычи биткойна?

Майнеры получают биткойны для добычи блока. В 2009 году за добычу одного блока ты получишь 50 BTC. В 2012 году он был сокращен до 25 BTC.

Каждые четыре года награда уменьшается вдвое за добычу одного блока. В 2020 году награда была снижена до 6,25 BTC. Но за последние несколько лет bitcoin оценили очень высоко. Даже 6,25 BTC за блок означает 280 000 долларов (на момент публикации). Это довольно много денег за такую работу.

Многие люди по всему миру занимаются добычей биткойн. Это не очень сложно, но это трудоёмкая задача. Нужно много вычислительной мощности, чтобы получить правильную стоимость. Если 10 человек занимаются угадыванием, то тот, кто получит результат первым, выиграет награду.

Поэтому, чтобы выиграть награду в добыче биткойн, требуется и время, и удача.

Давайте займёмся добычей биткойн с Python.

Понятия, которые мы обсуждали до сих пор, были важны для понимания реальной работы по добыче bitcoin. Давайте перейдём к коду, который помогает нам добывать биткойны:

Вот так. Мы можем добыть биткойн с этими 12 строками кода в python.

Просмотр кода

Строка 1: Импорт библиотеки sha256 в наш проект.

Строка 2: Объявите переменную с максимальным значением nonce, до которого вы хотите угадать. Она может быть увеличена или уменьшена в зависимости от вычислительной мощности вашей системы.

Строка 3-4: Определяем функцию SHA256 для генерации хэш-значения.

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

Строка 6: После добавления требуемого префикса мы создаем еще одну переменную prefix_str для хранения значения Hexa. В дальнейшем эта строка будет использоваться для сравнения с сгенерированным хэшем.

Строка 7-9: A for цикла итерируется для nonce значений для генерации нового хэша с помощью вызова функции SHA256, которую мы сгенерировали на строке 3.

Строка 10-12: Сравниваем только что сгенерированный префикс хэш-значения с нужным. Если он совпадает, то мы распечатываем значение nonce, для которого добывается биткойн, и возвращаем этот сгенерированный хэш.

Заключение

Я взял сложность восьми для тестирования. Приложению пришлось выполнить итерацию около 1,2 миллиона раз, прежде чем оно угадало правильный нон-це.

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

Добыча биткойнов требует специального оборудования. Одними из популярных являются DragonMint T1, Antminer T9+, Antminer R4, Avalon6 и Antminer S9.

Это сайт, на котором вы можете получить информацию по блокам для майнинга. Если вы действительно хотите это сделать, то я предложу немного вложить в оборудование, чтобы увеличить шансы на добычу bitcoin.

Источник

CoffeeMiner: взлом WiFi для внедрения криптомайнера в HTML-страницы

Предупреждение: эта статья и проект имеют исключительно образовательные цели.

майнер на питоне код. image loader. майнер на питоне код фото. майнер на питоне код-image loader. картинка майнер на питоне код. картинка image loader. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.Несколько недель назад я прочитал об этом случае Starbucks, где хакеры взламывали ноутбуки в сети WiFi, чтобы майнить на них криптовалюту. И я подумал, что может быть интересно провести атаку иным способом.

Цель этой статьи — объяснить, как провести атаку MITM (человек посередине) для внедрения определённого JavaScript-кода в страницы HTML, чтобы заставить все устройства, подключённые к WiFi, майнить криптовалюту для злоумышленника.

Задача состоит в создании скрипта, который проводит автономную атаку в сети WiFi. Это то, что мы назвали CoffeeMiner, поскольку атаки такого типа можно проводить в кафе.

1. Сценарий

Мы рассматриваем ситуацию, в которой есть несколько машин, подключенных к сети WiFi, а злоумышленник с CoffeeMiner перехватывает трафик между пользователями и маршрутизатором.

майнер на питоне код. image loader. майнер на питоне код фото. майнер на питоне код-image loader. картинка майнер на питоне код. картинка image loader. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

1.1 Конфигурация сценария

Реальная ситуация — это маршрутизатор WiFi с подключенными ноутбуками и смартфонами. Мы проверили скрипт в этой ситуации из реального мира — и он работает. Но для этой статьи мы более подробно разберём, как установить его в виртуальном окружении.

Для реализации этого виртуального сценария будем использовать VirtualBox.

Первым делом нужно скачать какой-нибудь дисковый образ Linux и установить его на машине VirtualBox. В данном примере будем использовать образы Kali Linux.

После скачивания ISO-образа готовим три машины VBox с установленным образом Linux.

Для конфигурации описанного сценария нужно подготовить машины, выполняющие следующие роли:

При выполнении атаки ситуация будет такой:

майнер на питоне код. image loader. майнер на питоне код фото. майнер на питоне код-image loader. картинка майнер на питоне код. картинка image loader. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

Для каждой машины используем следующую конфигурацию:

auto lo
iface lo inet loopback

auto lo
iface lo inet loopback

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
address 10.0.2.15
netmask 255.255.255.0

2. CoffeeMiner, разбор кода

2.1. ARP-spoofing

Первым делом нужно понять, как осуществляется MITM-атака.

«В компьютерных сетях ARP-spoofing (ARP cache poisoning или ARP poison routing) — это техника, когда злоумышленник отправляет в локальную сеть (поддельные) сообщения по протоколу Address Resolution Protocol (ARP). В общем, цель состоит в связывании MAC-адреса злоумышленника с IP-адресом другого хоста, такого как шлюз по умолчанию, так что любой трафик для данного IP-адреса будет вместо этого направлен злоумышленнику».

Для осуществления атаки ARP-spoofing будем использовать библиотеку dsniff.

2.2. mitmproxy

Mitmproxy — это программа для анализа и редактирования трафика, который проходит через хост. Мы будем использовать её для внедрения JavaScript на страницы HTML.

Для простоты процесса внедряем одну строку кода на HTML-страницы. Эта строка кода запускает криптомайнер:

2.3. Внедрение

Когда мы перехватили трафик жертвы, то можно внедрить в него наш скрипт. Для внедрения используем mitmproxy API:

2.4. HTTP-сервер

Как мы видели, инъектор добавляет в HTML-страницы одну строчку, с вызовом нашего криптомайнера на JavaScript. Так что нужно разместить файл скрипта на HTTP-сервере.

Чтобы выдать скрипт криптомайнера, запустим HTTP-сервер на машине злоумышленника. Для этого используем питоновскую библиотеку ‘http.server’:

Вышеприведённый код — это простой HTTP-сервер, который отправляем жертвам наш криптомайнер, когда те его запрашивают.

Майнер на JavaScript будет размещён в директории /miner_script. В нашем случае используется JavaScript-майнер CoinHive.

2.5. Криптомайнер CoinHive

CoinHive — это JavaScript-майнер для криптовалюты Monero (XMR). Его можно добавить на сайт и использовать вычислительные ресурсы CPU на компьютерах пользователей для вычисления хэшей по алгоритму Cryptonight PoW, с помощью которых майнится Monero по протоколу CryptoNote.

Использовать майнер CoinHive имеет смысл, если пользователь остаётся на веб-странице относительно продолжительное время. Так что, например, для сайта со средними сессиями по 40 секунд он не имеет особого смысла.

Поскольку мы внедряем майнер абсолютно на все страницы, то майнер будет работать на компьютерах жертв продолжительное время.

майнер на питоне код. . майнер на питоне код фото. майнер на питоне код-. картинка майнер на питоне код. картинка . Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

3. CoffeeMiner, интеграция всего вместе

Основная задача — связать все описанные концепции в одну автономную установку. Это и будет CoffeeMiner.

Смысл в том, чтобы один скрипт CoffeeMiner осуществлял атаку ARP-spoofing и устанавливал mitmproxy для внедрения криптомайнера CoinHive в HTML-страницы жертв.

Сначала нужно сконфигурировать ip_forwarding и IPTABLES, чтобы машина злоумышленника работала как прокси:

Для проведения атаки ARP-spoofing для всех жертв подготавливаем файл ‘victims.txt’ с IP-адресами всех жертв. Считываем эти адреса несколькими строчками на Python (а также IP-адрес шлюза) — и проводим атаку ARP-spoofing для каждого IP-адреса жертвы.

После этого осталось запустить HTTP-сервер:

И теперь можно запускать mitmproxy через injector.py:

3.1. CoffeeMiner, окончательный скрипт

Теперь мы объединили все вышеописанные концепции в единый скрипт coffeeMiner.py:

А также скрипт injector.py:

И для начала атаки достаточно всего лишь запустить следующую команду:

> python3 coffeeMiner.py RouterIP

4. Демо

Для демонстрации используем виртуальный сценарий с VirtualBox, как описано выше.

Если хотим провести атаку вручную, то нам нужны следующие консоли:

майнер на питоне код. image loader. майнер на питоне код фото. майнер на питоне код-image loader. картинка майнер на питоне код. картинка image loader. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

Затем, когда атака ARP-spoofing завершена, а инъектор и HTTP-сервер готовы к запуску, мы можем зайти на виртуальную машину жертвы и открыть какой-нибудь сайт. Трафик жертвы пойдёт через компьютер злоумышленника и активирует инъектор:

майнер на питоне код. image loader. майнер на питоне код фото. майнер на питоне код-image loader. картинка майнер на питоне код. картинка image loader. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

В результате на всех HTML-страницах, которые просматривает жертва, будут присутствовать HTML-строчки кода, которые внедрил злоумышленник.

майнер на питоне код. image loader. майнер на питоне код фото. майнер на питоне код-image loader. картинка майнер на питоне код. картинка image loader. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

4.1. Демонстрационное видео

На следующих видеороликах можно увидеть все этапы операции с использованием скрипта coffeeMiner.py:

Заключение

Как мы убедились, такую атаку легко осуществить. И может быть проведена автономная атака в сети WiFi.

Есть другая мысль, что в реальной сети WiFi лучше использовать мощную антенну WiFi для лучшего покрытия всего физического пространства.

Основная цель данной работы — проведение автономной атаки, но нам всё ещё нужно отредактировать файл victims.txt с IP-адресами жертв. В следующей версии можно добавить функцию автономного сканирования Nmap для добавления обнаруженных IP-адресов в список жертв CoffeeMiner. Ещё одна возможная функция — добавление sslstrip, чтобы гарантировать внедрение дополнительной строчки кода даже на страницах сайтов, которые пользователь запрашивает по HTTPS.

Предупреждение: эта статья и проект имеют исключительно образовательные цели.

Источник

Как я blakecoin майнер делал

майнер на питоне код. . майнер на питоне код фото. майнер на питоне код-. картинка майнер на питоне код. картинка . Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

Не знаю кому как, а меня прошедший 2017 год шокировал стремительным взлетом биткоина. Сейчас, конечно, ажиотаж уже ушел, а в 17-м году про криптовалюты говорили и писали все кому не лень.

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

майнер на питоне код. image loader. майнер на питоне код фото. майнер на питоне код-image loader. картинка майнер на питоне код. картинка image loader. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

Я тоже стал изучать, что же такое эти самые биткоины. Когда-то я даже начал свое собственное иследование алгоритма SHA256 и написал статью здесь на хабре «Можно ли вычислять биткоины быстрее, проще или легче?». Мои исследования алгоритмов хеширования до сих пор продолжаются и еще и близко не завершены… Может быть когда нибудь напишу про это отдельную статью. А сейчас пока вот это..

Я попробовал запустить bitcoin майнер в FPGA. Я понимал, что время уже ушло, но хотелось все же прикоснуться к технологии. Уже в конце прошлого года я вдруг почему-то вспомнил, что у меня совершенно без дела лежит плата Terasic DE10-Standard с ПЛИС Intel Cyclone V 5CSXFC6D6F31C6 — это тот чип, который со встроенным процессором ARM. Я подумал, что было бы интересно запустить какой нибудь альткоин майнер в этой плате. А что? Инвестировать в оборудование мне уже не надо, оно и так есть. Главное, чтобы плата зарабатывала больше, чем потребляет энергии.

Поиск подходящего альткоина был весьма прост. Я искал готовые проекты для FPGA, которые я смогу адаптировать под свою плату. Таковых оказалось не очень много. На самом деле как я понимаю во всем мире есть всего несколько человек, которые делали FPGA проекты и главное публиковали их в открытом доступе, например, на github.

Таким образом, я взял проект github.com/kramble/FPGA-Blakecoin-Miner и адаптировал его под имеющуюся у меня плату Марсоход3, а так же адаптировал этот проект для DE10-Standard.

Собственно о том, как я адаптировал проект для платы Марсоход3 написано здесь. Для Cyclone V в принципе все то же самое — только ревизия проекта квартуса blake_cv, мои исходники вот.

К моему сожалению в имеющийся у меня Cyclone V помещается только три хэш функции blake.

майнер на питоне код. image loader. майнер на питоне код фото. майнер на питоне код-image loader. картинка майнер на питоне код. картинка image loader. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

Чуть-чуть не хватает емкости ПЛИС до четырех хэшеров. Я запускаю проект на частоте 120МГц и за один такт рабочей частоты вычисляется один хэш blake. Значит производительность моего проекта 120*3=360MH/sec. Не очень много честно говоря, однако, как я уже сказал, плата у меня уже была, и возвращаеть ее стоимость мне не нужно… Тут еще Quartus говорит, что Fmax=150MHz. Можно попытаться поднять частоту, но боюсь придется ставить кулер, будет гудеть — ну не на столько мне нужны эти крипты, чтоб еще гул в комнате слушать.

Общая задумка проекта такая: плата имеет микросхему у которой есть и ПЛИС и Dual-ARM:

майнер на питоне код. image loader. майнер на питоне код фото. майнер на питоне код-image loader. картинка майнер на питоне код. картинка image loader. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

Когда плата стартует, то из U-BOOT первым делом загружается ПЛИС, затем стартует Linux и в нем программа майнинга cgminer. Я сперва думал, что я смогу устроить виртуальный канал связи между ARM и FPGA, и это на самом деле возможно, но так не получилось. Дело в том, что программа майнера cgminer работает с аппаратными майнерами через USB и использует библиотеку libusb. То есть мне проще подключить ПЛИС к Linux системе через преобразователь USB-COM на FTDI, чем городить городушку соединяя ПЛИС на шину ARMа. Я таким уже как-то занимался и это было не очень просто.

Сейчас мой «майнер» выглядит вот так (на Cyclone V поставил радиатор на термопасте, а то сильно греется):

майнер на питоне код. kf1a3zami 02kilp8dqb5rnw3qo. майнер на питоне код фото. майнер на питоне код-kf1a3zami 02kilp8dqb5rnw3qo. картинка майнер на питоне код. картинка kf1a3zami 02kilp8dqb5rnw3qo. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

Сказать по правде основные проблемы у меня как раз возникли не с FPGA проектом, а с cgminer.

1) Какой cgminer брать за основу своей разработки? И связанный с этим вопрос «Куда подключаться, чтобы начать майнить?». А какая связь между этими вопросами? Казалось бы, где тут проблема — бери самый свежий cgminer, какой найдешь. Но позвольте: на github есть 98 форков программы cgminer. Все они чем-то отличаются, какой есть хороший, а какой плохой, какой есть вообще хотя бы рабочий? Вот вам и опенсоурс. Каждый автор чего-то там себе добавлял и исправлял, или ломал… или делал свою монету. Разобраться не просто. Нашел для себя сайт, где на одной странице есть ссылка и на github проект и на github проект для FPGA. То есть эти два проекта видимо как-то могут и должны пересекаться.

2) Поскольку я взял за основу FPGA проект от автора kramble, то на самом деле, конечно, логично было бы взять его патчи, которые он приложил к своему проекту. Но и тут не без проблем. У него есть патчи к программе cgminer-3.1.1 и cgminer-3.4.3. Я решил, что лучше брать ту, что новее 3.4.3, но только потерял с ней время. Похоже автор начал адаптировать для этой версии, но что-то там не довел до конца и эта версия совсем сырая. Пришлось брать 3.1.1 а это кажется вообще старючая версия.

3) Авторы изменяющие программу cgminer в своих форках для своих альткоинов не следят за правильностью комментариев и именованием функций в коде. Зачастую в коде тут и там встречается слово bitcoin, а сам этот форк cgminer-а уже кажется не может считать для биткоина, а может только в альткоин.

4) Тесты. ГДЕ ТЕСТЫ? Я чего-то не понимаю, как можно делать сложный продукт без тестов? Я их не нашел.

Сказать по правде даже начинать что-то делать было не просто. Представьте себе, что нужно запустить некоторый проект в FPGA, но не очень понятно, что он должен делать, как получать данные, какие данные и в каком виде нужно выдавать результат. К этому FPGA проекту должна прилагаться некоторая программа, которую не известно точно где взять, но она должна обнаружить плату майнера, что-то туда посылать (неизвестно что) и что-то из нее получать. В каком формате, какими блоками, как часто — ничего не известно.

На самом деле, изучая патчи cgminer от kramble я примерно представляю себе как оно должно работать.

В файле usbutils.c прописаны устройства, которые могут рассматриваться как аппаратные внешние майнеры на шине USB:

Я в эту структуру добавил описатель своего USB-to-COM преобразователя FTDI-2232H. Теперь, если cgminer обнаружит устройство с VendorId/DeviceId = 0x0403:0x6010, то он попробует работать с этим устройством, как с платой Icarus, хоть она таковой и не является.

Дальше смотрим файл driver-icarus.c и тут есть функция icarus_detect_one:

Смысл такой. Программа передает плате заведомо известное задание на поиск хэша, причем в задании сказано с какого нонсе начинать вычисление и это нонсе немного меньше настоящего GOLDEN nonce. Таким образом, плата начнет считать с указанного места и буквально сразу в считанные доли секунды наткнется на GOLDEN nonce и вернет его. Программа тут же получит этот результат, сравнит его с правильным ответом и сразу становится понятно — это действительно тот HW майнер с которым можно работать или нет.

И вот тут была ужасная проблема — в проекте есть патчи на языке C, есть тестовая программа на питоне и тестбенч для FPGA.

В патчах на C тестовые данные выглядят вот так:

1) патч для cgminer-3.1.1

1) патч для cgminer-3.4.3

И что тут правильно, а что нет? Исходные данные одинаковые, а golden nonce объявлен разным. Парадокс… (заранее скажу, что в патче для cgminer-3.4.3 ошибка — нонсе 0x000187a2 не верный, а сколько времени я на это потратил..)

В проекте есть тестовая программа на питоне, которая читает текстовый файл, извлекает из него данные и передает в плату через последовательный порт… Там тестовые данные вот такие:

0000007057711b0d70d8682bd9eace78d4d1b42f82da7d934fac0db4001124d600000000cfb48fb35e8c6798b32e0f08f1dc3b6819faf768e1b23cc4226b944113334cc45255cc1f1c085340967d6c0e000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
0000007057711b0d70d8682bd9eace78d4d1b42f82da7d934fac0db4001124d6000000008fa40da64f312f0fa4ad43e2075558faf4e6d910020709bb1f79d0fe94e0416f5255cc521c085340df6b6e01000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
0000007095696e4529ae6568e4b2a0057a18e82ccf8d370bf87e358900f8ab5000000000253c6078c7245036a36c8e25fb2c1f99c938aeb8fac0be157c3b2fe34da2fa0952587a471c00fa391d2e5b02000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
000000704445e0446fcf2a84c47ce7305722c76507ba74796eaf39fe0007d44d00000000cac961f63513134a82713b172f45c9b5e5eea25d63e27851fac443081f453de1525886fe1c01741184a5c70e000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
00000070a3ac7627ca52f2b9d9a5607ac8212674e50eb8c6fb1219c80061ccd500000000ed5222b4f77e0d1b434e1e1c70608bc5d8cd9d363a59cbeb890f6cd433a6bd8d5258a0141c00b4e770777200000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
000000706c90b789e84044d5be8b2fac01fafe3933ca3735269671e90043f8d900000000d74578c643ab8e267ab58bf117d61bb71a04960a10af9a649c0060cdb0caaca35258b3f81c00b4e7b1b94201000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
00000070171d2644781cccf873ce3b6e54967afda244c47fc963bb240141b4ad00000000d56c4fbdc326e8f672834c8dbca53a087147fe0996d0c3a908a860e3db0589665258da3d1c016a2a14603a0a000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
00000070d03c78cb0bb0b41a5a2c6ce75402e5be8a705a823928a5640011110400000000028fb80785a6310685f66a4e81e8f38800ea389df7f16cf2ffad16bb98e0c4855258dda01c016a2ae026d404000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
0000007091a7eef446c4cb686aff8908ab5539d03a9ab2e975b9fe5700ed4ca9000000000f83bb385440decc66c10c0657fcd05f94c0bc844ebc744bba25b5bc2a7a557b5258e27c1c016a2a6ce1900a000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
00000070856bd0a3fda5dac9ede45137e0c5648d82e64fbe72477f5300e96aec0000000026ca273dbbd919bdd13ba1fcac2106e1f63b70f1f5f5f068dd1da94491ed0aa45258e51b1c017a7644697709000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000

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

Но все равно, среди этих тестовых данных для программы на питоне НЕТ задания похожего на то, которое описано в программе на C.

Ну хорошо, тогда смотрю тестовую программу-тестбенч на verilog:

Здесь есть предполагаемый пакет данных, который плата должна принять. Но опять этот предполагаемый пакет данных никак не похож на пакет данных в программе на C или на данные для тестовой программы на питоне.

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

Вообще, в верилог проекте blakecoin майнера было скрыто еще одно форменное издевательство над моим организмом.

Если проводить симуляцию проекта с verilog тестбенчем, то в симуляторе с вот этими тестовыми данными 416’h000007ffffbd9207ffff001e11f35052d5544… замечательно находится и возвращается результат GOLDEN nonce.

Потом проект компилирую для реальной FPGA платы, эти же самые данные подаю из программы на питоне и… плата не находит GOLDEN nonce…

Оказывается, что тестовые данные в verilog тестбенче «немного плохие». Они для низкой сложности, когда в результирующем хэше всего 24 ведущих нуля, а не 32, как требуется.

В файле experimental/LX150-FourPiped/BLAKE_CORE_FOURPIPED.v есть вот такой код

В Verilog симуляторе проверяется не так, как будет будет работать в железе! То есть для реальной FPGA платы будем проверять на 32 бита ведущих нулей, а в симуляции будем проверять только 24 бита. Это просто прелестно. Хочется побить автора.

Я конечно, все это победил. По крайней мере, тестовая программа на питоне выдает бодрые сообщения:

майнер на питоне код. image loader. майнер на питоне код фото. майнер на питоне код-image loader. картинка майнер на питоне код. картинка image loader. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

Ладно, что в результате? Сколько намайнил? К сожалению нисколько.

Как только я был уже готов начать майнить, буквально в конце января сложность блейка сильно возросла:

майнер на питоне код. image loader. майнер на питоне код фото. майнер на питоне код-image loader. картинка майнер на питоне код. картинка image loader. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

Теперь я мог оставить на сутки плату и она хоть и находила решения, но их не принимал пул — все еще мало ведущих нулей.

Я пробовал переключиться на другую валюту — VCASH. С этой валютой пул хотя бы иногда выдавал мне бодрящие сообщения вроде вот этого:

майнер на питоне код. image loader. майнер на питоне код фото. майнер на питоне код-image loader. картинка майнер на питоне код. картинка image loader. Электронная валюта уже ни для кого не новость, а вот собственная реализация валюты на Python обещает быть интересной. Создаем новый Bitcoin.

Но все равно и VCASH пул ничего не начисляет. Печаль-беда.

Пользуясь случаем хотел бы спросить у знающих людей. Вот у меня есть видеокарта Nvidia 1060. Она выдает 1,25GHash/sec на блейкоине и за час два-три раза выдает nonce, который принимает пул (и начисляет копеечку). Я думал, что если моя FPGA плата считает 360MHash/sec, ну то есть примерно в 3 раза хуже, чем видеокарта, то я за два часа получу хотя бы один нонсе принятый пулом. Однако, этого не происходит. Даже за сутки нет ни одной копеечки… Где тут подвох для меня так и осталось загадка…

Сейчас я на досуге пытаюсь понять можно ли как-то оптимизировать имеющийся FPGA проект, скажем задействовать встроенную память или еще что-то. Может быть, если повезет, что-то и придумаю.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *