22 января 2021

Двойное расходование в сети Биткоин

Самой громкой (как минимум в техническом плане) новостью вчерашнего дня стало так называемое “двойное расходование” средств в сети Биткоин. И правда, если бы мы стали свидетелями подобного бага в сети, это неминуемо привело бы к самым что ни на есть серьезным (и далеко не самым приятным) последствиям.

Несмотря на то, что “миф” был развеян, сообщество Bitcoin Translated (не самое большое, но, пожалуй одно из самых сплоченных и идейных) предложило подробнее разобрать саму суть проблемы, ведь понимание основ работы протокола поможет с большей уверенностью отличать зерна от плевел в будущем.

Мало кто поможет разобраться в ситуации лучше Андреаса Антонопулоса, так что представляю вашему вниманию перевод его пояснения случившегося:

«Двойное расходование сломало Биткоин»: FUD, распространенный безответственным изданием.

21 января в блокчейне Биткоина произошла реорганизация цепи. Это обычное явление, которое является частью нормальной работы Биткоина. “Реорг” — результат децентрализованного консенсуса в рамках «Доказательства проделанной работы» (PoW). Это происходит в каждой цепочке PoW.

Два блока были добыты почти одновременно, конкурируя за одну и ту же высоту, что означает, что они имели один и тот же родительский (предшествующий) блок и пытались стать продолжением цепи поверх одного и того же блока. Только один блок может добиться успеха в долгосрочной перспективе. Время от времени разные ноды и майнеры видят тот или иной блок первыми и считают его победителем. Это нормально при децентрализованном алгоритме консенсуса. В конце концов, в среднем за 10 минут добывается следующий блок. В качестве “родителя” этого нового блока выступает *один* из двух конкурирующих блоков. Который из них? Тот, который майнер нового блока увидел первым. Новый блок становится продолжением цепи, решая данную проблему. Из двух изначально конкурирующих блоков один теперь является родителем, а другой — последним потомком более короткой цепи. В итоге выбором каждого становится цепь с наибольшей совокупной проделанной работой. Невостребованные блоки — потомки другой цепочки — отбрасываются. Опять же, это абсолютно нормальная процедура. Реорганизация одного блока происходит в среднем каждые пару недель, как следствие функционирования децентрализованного алгоритма PoW. Реорганизация высотой в два блока происходит реже, возможно, несколько раз в год. Реорганизации высотой в три блока крайне редки. Не думаю, что мы когда-либо наблюдали подобное. Что же происходит с любыми транзакциями в невостребованном блоке? Если они также находятся в выигрышном блоке, то все в порядке. Если они туда не попали, то каждый узел помещает их обратно в свой мемпул как «неподтвержденные» и ждет следующей возможности.

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

Тем не менее, получатель платежа может увидеть транзакцию, которая, на первый взгляд, получила одно подтверждение (она находится в блоке), но позже исчезает, так как этот блок оказывается невостребованным. В очень редких случаях “недобропорядочный” отправитель подкладывает *другую* транзакцию в соревнующийся /выигрышный блок. Допустим, это плата на меньшую сумму (больше сдачи) или на другой адрес. Так как исходная транзакция в итоге пропадет (невостребованный блок), то новая транзакция (выигрышный блок) является единственной «реальной» транзакцией. Таким образом блокчейн предотвращает двойное расходование, отбрасывая одну из транзакций и документируя только другую. Получатель мог подумать, что ему «заплатили», увидев, что транзакция попала в блок, но позже … это может оказаться не так.

Именно поэтому «подтверждения» обеспечивают /вероятностную/ неизменность: шанс на реорганизацию падает с каждым последующим подтверждением. Это описано на восьмой странице white paper, опубликованной Сатоши. Фактически, это единственное математическое уравнение в статье, которое описывает уменьшение вероятности реорганизации, показывая, почему (хотя и произвольно выбранные) «шесть подтверждений» являются хорошей основой для того, чтобы считать сделку завершенной. Как видно ниже, вероятность того, что блок будет отброшен вследствие реорганизации уменьшается /экспоненциально/ по мере добавления в цепочку большего количества блоков. Необратимость транзакций основана на вероятности.

Когда же можно предположить, что сделка завершена, и когда безопасно передать вашему контрагенту телевизор или наличные, или какую-либо другую ценность (предмет обмена)? Это зависит от суммы! К примеру, я ждал трех подтверждений после продажи автомобиля за $11,000. Этого было для меня достаточно. Это также зависит от возможности покупателя скрыться. Я продал бы дом даже не дожидаясь подтверждений… покупатели не могут с ним сбежать. Некоторые случаи связаны с бóльшими рисками: я бы дождался шести подтверждений, чтобы обменять любую другую криптовалюту на биткоины, потому что как только я ее отправлю, я не смогу ее вернуть.

При вчерашней реорганизации в обоих конкурирующих блоках была совершена сделка на сумму 22 доллара (две конкурирующие сделки). Мы не знаем почему это произошло; мы не знаем кто это сделал. Но в этом нет ничего «невероятного». Это часть протокола.

В случае со сделками на 22 доллара многим будет достаточно одного подтверждения: в худшем случае, вы теряете что-то стоимостью в 22 доллара, передавая это что-то мгновенно и безвозвратно. Невелика беда. Многие поставщики кредитных карт не требуют подтверждения подписью или пин-кодом на суммы меньше 25 долларов по той же причине: хотя в отсутствии подписи сделку можно оспорить, это не стоит потраченного времени, ведь смысл мошенничества на столь незначительные суммы невероятно мал. Та же модель риска применима и в случае Биткоина. Помимо этого, мы не можем с уверенностью сказать, что получатель этого платежа потерял средства. Возможно, он ждал двух подтверждений и не выполнил свою часть сделки преждевременно. В этом случае продавец ничего не потерял, а счел сделку «неоплаченной», потому что не получили второго подтверждения.

В одной из статей также было высказано ложное предположение: «это могла быть сделка на 22 миллиона долларов». Нет, не могла. Если вы примете оплату, эквивалентную $22 миллионам в биткоинах, я полагаю, вы понимаете, как работает Биткоин. Он работает именно так, как указано в этом посте. Вы не передадите подобную сумму после всего лишь одного подтверждения. В этой же и других статьях о RBF и Segwit также есть несколько других некорректных высказываний. На самом деле это нормальная функция любого блокчейна PoW. Реорганизация в случае появления двух разных версий транзакции может произойти в любой другой цепочке PoW. Ничего странного или выходящего за рамки алгоритма консенсуса не произошло. Биткоин продолжает работать в точности так, как и должен. Единственное, что имело место быть, это плохая «журналистика», если это вообще можно назвать журналистикой. На фоне стремительно растущего рынка слух может обойти весь земной шар прежде чем он будет опровергнут.

 

Биткоин-онли ресурсы:

Web: https://bitcoin-translated.ru/

Medium: https://medium.com/@Tony_B

Twitter: https://twitter.com/TonyCrusoe

Telegram: https://t.me/bitcoin_translated

Instagram: https://instagram.com/bitcoin_translated/

bitcoin talk: https://bitcointalk.org/index.php?action=profile;u=2807880

YouTube: https://www.youtube.com/c/bitcointranslated

Обсудить в Discord!