Блокчейн & Разработка


Гео и язык канала: Россия, Русский
Категория: Криптовалюты


Канал о разработке и блокчейн-технологиях. Код, сети, паранойя.
Архив канала: https://blockndev.com
Автор: @Jeiwan

Связанные каналы

Гео и язык канала
Россия, Русский
Категория
Криптовалюты
Статистика
Фильтр публикаций




Zoom покупает компанию Keybase. К 22 мая обещают представить открытый дизайн какой-то криптографической системы. Обещают что-то новое и уникальное.
Хайп, миллионы пользователей, изоляция, криптография, приватность. Оказались в нужное время в нужном месте с нужным продуктом и ещё пытаются прострелнуть куда-то дальше. Возможно, Zoom это неотъемлемая часть нашего с вами будущего.

https://www.cnbc.com/2020/05/07/zoom-buys-keybase-in-first-deal-as-part-of-plan-to-fix-security.html


Детерминистические кошельки, BIP32, гомоморфизм

Возвращение рубрики «Хардкорная криптография». Текст большой и сложный, но очень важный для понимания других крутых техник в Биткоине (Тапрут в их числе). О них я расскажу в других постах.

Текст опубликован на сайте: https://blockndev.com/posts/bip32-homomorphism/


Сидите дома и изучайте гомоморфизм. 😄




Вышла новая версия LND, 0.10.0

Новые фишки:
1. Multi-path payments (MPP) — отправка платежей через несколько каналов, та самая фича, которой многим не хватало. Теперь, если платеж слишком большой для отправки через один канал, он будет разбит на несколько мелких платежей, которые будут отправлены параллельно. В предыдущей версии была реализована возможность получения таких платежей, а в этой версии доделана отправка, и теперь разбитие платежей работает полноценно.
Разбиение платежа происходит по такому алгоритму: сначала нода пытается отправить весь платеж сразу. Если объема канала не хватает для отправки всего платежа, то он будет разбит на две части. Если объема каналов по-прежнему недостаточно, то платежи будут разбиваться дальше, пока не будет достигнут минимальной размер на частичный платеж, который сейчас равен 10 тыс. сатошей. Да, это всё будет работать, если у вас открыто несколько мелких каналов, через которые вам нужно отправить один крупный платеж.
2. Улучшено отслеживание статусов платежей. Для каждого HTLC теперь указывается причина ошибки проведения платежа.
3. Снято ограничение на размер платежа у инвойсов. Раньше это было 4,2 млн. сатошей. Благодаря MPP, необходмость в этом ограничении отпала.
4. Добавлена возможность открывать каналы через PSBT, Partially Signed Bitcoin Transaction — транзакции с неполной подписью. Этот стандарт был описан в BIP174 и был добавлен в Bitcoin Core версии 0.17.0, он описывает процедуру коллаборативного создания multisig-транзакций. По сути, это стандарт, который описывает шаги создания и подписи транзакций, в которых участвуют несколько независимых сторон. И одновременно это стандарт кодирования транзакций в удобный для передачи другим людям текстовый формат.
Так вот LND теперь умеет использовать такие транзакции для открытия канала, при этом отпадает необходимость пополнять адрес LND-ноды. Полная инструкция здесь: https://github.com/lightningnetwork/lnd/blob/master/docs/psbt.md
5. Добавлена поддержка якорных выходов (anchor output) у commitment-транзакций, которые позволяют повысить комиссии у уже опубликованных commitment-транзакций — механика, известная как Child Pays For Parent.

Это самое основное. Полный список изменений здесь: https://github.com/lightningnetwork/lnd/releases/tag/v0.10.0-beta


Покупатель получает транзакцию и добавляет в неё свой вход на 5 биткоинов. 6 биткоинов идут ему на сдачу.

Получается: во входах 3+5=8 биткоинов, в выходах 2+6=8. И нельзя точно сказать, сколько именно было оплачено и сколько владельцев было у входов. Например, эту транзакцию можно интерпретировать так: вы отправили 6 биткоинов и получили 2 биткоина сдачи.

Главное преимущество этого способа — не нужно разбивать выходы по какой-то определённой схеме, пытаясь скрыть связь между входами и выходами. Payjoin-транзакции не имеют «отпечатка» и их невозможно отличить от обычных транзакций, т. к. они используют два входа и выхода, как и большинство обычных транзакций. Но и свои недостатки тоже есть:
1. Оба участника должны быть онлайн одновременно.
2. Транзакции могут стать немного дороже из-за дополнительных входов-выходов.
3. Отправка транзакции занимает чуть больше времени.


Последнее, что тут можно ещё добавить. Payjoin также называется P2EP, Pay to EndPoint. Это название было предложено разработчиками из Blockstream в 2018, когда они работали над улучшением анонимности входов транзакций. Собственно, концепция, которую они разработали, и называется P2EP. Это тоже Coinjoin, но для обмена между сторонами он использует URI из BIP21 — это идентификатор вида bitcoin:адрес?параметр=значение. В P2EP покупатель должен знать, как отправить транзакцию продавцу напрямую — для этого нужно знать его URL, который и передается как параметр в BIP21-идентификаторе.


Сидите дома и изучайте Биткоин.


Payjoin и Coinjoin: что это и что лучше

На днях вышла новая версия платежного процессора BTCPay Server, которая наделала немало шуму. Главная из новых фишек это поддержка Payjoin (также известный как P2EP, Pay to EndPoint). Шум вызвало заявление разработчиков о том, что Payjoin лучше, чем Coinjoin. Разберемся, что это вообще такое, в чем польза, и кто действительно лучше.

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

Одна из важных особенностей транзакций Биткоина состоит в том, что транзакции могут быть созданы коллективно. Вы можете создать транзакцию, включить в неё свои входы-выходы, подписать их и отдать транзакцию другу, который включит в неё свои входы-выходы, подпишет их и отправит транзакцию в сеть. Транзакции Биткоина позволяют выводить с разных адресов, которые не обязательно должны принадлежать вам. (Кстати, именно так и работает batching транзакций: когда пользователи бирж выводят биткоины на кошельки, биржи выводят их не сразу, а складывают все входы-выходы в одну транзакцию — это снижает нагрузку на сеть Биткоина и снижает комиссии за транзакции.)

Но что, если у вас нету друга, с которым вы могли бы постоянно объединять транзакции? На помощь приходят сервисы и кошельки, которые поддерживают Coinjoin. Самые заметные из них это Wasabi Wallet и Samourai Wallet — пользователи этих кошельков смешивают транзакции друг друга в защищенной и анонимной сети, так чтобы никто из них не смог проанализировать информацию о транзакции другого пользователя. Помимо этого, Coinjoin-транзакции создаются таким образом, чтобы максимально скрыть связь между входами и выходами, чтобы никто со стороны не мог найти, какие входы с какими выходами соотносятся (в транзакциях эта связь явно не указывается). И это создает проблему — проанализировав какое-то количество транзакций, можно явно сказать, какие из них использовали Coinjoin, т. к. все coinjoin-транзакции имеют схожий «отпечаток».

Payjoin решает ту же проблему сокрытия единого владельца входов транзакции, но делает это чуть иначе: он работает при обмене между двумя пользователями и не требует других участников для смешивания входов. Т. к. BTCPay Server это платежный процессор, который связывает покупателей и продавцов, то смешиваются транзакции именно покупателя и продавца.
1. Покупатель создает транзакцию, оплачивающую товар/услугу. Это полностью валидная транзакция, которая содержит входы, выходы и подпись.
2. Покупатель отправляет транзакцию продавцу напрямую — связующим звеном здесь служит сервер BTCPay.
3. Продавец получает транзакцию, добавляет в неё свой вход (т. е. тратит в этой транзакции свои биткоины) и выход (переводит сам себе), меняет сдачу покупателя и комиссию так, чтобы комиссия осталась прежней, и отправляет транзакцию обратно покупателю.
4. Покупатель получает транзакцию, переподписывает её и отправляет в сеть.

Рассмотрим пример того, как входы могут смешиваться в Payjoin:
1. Вы покупаете товар за 1 биткоин.
2. Вы создаете транзакцию и кладете в неё вход, расходующий 3 биткоина. 2 биткоина идут вам на сдачу (создается соответствующий выход).
3.


Но это не значит, что у нас есть проблемы. До создания достаточно мощных квантовых компьютеров ещё очень далеко (если вообще возможно создать квантовые компьютеры с таким гигантским количеством q-битов, которые необходимы для решения дискретных логарифмов). И это даёт нам время перейти на алгоритмы, стойкие к квантовым вычислениям (перестать использовать ECDSA и похожие алгоритмы). Этот переход ещё пока не сделан, так как у существующих алгоритмов, устойчивых к квантовым вычислениям, есть несколько недостатков, таких как очень длинные ключи и подписи. Из-за этого они пока очень непопулярны, но исследования продолжаются, и если они понадобятся, то они есть.

Должны ли мы использовать публичные ключи в качестве адресов?

Вопрос: если создавать новую криптовалюту, то стоит ли сразу использовать закодированные в Base58 публичные адреса с чексуммой?

Тапрут именно это и делает. Тапрут-выходы (а значит и адреса) содержат полные публичные ключи — у этого есть несколько преимуществ, например: они короче, дешевле и позволяют создавать поверх них более сложные протоколы. Для таких выходов используется формат адресов Bech32, у которого тоже есть несколько преимуществ над Base58: проще конвертировать в удобную для чтения форму и сравнивать друг с другом, более надежная проверка на ошибки, формат более расширяемый, меньший размер QR-кодов и т. д.

Дисклаймер: я соавтор протокола Тапрут и стандарта Bech32.

TL;DR публичные ключи должны быть публичными.

————
Оригинал: https://bitcoin.stackexchange.com/a/95133


Сидите дома и изучайте Биткоин


Хэшировать ли публичные ключи в Биткоин-адресах?

Как вы знаете, Биткоин-адрес это хэш публичного ключа, закодированный в Base58 (за исключением bech32-адресов) для более удобного чтения. Когда вы переводите биткоины на адрес, вы переводите их именно на хэш публичного ключа, а когда вы выводите их с адреса, вы должны раскрыть сам публичный ключ. Но так было не всегда. В самой первой версии Биткоина, выпущенной Сатоши, перевод происходил на публичный ключ. Это считалось небезопасным, поэтому было сделано хэширование ключей. Но действительно ли открытые публичные ключи это такая проблема? Предлагаю вам прочитать мнение Питера Вулле (Pieter Wuille) на этот счёт.


Теория
Считается, что, чтобы подделать ECDSA-подпись, имея публичный ключ, нужно вычислить приватный ключ для него (эта операция называется дискретным логарифмом — сложность её вычисления и лежит в основе надежности ECDSA). И для этого нужно сначала получить публичный ключ.

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

Используя в адресах хэш публичного ключа, а не сам публичны ключ, публичный ключ становится известным всем только в момент расходования выхода транзакции. Если не учитывать (невероятные) уязвимости, найденные в используемых хэш-функциях (SHA256 и RIPEMD160), то восстановление ключа из хэша это непростая задача даже для квантовых компьютеров. Но все же 160-битные хэши считаются относительно слабыми (для их взлома требуется 280 операций на квантовом компьютере).

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

Практика
В этом разделе я выскажу своё мнение, с которым некоторые могут не согласиться.

Я считаю, что польза от хэширования публичных ключей в лучшем случае незначительна. В худшем случае хэширование создаёт ложное ощущение безопасности. На это есть несколько причин:
1. Польза от хэширования есть только до момента расходования выхода траназакции. Как только кто-то попытается вывести биткоины с P2PKH-выхода (Pay-to-public-key-hash, оплата на хэш публичного ключа), публичный ключ будет раскрыт. Сговорившись с майнерами, злоумышленник может затормозить добычу транзакции, попытаться восстановить приватный ключ из раскрытого публичного с помощью квантового компьютера и украсть монеты.
2. Люди продолжают использовать одни и те же адреса, и этого трудно избежать. Если адрес переиспользуется, то в момент первого расходования публичный ключ становится известен всем, его хэширование больше не помогает.
3. Почти все самые интересные варианты использования Биткоина (мультиподписи, 2FA, эскроу, платёжные каналы, BIP32-аккаунты) требуют обмена публичными ключами друг с другом. Считать, что в таких сценариях хэширование публичных ключей даёт какую-то защиту, было бы самообманом: публичные ключи и так постоянно раскрываются, даже если пользователи об этом не подозревают.
4. Даже если вы будете строго следить за тем, чтобы не раскрывать свои публичные ключи и не пользоваться вышеприведёнными механиками, в блокчейне Биткоина хранится более 5 миллионов биткоинов (по моим расчетам) с открытыми публичными ключами. Не могу себе представить, что биткоин будет иметь хоть какую-то стоимость, если кому-то удасться украсть эти 5 миллионов.


ББ-117: Сетевые протоколы для блокчейнов и файлообмена

Файлообменные сети, в том числе BitTorrent, можно считать предшественниками криптовалют. Они показали, как построить децентрализованную сеть, устойчивую ко внешним атакам. Но все ли уроки файлообмена применимы к блокчейнам? Чем отличаются задачи сетевого уровня для файлообменных сетей и для криптовалют?

https://basicblockradio.com/e117/


Отличнейший выпуск Базового блока про сравнение P2P-сетей торрентов и блокчейнов. Рекомендую послушать.


LSAT: токен аутентификации в сервисах с оплатой через Лайтнинг

Пару дней назад компания Lightning Labs представила новый протокол LSAT: Lightning Service Authentication Token. Протокол описывает способ аутентификации и оплаты за использование сервисов через Лайтнинг. Другими словами, это платежный шлюз для API-серверов с автоматической и гибкой оплатой сатошами через Lightning Network.

Пару лет назад Blockstream проводили неделю приложений на LN. Одно из приложений было как раз таким платёжным шлюзом. Идея простая: у вас есть какой-то сервис, который предоставляет услуги пользователям. Допустим, это сервис типа CoinMarketCap. У сервиса есть АПИ, через который разработчики могут получать какие-то данные. АПИ, конечно, не полностью бесплатное: есть бесплатный план, и есть платные планы, которые позволяют получать больше данных. Платные планы чаще всего оплачиваются вперед на месяц или год, но иногда используется система кредитов: один платный запрос стоит сколько-то кредитов, которые вы заранее покупаете в зависимости от ваших потребностей. LSAT это как раз технология для оплаты за использование вот таких платных АПИ, но оплата происходит автоматически в процессе запроса данных через АПИ.

Как это работает.
Сервер отправляет запрос к платному АПИ, АПИ возвращает HTTP-статус 402 Payment Required (в спецификации HTTP этот статус зарезервирован на будущее, и вот будущее настало!). Вместе с ответом приходит инвойс и токен: инвойс — для оплаты за использование АПИ, токен — даёт доступ к АПИ, но активируется только после оплаты. Вы оплачиваете инвойс через Лайтнинг и получаете в обмен preimage — это такая секретная последовательность байт, которую вы фактически и покупаете за сатоши в Лайтнинге (как-нибудь разберём тонкости работы Лайтнинга). Имея preimage и токен, вы теперь можете отправить запрос к АПИ, передав их в запросе. Все это происходит автоматически, если вы используете специальный кошелёк, и занимает пару секунд.

Как я уже говорил, идея не новая, просто сейчас они взяли и оформили это в спецификацию. На мой взгляд это довольно интересная технология, которая позволяет платить, например, 1 сатоши за один запрос к АПИ — быть может когда-то все сайты будут использовать такой механизм оплаты за визиты, взамен избавляя людей от рекламы и слежки. Но с другой стороны, внедрять такое решение сегодня никто не будет. Причин несколько:
1. Крипта чужда традиционному финансовому миру. Собирать оплату за сервис в крипте будут только фанаты.
2. Сложно настраивать сервер. Нужно запускать Биткоин-ноду, Лайтнинг-ноду и программировать/подключать шлюз.
3. (Почти) нету готовых и удобных решений для пользователей.
4. Гибкий план оплаты выгоден пользователям, но не бизнесам.

Идея интересная, технология перспективная, но массовое применение ей пока не найдено. Значит, нужно искать дальше!

Также Lightning Labs выпустили:
1. Реализацию шлюза на Golang: https://github.com/lightninglabs/aperture
2. Библиотеку на Node.js: https://github.com/Tierion/lsat-js

Спецификация LSAT: https://github.com/lightninglabs/LSAT


Сидите дома и изучайте Биткоин.


он содержит айдишники транзакций: а) которых нету у текущей ноды; б) которых нету у ноды, с которой была проведена сверка.

У скетчей есть один недостаток: чтобы найти различия между множествами, необходимо оценить (предугадать) их количество. Если оценка больше реального количества различий, то алгоритм сработает. Если меньше, то нода переключится на альтернативный способ (по тестам такое происходит в 0.7% случаев), который заключается в том, чтобы сверить с другой нодой не полное множество, а только половину: благодаря линейности скетчей, имея разницу половины транзакций, можно достроить оставшиеся транзакции. Если и этот способ не срабатывает (4.3% случаев по тестам), то нода выполняет стандартную синхронизацию транзакций.

Что получается в итоге:
1. Рассылкой занимаются только публичные ноды и только на 8 исходящих соединений.
2. Не все ноды получают новые транзакции, но транзакции распределяются по сети примерно равномерном.
3. Ноды периодически (каждую секунду) проводят сверку транзакций с помощью скетчей.
4. Благодаря тому, что транзакции распределены по сети равномерно, сверка работает быстро.
5. В итоге снижается трафик и увеличивается количество соединений между нодами, что делает сеть безопаснее.

Ещё одна интересная деталь, о которой стоит сказать: в новом протоколе для распространения собственных транзакций используется сверка, а не рассылка. Т. е. когда вы создаёте и отправляете транзакцию, нода передаст её другим нодам через сверку, а не через отправку напрямую. При сверке айдишники транзакций не раскрываются, поэтому узнать ноду, с которой транзакция была отправлена, невозможно. Это затруднит работу сервисов, шпионящих за транзакциями в сети Биткоина.

Оригинальный пейпер, в котором много деталей и графиков: https://arxiv.org/pdf/1905.10518.pdf

Erlay получил BIP номер 330: https://github.com/bitcoin/bips/blob/master/bip-0330.mediawiki

И уже идёт работа над кодом: https://github.com/bitcoin/bitcoin/pull/18261

Сидите дома и изучайте Биткоин.


Erlay: протокол эффективного распространения транзакций Биткоина

Наш соотечественник Глеб Науменко, работающий сейчас в Blockstream, разработал новый, более оптимизированный способ распространения транзакций в сети Биткоина, который называется Erlay. Алгоритм позволяет увеличить количество соединений между нодами (что повышает безопасность сети) и при этом снизить трафик, генерируемый передачей транзакций от ноды к ноде, на 40%.

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

У такого способа распространения есть несколько недостатков:
1. Ноды в холостую гоняют одни и те же транзакции. Одна может получать одну и ту же транзакцию несколько раз. Эта проблема была частично решена тем, что вместо самих транзакций сначала рассылаются только айдишники — если у ноды нету транзакции с конкретным айдишником, она запросит всю транзакцию.
2. Невозможно увеличить количество соединений между нодами. Различные исследования показывают, что чем больше соединений между нодами в P2P-сети, тем труднее проводить некоторые виды атак. Если сейчас увеличивать количество соединений в сети Биткоина, то сильно вырастет трафик, как раз по большей части из-за спама транзакций.

Именно эти проблемы и решает Erlay.

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

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

Именно вот эти 8 исходящих соединений хотелось бы увеличить, чтобы сделать сеть более защищённой, но в текущей реализации сети этого сделать нельзя, потому что это ещё больше увеличит спам транзакциями и трафик, который создаёт нода. Больше трафика — труднее и дороже запускать ноду.

Идея Глеба состоит в том, чтобы сократить спам транзакциями и добавить новый механизм сверки и согласования транзакций между нодами.
Теперь транзакции будут рассылаться только публичными нодами (нодами с большим количеством входящих соединений) и только на 8 исходящих соединений (даже если их отрыто больше). Главная задача тут — снизить трафик и при этом разместить транзакции в сети таким способом, чтобы они располагались близко к нодам. Например, нода может не получить новую транзакцию, но транзакция с высокой вероятность будет у одной из нод, к которым она подключена, или в паре «прыжков» от неё. Это снизит трафик, увеличит безопасность (больше соединений = безопаснее сеть), но ноды будут получать не все транзакции. И это решается с помощью нового алгоритма, который называется Minisketch. Алгоритм построен вокруг структуры данных под названием скетч (sketch). Я не смог найти описание этой структуры данных на русском языке (вероятно они сами её изобрели), поэтому перескажу своими словами.
1. Скетч это структура, оптимизированная для сравнения двух множеств и выявления различий между ними. В данном случае множества состоят из айдишников транзакций.
2. Скетчи хранят множества в запакованном виде. В этом смысле они похожи на хэши, из которых можно восстанавливать исходные данные.
3. Скетчи сравниваются между собой операцией XOR. Результат сравнения — скетч разницы двух множеств.
4. Скетч разницы представляет собой симметрическую разность двух множеств, т. е.


Последние месяцы я плотно работаю над одним своим Биткоин-проектом, который занимает все свободное время. Поэтому времени на канал почти не остаётся. К этому ещё добавился коронавирус, который захватил внимание на две недели.
Но, не смотря на всё это, скоро будут новые посты!


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


На днях в сети Биткоина был добыт «брошенный» блок (stale block). На картинке выше это блок справа, он был добыт на 4 секунды быстрее, чем блок слева, который и продолжил цепочку. Почему это происходит?

Каждый майнер добывает свой блок, но блоки эти практически одинаковы, т. к. майнеры пользуются одинаковым софтом для майнинга и руководствуются одинаковыми (наиболее оптимальными и прибыльными) правилами для построения блоков и включения в них транзакций. Блок справа абсолютно валиден и практически ничем не отличается от блока слева. Он стал брошенным, потому что:
1. Майнер, добывший блок 619 971, получил левый блок раньше, чем правый.
2. Этот же майнер смог добыть новый блок быстрее, чем те майнеры, которые получили правый блок.

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

По сути, это микроразделение сети, микрофорк. И это тот случай, когда одного подтверждения транзакции недостаточно. Представьте такую ситуацию:
1. Вы покупаете что-то за биткоины.
2. Магазин требует одно подтверждение транзакции.
3. Вы оплачиваете, получаете подтверждение, магазин передаёт вам товар.
4. Происходит микроразделение, добывается новый блок с тем же номером, но чуть другим списком транзакций. И вашей транзакции в нем нету.
5. У вас на руках биткоины и товар. Магазин понёс потери.

Это как раз и есть пример двойной траты. Но справедливости ради стоит сказать, что двойная трата будет возможна только до следующего добытого блока: ваша транзакция неизбежно попадёт в следующий блок, и биткоины будут потрачены. Возможно, единственный вариант провести полноценную двойную трату возможен только с помощью Replace by fee транзакции: такие транзакции позволяют менять параметры отправленной, но ещё не добытой, транзакции с обязательным повышением комиссии. Можно поменять получателя транзакции (переправить её себе) пока она ещё не была добыта. Теоретически это возможно, но практически это нужно ждать подходящего случая и покупать что-то в каждом блоке.




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

https://bitnovosti.com/2020/02/18/bitkojn-i-tiraniya-defitsita-vremeni/


bitcoin_wallets.png
2.1Мб
Картинка в хорошем качестве.

Показано 20 последних публикаций.

88

подписчиков
Статистика канала