Как майнеры выбирают какие транзакции включать, а какие — нет?
Вопрос заключается в способе выбора транзакции. Прочитал информацию во многих ресурсах, но ответа так и не нашёл. Как майнеры выбирают себе транзакции, которые будут включены в его блок?
Я понял, что выбираются как правила те, где больше всего комиссия. Но так как существует атака двойной траты при эгоистичном майнинге, вопрос состоит в том, как майнеры всё-таки выбирают себе транзакцию? В той атаке майнер берет транзакцию с конкретным непотраченным выходом и отправляет непотраченный выход себе же. Если Bitcoin core один и тот же, в котором определён способ майнинга, то вопрос в том, как злоумышленник начинает майнить блоки с конкретными транзакциями из мемпула, если все следуют одному алгоритму майнинга, который прописан и один и тот же у всех, значит и способ выбора транзакций один и тот же? Тогда как злоумышленники выбирают себе транзакции для майнинга?
Ещё найдены статьи по разным алгоритмам выбора транзакций для включения в блок. И не понимаю, почему существуют разные алгоритмы, если по факту при запуске полной ноды Bitcoin Core все следуют одному единому алгоритму выбора транзакций для добавления в свой блок.
Как майнер хочет так и выбирает, понятно что экономически выгодно отсортировать по комиссии и выбрать с максимальной, кроме этого майнер может пропихнуть свои транзакции с минимальной комиссией. И не понятно при чем тут "атака двойной траты", для нее нужно специфичные условия.
А как он может это сделать, если он запустил полную ноду с помощью Bitcoin Core? Там же прописан определённый алгоритм выбора транзакций
Как он может сделать так, чтобы выполнялся не этот алгоритм, а какой-то другой, в котором есть что-то вроде:
if tx[“from_address”] == my_address:
chain.append(tx)
Ну то есть какой-то такой код, чтобы он точно добавил свою транзакцию
Как он способен выбирать, если в Bitcoin Core уже определен алгоритм добавления транзакций
Dr. Bacon, а как тогда это работает
Майнинг работает 24/7
Нет же такого, что приложение предлагает список транзакций, в которых надо выбрать определенные транзакции, добавить, нажать подтвердить и после добавления блока в цепь снова ожидание от человека для выбора транзакций
Они же должны как-то автоматом собираться, чтобы узел не простаивал
BoyFromDubai, ты вообще о чём? есть мемпул, куда сначала отправляют транзакции, он общий для всех, майнеры из него выбирают как им хочется, ну и выбирает программа, а не человек, никто ничего не нажимает. Ну конечно можно и руками выбрать, если ты что-то специальное захотел.
Dr. Bacon, я про это и говорю, что программа выбирает транзакции из мемпула
А если майнер создал 2 транзакции например с очень маленькой комиссией, они попали в мемпул, и ему необходимо чтобы эти 2 транзакции обязательно оказались в блоке, который он добудет, то что он должен сделать для того, чтобы явно указать, какие транзакции он точно хочет добавить в свой блок
Dr. Bacon, а если майнер - это злоумышленник, который обладает 51% вычислительной мощностью сети, то как он способен контролировать то, какие транзакции будут включаться в блокчейн, а какие - нет
Меня вот этот момент интересует, как майнер способен контролировать попадание конкретных транзакций в свой последующий блок
Я вот этот момент не понимаю, так как пишут, что при обладании 51% человек способен контролировать то, какие транзакции будут добавляться, а какие - нет
А как именно он контролирует это, если существует определённый алгоритм майнинга? То есть игнорирует наличие алгоритма для извлечения максимальной выгоды с поиском наибольших комиссий, а вместо этого конкретные транзакции пропихивает в блоки
То есть речь скорее не о пропихивании его транзакций, а как он способен контролировать то, какие транзакции он хочет включить, а какие нет (например не хочет добавлять транзакции, в которых получателем будет узел с адресом ffffff…)
BoyFromDubai, еще раз, есть мемпул, бери из него любые транзакции и в включай в блок, можешь написать программу, которая будет выбирать их по твоему алгоритму, можешь руками выбрать, если твою хотелку не описать алгоритмически.
если существует определённый алгоритм майнинга
это алгоритм определяет как посчитать хеш блока, на основе выбранных транзакции, но никак не контролирует их выбор, я тебе сразу про это сказал
Dr. Bacon, а как эту программу для майнинга внедрить в сам Bitcoin core
То есть эта программа должна полностью заменить ту программу для майнинга, которую предоставляет сам Bitcoin core
То есть, как сказать Bitcoin Core’у, что ты должен теперь майнить согласно тем правилам, которые указаны в этом файле, а не в том, который был скачан ранее
Dr. Bacon, а, вы отредактировали сообщение
Я прочитал
То есть, тот алгоритм майнинга просто считает хэш от полученного блока, который ему предоставляется каким-то другим исполняемыми файлом, и подгоняет нужный nonce
Тогда вопрос про то, как сделать так, чтобы в этот алгоритм майнинга попадал нужный мне алгоритм выбора транзакций?
То есть существует этот алгос, который перед майнингом выбирает лучшие для добавления блоки, а как сделать так, чтобы этот алгос учитывал мои хотелки тоже? Просто взять конкретный файл, который был скачен вместе со всем Bitcoin core и изменить его содержимое или как?
ничего не нужно внедрять, еще раз, нету никакого обязательного алгоритма выбора транзакции в блок.
Я вот этот момент не понимаю
Человек с помощью консоли в Bitcoin core начал майнить
Для майнинга необходимо, чтобы собрался блок с транзакциями
Значит в Bitcoin core есть файл, который исполняется и отправляет на майнинг определённый блок с собранными транзакциями
Это означает, что злоумышленнику необходимо найти этот файл, который собирает блок и отправляет на майнинг и отредактировать его так, чтобы добавлялись только нужные ему транзакции?
BoyFromDubai, ничего не надо искать или менять, просто пишешь скрипт который общается ("отправляет на майнинг определённый блок с собранными транзакциями") с Bitcoin core по его API
Dr. Bacon, вот, тогда как это сработает?
Ну то есть, имеется какой-то исходный код, заложенный в Bitcoin core, который отбирает транзакции. А мне надо, чтобы мой скрипт взаимодействовал по API с кошельком
То есть, Bitcoin Core при добавлении транзакций в блок должен обращаться не к своему файлу, а к моему.
Таким образом, исполняется мой файл, а не файл кошелька, вы об этом? То есть, переписать исходный код придётся в заголовочном файле, где идёт обращение к функции на добавление транзакций в блок
Просто я не совсем понимаю, что в данном случае означает взаимодействие моего скрипта по API Bitcoin Core’а
Dr. Bacon, немного
То есть, штука, которая позволяет взаимодействовать с этой программой как-то, то есть какие-то данные свои предоставляет
Как-то так наверное
А про Bitcoin Core я писал потому что он позволяет запустить полный узел, то есть начать майнить блоки (не только это, но в том числе и это)
Dr. Bacon, ну то есть, я понимаю, что после ввода определённой команды в консоль начинает отрабатывать какой-то скрипт, например связанный майнингом
Получается, что начинают исполняться какие-то файлы с определёнными алгоритмами, например тот же самый алгоритм для добавления в блок определённых транзакций
Поэтому я не совсем понимаю, при чем тут API, и как оно должно помочь в реализации нового алгоритма поиска транзакций для блока
с помощью его ты получишь список транзакций в мемпуле, собирешь блок, отправишь блок в сеть, и т.д. и т.п. Ну или можешь его не использовать, а все эти действия самим реализовать на низком уровне.
Dr. Bacon, то есть, вы о том, что я в принципе забиваю на исходный код биткоина, при помощи API вытаскиваю все имеющиеся транзакции в мемпуле, пишу свой какой-то скрипт условный, который собирает мне блок, который будет правильным и сеть примет, и отправляю его в сеть каким-то пирам?
То есть, для майнинга мне достаточно одного файла в условные 100 строк кода, при запуске которого начнут майниться блоки, и можно забить на существование Bitcoin Core?
Говорят, что нельзя изменить код bitcoin’а. Я же правильно понимаю, что речь идёт о том, что под изменениями подразумеваются новые правила сети, и если один из изменит, а другие останутся на прежней версии, то этот человек будет вне сети, а есть в исходный код Bitcoin Core добавить строки с комментарием или внести любое другое изменение, которое правила сети не поменяет, то все будет хорошо?
Транзакции выбираются из mempool'а с сортировкой по комиссии. Можешь эту часть кода переписать в кошельке биткоина, собрать версию и использовать свой алгоритм выбора
Понял
А про версию вы написали, это означает, что все остальные участники сети увидят, что версия блока Биткоина изменилась или никто не заметит этих действий и все будут майнить по одному алгоритму, а я буду отбирать определенные транзакции для включения?