Кто-нибудь может объяснить, как работает биткойн-блокчейн?

Я пытаюсь понять, как работает блокчейн и как его читать через сайт blockchain.info. Есть ли простой способ объяснить, как работает цепочка блоков и как читать блок-цепочку для отслеживания транзакций?

Что я знаю на данный момент, так это то, что блокчейн — это просто публичный реестр транзакций в сети биткойнов.

Методы доступа к данным будут различаться между использованием Blockchain.info (веб-API) и Bitcoin-Qt/bitcoind (локальный API). Если вы хотите получить все данные блокчейна, вы превысите пороги доступа с помощью Blockchain.info.
Есть десятки статей о том, как работает Биткойн и о роли блокчейна. Было бы намного лучше, если бы вы прочитали одну или две из них, а затем задали конкретные вопросы о том, чего не понимаете.

Ответы (2)

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


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

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

Каждый заголовок блока содержит:

Данные блока биткойнов [Иллюстрация Маттеуса Вандера (Викимедиа)]

  • Отметка времени:
    время, когда блок был найден.
  • Ссылка на родителя ( Prev_Hash):
    это хэш заголовка предыдущего блока, который связывает каждый блок с его родителем и, следовательно, посредством индукции со всеми предыдущими блоками. Эта цепочка ссылок является одноименной концепцией блокчейна.
  • Корень Меркла ( Tx_Root):
    Корень Меркла представляет собой сокращенное представление набора транзакций, подтвержденных этим блоком. Сами транзакции предоставляются независимо, образуя тело блока . Должна быть хотя бы одна транзакция: The Coinbase . Coinbase — это специальная транзакция, которая может создавать новые биткойны и собирать комиссию за транзакции. Другие транзакции являются необязательными.
  • Цель:
    цель соответствует сложности поиска нового блока. Он обновляется каждые 2016 блоков, когда происходит сброс сложности .
  • Nonce:
    Произвольно выбранное число для удобного добавления энтропии к заголовку блока без перестройки дерева Меркла.
  • Собственный хэш блока:
    все вышеперечисленные элементы заголовка (т. е. все, кроме данных транзакции) хэшируются в хэш блока, что, с одной стороны, является доказательством того, что другие части заголовка не были изменены, а затем используется в качестве ссылки. последующим блоком.

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

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

На Blockchain.info вы можете отслеживать транзакцию, запрашивая страницу напрямую с хешем транзакции

http://blockchain.info/tx/<transaction-hash>
e.g. http://blockchain.info/tx/37df28642f97db7003a7bc6663467eb1e9cb4493b6c94bf089ee77f87acdae3d

или позвонив на один из задействованных адресов через

http://blockchain.info/address/<address>
e.g. http://blockchain.info/address/1DrZtRNsSu9BqGcY4D9etFno4H95DqNmKb

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

Как член широкой общественности, этот ответ почти бесполезен. Я не понимаю ЭТО, но этот ответ написан так, как будто я уже знал это - вам нужно начать с очень простого примера: Билл продает Салли яблоки за 2,50 фунта стерлингов ....
@ user32260: Надеюсь, мой второй ответ покажется вам более доступным.
Картинка, которую вы использовали, также содержит нечто, называемое «одноразовым номером», но в вашем описании это не указано. Стоит ли добавлять это, или это мало касается общего объяснения?
@RichardHorrocks: одноразовый номер - это просто случайное число, которое добавляет энтропию для поиска допустимого блока. Майнеры перебирают их миллионы, чтобы найти блок.
@Murch: Значит, кто-нибудь узнает ваш биткойн-баланс, верно?
Нет, откуда у тебя такое впечатление?
@anhldbk: Все знают все остатки средств, которые можно потратить. Однако, как правило, невозможно узнать, какие остатки принадлежат конкретным лицам или какие остатки принадлежат одному и тому же лицу.
@Murch: То есть, если я публично опубликую свой биткойн-адрес в Интернете, тогда любой узнает мой баланс, верно?
@anhldbk: Если вы используете только один адрес, да.

Для пользователя 32260 : Билл продает Салли яблоки за 2,50 фунта стерлингов.

Билл — продавец фруктов. Салли хочет купить яблок за 2,50 фунта стерлингов. Салли хочет использовать биткойны, чтобы заплатить Биллу за яблоки. Билл представляет Салли свой платежный адрес, например, в виде кода быстрого ответа:

адрес Билла

Салли использует биткойн-кошелек на своем смартфоне для сканирования кода. Ей предоставляется экран, на котором она может ввести сумму для отправки на адрес Билла. Она набирает «2,50 фунта стерлингов» и нажимает «Отправить». Мгновение спустя планшет Билла уведомляет его об ожидании входящего платежа, который еще не подтвержден. Примерно через десять минут платеж будет завершен , когда он будет подтвержден .

Под капотом

1) Платежное поручение (Транзакция) :
Программное обеспечение на смартфоне Салли проверяет, есть ли у Салли достаточный баланс, а затем создает платежное поручение, которое мы назовем транзакцией . Эта транзакция состоит из трех частей информации: какие « монеты » тратятся, платеж получателю и подпись.
Кошелек Салли подключен к другим участникам сети. Кошелек передает транзакцию всем им, которые, в свою очередь, пересылают ее всем своим соединениям. В течение нескольких секунд каждый участник сети получил уведомление о платежном поручении Салли. Каждый участник проверяет, существуют ли упомянутые «монеты» и совпадает ли подпись с подписью владельца.

2) Подтверждение :
Пока платеж Салли является только обещанием, потому что транзакция еще не подтверждена .
Чтобы изменить это, некоторые участники сети, которых мы назовем майнерами , работают над подтверждением этих транзакций. Майнеры захватывают все неподтвержденные транзакции и пытаются упаковать их в набор. Когда этот набор не соответствует требованиям сложности, они перетасовывают его и повторяют попытку. Майнеры по всей планете выполняют эту работу, пока в какой-то момент кто-нибудь не найдет набор с нужными свойствами: действительный блок . Поскольку обнаружение действительного блока — маловероятное событие, объявление о новом блоке доказывает, что сеть приложила усилия, чтобы найти его.
Как и в случае с предыдущими транзакциями, майнер отправляет блок всем своим соединениям, которые, в свою очередь, пересылают его. Каждый участник проверяет работу (чтобы убедиться, что блок соответствует правилам) и, когда он удовлетворен, применяет включенные транзакции в свою собственную книгу: транзакции выполняются, а «монеты», которые были использованы отправителями, помечаются как потраченные, тогда как получатели получают новые «монеты» в соответствии с инструкциями транзакций. Транзакция Салли (и всех остальных) теперь подтверждена. Билл теперь может потратить «монеты», которые он получил от Салли.

3) Блокчейн
Давайте сделаем шаг назад. Прежде чем Салли заплатила Биллу, Салли получила свои биткойны от Алисы. Порядок транзакций имеет решающее значение, поскольку транзакции могут тратить только «монеты», которые уже были созданы. Салли не сможет заплатить Биллу, если сначала не получит деньги от Алисы. Транзакции имеют явную позицию в блоке, который подтверждает их, и каждый блок имеет фиксированную позицию в цепочке блоков, ссылаясь на своего прямого предшественника. Например Block 90, ссылается на Block 89своего предшественника, в свою очередь Block 89основывается на Block 88, и так далее, пока не Block 2укажет на первый блок, Genesis Block.

Genesis Block ← 2 ← … ← 88 ← 89 ← 90

Одноименный блокчейн обладает полезными свойствами:

  • Детерминированные результаты : каждый может начать с Genesis Blockи применять каждый блок последовательно, чтобы получить один и тот же результат.
  • Синхронизация и консенсус : когда вы применили последний блок, балансы в вашей бухгалтерской книге имеют точно такое же состояние, как и в бухгалтерских книгах всех других участников.
  • Неизменяемая история : по мере того, как каждый блок основывается на своем предшественнике, каждый новый блок хоронит историю под большим объемом работы (см. рисунок ниже):

введите описание изображения здесь Иллюстрация: Марк Монтгомери/IEEE Spectrum

Что вы имеете requirementsв виду под фразой «Когда их набор не соответствует требованиям, они перетасовывают его и пробуют снова»?
@anhldbk: майнеры хэшируют черновики своих блоков и смотрят, соответствует ли хэш блока требованиям сложности. Если хэш не соответствует сложности, это недействительный блок.
Мне особенно нравится, как вы резюмировали шаг 2. Очень краткое изложение процесса.
@anhldbk: я обновил свой ответ, чтобы четко указать требование. — Спасибо, Даррен. :)
@Murch «Каждый участник проверяет, существуют ли перечисленные «монеты» и является ли подписавший их владельцем». Значит, все должны знать, сколько у тебя денег?
@tomak: Все знают обо всех существующих монетах, но другие пользователи не знают, кому они принадлежат. Когда вы тратите, вы доказываете, что имеете право тратить, но при этом не раскрываете свою личность. Вы также не раскрываете контроль над какими-либо «монетами», которые не участвовали в этой конкретной транзакции (если только вы не используете адреса повторно или кто-то не смог определить связь с помощью анализа цепочки).
на шаге 1 что происходит, когда какая-либо из проверок не проходит? На шаге 2 есть ли какое-либо преимущество для майнера в том, чтобы взять только минимально необходимые транзакции и объединить их в набор/блок?
@RaviKumar: 1. Если чеки не пройдены, либо денег не существовало, либо отправитель не аутентифицировал себя должным образом как владелец. Сделка недействительна. Узлы не пересылают недействительные транзакции своим партнерам, а майнеры не включают недействительные транзакции в блоки. 2. Если майнер еще не проверил последний блок, он рискует включить транзакцию, которая уже была подтверждена или больше недействительна, если он сразу найдет новый блок, поэтому майнеры могут добывать «пустые блоки». очень скоро после того, как блок был обнаружен. В противном случае они зарабатывают больше комиссионных, включая больше транзакций.
Я не совсем понял упомянутые вами «пустые блоки» и еще несколько вопросов :) Допустим, майнер m1 только что завершил проверку предыдущего блока. Теперь m1 формирует новый блок и добавляет в него транзакции tx1, tx2, tx3 и начинает работать над поиском правильного решения. Тем временем майнер m2 также завершил проверку предыдущего блока, формирует новый блок и добавляет к нему tx3 и tx4. И если так случилось, что m2 находит решение первым, то блок m2 является допустимым следующим блоком. Я прав?
1) См. bitcoin.stackexchange.com/q/46604/5406 для «пустых блоков». 2) Обычно всякий раз, когда кто-то находит действительный блок, он становится новым цепным наконечником. Единственным естественным исключением из этого правила является ситуация, когда два майнера публикуют блок в одно и то же время. См., например , bitcoin.stackexchange.com/q/48302/5406 .
Я думаю о том, как производительность сохраняется. Если сегодня вершина цепочки находится в 1 миллионе блоков от генезис-блока, а через 2 года вершина цепочки находится в 4 квадрильонах блоков от генезис-блока, как будет работать проверка на всем пути к генезис-блоку на быстром и большом объеме? , экосистема высокоскоростных транзакций, в которой число пользователей/транзакций растет в геометрической прогрессии? Не начнет ли он становиться экспоненциально медленным? Будет ли еще 10 минут времени подтверждения до этого момента?
Кроме того, если транзакция изначально отправляется всем одноранговым узлам, и они отправляют всем своим одноранговым узлам, и они отправляют всем своим одноранговым узлам, пока КАЖДЫЙ в сети не получит копию транзакции, как вы описали в шаге 1. Означает ли это, что КАЖДЫЙ биткойн пользователь блокчейна должен хранить информацию о КАЖДОЙ ОДНОЙ из МИЛЛИОНОВ транзакций, происходящих в сети? Как он учитывает лимиты хранения данных каждого для хранения такого большого количества информации в каждом отдельном узле?
@SyedRakibAlHasan: интервал блокировки автоматически корректируется до 10 минут, чуть более чем за девять лет у нас есть только 521822 блока, и в будущем у нас будет около 1100 блоков в неделю. Вам нужно отслеживать каждую транзакцию, только если вы используете полный архивный узел. Узлы обрезки сохраняют только подмножество данных, а тонкие клиенты узнают только о транзакциях, имеющих к ним непосредственное отношение. Тем не менее, мне кажется, что вам, возможно, следует скорее задать новый вопрос. ;)
@SyedRakibAlHasan: Связанный биткойн.stackexchange.com/q/4461/ 5406
Какой блестящий ответ. Нам нужно больше таких вещей. :)