Теперь хочу задать свои первые 10 глупых вопросов о биткоин
Тут я не могу согласиться, так как вопросы вовсе не глупые,
а на некоторые я сам не могу с ходу дать развернутый ответ.
Не могу понять, является ли комиссия обязательной или нет?
Оба варианта по своему верны. С одной стороны, если отключить в исходниках
Bitcoin оплату комиссии и сгенерировать блок со своей транзакцией, то это не
будет нарушением логики системы. Но с другой стороны, так как мощностей
не хватает для генерации блока в одиночку, приходится подчиняться тем
правилам, что диктует доминирующая часть биткоин клиентов и майнеров.
Эти правила не являются основной частью логики Bitcoin и работают поверх,
кроме того они меняются от внешних факторов (вроде изменения курса BTC).
Зависит ли сложность в вычислительном плане от количества обрабатываемых транзакций? А от размера этих транзакций?
Ответ - дважды нет (если опустить факторы вроде "эффекта бабочки").
Хешируется лишь заголовок блока, а не весь блок со всеми переводами.
Подготовка же содержимого блока занимает очень малое время, и есть
ограничения на максимальный объем, так что блок нельзя перегрузить.
Получает ли майнер (пул) какую-то выгоду от того, что не включает в блок транзакции без комиссии?
Ответ - нет (если исключить фактор принуждения к оплате комиссии).
Соло-майнеры и пулы (специально отделяю от майнеров пула, так как
они не являются полноценными клиентами, а лишь хешируют блоки)
получают награду независимо от какой-либо фильтрации трансакций.
Они могут вообще не включать трансакции в блоки, могут диктовать
любые правила вступления перевода в блок, или вообще впускать все.
Но, если большинство таких майнеров требует обязательной комиссии,
это повысит их доход, так как у пользователей особо не будет выбора.
Кто вообще определяет, какие именно транзакции войдут в блок?
Соло-майнеры и пулы, все генерирующие полноценные серверы bitcoind.
Они могут придерживаться тех правил по умолчанию, что разработчики
Bitcoin прописывают в bitcoind, но могут и менять по своему усмотрению.
Еще некоторое влияние оказывают узлы, которые не занимаются самой
генерацией, так как есть правила, при которых они передают перевод
остальным узлам. Если настроить клиент на соединение сразу с пулом,
то будут задействованы только правила данного пула и, конечно, все
общие правила работы системы, которые ни за что нельзя нарушать.
Кем и где рассчитывается сложность?
Всеми узлами. Расхождений быть не должно, так как правила для всех общие.
Кем и где фиксируются транзакции, которые майнеры объединяют затем в блоки?
Соло-майнеры и пулы. То есть самые обычные полноценные узлы, которые
занимаются генерацией. Если какой-то узел отправит перевод, то он будет
распространен среди все узлов, к которому был подключен отправляющий
узел, таким образом рано или поздно перевод дойдет и до генерирующего
узла. Разумеется, этот перевод не должен встретить препятствий в пути,
вроде того, что его все забракуют из-за несоответсвия общим правилам
работы системы (например: дабл-спенд или перевод несуществующих
в природе биткоинов без происхождения из общепризнаных блоков),
а не будут передавать перевод дальше уже по своим спискам узлов.
Когда перевод попадет к генерирующему узлу, тот начнет размещать
его в блоке. Причем, этим будут заниматься сразу множество пулов.
Некоторые могут отказать во включении в блок на основании своих
более жестких правил, сейчас таких требовательных пулов мало.
Откуда качается база при установке биткоин-клиента? Где ведется история (цепочка блоков)?
Каждый блок запрашивается у подключенных к клиенту узлов.
Официальный клиент проверяет блоки на соответсвие правилам,
размещает в файлах blk00??.dat и blkindex.dat в той дириктории,
где размещен файл кошелька wallet.dat; начинает сам раздавать
блоки нуждающимся узлам. Это обычная реализация Peer-to-Peer.
Если клиент еще ни к кому не подключался, то списочек узлов он
получит через группу хостов, которые контролируются лидерами
проекта. Но и никто не запрещает организовывать свой даркнет.
Транзакция все-таки элементарная операция по передвижению средств или в ней может быть несколько адресов отправителей/получателей?
Если объяснять просто, то транзакция - это такая микропрограмма,
которая выполняется словно в "песочнице" любого клиента Bitcoin.
Эта микропрограмма задает с каких адресов на какие адреса и при
каких условиях должен быть зачтен перевод биткоинов. Таким вот
образом можно делать сложные скриптовые переводы, но сегодня
это почти не используется, так как и обычных переводов хватает.