CipherTrace разработала инструмент для отслеживания транзакций в Monero
Аналитическая фирма CipherTrace представила первый в своем роде инструмент для отслеживания потоков транзакций в Monero (XMR), сообщает Cointelegraph.
Разработка велась в течение года, заказчиком выступило Министерство национальной безопасности США.
Власти проявили повышенный интерес к этой разработке ввиду возросшей популярности XMR среди злоумышленников. Согласно аналитикам The Block, Monero стал вторым после биткоина по востребованности активом на даркнет-рынках.
«Инструмент включают средства поиска транзакций, исследования и визуализации потоков XMR. Он вошел в состав продукта для финансовых расследований от CipherTrace», — заявил глава компании Дэйв Джеванс.
Новый инструмент позволит отслеживать украденные монеты и те, которые используются для незаконных транзакций.
По словам главного финансового аналитика CipherTrace Джона Джеффриса, в текущей версии инструмент пока не может использоваться для AML-практик, но пригоден для выявления источников в случаях вымогательства. В последнем случае правоохранительные органы могут сузить число подозреваемых до нескольких адресов.
Джеффрис отметил, что, как и другие продукты CipherTrace, новый инструмент защищает конфиденциальность пользователя, поскольку не определяет индивидуальные идентификаторы пользователей. Эта опция может заверить криптовалютные биржи, OTC-площадки и инвестиционные фонды в том, что они не принимают XMR из незаконных источников.
В 2018 году делистинг Monero произвели биржи Korbit и Coincheck. Позднее от поддержки монеты отказались площадки BitBay, Bithumb и Huobi Korea. В августе этого года делистинг XMR произвели несколько криптовалютных бирж Австралии.
Организатор рабочей группы Monero Джастин Эренхофер усомнился в том, что CipherTrace способна отслеживать XMR в той же степени, как и другие криптовалюты. Текущие заявления в отсутствие деталей он посчитал спекуляциями и добавил, что разработчики продолжат работу по совершенствованию свойств конфиденциальности этой монеты.
Что такое Monero?
«У нас нет оснований полагать, что существуют новые способы отслеживания транзакций Monero, а также какие-либо признаки их эффективности. Пользователи могут продолжать совершать сделки с прежней уверенностью», — отметил Эренхофер.
Джеффрис не согласился с оппонентом. Он заявил, что новый инструмент заложил основу для будущих более продвинутых средств для отслеживания транзакций в XMR.
Напомним, в апреле разработчики Monero добавили повышающую приватность транзакций технологию Dandelion++, которая затрудняет установление связи транзакции с определенным IP-адресом.
Подписывайтесь на новости ForkLog в Twitter!
Нашли ошибку в тексте? Выделите ее и нажмите CTRL+ENTER
Проверить транзакцию биткоин по кошельку: как посмотреть и подтвердить?
Блокчейн Биткоина содержит информацию обо всем, что происходило с валютой за все время её существования.
А подтвержденная транзакция Биткоина — та, которая уже включена в блокчейн. То есть, это цепочка, или структурированный список операций между пользователями.
В этой статье мы рассмотрим, как найти и проверить транзакцию биткоина по номеру кошелька, ускорить и отменить операцию по переводу средств.
к оглавлению ↑
Что это такое
Биткоин транзакции — это тот же самый денежный перевод, для проведения которого достаточно реквизитов получателя.
Но это верхушка айсберга. За этой простотой скрывается огромной сложности механизм.
Можно представить, что блокчейн — это таблица, в которой каждая запись опирается на предыдущую. Эта таблица состоит из заголовка и списка.
В последнем — информация обо всех изменениях этой валюты. Первой идет транзакция, которая указывает комиссию за создание новой таблицы.
Но даже после отправки криптовалюты она станет доступна для использования не сразу. Ее будет необходимо подтвердить.
Подтверждением занимаются майнеры, придумывая красивый хеш и запечатывая полный блок. За это и взимается комиссия.
к оглавлению ↑
Где найти
Чтобы найти свой перевод, можно использовать различные сервисы. Например:
Для поиска необходимо ввести хеш вашей транзакции, который вы получаете сразу после трансфера. Эти сайты выдадут вам сразу всю информацию о блоке и текущий статус.
Первое подтверждение может сказать нам о том, что валюта получателю еще не пришла из-за отсутствия ее подтверждения.
к оглавлению ↑
Как подтвердить операцию
После перевода криптовалюта станет доступна нам не сразу. Необходимо дождаться подтверждения нашего перевода. Как подтверждать транзакции в биткоин кошельке?
Включение в 1 блок приравнивается к 1 подтверждению. И пока в операции не наберется 6 таких подтверждений, перевод не будет осуществлен.
Эту систему придумали, чтобы избежать многоразового использования одной и той же криптовалюты. Придется подождать около часа, т. к. каждый блок формируется от 7 до 11 минут.
Но это работает только для классического трансфера. Например, сайты, которые принимают оплату криптовалютой за свои товары или услуги, могут сами выбрать количество необходимых блоков и свести их к минимуму.
Цифра 6 была выбрана неслучайно. Она базируется на теории о том, что злоумышленник не сможет взять под контроль больше 10% от общей мощности криптосети и подделать транзакцию, а для обычного пользователя это невозможно.
Конечно, риск в 0,1% остается, но он считается допустимым и несущественным. Ведь перед этим придется потратить большое количество денег для приобретения необходимых мощностей, что приводит к полной нерентабельности этой идеи.
Так, криптовалюта становится еще более безопасной.
В своих обзорах мы рассказывали о безопасности кошелька для хранения криптовалюты. Теперь хотим поделиться информацией о том, как правильно им пользоваться и какие возможности перед вами открываются. Читайте о том:
к оглавлению ↑
Как ускорить перевод
Каким способом ускорить перевод? Рассмотрим каждый из них по порядку:
- Использование сервисов с собственной системой транзакций. Внутри этих ресурсов есть возможность создания биткоин-кошельков и перевода криптовалюты между ними, не задействовав систему блокчейна.
Но при условии, что все эти переводы будут осуществляться только внутри такого ресурса. Это значительно ускоряет перевод денег между пользователями, но не всегда магазины поддерживают тот или иной сервис.
- Использование мультиподписей. В некотором смысле это похоже на первый способ, но есть значительные различия.
Иногда компании могут предлагать собственную подпись в транзакции помимо той, которая уже предусмотрена системой. Мультиподпись компании свидетельствует о надежности перевода, что ускоряет принятие транзакции в блокчейн.
- Открытая транзакция. Этот способ перевода противоречит всей идее криптовалют — анонимности.
Но если это не так важно, то суть сводится к тому, что и адресат, и отправитель предоставляют всю информацию о самих себе. Это позволяет быстрее принять платеж, но они редко используются из-за их открытости.
- Повышение комиссии. Это одна из основных причин задержки включения в блокчейн. Пользователь сам устанавливает размер комиссии — такова особенность криптобиржи.
И из-за того, что почти всегда комиссия идет майнерам, то им удобнее и приятнее брать те блоки, которые принесут им больше биткоинов. Поэтому жадничать не стоит даже в интернете.
Быстрее принимают блоки, в которых комиссия выше 0.0017 BTC. Медленнее — если она ниже 0.0004 BTC.
Если очень сильно захотеть сэкономить, то можно просто потратить несколько суток в ожидании принятия операции.
Помните о загруженности сервиса. Если решено осуществить перевод во время пика, то даже хорошая комиссия вас может не спасти.
Деньги не зависнут в воздухе и никуда не пойдут. Просто придется подождать чуть дольше, чем обычно.
О том, как ускорить транзакцию биткоин-кошелька и посмотреть ее статус, расскажет видео:
к оглавлению ↑
Отмена и возврат денег
Когда криптовалюта отправлена, сделать уже ничего нельзя. Недавно один из сервисов пытался ввести функцию, которая позволяла бы редактировать комиссию до внесения в блок, но сейчас она на стадии заморозки.
Но всё-таки при удачном стечении обстоятельств перевод, который не был подтвержден, можно отменить и вернуть замороженные деньги на кошелек:
- Убеждаемся, что операция зависла. Открываем Block Explorer, узнаем, есть ли деньги на счету и известно ли что-нибудь там про операцию.
- Открываем отладочную консоль в кошельке.
- Получаем приватный ключ от адреса командой dumpprivkey
, где вместо address необходимо подставить адрес, использованный для отправки средств. Этот ключ лучше сохранить где-нибудь, он понадобится позже. - Закрываем клиент и переименовываем наш кошелек. Стоит перенести его в надежное место.
- Открываем клиент — он автоматически создаст новый кошелек. В него переносим командой importprivkey privkey (слово privkey в скобках) тот самый приватный ключ, который мы узнали ранее. Вывод может занять много времени, но стоит дождаться конца.
- Новый кошелек появляется с реальным состоянием счета, а неподтвержденные транзакции исчезли. Они снова доступны для использования.
Этого можно было бы избежать, выставив сразу высокую комиссию за транзакцию. Решайте сами, стоит ли таких мучений парочка сэкономленных сатошей.
Скорость, качество, результат транзакции зависят от самого пользователя. Он сам может усложнить себе жизнь, поставив слишком низкую комиссию.
Или наоборот, ускорить время поступления денег в несколько раз, используя методы, о которых сказано раньше. Биткоин-система лишь косвенно влияет на это.
Вконтакте
Одноклассники
Мой мир
Нравится статья? Оцени и поделись с друзьями в соцсетях!
Проверить транзакцию биткоин
Фермы по добыче биткоинов создает все больше уверенных пользователей Интернета. Кто-то получает электронную валюту в виде оплаты за свою работу. Хорошо, если уже имеется конкретный опыт по выводу биткоинов. Но когда его нет, тут не обойтись без инструкций или подсказок со стороны. Проверить транзакцию биткоин также просто, как перевести деньги с одного электронного кошелька на другой. Но для того чтобы это стало таковым, потребуется разобраться в некоторых вопросах, так как последовательность действий во многом отличается. Самые важные собраны в этой статье.
Оформление транзакции по переводу биткоина
Отличительный признак перевода биткоина от банковских или других переводов – отсутствие разных платежных реквизитов, личных данных пользователей и прочей информации. В этой ситуации используется неповторяющаяся и уникальная комбинация из цепочки чисел. Это нам сейчас и понадобится. Во время проведения перевода даже эти данные упрощаются, так как достаточно считать предоставленный QR-кода получателя. Если таковой программы для его считывания не имеется, то рядом есть возможность для копирования уникального кода клиента в виде цифр и букв.
Затем его можно вставить в нужном окне. Когда операция по переводу биткоина с одного кошелька пойдёт в обработку, время проведения может быть очень разным. У кого-то из пользователей это 15-20 минут, у других несколько часов. Что на это влияет? Как проверить статус транзакции биткоин? Где это можно сделать и как ускорить процесс? Теперь обо всём по порядку.
Почему у всех пользователей разное время по выполнению транзакций с переводом биткоинов?
Если говорить просто, все зависит от того, какая сумма готовится к выводу и какой размер уплаченной комиссии. Как это все связано между собой? Чем больше биткоинов пользователь переводит кому-то на счет или обналичивает, тем дольше выполняется транзакция. Майнеру (человеку, который занимается проведением операции) требуется достаточно времени для того, чтобы проверить и собрать все блоки. К тому же, если клиент «пожалеет» денег для комиссии (ее можно задавать самостоятельно), ожидание в получении денег затянется на еще больший период времени. Поэтому проверить транзакцию биткоин уже на начальном уровне можно самостоятельно: для этого надо проанализировать, сколько электронной валюты переводится, и какая комиссия уплачивается. Еще один фактор, который позволит совершить быструю проверку хода операции – использование графиков, отвечающих за то, сколько пользователей выводят валюту в данный момент. Лучше всего найти тот период, когда их меньше всего. Тогда майнер также сможет быстро перевести Ваши биткоины на любой другой кошелек.
Возможно ли где-то проверить на каком этапе зависла операция и как долго еще ждать?
Да! Проверить транзакцию биткоин не только можно, но и нужно. Иногда время ожидания затягивается настолько, что, кажется, деньги уже пропали. Так ли это? Риск того, что биткоины пропадут, минимальный, а точнее его практически нет. Для проверки важно иметь хеш операции. Что это такое? Те, кто занялся добычей биткоина самостоятельно, знают, что он состоит формируется из цепочки блоков. Майнер записывает все данные в 1 такой блок. Имея этот ключ, можно узнать обо всех рабочих этапах с валютой на данный момент. Этот блок имеет определенный размер и при необходимости формируется следующий хеш на основании предыдущего. Но эти данные не находятся в сети хаотично. Они все группируются под первоначальными данными и привязаны к одному персонажу.
Так как привязанности кошельков биткоинов к личным данным пользователей нет, то узнать личностные данные не получится. Все зашифровано в цифрах. Итак, зная хеш транзакции, пользователь может воспользоваться специальными сервисами по процессу выполнения операции. Сделать это можно на разных сайтах, например, Blockchain и Chain. Какая информация станет доступной? Самое главное, что нужно для проверки платежа, – это количество подтверждений. Во время перевода электронной валюты их должно быть не менее 6. Но многое будет зависеть и от суммы. Возможно, что число будет немного уменьшено. Если подтверждения появляются, можно быть уверенным, что запрос попал в цепочку блока и выполняется майнером. Поэтому всегда нужно пользоваться данными сервисами. Также благодаря такому методу мониторинга своей транзакции, можно сделать анализ, не зависла ли она в статусе неподтвержденной на первом этапе. В этом случае еще можно произвести отмену, и начать проведение процедуры снова. Но как только появился хотя бы один блок – первое подтверждение – остановить процесс будет невозможно.
Какие выводы можно сделать?
Итак, для оформления транзакции не нужны личные данные пользователей. Все что требуется в данный момент – номер пользователя, которому будет совершаться перевод. Он доступен в виде QR-кода или подписи под ним. Проверить транзакцию биткоин можно на различных площадках интернета такого же типа как blockchain.info. Для этого потребуются хеш транзакции. Он появится в том случае, если транзакция пользователя назначена в общий список. Использовать этот код можно только для проверки того, на каком этапе находится проведение операции, а некоторые сервисы еще могут показать личность майнера, если она не скрыта. Чем больше средств запрошено на вывод, тем больше будет требоваться подтверждений. Но если поставлена мультиподпись, уровень доверия к клиенту станет намного выше, а значит, и ждать придется меньше. Ещё один критерий, который оказывает свое влияние на ускорение процесса по выводу биткоина – комиссия. Чем больше заплачено майнеру денег за платеж, тем быстрее он сделает. Также важно не забывать пользоваться мониторингом очереди тех, кто сейчас совершает трансфер биткоина. Это тоже может замедлить процесс. Но что бы то ни было, если все сделано правильно, и учтены все моменты, описанные выше, долгое ожидание биткоина будет сведено к нулю.
Криптовалюты заняли важное место в современной жизни. На странице https://investtalk.ru/kriptovalyuty/bitkoin-koshelek-kakoj-vybrat рассматриваются биткоин кошельки, их особенности и рекомендации по выбору. Здесь подробно описывается, как произвести обмен Qiwi на криптовалюту №1 в мире. Эта и другая информация поможет с максимальной пользой использовать криптографические валюты.
Другие статьи на нашем сайте
Проверка транзакций Биткоин
Развитие криптовалютной индустрии заставляет все большее число людей вникать в суть работы технологии. Впервые столкнувшись с переводами биткоина или других токенов, сложно понять, как устроен транзакционный механизм. Многих пользователей интересует способ проверки и отслеживания BTC транзакций. На практике сделать это достаточно просто и подробнее о том, как это сделать, можно узнать далее.
Что такое Bitcoin транзакция?
Транзакцией называется операция по передаче ценностей, в данном случае криптовалюты. Особенности сети блокчейн позволяют сделать информацию о транзакциях общедоступной, так как она размещается без шифрования на «поверхностных» уровнях сети. Фактически любой пользователь может проследить всю транзакционную цепочку, от первого блока до подтверждения на кошельке последнего получателя.
Любая транзакция имеет отправителя и получателя. Преимущества криптовалюты и биткоина в частности, в том, что перед зачислением на кошелек получателя, монета подтверждается несколькими узлами. Распределенная транзакция обеспечивает анонимность и дешевизну переводов. Основное преимущество заключается в отсутствии третьей стороны, требующей комиссии за оказание услуг.
Переводы внутри сети биткоин осуществляются по адресному принципу. В качестве реквизитов выступает хэшированная сумма или QR код, считываемый камерой мобильного устройства. Хэш-сумма вводится вручную или копируется стандартным способом. Добавив адрес получателя в специальное поле, останется только подтвердить перевод.
Простой и понятный принцип переводов в сети BTC скрывает сложные алгоритмы. Для передачи монеты от одного пользователя другому, задействуется множество протоколов и узлов сети. Для получения токена, требуется чтобы транзакция была подтверждена несколькими обслуживающими узлами (майнерами). Подтверждения осуществляются автоматически, но все равно занимают достаточно много времени.
Майнеры (узлы, ноды, центры обработки данных) записывают информацию в добываемые блоки, которые имеют определенный размер, для биткоина это 1 Мб. После достижения порогового значения блок закрывается, и вся информация в нем помечается как «только чтение», то есть любое редактирование запрещается.
Для полного подтверждения операции требуется шесть сформированных блоков, в которых вписана информация о пользователе, совершившем перевод и получателе. За каждую операцию система начисляет комиссионный процент, общая комиссионная выручка распределяется в качестве вознаграждения между майнерами.
Как отследить транзакции Bitcoin?
Цепь блоков или блокчейн, сохраняет абсолютно всю информацию, прошедшую через нее. Структурированное распределение данных внутри цепи позволяет в любой момент получить к ним доступ, в ознакомительных целях, так как редактирование в сформированных блоках не предусмотрено.
В блоках цепи можно обнаружить следующие сведения:
- транзакционные коды;
- ссылки на предыдущий блок где хранится связанная информация;
- собственный код блока;
- версия блока и дата его создания.
Вся информация закодирована и доступна в виде хэш-кодов.
Кроме указанной информации, транзакционные сервисы могут предоставить адреса кошельков и информацию об объеме переводимых средств. Данная возможность позволяет каждому пользователю обнаружить и отследить путь собственной транзакции. При этом, личных данных владельцев кошельков, в сети нет. Провести отмену или коррекцию операции невозможно.
Где можно проверить статус транзакции Биткоин?
Оперативно узнать судьбу перевода можно на сайте blockchain.info. Введя код перевода, IPv4 или адрес кошелька, в специальное поле в верхнем углу страницы. После выполнения этих несложных действий, появится информация о:
- балансе кошелька отправителя;
- объем отправленных средств;
- общее количество операций по данному адресу.
Здесь же можно получить информацию об узлах, участвовавших в транзакции, проверявших и отправлявших промежуточные переводы. Система предоставляет не только адреса узлов, но и объем поступивши/переданных средств и дату подтверждения. В системе работают фильтры, позволяющие изменить способ предоставления информации приведя его в наиболее удобный вид.
Выяснить актуальный статус перевода также несложно. Нужно нажать на кнопку с адресом пользователя, чтобы система предоставила сведения о количестве подтверждений и суммарной комиссии за транзакцию. Свидетельством о получении перевода адресатом, могут служить пять подтверждений, поступивших от промежуточных узлов.
На указанном сервисе можно не только выяснить судьбу биткоин-транзакции, но и почерпнуть много полезной статистической информации. Здесь имеются отчеты об общем количестве оборачивающихся монет, их биржевой стоимости, количестве совершенных сделок за определенное время и суммарной комиссии, начисленной по всем существующим сделкам.
Майнерам данный ресурс полезен тем, что здесь представлена информация о рентабельности майнинга и оптимальной мощности оборудования для добычи. Для общего ознакомления можно изучить информацию о крупнейших хранилищах монет и популярных адресов, на которые отправляется больше всего платежей.
Иные способы отследить транзакцию BTC
Еще один ресурс предоставляющий информацию по транзакциям — chain.so. Принцип работы данного сервиса аналогичен тому, что описан выше. Достаточно ввести хэш код кошелька, или блока в специальное поле, для получения исчерпывающей информации по транзакции.
Отличительной особенностью данного ресурса является предоставление информации о личности майнера, в том случае, если профиль не скрыт или не выставлены иные ограничения.
Сайт предоставляет информацию по наиболее производительным майнинговым фермам и пулам, а также позволяет создавать кошельки для приема и отправки криптовалют. Кроме BTC ресурс работает с Litecoin, Dash, Bytecoin, Dogecoin и т.д. По многим валютам предоставляются информационные сведения.
Скорость операций Bitcoin
Когда речь заходит о Bitcoin, многие пользователи вспоминают долгие сроки ожидания поступления средств на счет. Перегрузки сети случаются действительно часто, причиной тому большой объем запросов и транзакций, требующих обработки. В связи с этим появился термин – мемпул, буквально обозначающий очереди ожидающих подтверждения транзакций.
В настоящий момент пользователь может пойти двумя путями: повысить вознаграждение для майнера и тем самым ускорить процесс или ждать, пока дойдет очередь. Известны и достаточно часто встречаются случаи, когда ожидать приходится несколько суток. Но даже такой продолжительный срок не должен вызывать тревогу, транзакции в BTC тем и хороши, что монета, отправленная на адрес, обязательно отразится на балансе, вопрос только когда.
Что такое транзакция, подтверждение – BitcoinWiki
Это утверждённая версия страницы. Она же — наиболее свежая версия.
Понравилась статья? Поделись:
Bitcoin транзакции — это подтверждённая подписью секция данных (подпись транзакции), которая передаётся по сети Bitcoin и собирается в блоки. Обычно она содержит ссылки на предыдущие транзакции и ассоциирует определённое количество Биткоинов с одним или несколькими публичными ключами (Биткоин адресами). Она не зашифрована, так как в системе Биткоин ничего не зашифровано.
Браузер цепочки блоков — это место, где все транзакции, объединённые в цепочку блоков, могут быть найдены и проверены, все транзакции биткоин можно отследить. Это необходимо не только для определения технических параметров транзакции, но и для проверки качества осуществления платежа.
Что такое Bitcoin транзакция?[править]
Сложность процедуры традиционной банковской онлайн транзакции[править]
Оплате банковской платёжной картой в торгово-сервисном предприятии, начинается, когда держатель карты решает оплатить товар или услугу, и передаёт карту (либо оплачивает сам) кассовому работнику.
Традиционная схема банковской онлайн транзакции выглядела так
Посредством POS-терминала, в целях аутентификации держателя, информация о карте из терминала передаётся в банк-эквайрер, обслуживающий данный терминал, и имеющий соглашение с владельцем торговой точки. В зависимости от договорённостей торговая точка оплачивает банку комиссию за его участие в обработке транзакции. Далее банк-эквайрер передаёт информацию в платёжную систему, обслуживающую данную карту. Там данные попадают в операционный центр, к которому подключены банки-участники платёжной системы. В этом центре проходит проверка на предмет наличия или отсутствия платёжных данных карты в стоп-листе и в зависимости от полученного результата в транзакции отказывается или она одобряется с дальнейшим направлением в банк-эмитент, выпустивший данную карту, и обслуживающий привязанный к ней банковский счёт/счета клиента. Здесь она попадает в процессинговый и авторизационный центр, в котором проводятся расширенные проверки на легальность обрабатываемой транзакции. При подозрении на мошенничество или нарушение условий обслуживания даётся отказ. В зависимости от типа карты (дебетовая или кредитная) и установленного банком приоритета авторизации здесь может проводиться проверка доступного остатка средств на счёте или платёжного лимита, а также сверяться авторизационный PIN-код держателя. При удовлетворении всем проверкам эмитент одобряет операцию и в рамках транзакции, также через платёжную систему, ответ даётся в торговую точку. Путём взаиморасчётов с платёжной системой эмитент перечисляет эквайреру сумму запрашиваемых по транзакции средств, а также комиссию платёжной системы за обработку транзакции. В свою очередь с клиентского счёта банк списывает оплачиваемую и подтверждённую клиентом к оплате сумму денег (для дебетовых карт) или уменьшает доступный платёжный лимит, тем самым резервируя часть средств к последующему списанию (для кредитных карт). Транзакция завершается в момент поступления обратно в торговую точку ответа с одобрением или отказом. Bitcoin транзакцию отменить невозможно.
Преимущество проведения Bitcoin транзакции перед банковской онлайн транзакцией:[править]
- Избавление от посредников (банков-корреспондентов)
- Быстрота транзакций
- Стоимость транзакции
- Низкий риск возникновения ошибок
- Децентрализация,
- P2P взаимодействие
Общий формат проведения Bitcoin транзакций (внутри блока)[править]
Поле | Описание | Размер |
---|---|---|
Номер версии | На данный момент 1 | 4 байта |
Входящий счётчик | Положительное целое VI = VarInt | 1-9 байтов |
Список входящих данных | Первый ввод первой транзакции также называется «coinbase» (монетная база) | <входящий счётчик> много входящих данных |
Исходящий счётчик | Положительное целое VI = VarInt | 1-9 байтов |
Список исходящих данных | Исходящие данные первой транзакции используют добытые Биткоины для блока | <исходящий счётчик> много исходящих данных |
Время блокировки | Если не равны нулю и порядковые номера меньше 0xFFFFFFFF: высота блока или временная отметка (для конечных транзакций) | 4 байта |
Пример транзакции Биткоина с одним входом и одним выходом[править]
Данные[править]
Input: Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6 Index: 0 scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10 90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501
Output: Value: 5000000000 scriptPubKey: OP_DUP OP_HASh260 404371705fa9bd789a2fcd52d2c580b65d35549d OP_EQUALVERIFY OP_CHECKSIG
Объяснение[править]
Вход в этой транзакции импортирует 50 BTC от выхода #0 в транзакции f5d8…, а затем выход отправляет 50 BTC на Биткоин адрес (выраженный здесь в шестнадцатеричной системе — 4043…). Когда получатель захочет потратить свои деньги, то он будет ссылаться на выход #0 этой транзакции для входа своей собственной транзакции.
Вход[править]
Вход (input) — это ссылка на выход другой транзакции. У транзакции часто бывает несколько входов. Значения этих ссылок суммируются, и общая сумма биткоинов может быть использован в выходе текущей транзакции. Previous tx — это хеш предыдущей транзакции. Index — это определённый выход этой транзакции. ScriptSig — это первая половина половина скрипта (подробнее об этом — ниже).
Скрипт содержит две компоненты: подпись (signature) и публичный ключ (public key). Публичный ключ принадлежит пользователю, который использует выходы транзакции, и подтверждает то, что создатель транзакции имеет право распоряжаться суммой, пришедшей с выходов. Другой компонент – это ECDSA-подпись хеша упрощённой версии транзакции. Объединённая с публичным ключом, подпись подтверждает, что транзакция была создана реальным владельцем данного Bitcoin адреса.
Выход[править]
Выход (output) содержит инструкции по отправлению биткоинов. Значение (value) — это количество сатоши (1 BTC = 100,000,000 сатоши), которое сможет использовать транзакция, для которая текущая будет входом. ScriptPubKey — это вторая половина скрипта (будет рассмотрена далее).
Может существовать более одного выхода, и они будут делить между собой сумму, пришедшую со входов.
Каждый выход транзакции может быть использован в качестве входа для следующей транзакции только один раз, поэтому сумма всех входов для текущей транзакции должна быть использована на её выходах. В противном случае, оставшаяся сумма входов транзакции будет потеряна. Например, если ввод равен 50 BTC, а пользователю нужно отправить только 25 BTC, то биткоин создаст два выхода по 25 BTC каждый: один отправится в пункт назначения, а другой отправится ещё раз владельцу этих средств (так называемая «сдача» — транзакция, которую пользователь фактически отправляет сам себе).
Любая сумма входов биткоинов, не использованная в выходах, становится коммиссией транзакции. Она достанется тому, кто сгенерирует блок.
Верификация транзакции[править]
Для того чтобы проверить, авторизированы ли входы для использования сумм, указанных в выходах предыдущих транзакций, Биткоин использует стандартную систему скриптования (см. дальше). scriptSig входа и scriptPubKey выхода, на который ссылается данная транзакция, оцениваются при помощи scriptPubKey, используя значения оставшиеся в множестве scriptSig.
Вход подтверждается, если скрипт scriptPubKey возвращает значение «true» (истинно). Через систему скрипта, отправитель может создавать очень сложные условия, которым должны соответствовать люди, желающие получить выходящее значение. Например, возможно создать вход, который сможет получить любой пользователь без авторизации. Также возможно потребовать того, чтобы вход был подписан 10 разными ключами, или проверялся не ключом, а паролем.
Общий формат каждого входа транзакции — Txin[править]
Поле | Описание | Размер |
---|---|---|
Хеш предыдущей транзакции | Двойное SHA256-хэширование предыдущей транзакции | 32 байта |
Предыдущий Txout-индекс | Неотрицательное целое, индексирующее выходы предыдущей транзакции | 4 байта |
Длина скрипта Txin | Не отрицательное целое VI = VarInt | 1-9 байтов |
Txin-script / scriptSig | Скрипт | <длина внутри скрипта>-много байтов |
sequence_no | обычно 0xFFFFFFFF; действует, только если lock_time транзакции > 0 | 4 байта |
Вход достаточным образом описывает, где и как получить количество Биткоинов, которыми может распоряжаться их новый владелец.8 сатоши), необходимых для транзакции
Выход определяет условия по использования данных биткоинов в следующих транзакциях.
Сумма выходных значений для первой транзакции в блоке — это значение добытых биткоинов для блока, плюс сумма коммиссий от других Биткоин транзакций, включённых в этот блок.
См. также на BitcoinWiki[править]
Как отследить транзакцию биткойнов
Как убедиться, что ваша транзакция подтверждена
Как отследить биткойн-транзакцию. Источник: shutterstock.com
биткойн-транзакций становятся обычным явлением в современной финансовой системе. Тем не менее, у начинающих криптоэнтузиастов обычно возникает много вопросов о покупке, продаже, отслеживании транзакций и множество других вопросов, связанных с цифровыми деньгами.
PaySpace Magazine предлагает вам выяснить, что такое биткойн-транзакция и как проверить такую транзакцию.
Что такое биткойн-транзакция?
Биткойн-транзакция — это подтвержденная передача биткойнов, которая транслируется в сеть и, следовательно, сохраняется там в виде блоков (таким образом данные записываются в файлы). Каждый пользователь может отслеживать цепочку операций даже с самого начала (получение самых первых криптоактивов). Транзакции осуществляются между специальными кошельками. Обычно пользователи (инвесторы) покупают криптовалюты (другими словами, инвестируют в криптовалюту) и хранят эти активы, ожидая колебания валюты.Затем, если курс валюты благоприятный, они продают криптоактивы или покупают больше криптовалюты (возможно, других монет). Более того, пользователи могут использовать биткойн для оплаты еды в кафе или товаров и услуг в Интернете. Есть много сайтов, которые принимают биткойны в качестве средства платежа, а также множество криптовалютных бирж.
Есть много сайтов, которые принимают биткойн в качестве средства платежа. Источник: shutterstock.com
Транзакции и блокчейн
биткойн-транзакций отличаются от обычных банковских.В конце концов, криптомонеты не существуют в том виде, в каком существуют доллары / евро / фунты, или, по крайней мере, в том виде, который мы привыкли видеть. Цифровые активы также не хранятся на биткойн-адресах. В кошельках есть записи только о подтвержденных (подписанных) транзакциях между кошельками или счетами. Все записи хранятся в блокчейне.
Все записи хранятся в блокчейне. Источник: shutterstock.com
Как это работает?
Выполняя биткойн-транзакции, пользователь должен понимать, что на самом деле ничего не отправляется и не пересылается.Просто введенное количество монет передается (из одного кошелька в другой), а информация о транзакции общедоступна. Каждая транзакция указывается как ввод, то есть сумма, которая будет направлена на счет.
Все транзакции и операции привязаны к имени кошелька (цифровой и буквенный код). Таким образом, нет возможности узнать имя владельца кошелька. Более того, невозможно привязать кошелек к настоящему имени / ID / адресу.Поэтому сервис считается анонимным.
Подтверждение транзакции — это процесс включения транзакции в блок. Источник: shutterstock.com
Подтверждение транзакции — это процесс включения транзакции в блок. Включение в один блок приравнивается к одному подтверждению. Сделка считается подтвержденной, если таких подтверждений не менее шести (и более). Это помогает защитить пользователей от повторной траты одних и тех же биткойнов.
Разные сайты и сервисы вправе ставить свои ограничения и лимиты, если мы говорим о количестве подтвержденных блоков, но обычно это количество шесть.
Как мне узнать, сколько подтверждений у моей транзакции?
Вы можете пользоваться услугами любого типа, подобными blockchain.info. Он помогает вам узнать количество неподтвержденных транзакций (если таковые имеются) и предоставляет подробную информацию о конкретном биткойн-адресе, его номере в цепочке блоков, хэше транзакции и т. Д.
Если вам нужно отслеживать транзакцию, вы можете использовать один из общедоступных онлайн-сервисов. Источник: shutterstock.com
Как отследить биткойн-транзакцию?
В первую очередь, вы можете использовать специальную программу под названием Block Explorer.Вам нужно будет скачать его, чтобы начать. Это приложение позволяет легко и просто отслеживать каждую биткойн-транзакцию. Приложение автоматически создает таблицы и графики, которые показывают, что происходит в вашем криптовалютном кошельке. Наиболее важные пункты:
- Вход, который представляет собой информацию о биткойн-адресе отправителя;
- Сумма — количество монет, отправленных на кошелек;
- Выход, который представляет собой информацию об адресе кошелька получателя.
Если вам нужно отслеживать транзакцию, вы также можете использовать одну из общедоступных онлайн-сервисов:
- Blockchain.Info. Это сервис кошельков, который работает с 2011 года. Он позволяет отслеживать статус транзакций онлайн, а также различные данные об операциях.
- Chain.so — еще один пример удобной онлайн-службы отслеживания. Он помогает пользователям отслеживать конкретную транзакцию в Интернете и предлагает различные доступные дополнительные данные, связанные с операцией.
Если вы хотите найти нужные данные, вам необходимо знать хеш (ID) транзакции и ввести его в поле поиска на сайте. Большинство сервисов обычно перенаправляют вас на страницу со всеми необходимыми доступными данными.
Когда вы проверяете подтверждение транзакции, вы увидите «подтвержденные» или «неподтвержденные» уведомления. Последнее означает, что транзакция все еще не входит в необходимое количество блоков.
СМОТРИ ТАКЖЕ: Почему Биткойн растет и прогноз цен
транзакций — биткойн
транзакции позволяют пользователям тратить сатоши.Каждая транзакция состоит из нескольких частей, которые позволяют выполнять как простые прямые платежи, так и сложные транзакции.
Введение
В этом разделе будет описана каждая часть и показано, как использовать их вместе для построения полных транзакций.
Чтобы упростить задачу, в этом разделе предполагается, что транзакций с базой монет не существует. Транзакции Coinbase могут быть созданы только майнерами биткойнов, и они являются исключением из многих правил, перечисленных ниже. Вместо того, чтобы указывать на исключение Coinbase для каждого правила, мы предлагаем вам прочитать о транзакциях Coinbase в разделе цепочки блоков этого руководства.
Части сделки
На рисунке выше показаны основные части биткойн-транзакции. Каждая транзакция имеет как минимум один вход и один выход. Каждый вход тратит сатоши, уплаченные предыдущему выходу. Затем каждый вывод ожидает как вывод неизрасходованной транзакции (UTXO), пока его не израсходует более поздний ввод. Когда ваш биткойн-кошелек сообщает вам, что у вас есть баланс в 10 000 сатоши, это на самом деле означает, что у вас есть 10 000 сатоши, ожидающих в одном или нескольких UTXO.
Каждой транзакции предшествует четырехбайтовый номер версии транзакции, который сообщает партнерам Биткойна и майнерам, какой набор правил использовать для ее проверки.Это позволяет разработчикам создавать новые правила для будущих транзакций без аннулирования предыдущих транзакций.
Расходы на выпуск
У выхода есть подразумеваемый номер индекса, основанный на его положении в транзакции — индекс первого выхода равен нулю. На выходе также есть сумма в сатоши, которую он платит условному скрипту pubkey. Любой, кто может выполнить условия этого скрипта pubkey, может потратить до суммы выплаченных ему сатоши.
Вход использует идентификатор транзакции (txid) и номер индекса выхода (часто называемый «vout» для выходного вектора), чтобы идентифицировать конкретный выход, который должен быть потрачен.Он также имеет сценарий подписи, который позволяет ему предоставлять параметры данных, удовлетворяющие условным операторам в сценарии pubkey. (Порядковый номер и время блокировки связаны и будут рассмотрены вместе в следующем подразделе.)
Рисунки ниже помогают проиллюстрировать использование этих функций, показывая рабочий процесс, который Алиса использует для отправки Бобу транзакции, и который Боб позже использует для проведения этой транзакции. И Алиса, и Боб будут использовать наиболее распространенную форму стандартного типа транзакции Pay-To-Public-Key-Hash (P2PKH).P2PKH позволяет Алисе тратить сатоши на типичный биткойн-адрес, а затем позволяет Бобу дополнительно тратить эти сатоши, используя простую пару криптографических ключей.
Создание хэша открытого ключа P2PKH для получения платежа
Боб должен сначала сгенерировать пару закрытого / открытого ключей, прежде чем Алиса сможет создать первую транзакцию. Биткойн использует алгоритм цифровой подписи с эллиптической кривой (ECDSA) с кривой secp256k1; Закрытые ключи secp256k1 — это 256 бит случайных данных. Копия этих данных детерминированно преобразуется в открытый ключ secp256k1.Поскольку преобразование можно надежно повторить позже, нет необходимости хранить открытый ключ.
Открытый ключ (pubkey) затем криптографически хешируется. Этот хэш pubkey также можно надежно повторить позже, поэтому его также не нужно хранить. Хэш сокращает и скрывает открытый ключ, упрощая ручную транскрипцию и обеспечивая защиту от непредвиденных проблем, которые могут позволить реконструировать закрытые ключи из данных открытого ключа в более поздний момент.
Боб предоставляет Алисе хеш pubkey.Хэши Pubkey почти всегда отправляются в кодировке биткойн-адресов, которые представляют собой строки в кодировке base58, содержащие номер версии адреса, хэш и контрольную сумму обнаружения ошибок для выявления опечаток. Адрес может быть передан через любой носитель, включая односторонние носители, которые препятствуют обмену данными между спонсором и получателем, и его можно дополнительно закодировать в другой формат, например QR-код, содержащий URI «биткойн:».
Когда Алиса получит адрес и декодирует его обратно в стандартный хэш, она может создать первую транзакцию.Она создает стандартный вывод транзакции P2PKH, содержащий инструкции, которые позволяют любому потратить этот вывод, если они могут доказать, что контролируют закрытый ключ, соответствующий хешированному общему ключу Боба. Эти инструкции называются сценарием pubkey или scriptPubKey.
Алиса транслирует транзакцию, и она добавляется в цепочку блоков. Сеть классифицирует его как неизрасходованный вывод транзакции (UTXO), а программное обеспечение кошелька Боба отображает его как потраченный баланс.
Когда некоторое время спустя Боб решает потратить UTXO, он должен создать вход, который ссылается на транзакцию Алисы, созданную ее хешем, называемую идентификатором транзакции (txid), и конкретный выход, который она использовала, по его номеру индекса (выходной индекс ).Затем он должен создать сценарий подписи — набор параметров данных, которые удовлетворяют условиям, которые Алиса поместила в сценарий pubkey предыдущего вывода. Скрипты подписи также называются scriptSigs.
Сценарии
Pubkey и сценарии подписи объединяют ключи pubkeys secp256k1 и подписи с условной логикой, создавая программируемый механизм авторизации.
Разблокировка выхода P2PKH для трат
Для вывода в стиле P2PKH сценарий подписи Боба будет содержать следующие две части данных:
Его полный (нехешированный) открытый ключ, поэтому сценарий pubkey может проверить, что его хеш-значение совпадает с хешем pubkey, предоставленным Алисой.
Подпись secp256k1, созданная с использованием криптографической формулы ECDSA для объединения определенных данных транзакции (описанных ниже) с закрытым ключом Боба. Это позволяет сценарию pubkey проверять, владеет ли Боб закрытым ключом, создавшим открытый ключ.
Подпись Боба secp256k1 не просто доказывает, что Боб контролирует свой закрытый ключ; это также делает части своей транзакции защищенными от несанкционированного доступа, чтобы Боб мог безопасно транслировать их по одноранговой сети.
Некоторые вещи, подписываемые при расходе продукции
Как показано на рисунке выше, данные, которые подписывает Боб, включают txid и индекс вывода предыдущей транзакции, сценарий pubkey предыдущего вывода, сценарий pubkey, созданный Бобом, который позволит следующему получателю потратить вывод этой транзакции, а также количество сатоши. потратить следующему получателю. По сути, подписывается вся транзакция, за исключением сценариев подписи, которые содержат полные открытые ключи и подписи secp256k1.
После размещения своей подписи и открытого ключа в сценарии подписи Боб транслирует транзакцию майнерам биткойнов через одноранговую сеть. Каждый одноранговый узел и майнер независимо проверяют транзакцию, прежде чем транслировать ее дальше или пытаться включить ее в новый блок транзакций.
Проверка сценария P2PKH
Процедура проверки требует оценки сценария подписи и сценария pubkey. В выводе P2PKH сценарий pubkey:
OP_DUP OP_HASh260OP_EQUALVERIFY OP_CHECKSIG
Сценарий подписи плательщика оценивается и ставится префиксом в начале сценария.В транзакции P2PKH сценарий подписи содержит подпись secp256k1 (sig) и полный открытый ключ (pubkey), создавая следующую конкатенацию:
OP_DUP OP_HASh260 OP_EQUALVERIFY OP_CHECKSIG
Язык сценариев — это Forth-подобный стековый язык, намеренно разработанный без сохранения состояния, а не полный по Тьюрингу. Безгражданство гарантирует, что после добавления транзакции в цепочку блоков не будет условия, которое сделает ее навсегда непригодной для использования.Неполнота по Тьюрингу (в частности, отсутствие циклов или переходов) делает язык сценариев менее гибким и более предсказуемым, что значительно упрощает модель безопасности.
Чтобы проверить, действительна ли транзакция, операции сценария подписи и сценария pubkey выполняются по одному элементу за раз, начиная со сценария подписи Боба и продолжаясь до конца сценария pubkey Алисы. На рисунке ниже показана оценка стандартного сценария P2PKH pubkey; под рисунком — описание процесса.
Оценка стека P2PKH
Подпись (из сценария подписи Боба) добавляется (помещается) в пустой стек. Поскольку это просто данные, ничего не делается, кроме добавления их в стек. Открытый ключ (также из сценария подписи) помещается поверх подписи.
Из сценария Алисы pubkey выполняется операция «OP_DUP». «OP_DUP» помещает в стек копию данных, находящихся в данный момент наверху, — в этом случае создает копию открытого ключа, предоставленного Бобом.
Операция, выполняемая следующей, «OP_HASh260», помещает в стек хеш данных, находящихся в данный момент наверху, — в данном случае открытый ключ Боба. Это создает хеш открытого ключа Боба.
Сценарий pubkey Алисы затем подталкивает хеш pubkey, который Боб дал ей для первой транзакции. На этом этапе в верхней части стека должно быть две копии хэша pubkey Боба.
Теперь становится интересно: скрипт pubkey Алисы выполняет OP_EQUALVERIFY.«OP_EQUALVERIFY» эквивалентно выполнению «OP_EQUAL», за которым следует «OP_VERIFY» (не показано).
«OP_EQUAL» (не показано) проверяет два значения наверху стека; в этом случае он проверяет, равен ли хэш pubkey, сгенерированный из полного открытого ключа, предоставленного Бобом, хешу pubkey, предоставленному Алисой при создании транзакции №1. «OP_EQUAL» выталкивает (удаляет из вершины стека) два сравниваемых значения и заменяет их результатом этого сравнения: ноль ( ложь, ) или один (, истина, ).
«OP_VERIFY» (не показано) проверяет значение наверху стека. Если значение ложно , оценка немедленно прекращается, и проверка транзакции не выполняется. В противном случае он выталкивает из стека истинное значение .
Наконец, скрипт pubkey Алисы выполняет «OP_CHECKSIG», который проверяет подпись, предоставленную Бобом, по теперь аутентифицированному открытому ключу, который он также предоставил. Если подпись совпадает с открытым ключом и была сгенерирована с использованием всех данных, требуемых для подписи, «OP_CHECKSIG» помещает значение истина на вершину стека.
Если false не находится на вершине стека после того, как сценарий pubkey был оценен, транзакция действительна (при условии, что с ней нет других проблем).
P2SH Скрипты
Скрипты Pubkey создаются спонсорами, которых мало интересует, что делает этот скрипт. Получатели действительно заботятся об условиях сценария и, если они хотят, они могут попросить спонсоров использовать определенный сценарий pubkey. К сожалению, пользовательские скрипты pubkey менее удобны, чем короткие биткойн-адреса, и не было стандартного способа передачи их между программами до широко распространенной реализации ныне устаревшего платежного протокола BIP70, обсуждаемого ниже.
Для решения этих проблем в 2012 году были созданы транзакции pay-to-script-hash (P2SH), чтобы позволить спонсору создать скрипт pubkey, содержащий хеш второго скрипта, скрипта погашения.
Базовый рабочий процесс P2SH, показанный ниже, выглядит почти идентично рабочему процессу P2PKH. Боб создает скрипт погашения с любым скриптом, который он хочет, хеширует скрипт погашения и предоставляет Алисе хеш скрипта погашения. Алиса создает вывод в стиле P2SH, содержащий хеш сценария погашения Боба.
Создание скрипта погашения P2SH и хеширования
Когда Боб хочет потратить выходные данные, он предоставляет свою подпись вместе с полным (сериализованным) сценарием погашения в сценарии подписи. Одноранговая сеть гарантирует, что полные хэши сценария погашения имеют то же значение, что и хэш сценария, который Алиса вставила в свои выходные данные; затем он обрабатывает скрипт погашения точно так же, как если бы это был основной скрипт открытого ключа, позволяя Бобу потратить выходные данные, если скрипт погашения не возвращает false.
Разблокировка выхода P2SH для трат
Хэш сценария погашения имеет те же свойства, что и хэш открытого ключа, поэтому его можно преобразовать в стандартный формат адреса Биткойн с одним небольшим изменением, чтобы отличить его от стандартного адреса.Это делает сбор адреса в стиле P2SH таким же простым, как сбор адреса в стиле P2PKH. Хэш также скрывает любые открытые ключи в сценарии погашения, поэтому сценарии P2SH так же безопасны, как хеши открытых ключей P2PKH.
Стандартные транзакции
После обнаружения нескольких опасных ошибок в ранних версиях Биткойна был добавлен тест, который принимал транзакции из сети только в том случае, если их сценарии pubkey и сценарии подписи соответствовали небольшому набору безопасных шаблонов, а остальные транзакции не нарушал еще один небольшой набор правил, обеспечивающих хорошее сетевое поведение.Это тест IsStandard ()
, и транзакции, которые проходят его, называются стандартными транзакциями.
Нестандартные транзакции — те, которые не прошли проверку — могут быть приняты узлами, не использующими настройки Bitcoin Core по умолчанию. Если они включены в блоки, они также не пройдут проверку IsStandard и будут обработаны.
Помимо того, что кто-то усложняет бесплатную атаку на Биткойн, транслируя вредоносные транзакции, стандартный тест транзакции также помогает предотвратить создание транзакций пользователями сегодня, которые затруднили бы добавление новых функций транзакций в будущем.Например, как описано выше, каждая транзакция включает номер версии — если пользователи начнут произвольно изменять номер версии, она станет бесполезной в качестве инструмента для введения обратно несовместимых функций.
Начиная с версии Bitcoin Core 0.9, стандартные типы скриптов pubkey:
Плата за хэш открытого ключа (P2PKH)
P2PKH — это наиболее распространенная форма сценария pubkey, используемая для отправки транзакции на один или несколько адресов Биткойн.
Сценарий Pubkey: OP_DUP OP_HASh260OP_EQUALVERIFY OP_CHECKSIG Сценарий подписи:
Хеширование сценария Pay To Script (P2SH)
P2SH используется для отправки транзакции в хеш скрипта.Каждый из стандартных сценариев pubkey может использоваться как сценарий погашения P2SH, за исключением самого P2SH. Начиная с Bitcoin Core 0.9.2, транзакции P2SH могут содержать любой действительный код redeemScript, что делает стандарт P2SH более гибким и позволяет экспериментировать со многими новыми и сложными типами транзакций. Чаще всего P2SH используется для стандартного сценария pubkey с несколькими подписями, а вторым по распространенности является протокол Open Assets.
Другой распространенный сценарий redeemScript, используемый для P2SH, — это хранение текстовых данных в цепочке блоков.Первая биткойн-транзакция, когда-либо сделанная, включала текст, а P2SH — это удобный метод хранения текста в блокчейне, поскольку он позволяет хранить до 1,5 КБ текстовых данных. Пример хранения текста в блокчейне с использованием P2SH можно найти в этом репозитории.
Сценарий Pubkey: OP_HASh260OP_EQUAL Сценарий подписи: [sig] [sig ...]
Эта комбинация сценариев отлично подходит для старых узлов, если хэш сценария совпадает со сценарием погашения.Однако после активации софт-форка новые узлы выполнят дополнительную проверку скрипта погашения. Они извлекут сценарий погашения из сценария подписи, декодируют его и выполнят с оставшимися элементами стека (часть
Этот последний шаг аналогичен шагу проверки в сценариях P2PKH или P2Multisig, где начальная часть сценария подписи (
Multisig
Хотя мультиподпись P2SH в настоящее время обычно используется для транзакций с несколькими подписями, этот базовый сценарий может использоваться для запроса нескольких подписей перед тем, как можно будет использовать UTXO.
В сценариях с несколькими подписями pubkey, называемых m-of-n, m — это минимальное количество подписей , которое должно соответствовать открытому ключу; n — это номер предоставляемых открытых ключей.И m, , и n должны быть кодами операций с OP_1
по OP_16
, соответствующими желаемому номеру.
Из-за ошибки в исходной реализации Биткойна, которая должна быть сохранена для совместимости, «OP_CHECKMULTISIG» потребляет на одно значение из стека больше, чем указано m , поэтому список подписей secp256k1 в сценарии подписи должен предваряется дополнительным значением ( OP_0
), которое будет использовано, но не использовано.
Сценарий подписи должен предоставлять подписи в том же порядке, в каком соответствующие открытые ключи появляются в сценарии pubkey или сценарии погашения. См. Описание в «OP_CHECKMULTISIG» для подробностей.
Сценарий Pubkey:[B pubkey] [C pubkey ...] OP_CHECKMULTISIG Сценарий подписи: OP_0 [B sig] [C sig ...]
Хотя это не отдельный тип транзакции, это мультиподпись P2SH с 2 из 3:
Сценарий Pubkey: OP_HASh260OP_EQUAL Сценарий активации: OP_CHECKMULTISIG Сценарий подписи: OP_0
Pubkey
Выходные данные
Pubkey — это упрощенная форма сценария P2PKH pubkey, но они не так безопасны, как P2PKH, поэтому они, как правило, больше не используются в новых транзакциях.
Сценарий Pubkey:OP_CHECKSIG Сценарий подписи:
Нулевые данные
Тип транзакции с нулевыми данными, ретранслируемый и добываемый по умолчанию в Bitcoin Core 0.9.0 и более поздних версиях, который добавляет произвольные данные в доказуемо ненадежный сценарий pubkey, который полные узлы не должны хранить в своей базе данных UTXO. Предпочтительнее использовать транзакции с нулевыми данными вместо транзакций, которые раздувают базу данных UTXO, потому что они не могут быть автоматически сокращены; однако обычно даже предпочтительнее хранить данные вне транзакций, если это возможно.
Правила согласования разрешают вывод нулевых данных до максимально допустимого размера сценария открытого ключа в 10 000 байт при условии, что они следуют всем остальным правилам согласования, таким как отсутствие отправки данных размером более 520 байт.
Bitcoin Core 0.9.x — 0.10.x по умолчанию будет ретранслировать и обрабатывать транзакции с нулевыми данными размером до 40 байт за одну передачу данных и только один вывод нулевых данных, который приносит ровно 0 сатоши:
Сценарий Pubkey: OP_RETURN <от 0 до 40 байт данных> (Скрипты с нулевыми данными не могут быть потрачены, поэтому скрипт подписи отсутствует.)
Bitcoin Core 0.11.x увеличивает это значение по умолчанию до 80 байт, остальные правила остаются прежними.
Bitcoin Core 0.12.0 по умолчанию использует ретрансляцию и извлечение нулевых выходных данных размером до 83 байтов с любым количеством отправлений данных, при условии, что общий лимит байтов не превышен. Должен быть только один вывод нулевых данных, и он по-прежнему должен платить ровно 0 сатоши.
Параметр конфигурации -datacarriersize
Bitcoin Core позволяет вам установить максимальное количество байтов в выходных данных нулевых данных, которые вы будете ретранслировать или добывать.
Нестандартные операции
Если вы используете в выходных данных что-либо, кроме стандартного сценария pubkey, одноранговые узлы и майнеры, использующие настройки Bitcoin Core по умолчанию, не будут принимать, транслировать и майнить вашу транзакцию. Когда вы попытаетесь транслировать свою транзакцию одноранговому узлу с настройками по умолчанию, вы получите сообщение об ошибке.
Если вы создаете сценарий погашения, хешируете его и используете хеш в выводе P2SH, сеть видит только хэш, поэтому она будет принимать вывод как действительный, независимо от того, что говорит сценарий погашения.Это позволяет производить оплату нестандартным скриптам, а с версии Bitcoin Core 0.11 можно потратить почти все действующие скрипты погашения. Исключение составляют сценарии, в которых используются неназначенные коды операций NOP; эти коды операций зарезервированы для будущих софт-форков и могут быть ретранслированы или извлечены только узлами, которые не следуют стандартной политике пула памяти.
Примечание: стандартные транзакции предназначены для защиты и помощи сети, а не для предотвращения ошибок. Легко создать стандартные транзакции, которые делают отправленные им сатоши незаменимыми.
Начиная с версии Bitcoin Core 0.9.3, стандартные транзакции также должны соответствовать следующим условиям:
Транзакция должна быть завершена: либо ее время блокировки должно быть в прошлом (или меньше или равно текущей высоте блока), либо все ее порядковые номера должны быть 0xffffffff.
Транзакция должна быть меньше 100 000 байт. Это примерно в 200 раз больше, чем у типичной транзакции P2PKH с одним входом и одним выходом.
Каждый из сценариев подписи транзакции должен быть меньше 1 650 байт.Этого достаточно, чтобы позволить 15 из 15 транзакций с несколькими подписями в P2SH с использованием сжатых открытых ключей.
Открытые (не P2SH) транзакции с несколькими подписями, для которых требуется более 3 открытых ключей, в настоящее время являются нестандартными.
Сценарий подписи транзакции должен только передавать данные в стек оценки сценария. Он не может отправлять новые коды операций, за исключением кодов операций, которые только помещают данные в стек.
Транзакция не должна включать никаких выходов, которые получают менее 1/3 от количества сатоши, которое потребовалось бы, чтобы потратить их на типичный вход.В настоящее время это 546 сатоши для вывода P2PKH или P2SH на узле Bitcoin Core с комиссией за ретрансляцию по умолчанию. Исключение: стандартные выходные данные с нулевыми данными должны получать нулевые сатоши.
Типы сигнатурного хэша
«OP_CHECKSIG» извлекает аргумент, не являющийся стеком, из каждой оцениваемой подписи, позволяя подписывающей стороне решить, какие части транзакции подписывать. Поскольку подпись защищает эти части транзакции от модификации, это позволяет подписывающим сторонам выборочно разрешать другим людям изменять свои транзакции.
Различные варианты подписи называются типами хэша подписи. В настоящее время доступны три основных типа SIGHASH:
«SIGHASH_ALL», значение по умолчанию, подписывает все входы и выходы, защищая все, кроме сценариев подписи, от изменений.
«SIGHASH_NONE» подписывает все входы, но ни один из выходов, позволяя любому изменить направление сатоши, если только другие подписи, использующие другие хеш-флаги подписи, не защищают выходы.
«SIGHASH_SINGLE» единственный подписанный выход — это тот, который соответствует этому входу (выход с тем же номером индекса выхода, что и этот вход), гарантируя, что никто не может изменить вашу часть транзакции, но позволяет другим подписавшимся изменить свою часть транзакции . Соответствующий вывод должен существовать, иначе будет подписано значение «1», нарушающее схему безопасности. Этот вход, как и другие входы, включается в подпись. Порядковые номера других входов не включаются в подпись и могут быть обновлены.
Базовые типы могут быть изменены с помощью флага «SIGHASH_ANYONECANPAY» (любой может заплатить), создавая три новых комбинированных типа:
SIGHASH_ALL | SIGHASH_ANYONECANPAY
подписывает все выходы, но только этот вход, а также позволяет любому добавлять или удалять другие входы, так что любой может вносить дополнительные сатоши, но они не могут изменить количество отправленных сатоши и куда они идут .SIGHASH_NONE | SIGHASH_ANYONECANPAY
подписывает только этот вход и позволяет любому добавлять или удалять другие входы или выходы, поэтому любой, кто получит копию этого входа, может потратить его, как ему заблагорассудится.SIGHASH_SINGLE | SIGHASH_ANYONECANPAY
подписывает этот вход и соответствующий ему выход. Позволяет любому добавлять или удалять другие входы.
Поскольку каждый вход подписан, транзакция с несколькими входами может иметь несколько типов хэшей подписи, подписывающих разные части транзакции. Например, для транзакции с одним входом, подписанной с помощью NONE
, ее вывод может быть изменен майнером, который добавляет его в цепочку блоков. С другой стороны, если транзакция с двумя входами имеет один вход, подписанный с помощью NONE
, и один вход, подписанный с помощью ALL
, подписывающая сторона ALL
может выбрать, куда потратить сатоши, не консультируясь с подписывающей стороной NONE
— но никто иначе можно изменить транзакцию.
Время блокировки и порядковый номер
Одна вещь, которую подписывают все типы хэшей подписи, — время блокировки транзакции. (В исходном коде Bitcoin Core называется nLockTime.) Время блокировки указывает самое раннее время, когда транзакция может быть добавлена в цепочку блоков.
Locktime позволяет подписывающим сторонам создавать транзакции с временной блокировкой, которые станут действительными только в будущем, давая подписывающим возможность изменить свое мнение.
Если кто-либо из подписывающих передумает, они могут создать новую транзакцию без блокировки.Новая транзакция будет использовать в качестве одного из своих входов один из тех же выходов, который использовался в качестве входа для транзакции времени блокировки. Это делает транзакцию времени блокировки недействительной, если новая транзакция добавляется в цепочку блоков до истечения срока блокировки.
Необходимо соблюдать осторожность при истечении срока действия временной блокировки. Одноранговая сеть позволяет блокировать время до двух часов вперед по сравнению с реальным временем, поэтому транзакция блокировки может быть добавлена в цепочку блоков за два часа до того, как ее временная блокировка официально истечет.Кроме того, блоки не создаются с гарантированными интервалами, поэтому любую попытку отменить ценную транзакцию следует делать за несколько часов до истечения срока блокировки.
Предыдущие версии Bitcoin Core предоставляли функцию, которая не позволяла подписывающим транзакциям использовать метод, описанный выше, для отмены транзакции с временной привязкой, но необходимая часть этой функции была отключена, чтобы предотвратить атаки типа «отказ в обслуживании». Наследием этой системы являются четырехбайтовые порядковые номера на каждом входе. Порядковые номера были предназначены для того, чтобы позволить нескольким подписавшимся согласиться обновить транзакцию; когда они завершили обновление транзакции, они могли согласиться установить порядковый номер каждого входа равным четырехбайтовому беззнаковому максимуму (0xffffffff), позволяя добавить транзакцию в блок, даже если ее временная блокировка еще не истекла.
Даже сегодня установка всех порядковых номеров на 0xffffffff (по умолчанию в Bitcoin Core) все еще может отключить временную блокировку, поэтому, если вы хотите использовать время блокировки, по крайней мере, один вход должен иметь порядковый номер ниже максимального. Поскольку порядковые номера не используются сетью для каких-либо других целей, установки любого порядкового номера на ноль достаточно для включения времени блокировки.
Locktime — это 4-байтовое целое число без знака, которое можно проанализировать двумя способами:
Если меньше 500 миллионов, время блокировки анализируется как высота блока.Транзакция может быть добавлена к любому блоку этой высоты или выше.
Если больше или равно 500 миллионам, время блокировки анализируется с использованием формата времени эпохи Unix (количество секунд, прошедших с 1970-01-01T00: 00 UTC — в настоящее время более 1,395 миллиарда). Транзакция может быть добавлена к любому блоку, время блока которого больше времени блокировки.
Комиссия за транзакцию и изменение
Комиссия за транзакции зависит от общего байта подписанной транзакции.Плата за байт рассчитывается на основе текущего спроса на пространство в добытых блоках, при этом плата увеличивается по мере увеличения спроса. Комиссия за транзакцию предоставляется майнеру биткойнов, как объясняется в разделе цепочки блоков, и поэтому каждый майнер должен выбрать минимальную комиссию за транзакцию, которую он будет принимать.
Существует также концепция так называемых «высокоприоритетных транзакций», при которых тратятся сатоши, которые не перемещались долгое время.
В прошлом эти «приоритетные» транзакции часто освобождались от обычных требований к оплате.До версии Bitcoin Core 0.12 для этих высокоприоритетных транзакций было зарезервировано 50 КБ каждого блока, однако теперь по умолчанию установлено значение 0 КБ. После области приоритета всем транзакциям присваивается приоритет на основе их платы за байт, при этом транзакции с более высокой оплатой добавляются последовательно, пока не будет заполнено все доступное пространство.
Начиная с версии Bitcoin Core 0.9, минимальная комиссия (в настоящее время 1000 сатоши) требовалась для трансляции транзакции по сети. Любая транзакция, оплачивающая только минимальную комиссию, должна ждать долгое время, прежде чем в блоке будет достаточно свободного места для его включения.Пожалуйста, прочтите раздел подтверждения платежа, чтобы узнать, почему это может быть важно.
Поскольку каждая транзакция расходует неизрасходованные выходы транзакции (UTXO) и поскольку UTXO может быть потрачена только один раз, полная стоимость включенных UTXO должна быть потрачена или передана майнеру в качестве комиссии за транзакцию. Немногие люди будут иметь UTXO, которые точно соответствуют сумме, которую они хотят заплатить, поэтому большинство транзакций включают вывод изменений.
Выходы изменений — это обычные выходы, которые тратят излишки сатоши от UTXO обратно к спонсору.Они могут повторно использовать тот же хеш P2PKH pubkey или хеш скрипта P2SH, который использовался в UTXO, но по причинам, описанным в следующем подразделе, настоятельно рекомендуется отправлять выходные данные изменений на новый адрес P2PKH или P2SH.
Как избежать повторного использования ключей
В транзакции и спонсор, и получатель раскрывают друг другу все открытые ключи или адреса, используемые в транзакции. Это позволяет любому человеку использовать общедоступную цепочку блоков для отслеживания прошлых и будущих транзакций с использованием тех же открытых ключей или адресов другого человека.
Если один и тот же открытый ключ часто используется повторно, как это происходит, когда люди используют биткойн-адреса (хешированные открытые ключи) в качестве статических платежных адресов, другие люди могут легко отслеживать привычки получения и расходования этого человека, включая то, сколько сатоши они контролируют в известных адресах. .
Так не должно быть. Если каждый открытый ключ используется ровно дважды — один раз для получения платежа и один раз для его расходования, пользователь может получить значительную финансовую конфиденциальность.
Еще лучше то, что использование новых открытых ключей или уникальных адресов при приеме платежей или создании выходных данных изменений можно комбинировать с другими методами, обсуждаемыми позже, такими как CoinJoin или предотвращение слияния, чтобы чрезвычайно затруднить использование цепочки блоков отдельно для надежного отслеживания того, как пользователи получают и тратят свои сатоши.
Предотвращение повторного использования ключей также может обеспечить защиту от атак, которые могут позволить реконструировать закрытые ключи из открытых ключей (предположительно) или из сравнения сигнатур (возможно сегодня при определенных обстоятельствах, описанных ниже, с предположением более общих атак).
Уникальные (не используемые повторно) адреса P2PKH и P2SH защищают от атак первого типа, сохраняя открытые ключи ECDSA скрытыми (хешированными) до тех пор, пока не будут израсходованы сатоши, отправленные на эти адреса в первый раз, поэтому атаки фактически бесполезны, если они не могут быть восстановлены закрытые ключи менее чем за час или два требуется, чтобы транзакция была надежно защищена цепочкой блоков.
Уникальные (не используемые повторно) закрытые ключи защищают от второго типа атак путем создания только одной подписи для каждого закрытого ключа, поэтому злоумышленники никогда не получают последующую подпись для использования в атаках на основе сравнения. Существующие атаки, основанные на сравнении, сегодня практичны только тогда, когда при подписании используется недостаточная энтропия или когда используемая энтропия раскрывается некоторыми средствами, такими как атака по побочному каналу.
Итак, как для обеспечения конфиденциальности, так и для безопасности, мы рекомендуем вам создавать свои приложения, чтобы избежать повторного использования открытых ключей и, по возможности, отговорить пользователей от повторного использования адресов.Если вашему приложению необходимо предоставить фиксированный URI, на который должны отправляться платежи, см. Раздел URI «биткойн:» ниже.
Гибкость транзакции
Ни один из типов хэшей подписи Биткойн не защищает сценарий подписи, оставляя дверь открытой для ограниченной атаки отказа в обслуживании, называемой транзакционной гибкостью {:. Term} {: # term-transaction-malleability}. Сценарий подписи содержит подпись secp256k1, которая не может подписывать сама себя, что позволяет злоумышленникам вносить нефункциональные изменения в транзакцию, не делая ее недействительной.Например, злоумышленник может добавить некоторые данные в сценарий подписи, которые будут удалены до обработки предыдущего сценария pubkey.
Хотя модификации нефункциональны — поэтому они не меняют ни какие входы использует транзакция, ни какие выходы она платит, — они все же изменяют вычисленный хэш транзакции. Поскольку каждая транзакция связана с предыдущими транзакциями, используя хеши в качестве идентификатора транзакции (txid), измененная транзакция не будет иметь txid, ожидаемого ее создателем.
Это не проблема для большинства биткойн-транзакций, которые предназначены для немедленного добавления в цепочку блоков. Но это становится проблемой, когда выходные данные транзакции тратятся до того, как транзакция добавляется в цепочку блоков.
Разработчики
Биткойн работают над снижением гибкости транзакций среди стандартных типов транзакций, одним из результатов этих усилий является BIP 141: Segregated Witness, который поддерживается Bitcoin Core и был активирован в августе 2017 года.Когда SegWit не используется, новые транзакции не должны зависеть от предыдущих транзакций, которые еще не были добавлены в цепочку блоков, особенно если на карту поставлены большие суммы сатоши.
Гибкость транзакций также влияет на отслеживание платежей. Интерфейс RPC Bitcoin Core позволяет отслеживать транзакции по их txid — но если этот txid изменится из-за изменения транзакции, может показаться, что транзакция исчезла из сети.
Современные передовые практики отслеживания транзакций диктуют, что транзакция должна отслеживаться с помощью выходных данных транзакции (UTXO), которые она использует в качестве входных, поскольку их нельзя изменить, не аннулируя транзакцию.
Передовой опыт далее диктует, что если транзакция действительно исчезает из сети и ее необходимо повторно выпустить, ее следует повторно выпустить таким образом, чтобы сделать потерянную транзакцию недействительной. Один из методов, который всегда будет работать, — убедиться, что повторно выписанный платеж расходует все те же выходы, что и потерянная транзакция, использованная в качестве входов.
Как работают биткойн-транзакции?
У вас, вероятно, есть много вопросов о биткойнах — большинство людей задают их. Криптовалюта и лежащая в ее основе технология блокчейна представляют собой сложные технические концепции даже для людей, зарабатывающих на жизнь написанием компьютерного кода.Если вы находите понятие криптовалюты сбивающим с толку, вы не одиноки. К счастью, вы можете использовать эту технологию и извлекать выгоду из криптовалюты, не владея ею. Однако вы должны понимать, как работают транзакции. Итак, с чего мы начинаем: как работают биткойн-транзакции?
The Rundown
Перевод биткойн-средств от одного пользователя к другому начинается с отправки запроса на транзакцию. Это можно сделать на вашем компьютере или через мобильное приложение.Узлы — другие компьютеры в сети блокчейн — проверяют детали транзакции. Биткойн-транзакции состоят из трех отдельных элементов — ввода (отправитель), заголовка (информация о транзакции и средствах) и вывода (информация о получателе).
После проверки этих элементов транзакция утверждается, средства переводятся, и транзакция становится частью публичной книги Биткойна. Каждая транзакция проходит 6 подтверждений до полной проверки. Весь процесс может занять от 10 минут до 16 часов.
У вас может сложиться впечатление, что в этот электронный процесс легко вмешаться. Но прелесть Биткойна в том, что его транзакции надежны. Систему не могут обмануть третьи стороны, потому что процесс транзакции биткойнов основан на технологии блокчейн и имеет строгие требования к аутентификации.
Этот общий обзор транзакций Биткойн служит отличной отправной точкой для более сложных технических вопросов, связанных с процессом.
Углубление в процесс транзакции
Кошельки и ключи: Все транзакции BTC — это переводы между кошельками Bitcoin.Эти кошельки с криптовалютой на самом деле не хранят ваши биткойны. Вместо этого они хранят ваши публичные и частные криптографические ключи, которые хранят записи обо всех ваших транзакциях. Ваш открытый ключ также известен как ваш адрес в блокчейне Биткойн — строка из 34 символов, которая видна всем. Открытый ключ не подрывает вашу безопасность и не угрожает вашим средствам. Это потому, что каждый открытый ключ имеет соответствующий закрытый ключ, состоящий из 64 символов. Для декодирования сообщения вам понадобятся как открытый, так и закрытый ключи, что по сути и является транзакцией.
Отправителю нужен только открытый ключ для идентификации получателя средств. Сообщение может быть расшифровано — полученные средства — лицом, имеющим соответствующий закрытый ключ. Поэтому крайне важно, чтобы ваш закрытый ключ оставался конфиденциальным. Любой, у кого есть доступ к вашему 64-символьному закрытому ключу, также имеет доступ к вашим биткойн-средствам.
Экономика Биткойна полагается на кошельки и ключи для сбора и проверки информации о транзакциях Биткойн . Кошельки часто реализуются как служебные программы, которые хранят информацию и обрабатывают передачу данных с помощью базового блокчейна Биткойна, распределенной базы данных с тысячами копий.Мы рекомендуем использовать надежный кошелек. Существует множество ужасных историй о людях, случайно выбрасывающих жесткие диски с небольшими биткойн-состояниями, потому что они полагались на программное обеспечение для хранения своих закрытых ключей и не имели копий, записанных где-либо еще.
Каждая транзакция BTC должна быть подписана, чтобы быть действительной. Программное обеспечение Биткойн создает цифровую подпись на основе вашего закрытого ключа и деталей транзакции. Эта подпись действует как доказательство того, что вы владеете закрытым ключом (не раскрывая его никому в сети), и защищает вас от возможного вмешательства.Информация о вашей биткойн-транзакции проверена, и все узлы в сети гарантируют, что вы авторизовали транзакцию без какого-либо риска для вашей безопасности и средств.
Узлы: Транзакции проверяются майнерами, использующими полные узлы. Сеть Биткойн не контролируется центральным финансовым учреждением, регулирующим транзакции — это одна из революционных идей, лежащих в основе Биткойна.
Сеть — это одноранговая система, в которой узлы выполняют важные функции обслуживания.Полные узлы управляются добровольцами, которые используют свои компьютеры и пропускную способность для выполнения жизненно важных функций. Сканируя, проверяя и распространяя копии реестра блокчейна, они действуют как средство проверки транзакций Биткойн.
Блокчейн и хэш-функции : Вот тут-то и становится интересно. Вы можете думать о сети блокчейнов как о распределенной базе данных. По сути, это набор регистров транзакций, распределенных по всей сети. Узлы содержат копии реестра и проверяют действительность транзакций, проверяя предыдущие записи в книге.
Каждая транзакция, начиная с первого блока генезиса, записывается в цепочку блоков. Все транзакции документируются с помощью хеш-функций — расшифрованных указателей на предыдущий блок в цепочке.
Каждая новая транзакция блокчейна содержит хешированные данные из предыдущих транзакций. Если кто-то попытается подделать детали транзакции, ему придется вычислить новые криптографические хэши и изменить их во всех предыдущих записях. В качестве дополнительного уровня безопасности добавляется одноразовый номер.Это произвольное число может быть использовано только один раз в криптографической коммуникации, и все хэши заканчиваются двумя нулями. Любой злоумышленник, пытающийся обмануть систему, должен не только изменить все предыдущие хэши, но и вычислить одноразовые числа.
Даже если кому-то действительно удастся изменить всю цепочку блоков, чтобы приспособиться к их фиктивной транзакции, он все равно не сможет обмануть систему — благодаря узлам.
Насчитывая около 10 000 по всему миру, узлы представляют собой ПК в сети цепочки блоков, которые сканируют все транзакции и сравнивают их со своими собственными копиями цепочки блоков.Этот процесс обеспечивает действительность всех ожидающих транзакций биткойнов. После того, как узлы завершили сканирование, происходит своего рода цифровое голосование. Если большинство считает транзакцию законной, она утверждается, и средства переводятся.
Лист бухгалтерской книги, содержащий около 3500 транзакций, называется блоком. Вся система взаимосвязанных блоков представляет собой блокчейн. Блоки обновляются автоматически каждые 10 минут, после чего никакие изменения не могут быть внесены задним числом.
Мы начали с вопроса, как работают биткойн-транзакции.К настоящему времени вы должны гораздо лучше понимать этот сложный процесс. Технология блокчейн обычно сложнее всего для понимания. Вот краткое описание того, как работают блокчейны.
- Блокчейн Биткойн — это распределенная сеть регистров, содержащих данные транзакций Биткойна.
- Один блок — это одна электронная таблица, содержащая около 3600 транзакций.
- Система взаимосвязанных блоков называется блокчейн.
- Все детали транзакции Биткойн представлены в виде криптографически сгенерированных 64-символьных последовательностей, генерируемых хеш-функцией.
- Даже малейшие изменения любого бита данных производят совершенно другой хэш, служащий защитой от несанкционированного доступа.
- Входные данные для функции хеширования включают хэш предыдущего блока в цепочке, что означает, что любая попытка модификации будет видна немедленно. Добавлен одноразовый номер, чтобы еще больше усложнить обратное изменение.
- Все транзакции Биткойн проверяются узлами, которые проверяют целостность транзакции, сравнивая ее со своими копиями цепочки блоков.
- Live Bitcoin транзакций одобряются, когда узлы соглашаются, что это законно.
- Блокчейн автоматически обновляется каждые 10 минут, после чего нельзя вносить изменения в предыдущие транзакции.
- Блокчейн Биткойн — это распределенная сеть регистров, содержащих данные транзакций Биткойна.
- Один блок — это одна электронная таблица, содержащая около 3600 транзакций.
- Система взаимосвязанных блоков называется блокчейн.
- Все детали транзакции Биткойн представлены в виде криптографически сгенерированных 64-символьных последовательностей, генерируемых хеш-функцией.
- Даже малейшие изменения любого бита данных производят совершенно другой хэш, служащий защитой от несанкционированного доступа.
- Входные данные для функции хеширования включают хэш предыдущего блока в цепочке, что означает, что любая попытка модификации будет видна немедленно. Добавлен одноразовый номер, чтобы еще больше усложнить обратное изменение.
- Все транзакции Биткойн проверяются узлами, которые проверяют целостность транзакции, сравнивая ее со своими копиями цепочки блоков.
- Live Bitcoin транзакций одобряются, когда узлы соглашаются, что это законно.
- Блокчейн автоматически обновляется каждые 10 минут, после чего нельзя вносить изменения в предыдущие транзакции.
Элементы каждой биткойн-транзакции
Теперь, когда мы демистифицировали технологию блокчейн, мы можем взглянуть на конкретные элементы каждой биткойн-транзакции.
Ввод и вывод : Ваш электронный кошелек не хранит ваши биткойны.Вместо этого он содержит закрытый ключ, который дает вам доступ к вашему биткойн-адресу. Вы никогда не получите Биткойн. У вас просто есть доказательства транзакций — банковские выписки, если хотите. Входящие транзакции называются входами.
Например, если кто-то осуществил перевод 5 BTC на ваш адрес, адрес отправителя будет зарегистрирован в сети как входной, а ваш адрес будет зарегистрирован как выход. Введенные данные служат доказательством того, что вы получили 5 BTC.
Предположим, вы хотите отправить 4 BTC из суммы, которую вы только что получили, кому-то еще. Во-первых, ваш адрес регистрируется как ввод, а адрес получателя как вывод. Но как вы можете отправить 4 BTC, если у вас есть ввод, показывающий, что вы получили 5 BTC? Вход не может быть сокращен до 4 BTC. Вместо этого через систему будет отправлено 5 BTC, а 1 BTC за вычетом комиссии за майнинг будет возвращен на ваш адрес после транзакции.
Этот возврат обрабатывается сетью и отправляется на другой из ваших адресов.Это неизбежно приводит к тому, что ваш кошелек имеет несколько адресов из-за огромного количества транзакций Биткойн. После того, как вы отправляете запрос на транзакцию, программное обеспечение объединяет разные адреса, чтобы получить необходимую сумму средств для транзакции. Хотя все это можно сделать вручную, на практике каждый использует электронный кошелек.
Как отправлять средства через программное обеспечение биткойн-кошелька
Теперь, когда у вас есть все теоретические знания о биткойн-транзакциях, давайте посмотрим, как транзакция проводится на практике.
Шаг 1: Откройте программное обеспечение биткойн-кошелька.
Шаг 2: Получите адрес кошелька получателя. Вы можете скопировать его или отсканировать QR-код.
Шаг 3: Введите сумму, которую вы хотите отправить, и комиссию майнера. Комиссия служит стимулом для майнеров, которые подтверждают платежи в биткойнах и добавляют их в блокчейн. Большинство программ для электронных кошельков автоматически предлагают соответствующую комиссию майнера.
Шаг 4: Процесс майнинга начинает вычисление хэша.
Шаг 5: Майнеры добавляют транзакцию в следующий блок, который будет отчеканен.
Шаг 6: Транзакции хранятся в так называемом мемпуле. Здесь ожидающие транзакции ждут, пока майнеры с полными узлами добавят их в блок. Майнеры решают, какие транзакции Биткойн в реальном времени будут обработаны в первую очередь, на основе выделенных комиссий.
Шаг 7: Транзакция проверяется узлами.
Шаг 8: Программное обеспечение кошелька подписывает вашу транзакцию с помощью вашего личного закрытого ключа.
Шаг 9: Первый майнер, чья установка для майнинга решает необходимую математическую задачу, добавляет блок, включая вашу транзакцию, в сеть.
Шаг 10: Узлы проверяют и передают блок в сеть.
Шаг 11: Получатель видит первое подтверждение транзакции.
Сколько времени занимают транзакции в биткойнах ?
Объяснив процесс биткойн-транзакции, давайте посмотрим, сколько времени занимает эта процедура.На время обработки влияют два основных фактора: количество транзакций и комиссия майнера. Так почему же транзакции биткойнов занимают так много времени?
Биткойн-транзакции могут занять от 10 минут до 24 часов. Более длительное время обработки происходит в периоды больших объемов торгов. Это часто вызвано потрясениями на рынке биткойнов или в экономике в целом. Поскольку количество майнеров ограничено, большое количество транзакций приводит к более длительным периодам ожидания.
В большинстве случаев комиссия майнера определяет, как долго вы ждете, пока ваша транзакция будет обработана.Знание того, как работает вся система Биткойн, имеет решающее значение для понимания того, как комиссии майнеров влияют на время подтверждения биткойнов.
Наиболее важной характеристикой
Биткойн является то, что он децентрализован. В отсутствие центрального финансового учреждения, контролирующего и регулирующего систему, сеть Биткойн полагается на P2P и группу добровольцев для поддержания системы в рабочем состоянии. Запущенные узлы и майнинг выполняются людьми, не имеющими иерархической системы.
Однако это не означает, что они не получают компенсацию за свою работу.При отправке биткойнов мы платим дополнительную плату, которая стимулирует майнеров добавлять наши транзакции в блоки. Более высокие комиссии побуждают майнеров отдавать предпочтение отдельным транзакциям.
Что такое биткойн-майнинг?
Итак: как работает биткойн? Важный аспект всей экосистемы Биткойн. Биткойн-майнинг. Эта важная практика вводит на рынок новую валюту.
Майнинг относится к добровольной практике, при которой майнеры, запускающие узлы в цепочке блоков, создают новые блоки, в которые они добавляют предстоящие транзакции Биткойн.Майнеры направляют вычислительную мощность своих компьютеров на решение сложных математических задач, которые людям слишком сложно решать вручную.
Система полагается на метод, называемый доказательством работы. Это гарантирует, что процесс добычи новых блоков будет достаточно сложным, чтобы сохранить баланс рынка. Но это не слишком сложно, чтобы не мешать людям участвовать или замедлять транзакции.
Учитывая, что в день совершаются тысячи биткойн-транзакций, майнеры играют решающую роль в этой экономике.Майнинг проверяет целостность новых транзакций, добавляя их в блокчейн. Он также производит новые биткойны, которые поступают в обращение.
Помимо комиссий майнеров, майнеры имеют право на получение вознаграждения за блок: часть вновь созданного Биткойна, которая поставляется с вновь добытыми блоками.
Сложность майнинга
Сложность майнинга означает, насколько сложно майнерам решать требуемые математические уравнения. Уровень сложности зависит от количества майнеров, активных в любой момент времени.По мере увеличения числа майнеров, соревнующихся за создание хэша Биткойн, система адаптируется и повышает уровни сложности.
Когда количество созданных блоков уменьшается из-за уровня сложности или меньшего количества майнеров, уровни сложности корректируются. Сложность корректируется каждые 2016 блоков, что обычно составляет около двух недель.
Как работают биткойн-транзакции, когда дело касается майнинга? Вам не обязательно быть экспертом в этом вопросе, но знания о майнинге помогут вам лучше понять процесс в целом и его надежность.
Майнинг — это в основном соревнование. Майнеры соревнуются между собой, чтобы вычислить правильный хеш.
Биткойн изначально добывался на процессорах. Но биткойн-майнеры быстро поняли, что они могут получить больше мощности от графических процессоров на графических картах высокопроизводительных систем. Сегодня на рынке преобладают специализированные интегральные схемы — компьютеры, созданные специально для майнинга. Майнеры, использующие ASIC, обычно формируют пулы для майнинга, объединяя свои ресурсы для добычи вместе и распределяя вознаграждение.
Единственный эффективный метод увеличения баланса биткойнов за счет майнинга — это инвестирование в ASIC, которые могут стоить до нескольких тысяч долларов. С другой стороны, без этой технологии майнинг просто не окупается.
Мы завершаем биткойн вдвое. Это процесс, который происходит каждые 210 000 блоков — примерно раз в четыре года. По сути, это вдвое уменьшает последующее вознаграждение, получаемое за выполнение блоков, и количество произведенных биткойнов.
Со временем майнинг становится все менее выгодным, и биткойны становится труднее получить.Система существует потому, что существует верхний предел того, сколько биткойнов можно добыть в целом — 21000000. Но не волнуйтесь. По оценкам, последний биткойн будет добыт в 2140 году.
Мы начали с вопроса, как работают биткойн-транзакции? Предоставленная нами информация поможет вам разобраться в этом печально сложном процессе. Обладая этими знаниями, вы можете вступить в революционную мировую цифровую валюту. Даже если вы не планируете становиться майнером, биткойн можно использовать для всего, от покупок в Интернете до азартных игр — с дополнительным преимуществом анонимности.Каким бы ни было будущее этой цифровой валюты, Биткойн навсегда изменил наше представление о валютах и экономике в целом.
Сколько времени занимает транзакция с биткойнами?
Не секрет, что время блока биткойнов составляет 10 минут.
Но задумывались ли вы, почему для успешного подтверждения транзакции биткойнов требуется более 10 минут?
Думаю, нет !!
Я знаю, что вы занятой мужчина (или женщина), но много раз получателей биткойнов обманывали из-за их незнания по этой простой теме.
Вот почему я считаю своей обязанностью предупредить вас и убедиться, что вы больше не совершите такие глупые ошибки.
Итак, в этом посте мы собираемся узнать, каково идеальное время транзакции / подтверждения биткойнов и что делать, если транзакции застревают на долгие часы?
Итак, давайте углубимся в это:
Что такое время подтверждения транзакции биткойнов?
Для тех, кто не знает:
Биткойн-транзакции не подтверждаются и не завершаются мгновенно.
Эти транзакции сначала поступают в пул неподтвержденных транзакций, называемый биткойн-мемпулом, откуда майнеры получают эти транзакции. Вот почему нужно подождать не менее 10 минут, чтобы получить первое подтверждение транзакции Биткойн.
В любом случае, среднее время, необходимое биткойн-транзакции для подтверждения, составляет 10 минут, и это потому, что время блокировки биткойна составляет 10 минут.
Но это не всегда так, потому что подтверждение транзакции биткойнов может занять до нескольких часов, а иногда даже дней после того, как вы совершили транзакцию.
Думаете, я преувеличиваю?
Ну, нет !!
Это может произойти из-за множества факторов, которые мы собираемся обсудить в следующем разделе.
Что определяет скорость транзакции биткойнов или время передачи биткойнов?
Скорость транзакций биткойнов зависит от многих факторов, и из них эти два фактора очень важны для времени передачи биткойнов:
Перегрузку или загрузку блокчейна Биткойна можно увидеть в режиме реального времени, отслеживая мемпул.На момент написания в сети присутствует множество неподтвержденных транзакций.
Но само собой разумеется, что чем больше количество неподтвержденных транзакций, тем больше времени потребуется блокчейну для их подтверждения.
В конце концов, у нас ограниченное пространство и ограниченная пропускная способность в цепочке, поскольку она может включать транзакции только на 1 МБ каждые 10 минут.
И из-за конструкции Биткойна только один майнер может добавлять блок каждые 10 минут, независимо от того, сколько у него / нее мощности майнинга.(См. Наше руководство по Bitcoin Mining )
Более того, майнеры обязаны действовать таким образом, чтобы стимулировать их больше всего, и в случае майнинга эти майнеры предпочитают сначала выполнять те транзакции, к которым привязана большая комиссия за транзакции.
Если вы не знаете:
Майнеры получают 12,5 BTC плюс «X» комиссии за майнинг блоков за свою работу. И если вы видите, здесь вознаграждение в размере 12,5 BTC является фиксированным для всех майнеров, но размер комиссии за майнинг блоков «X» варьируется.
Таким образом, чем выше сумма «X», тем выше доход / вознаграждение для майнеров за майнинг успешного блока.
Я знаю, что вы думаете, как плата за майнинг блока связана с тем, что ваша транзакция не выбирается из мемпула?
Ну, для этого давайте разберемся, сначала плата за майнинг блока,
Блок
— это просто набор транзакций, и каждая транзакция связана с комиссией за транзакцию. А сумма комиссий за транзакции, связанных с отдельными транзакциями, которые майнер ввел в свой блок, называется «комиссией за майнинг блока.’
Итак, представьте на мгновение, что вы майнер биткойнов.
Что бы вы сделали?
Что ж, если я майнер, я бы попытался максимизировать сумму «X», всегда забирая эти транзакции из мемпула, к которому привязаны более высокие комиссии за транзакции, чтобы я мог получить больше комиссий за майнинг блоков в качестве вознаграждения.
Следовательно, для майнеров имеет экономический смысл сначала забирать эти транзакции из мемпула, к которому привязаны более высокие комиссии.
И майнеры довольно активны в этом, поскольку все майнеры хранят свой мемпул в порядке убывания комиссий за транзакции (комиссии мемпула биткойнов), прикрепленных к нему.
Это одна из основных причин, по которым ваши подтверждения биткойнов занимают несколько часов и застревают в мемпуле, поскольку ваша комиссия слишком мала, чтобы ее могли заметить майнеры.
Сколько биткойн-подтверждений достаточно для транзакции?
Вообще говоря, рекомендуется «6 подтверждений», и многие считают, что этого достаточно, чтобы убедиться, что транзакция Биткойн прошла успешно.
Этот предел «6 подтверждений» даже рекомендован Сатоши Накамото, создателем Биткойна, потому что после шести подтверждений получатель может быть уверен, что биткойны, которые он получил, не являются дважды потраченными .
Но, как мы знаем, подтверждение биткойнов займет минимум 10 минут, и, следовательно, для шести подтверждений нужно подождать не менее 60 минут (при условии, что транзакция будет включена в следующий блок)
Но это идеальный сценарий, который часто отличается от реальности, потому что существует достаточно шансов, что ваша транзакция не будет включена в следующий блок.
Вот среднее время, в течение которого транзакция будет принята в добытый блок и добавлена в публичный реестр (примечание: включает только транзакции с комиссией майнера).
Вот общее среднее время подтверждения в блокчейне Биткойна:
Кроме того, эти подтверждения представляют собой не что иное, как количество блоков, добавленных после включения вашей транзакции в цепочку, а первое подтверждение означает, что ваша транзакция включена в самый последний добытый блок.
И поскольку блоки обнаруживаются после недавно добытого блока, количество подтверждений для вашей транзакции будет продолжать увеличиваться до «6 подтверждений» или более.Проверьте эту транзакцию сейчас, и вы увидите более 6 подтверждений по ней: 3230b0b9c0bd5cd196cc23b1e5bf4b41604b31e04bc9d9f5071cfa8117ba70a9
Есть ли какой-либо калькулятор / оценщик времени транзакции / подтверждения биткойнов?
Да, конечно, есть несколько оценщиков времени транзакции биткойнов, которые вы можете использовать, но все они полагаются на комиссию за транзакцию биткойнов, которую вы приложили к этой конкретной транзакции.
Итак, допустим, вы прикрепили «X» сатоши / байт комиссионных за транзакцию биткойн, тогда вы можете очень хорошо рассчитать, сколько времени (или сколько блоков) вам нужно будет ждать, прежде чем получить первое подтверждение.
См. Этот оценщик, который сообщает вам на основе сборов сатоши / байтов, сколько времени и сколько блоков нужно ждать:
Итак, согласно этому оценщику, если вы используете 14 сатоши / байт комиссионных или более, вы будете включены в следующий немедленный блок, и менее чем через 30 минут вы получите подтверждение.
Принимая во внимание, что если вы используете 3 сатоши / байт комиссий, вы можете быть включены во второй блок, а если комиссии ниже, вам может потребоваться подождать еще 3-4 блока, чтобы быть включенными в блок биткойнов.
Таким образом, вы можете легко рассчитать приблизительное время подтверждения биткойнов и точно знать , сколько времени занимает биткойн для передачи?
Что делать, если транзакции с биткойнами занимают много времени?
Но я использую этот оценщик времени до совершения транзакции, потому что таким образом я могу определить соответствующие комиссии за транзакцию и, следовательно, сократить ожидаемое время подтверждения.
Я подробно объяснил этот метод в своей статье « Руководство для начинающих по комиссиям за транзакции биткойнов для быстрого подтверждения».’
Я также знаю, что вы хотите знать, что нужно делать, если ваша транзакция застревает на долгое время.
На самом деле, есть несколько вещей, которые вы можете сделать, когда ваша транзакция зависла, например:
Конечно, эти методы специфичны для биткойнов и должны использоваться, когда ваша транзакция зависает на много часов.
Но с другой стороны, если у вас нет технической компетенции для выполнения этих действий, вы можете оставить транзакцию на 72 часа, и сеть автоматически отменит транзакцию и вернет ваши монеты в ваш биткойн-кошелек.
Заключение: Сколько времени занимает перевод биткойнов?
Теперь я знаю, что вы, должно быть, думаете, если столько времени занимают транзакции с биткойнами, то как их можно использовать в качестве валюты?
Ну, именно так думают и разработчики биткойнов, и именно поэтому они работают над такими технологиями, как Segwit, Schnorr Signatures и Lightning network, чтобы транзакции биткойнов выполнялись практически мгновенно.
Но к этому предстоит долгий путь, поскольку сеть Lightning недавно начала получать поддержку от сообщества, а проникновение Segwit также увеличилось.
И я верю, что, когда эти технологии работают на полную мощность, вопросы типа «сколько времени требуется для подтверждения транзакций с биткойнами?» или «сколько времени занимает передача биткойнов?» уйдут в прошлое.
Но на данный момент, если вы хотите совершить транзакцию в основной цепочке Биткойна, вам нужно подождать не менее 60 минут, прежде чем вы сможете заявить, что ваша транзакция успешна на 100%.
Итак, это все, что я сегодня написал в этом руководстве по времени транзакций биткойнов, и я очень скоро вернусь с другими такими интересными и знающими темами о биткойнах.
До тех пор продолжайте учиться и продолжайте разделять любовь к биткойнам с TheMoneyMongers
И поделитесь этой статьей со своими друзьями в социальных сетях !!
Bitcoin Core :: listtransactions (0,17,99 RPC)
- О компании
- О нас
- Команда
- Спонсорство
- программа
- FAQ
- Скачать
- блог
- релизов
- Часто задаваемые вопросы
- Увеличение емкости
- Сегвит
- Руководство разработчика Segwit
- Включение RBF
- Компактные блоки
- Биты версии (BIP9)
- Руководство по обновлению Segwit
- Развитие
- внести
- код участника
- встреч
- Поддерживаемые BIP
- Жизненный цикл
5.Транзакции — Освоение биткойнов [Книга]
Транзакции — самая важная часть системы биткойнов. Все остальное в биткойне предназначено для обеспечения того, чтобы транзакции можно было создавать, распространять в сети, проверять и, наконец, добавлять в глобальный реестр транзакций (цепочку блоков). Транзакции — это структуры данных, которые кодируют передачу стоимости между участниками системы биткойнов. Каждая транзакция является публичной записью в блокчейне биткойна, глобальной бухгалтерской книге с двойной записью.
В этой главе мы рассмотрим все различные формы транзакций, что они содержат, как их создавать, как они проверяются и как они становятся частью постоянной записи всех транзакций.
Жизненный цикл транзакции начинается с создания транзакции, также известного как происхождение . Затем транзакция подписывается одной или несколькими подписями, указывающими на разрешение расходовать средства, указанные в транзакции. Затем транзакция транслируется в сети биткойнов, где каждый сетевой узел (участник) проверяет и распространяет транзакцию, пока она не достигнет (почти) каждого узла в сети.Наконец, транзакция проверяется узлом майнинга и включается в блок транзакций, который записывается в цепочку блоков.
После записи в цепочку блоков и подтверждения достаточным количеством последующих блоков (подтверждений) транзакция является постоянной частью реестра биткойнов и принимается как действительная для всех участников. Средства, выделенные транзакцией новому владельцу, затем могут быть потрачены на новую транзакцию, расширяя цепочку владения и снова начиная жизненный цикл транзакции.
В некотором смысле это помогает думать о транзакции так же, как о бумажном чеке. Как и чек, транзакция — это инструмент, который выражает намерение перевести деньги и не виден финансовой системе, пока не будет отправлен на исполнение. Как и в случае с чеком, отправитель транзакции не обязательно должен подписывать транзакцию.
Транзакции может создавать кто угодно онлайн или офлайн, даже если лицо, создающее транзакцию, не является авторизованным лицом, подписывающим учетную запись.Например, клерк по счетам к оплате может обрабатывать чеки к оплате на подпись генеральным директором. Точно так же клерк по счетам к оплате может создавать биткойн-транзакции, а затем заставлять генерального директора применять цифровые подписи, чтобы сделать их действительными. В то время как чек ссылается на конкретную учетную запись как на источник средств, биткойн-транзакция ссылается на конкретную предыдущую транзакцию в качестве источника, а не на учетную запись.
После создания транзакции она подписывается владельцем (или владельцами) исходных средств.Если он правильно сформирован и подписан, подписанная транзакция теперь действительна и содержит всю информацию, необходимую для выполнения перевода средств. Наконец, действительная транзакция должна достичь сети биткойнов, чтобы ее можно было распространить, пока она не достигнет майнера для включения в публичный реестр (цепочку блоков).
Трансляция транзакций в сеть биткойнов
Во-первых, транзакция должна быть доставлена в сеть биткойнов, чтобы ее можно было распространить и включить в цепочку блоков.По сути, биткойн-транзакция — это всего лишь от 300 до 400 байтов данных, и она должна достигнуть любого из десятков тысяч биткойн-узлов. Отправителям не нужно доверять узлам, которые они используют для широковещательной передачи транзакции, если они используют более одного, чтобы гарантировать ее распространение. Узлам не нужно доверять отправителю или устанавливать «личность» отправителя. Поскольку транзакция подписана и не содержит конфиденциальной информации, закрытых ключей или учетных данных, ее можно публично транслировать с использованием любого удобного базового сетевого транспорта.В отличие от транзакций с кредитными картами, например, которые содержат конфиденциальную информацию и могут быть переданы только в зашифрованных сетях, транзакция биткойнов может быть отправлена по любой сети. Пока транзакция может достичь узла биткойнов, который распространит ее в сеть биткойнов, не имеет значения, как она передается на первый узел.
Биткойн-транзакции могут быть переданы в биткойн-сеть через небезопасные сети, такие как Wi-Fi, Bluetooth, NFC, Chirp, штрих-коды или путем копирования и вставки в веб-форму.В крайних случаях транзакция биткойнов может быть передана по пакетной радиосвязи, спутниковой ретрансляции или коротковолновой передаче с использованием пакетной передачи, расширенного спектра или скачкообразной перестройки частоты, чтобы избежать обнаружения и глушения. Биткойн-транзакцию можно даже закодировать в виде смайлов (смайлов) и опубликовать на общедоступном форуме или отправить в виде текстового сообщения или сообщения в чате Skype. Биткойн превратил деньги в структуру данных, что сделало практически невозможным остановить кого-либо от создания и выполнения биткойн-транзакции.
Распространение транзакций в сети биткойнов
После того, как транзакция биткойна отправлена на любой узел, подключенный к сети биткойнов, транзакция будет подтверждена этим узлом.Если он действителен, этот узел распространит его на другие узлы, к которым он подключен, и сообщение об успешном выполнении будет возвращено синхронно отправителю. Если транзакция недействительна, узел отклонит ее и синхронно вернет сообщение об отклонении отправителю.
Биткойн-сеть является одноранговой сетью, что означает, что каждый биткойн-узел подключен к нескольким другим биткойн-узлам, которые он обнаруживает во время запуска через одноранговый протокол. Вся сеть образует слабо связанную сетку без фиксированной топологии или какой-либо структуры, что делает все узлы равноправными.Сообщения, включая транзакции и блоки, распространяются от каждого узла к одноранговым узлам, к которым он подключен. Новая подтвержденная транзакция, введенная в любой узел в сети, будет отправлена на три-четыре соседних узла, каждый из которых отправит ее еще на три-четыре узла и так далее. Таким образом, в течение нескольких секунд действительная транзакция будет распространяться в виде экспоненциально расширяющейся ряби по сети, пока все подключенные узлы не получат ее.
Биткойн-сеть предназначена для распространения транзакций и блоков на все узлы эффективным и отказоустойчивым способом, устойчивым к атакам.Чтобы предотвратить рассылку спама, атаки типа «отказ в обслуживании» или другие нежелательные атаки на систему биткойнов, каждый узел независимо проверяет каждую транзакцию перед ее дальнейшим распространением. Неправильная транзакция не выйдет за пределы одного узла. Правила проверки транзакций более подробно описаны в разделе «Независимая проверка транзакций».
Транзакция — это структура данных , которая кодирует перевод стоимости из источника средств, называемый входом , в пункт назначения, называемый выходом .Входы и выходы транзакций не связаны с учетными записями или личностями. Вместо этого вы должны думать о них как о количестве биткойнов — кусках биткойнов, заблокированных определенным секретом, который может разблокировать только владелец или человек, который знает секрет. Транзакция содержит ряд полей, как показано в таблице 5-1.
Таблица 5-1. Структура транзакции
Размер | Поле | Описание | |||
4 байта | транзакция следует версии | 9809 | 1–9 байтов (VarInt) | Счетчик входов | Сколько входов включено |
Переменная | Входы | ||||
Входы | Один или несколько входов 1–9 байт (VarInt) | Счетчик выходов | Сколько выходов включено | ||
Переменная | Выходы | 75 выходов Локт ime Временная метка Unix или номер блока |
Выходы и входы транзакций
Основным строительным блоком биткойн-транзакции является неизрасходованный выход транзакции или UTXO.UTXO — это неделимые блоки биткойн-валюты, привязанные к определенному владельцу, записанные в цепочке блоков и распознаваемые как денежные единицы всей сетью. Сеть биткойнов отслеживает все доступные (неизрасходованные) UTXO, которые в настоящее время исчисляются миллионами. Всякий раз, когда пользователь получает биткойн, эта сумма записывается в блокчейне как UTXO. Таким образом, биткойн пользователя может быть разбросан как UTXO среди сотен транзакций и сотен блоков. Фактически не существует такой вещи, как сохраненный баланс биткойн-адреса или учетной записи; есть только разрозненные UTXO, привязанные к конкретным владельцам.Концепция баланса биткойнов пользователя — это производная конструкция, созданная приложением кошелька. Кошелек рассчитывает баланс пользователя, сканируя цепочку блоков и собирая все UTXO, принадлежащие этому пользователю.
Совет
Нет счетов или остатков в биткойнах; есть только неизрасходованных выходов транзакций (UTXO), разбросанных по блокчейну.
UTXO может иметь произвольное значение, кратное сатоши. Точно так же, как доллары можно разделить до двух знаков после запятой, как центы, биткойны можно разделить до восьми знаков после запятой, как сатоши.Хотя UTXO может иметь любое произвольное значение, однажды созданное оно неделимо, как монета, которую нельзя разрезать пополам. Если UTXO больше, чем желаемое значение транзакции, он все равно должен быть использован полностью, и в транзакции должны быть сгенерированы изменения. Другими словами, если у вас есть 20 биткойнов UTXO и вы хотите заплатить 1 биткойн, ваша транзакция должна потреблять все 20 биткойнов UTXO и давать два результата: один платит 1 биткойн вашему желаемому получателю, а другой платит 19 биткойнов в обмен на ваш кошелек.В результате большинство транзакций с биткойнами вызовут изменения.
Представьте себе покупательницу, которая покупает напиток за 1,50 доллара, залезает в бумажник и пытается найти комбинацию монет и банкнот, чтобы покрыть стоимость за 1,50 доллара. Покупатель выберет точную сдачу, если таковая имеется (долларовая банкнота и две четверти), или комбинацию меньшего достоинства (шесть четвертей), или, если необходимо, более крупную денежную единицу, такую как банкнота в пять долларов. Если она отдаст владельцу магазина слишком много денег, скажем 5 долларов, она будет ожидать 3 доллара.50 сдачи, которые она вернет в свой кошелек и будет доступна для будущих транзакций.
Аналогичным образом, транзакция биткойнов должна быть создана из UTXO пользователя в любых номиналах, доступных пользователю. Пользователи не могут разрезать UTXO вдвое больше, чем они могут разрезать долларовую купюру и использовать ее в качестве валюты. Приложение кошелька пользователя обычно выбирает из доступных пользователю UTXO различные единицы, чтобы составить сумму, большую или равную желаемой сумме транзакции.
Как и в реальной жизни, биткойн-приложение может использовать несколько стратегий для удовлетворения суммы покупки: объединение нескольких меньших единиц, поиск точного изменения или использование одной единицы, превышающей стоимость транзакции, и внесение изменений. Вся эта сложная сборка расходуемого UTXO выполняется кошельком пользователя автоматически и невидима для пользователей. Это актуально только в том случае, если вы программно создаете необработанные транзакции из UTXO.
UTXO, потребляемые транзакцией, называются входами транзакции, а UTXO, созданными транзакцией, называются выходами транзакции.Таким образом, части стоимости биткойнов перемещаются от владельца к владельцу в цепочке транзакций, потребляющих и создающих UTXO. Транзакции потребляют UTXO, разблокируя его подписью текущего владельца, и создают UTXO, привязав его к биткойн-адресу нового владельца.
Исключением из цепочки вывода и ввода является специальный тип транзакции, называемый транзакцией coinbase , которая является первой транзакцией в каждом блоке. Эта транзакция размещается там «победившим» майнером и создает новый биткойн, подлежащий выплате этому майнеру в качестве вознаграждения за майнинг.Вот как создается денежная масса биткойна в процессе майнинга, как мы увидим в главе 8.
Tip
Что первично? Входы или выходы, курица или яйцо? Строго говоря, выходы на первом месте, потому что транзакции на базе монет, которые генерируют новый биткойн, не имеют входных данных и создают выходы из ничего.
Каждая биткойн-транзакция создает выходы, которые записываются в регистр биткойнов. Почти все эти выходы, за одним исключением (см. Выход данных (OP_RETURN)), создают расходуемые блоки биткойна, называемые неизрасходованные выходы транзакций или UTXO, которые затем распознаются всей сетью и доступны для владельца для использования в будущей транзакции. .Отправка кому-либо биткойнов создает неизрасходованный выход транзакции (UTXO), зарегистрированный на их адрес и доступный для использования.
UTXO отслеживаются каждым биткойн-клиентом с полным узлом в базе данных, хранящейся в памяти, которая называется набором UTXO или пулом UTXO . Новые транзакции потребляют (расходуют) один или несколько из этих выходов из набора UTXO.
Выходы транзакции состоят из двух частей:
- Количество биткойнов, выраженное в сатоши , наименьшая единица биткойнов.
- Сценарий блокировки , также известный как «обременение», который «блокирует» эту сумму, указывая условия, которые должны быть выполнены, чтобы потратить выходные данные.
Язык сценариев транзакций, используемый в сценарии блокировки, упомянутом ранее, подробно обсуждается в разделе «Сценарии транзакций и язык сценариев».В таблице 5-2 показана структура вывода транзакции.
Таблица 5-2. Структура вывода транзакции
Размер | Поле | Описание |
8 байт | в биткойнах | |
1-9 байтов (VarInt) | Размер сценария блокировки | Длина сценария блокировки в байтах, чтобы следовать |
Сценарий | Сценарий, определяющий условия, необходимые для расходования вывода |
В примере 5-1 мы используем цепочку блоков.info API для поиска неизрасходованных выходов (UTXO) определенного адреса.
Пример 5-1. Скрипт, который вызывает API blockchain.info для поиска UTXO, связанного с адресом
# получение неизрасходованных выходных данных из API блокчейна
импорт
json
импорт
запросов
# пример адреса
адрес
=
'1Dorian4RoXcnBv9hnQ4Y2C1an6NJ4UrjX'
# URL API: https://blockchain.info/unspent?active=
# Возвращает объект JSON со списком "unspent_outputs", содержащим UTXO, например:
# {"unspent_outputs": [
# {
# "tx_hash": "ebadfaa92f1fd29e2fe296eda702c48bd11ffd52313e986e99ddad
62167",
# "tx_index": 51
7,# "tx_output_n": 1,
# "script": "76a9148c7e252f8d64b0b6e313985
0fcfefcf4a2d88ac",
# "значение": 8000000,
# "value_hex": "7a1200",
# "подтверждения": 28691
#},
#...
#]}
или
=
запросов
.
получить
(
'https://blockchain.info/unspent?active=
% s
'
%
адрес
)
utxo_set
=
json
.
загружает
(
или
.
текст
) [
"unspent_outputs"
]
для
utxo
в
utxo_set
:
печать
"
% s
:
% d
-
% ld
Satoshis"
%
(
utxo
'
'
'
'
'
' utxo
[
'tx_output_n'
],
utxo
[
'value'
])
Запустив скрипт, мы видим список идентификаторов транзакций, двоеточие, номер индекса конкретный неизрасходованный выход транзакции (UTXO) и значение этого UTXO в сатоши.Сценарий блокировки не показан в выходных данных в примере 5-2.
Пример 5-2. Запуск сценария get-utxo.py
$
python get-utxo.py ebadfaa92f1fd29e2fe296eda702c48bd11ffd52313e986e99ddad62167: 1 - 8000000 сатоши 6596fd070679de96e405d52b51b8e1d644029108ec4cbfe451454486796a1ecf: 0 - 16050000 сатоши 74d788804e2aae10891d72753d1520da1206e6f4f20481cc1555b7f2cb44aca0: 0 - 5000000 Сатоши b2affea89ff82557c60d635a2a3137b8f88f12ecec85082f7d0a1f82ee203ac4: 0 - 10000000 сатоши ...
Условия расходов (обременения)
Выходные данные транзакции связывают определенную сумму (в сатоши) с конкретным обременением или сценарием блокировки, который определяет условие, которое должно быть выполнено, чтобы потратить эту сумму. В большинстве случаев сценарий блокировки блокирует вывод на конкретный биткойн-адрес, тем самым передавая право собственности на эту сумму новому владельцу. Когда Алиса заплатила Bob’s Cafe за чашку кофе, ее транзакция привела к выводу 0,015 биткойнов , обремененному или привязанному к биткойн-адресу кафе.Эти 0,015 биткойнов были записаны в блокчейне и стали частью набора неизрасходованных транзакций, то есть отображались в кошельке Боба как часть доступного баланса. Когда Боб решает потратить эту сумму, его транзакция снимает обременение, разблокируя выход, предоставляя сценарий разблокировки, содержащий подпись из закрытого ключа Боба.
Проще говоря, входные данные транзакции являются указателями на UTXO. Они указывают на конкретный UTXO по ссылке на хэш транзакции и порядковый номер, где UTXO записывается в цепочке блоков.Для траты UTXO вход транзакции также включает скрипты разблокировки, которые удовлетворяют условиям траты, установленным UTXO. Сценарий разблокировки обычно представляет собой подпись, подтверждающую право собственности на биткойн-адрес, указанный в сценарии блокировки.
Когда пользователи производят платеж, их кошелек создает транзакцию, выбирая из доступного UTXO. Например, для совершения платежа в биткойнах 0,015 приложение кошелька может выбрать UTXO 0,01 и UTXO 0,005, используя их оба для добавления к желаемой сумме платежа.
В примере 5-3 мы показываем использование «жадного» алгоритма для выбора из доступных UTXO, чтобы произвести определенную сумму платежа. В этом примере доступный UTXO предоставляется как постоянный массив, но на самом деле доступный UTXO будет извлекаться с помощью вызова RPC к Bitcoin Core или к стороннему API, как показано в Примере 5-1.
Пример 5-3. Скрипт для расчета общего количества выпущенных биткойнов
# Выбирает выходные данные из списка UTXO с использованием жадного алгоритма.
из
sys
импорт
argv
класс
OutputInfo
:
def
__init__
(
self
,
tx_hash
,
tx_index
,
значение
):
сам
.
tx_hash
=
tx_hash
сам
.
tx_index
=
tx_index
сам
.
значение
=
значение
def
__repr__
(
self
):
возврат
"<
% s
:
% s
с
% s
Satoshis>"
%
(
self
.
9022самостоятельно
.
9022 9022.
tx_index
,
сам
.
значение
)
# Выбрать оптимальные выходы для отправки из списка неизрасходованных выходов.
# Возвращает список вывода и оставшееся изменение для отправки на
# изменить адрес.
def
select_outputs_greedy
(
неизрасходовано
,
min_value
):
# Ошибка, если пусто.
если
нет
неизрасходованные
:
возврат
Нет
# Разделение на 2 списка.
lessers
=
[
utxo
для
utxo
in
неизрасходовано
if
utxo
.
значение
<
min_value
]
больше
=
[
utxo
для
utxo
in
неизрасходовано
if
utxo
.
значение
> =
min_value
]
key_func
=
лямбда
utxo
:
utxo
.
значение
если
больше
:
# Не пусто. Найдите наименьшее большее.
min_greater
=
min
(
больше
)
изменить
=
min_greater
.
значение
-
min_value
возврат
[
min_greater
],
изменение
# Не встречается в больших.Вместо этого попробуйте несколько лессеров.
# Переставьте их от большего к меньшему. Мы хотим использовать как минимум
# Максимальное количество входов.
лессеры
.
сортировать
(
ключ
=
key_func
,
обратный
=
True
)
результат
=
[]
накоп
=
0
для
utxo
в
лессеры
:
счет
.
добавить
(
utxo
)
аккумулятор
+ =
utxo
.
значение
если
накоп
> =
min_value
:
изменить
=
накопить
-
min_value
возврат
результат
,
"Изменить:
% d
Satoshis"
%
изменение
# Ничего не найдено.
возврат
Нет
,
0
по умолчанию
основной
():
неизрасходованные
=
[
OutputInfo
(
"ebadfaa92f1fd29e2fe296eda702c48bd11ffd52313e986e99ddad
62167"
,
1
,
223 8000000 902),
8000000 902
OutputInfo
(
"6596fd070679de96e405d52b51b8e1d644029108ec4cbfe451454486796a1ecf"
,
0
,
0000
0000)
OutputInfo
(
"b2affea89ff82557c60d635a2a3137b8f88f12ecec85082f7d0a1f82ee203ac4"
,
0
,
23, e777d62a0709cf0725e80a7350fdb22d7b8ec6" 000)
OutputInfo
(
"7dbc497969c7475e45d952c4a872e213fb15d45e5cd3473c386a71a1b0c136a1"
,
0
0000),
0
0000,
OutputInfo
(
"55ea01bd7e9afd3d3ab97
,
17
,
3 ,
OutputInfo
(
"12b6a7934c1df821945ee9ee3b3326d07ca7a65fd6416ea44ce8c3db0c078c64"
,
0
,
)
OutputInfo
(
"7f42eda67921ee92eae5f79bd37c68c9cb859b899ce70dba68c48338857b7818"
,
0
,
1610024000
]
если
лен
(
argv
)
>
1
:
цель
=
длинный
(
argv
[
1
])
еще
:
цель
=
55000000
print
«Для суммы транзакции
% d
Satoshis (
% f
bitcoin) используйте:»
%
(
target
,
target
/10902.0
**
8
)
печать
select_outputs_greedy
(
неизрасходованные
,
цель
)
, если
__name__
==
"__main__"
:
main
()
Если мы запустим сценарий select-utxo.py без параметра, он попытается создать набор UTXO (и изменений) для выплаты 55000000 сатоши (0.55 биткойн). Если вы укажете целевую сумму платежа в качестве параметра, сценарий выберет UTXO для выполнения этой целевой суммы платежа. В примере 5-4 мы запускаем скрипт, пытаясь произвести платеж в размере 0,5 биткойна или 50 000 000 сатоши.
Пример 5-4. Запуск сценария select-utxo.py
$ python select-utxo.py 50000000 Для суммы транзакции 50000000 сатоши (0.500000 биткойнов) используйте: ([<7dbc497969c7475e45d952c4a872e213fb15d45e5cd3473c386a71a1b0c136a1: 0 с 25000000 Satoshis>, <7f42eda67921ee92eae5f79bd37c68c9cb859b899ce70dba68c48338857b7818: 0 с 16100000 Satoshis>, <6596fd070679de96e405d52b51b8e1d644029108ec4cbfe451454486796a1ecf: 0 с 16050000 Satoshis>], 'Изменение: 7150000 Satoshis')
После того, как UTXO выбран, бумажник затем производит разблокировку сценарии, содержащие сигнатуры для каждого UTXO, что делает их пригодными для использования, удовлетворяя их условиям сценария блокировки.Кошелек добавляет эти ссылки UTXO и скрипты разблокировки в качестве входных данных для транзакции. В таблице 5-3 показана структура ввода транзакции.
Таблица 5-3. Структура ввода транзакции
Размер | Поле | Описание |
32 байта | 00 Транзакция Hash | |
4 байта | Индекс вывода | Номер индекса UTXO, который должен быть потрачен; первый - 0 |
1-9 байтов (VarInt) | Размер скрипта разблокировки | Длина скрипта разблокировки в байтах, затем |
Разблокирующая переменная -Script | Сценарий, который выполняет условия сценария блокировки UTXO. | |
4 байта | Порядковый номер | Функция замены Tx в настоящее время отключена, установлено значение 0xFFFFFFFF |
Примечание
Порядковый номер транзакции используется до отмены транзакции. времени блокировки транзакции, которая в настоящее время отключена в биткойнах. Большинство транзакций устанавливают это значение на максимальное целочисленное значение (0xFFFFFFFF), и оно игнорируется сетью биткойнов.Если транзакция имеет ненулевое время блокировки, по крайней мере один из ее входов должен иметь порядковый номер ниже 0xFFFFFFFF, чтобы включить время блокировки.
Большинство транзакций включают комиссию за транзакцию, которая компенсирует майнерам биткойнов за обеспечение безопасности сети. Майнинг, а также сборы и вознаграждения, собираемые майнерами, более подробно обсуждаются в главе 8. В этом разделе рассматривается, как транзакционные комиссии включаются в типичную транзакцию. Большинство кошельков автоматически рассчитывают и включают комиссию за транзакцию.Однако, если вы создаете транзакции программно или с помощью интерфейса командной строки, вы должны вручную учитывать и включать эти комиссии.
Комиссионные за транзакции служат стимулом для включения (майнинга) транзакции в следующий блок, а также как сдерживающий фактор против «спамовых» транзакций или любого рода злоупотреблений в системе за счет небольших затрат на каждую транзакцию. Комиссию за транзакцию взимает майнер, который добывает блок, который записывает транзакцию в цепочке блоков.
Комиссия за транзакцию рассчитывается на основе размера транзакции в килобайтах, а не стоимости транзакции в биткойнах. В целом, комиссии за транзакции устанавливаются в зависимости от рыночных сил в сети биткойнов. Майнеры определяют приоритет транзакций на основе множества различных критериев, включая комиссии, и могут даже обрабатывать транзакции бесплатно при определенных обстоятельствах. Комиссия за транзакцию влияет на приоритет обработки, а это означает, что транзакция с достаточной комиссией, вероятно, будет включена в следующий наиболее добываемый блок, в то время как транзакция с недостаточной комиссией или без комиссии может быть отложена и обработана с максимальной эффективностью после нескольких блоки или не обрабатываются совсем.Комиссия за транзакцию не является обязательной, и в конечном итоге транзакция без комиссии может быть обработана; однако включение комиссии за транзакцию способствует приоритетной обработке.
Со временем способ расчета комиссий за транзакции и их влияние на приоритизацию транзакций изменились. Сначала комиссии за транзакции были фиксированными и постоянными во всей сети. Постепенно структура комиссий была смягчена, чтобы на нее могли влиять рыночные силы в зависимости от пропускной способности сети и объема транзакций.Текущая минимальная комиссия за транзакцию установлена на уровне 0,0001 биткойна или десятой милли биткойна за килобайт, недавно снизившись с одного милли биткойна. Большинство транзакций составляют менее одного килобайта; однако те, у которых несколько входов или выходов, могут быть больше. Ожидается, что в будущих версиях протокола биткойнов приложения-кошельки будут использовать статистический анализ для расчета наиболее подходящей платы для присоединения к транзакции на основе средней комиссии за последние транзакции.
Текущий алгоритм, используемый майнерами для определения приоритетности транзакций для включения в блок на основе их комиссий, подробно рассматривается в главе 8.
Добавление комиссий к транзакциям
В структуре данных транзакций нет поля для комиссионных. Вместо этого, сборы подразумеваются как разница между суммой вложенных средств и суммой результатов. Любая лишняя сумма, которая остается после вычета всех выходов из всех входов, является комиссией, взимаемой майнерами.
Комиссия за транзакцию подразумевается как превышение входов минус выходы:
Сборы = Сумма (входы) - Сумма (выходы)
Это несколько сбивающий с толку элемент транзакций и важный момент, который необходимо понять, потому что, если вы создаете свои собственные транзакции, вы должны убедиться, что вы случайно не включили очень большую комиссию из-за недостаточного расходования средств.Это означает, что вы должны учитывать все вводимые данные, если необходимо, путем внесения изменений, иначе вы в конечном итоге дадите майнерам очень большой совет!
Например, если вы потребляете UTXO на 20 биткойнов для совершения платежа в 1 биткойн, вы должны включить вывод сдачи 19 биткойнов обратно в свой кошелек. В противном случае «оставшиеся» 19 биткойнов будут считаться комиссией за транзакцию и будут собраны майнером, который майнит вашу транзакцию в блоке. Хотя вы получите приоритетную обработку и порадует майнера, это, вероятно, не то, что вы планировали.
Предупреждение
Если вы забудете добавить выход изменения в транзакцию, созданную вручную, вы оплатите это изменение как комиссию за транзакцию. "Сдачи не надо!" может быть не тем, что вы хотели.
Давайте посмотрим, как это работает на практике, еще раз посмотрев на покупку кофе Алисой. Алиса хочет потратить 0,015 биткойна на оплату кофе. Чтобы обеспечить своевременную обработку этой транзакции, она захочет включить комиссию за транзакцию, скажем, 0,001. Это будет означать, что общая стоимость транзакции будет равна 0.016. Следовательно, ее кошелек должен быть источником набора UTXO, который в сумме составляет 0,016 биткойна или более, и, при необходимости, вносить изменения. Допустим, в ее кошельке есть UTXO на 0,2 биткойна. Следовательно, ему необходимо будет использовать этот UTXO, создать один выход для Bob’s Cafe за 0,015, а второй выход с 0,184 биткойна в обмен на свой собственный кошелек, оставив 0,001 биткойна нераспределенным в качестве неявной комиссии за транзакцию.
А теперь давайте посмотрим на другой сценарий. Евгения, директор благотворительной организации по работе с детьми на Филиппинах, завершила сбор средств на покупку школьных учебников для детей.Она получила несколько тысяч небольших пожертвований от людей со всего мира на общую сумму 50 биткойнов, поэтому ее кошелек заполнен очень маленькими платежами (UTXO). Теперь она хочет купить сотни школьных учебников у местного издателя, заплатив биткойнами.
Поскольку приложение кошелька Евгении пытается создать одну большую платежную транзакцию, оно должно исходить из доступного набора UTXO, который состоит из множества меньших сумм. Это означает, что результирующая транзакция будет исходить из более чем сотни мелких UTXO в качестве входных данных и только из одного выхода, оплачиваемого издателем книги.Транзакция с таким количеством входов будет больше одного килобайта, возможно, от 2 до 3 килобайт. В результате потребуется более высокая комиссия, чем минимальная сетевая плата в 0,0001 биткойн.
Приложение кошелька Евгении рассчитает соответствующую комиссию, измерив размер транзакции и умножив ее на комиссию за килобайт. Многие кошельки переплачивают комиссию за более крупные транзакции, чтобы обеспечить быструю обработку транзакции. Более высокая комиссия объясняется не тем, что Евгения тратит больше денег, а тем, что ее транзакция более сложна и больше по размеру - комиссия не зависит от стоимости транзакции в биткойнах.
Сцепление транзакций и потерянные транзакции
Как мы видели, транзакции образуют цепочку, в которой одна транзакция расходует выходные данные предыдущей транзакции (известной как родительская) и создает выходные данные для последующей транзакции (известной как дочерняя) . Иногда целая цепочка транзакций, зависящих друг от друга, например, родительская, дочерняя и внучатая транзакции, создается одновременно для выполнения сложного транзакционного рабочего процесса, который требует, чтобы действительные дочерние элементы были подписаны до подписания родительского элемента.Например, это метод, используемый в транзакциях CoinJoin, когда несколько сторон объединяют транзакции вместе, чтобы защитить свою конфиденциальность.
Когда цепочка транзакций передается по сети, они не всегда поступают в одном и том же порядке. Иногда ребенок может прийти раньше родителя. В этом случае узлы, которые сначала видят дочерний элемент, могут видеть, что он ссылается на родительскую транзакцию, которая еще не известна. Вместо того, чтобы отклонять дочерний элемент, они помещают его во временный пул, чтобы дождаться прибытия его родителя и распространить его на все остальные узлы.Пул транзакций без родителей известен как пул потерянных транзакций . После прибытия родителя любые сироты, которые ссылаются на UTXO, созданный родителем, освобождаются из пула, рекурсивно проходят повторную валидацию, а затем вся цепочка транзакций может быть включена в пул транзакций, готовая к добыче в блоке. Цепочки транзакций могут быть сколь угодно длинными, с одновременной передачей любого количества поколений. Механизм удержания сирот в пуле сирот гарантирует, что в противном случае действительные транзакции не будут отклонены только потому, что их родительская транзакция была отложена, и что в конечном итоге цепочка, к которой они принадлежат, будет восстановлена в правильном порядке, независимо от порядка поступления.
Существует ограничение на количество потерянных транзакций, хранящихся в памяти, чтобы предотвратить атаку отказа в обслуживании против узлов биткойнов. Предел определен как MAX_ORPHAN_TRANSACTIONS
в исходном коде эталонного клиента биткойнов. Если количество потерянных транзакций в пуле превышает MAX_ORPHAN_TRANSACTIONS
, одна или несколько случайно выбранных потерянных транзакций исключаются из пула, пока размер пула не вернется в установленные пределы.
Сценарии транзакций и язык сценариев
Клиенты Биткойн проверяют транзакции, выполняя сценарий, написанный на языке сценариев, подобном Forth.На этом языке сценариев написаны как сценарий блокировки (обременение), помещенный в UTXO, так и сценарий разблокировки, который обычно содержит подпись. Когда транзакция подтверждена, сценарий разблокировки на каждом входе выполняется вместе с соответствующим сценарием блокировки, чтобы проверить, удовлетворяет ли он условию расходов.
Сегодня большинство транзакций, обрабатываемых через сеть биткойнов, имеют форму «Алиса платит Бобу» и основаны на том же сценарии, который называется сценарием Pay-to-Public-Key-Hash.Однако использование сценариев для блокировки выходов и разблокировки входов означает, что благодаря использованию языка программирования транзакции могут содержать бесконечное количество условий. Биткойн-транзакции не ограничиваются формой и шаблоном «Алиса платит Бобу».
Это только верхушка айсберга возможностей, которые могут быть выражены с помощью этого языка сценариев. В этом разделе мы продемонстрируем компоненты языка сценариев транзакций биткойнов и покажем, как его можно использовать для выражения сложных условий расходов и как эти условия могут быть выполнены с помощью сценариев разблокировки.
Подсказка
Проверка транзакции Биткойн не основана на статическом шаблоне, а достигается путем выполнения языка сценариев. Этот язык позволяет выражать почти бесконечное множество условий. Вот как биткойн получает силу «программируемых денег».
Построение сценария (блокировка + разблокировка)
Механизм проверки транзакций Биткойн полагается на два типа сценариев для проверки транзакций: сценарий блокировки и сценарий разблокировки.
Сценарий блокировки - это препятствие, накладываемое на вывод, и он определяет условия, которые должны быть выполнены, чтобы использовать вывод в будущем. Исторически сценарий блокировки назывался scriptPubKey , потому что он обычно содержал открытый ключ или биткойн-адрес. В этой книге мы называем это «сценарием блокировки», чтобы признать гораздо более широкий диапазон возможностей этой технологии создания сценариев. В большинстве биткойн-приложений то, что мы называем сценарием блокировки, будет отображаться в исходном коде как scriptPubKey
.
Сценарий разблокировки - это сценарий, который «решает» или удовлетворяет условиям, наложенным на выход сценарием блокировки, и позволяет потратить выходные данные. Сценарии разблокировки являются частью каждой транзакции, и в большинстве случаев они содержат цифровую подпись, созданную кошельком пользователя с его или ее закрытого ключа. Исторически скрипт разблокировки называется scriptSig , потому что обычно он содержит цифровую подпись. В большинстве биткойн-приложений в исходном коде скрипт разблокировки называется scriptSig
.В этой книге мы называем его «сценарием разблокировки», чтобы признать гораздо более широкий диапазон требований к сценариям блокировки, поскольку не все сценарии разблокировки должны содержать подписи.
Каждый биткойн-клиент будет проверять транзакции, выполняя сценарии блокировки и разблокировки вместе. Для каждого входа в транзакции программное обеспечение проверки сначала извлекает UTXO, на который ссылается вход. Этот UTXO содержит сценарий блокировки, определяющий условия, необходимые для его использования. Программное обеспечение проверки затем возьмет сценарий разблокировки, содержащийся во входных данных, который пытается потратить этот UTXO, и выполнит два сценария.
В исходном биткойн-клиенте скрипты разблокировки и блокировки были объединены и выполнялись последовательно. По соображениям безопасности это было изменено в 2010 году из-за уязвимости, которая позволяла некорректному сценарию разблокировки помещать данные в стек и повредить сценарий блокировки. В текущей реализации сценарии выполняются отдельно со стеком, передаваемым между двумя выполнениями, как описано ниже.
Сначала выполняется сценарий разблокировки с использованием механизма выполнения стека.Если сценарий разблокировки выполняется без ошибок (например, в нем не осталось «болтающихся» операторов), копируется основной стек (а не альтернативный стек) и выполняется сценарий блокировки. Если результатом выполнения сценария блокировки с данными стека, скопированными из сценария разблокировки, является «ИСТИНА», сценарий разблокировки преуспел в разрешении условий, налагаемых сценарием блокировки, и, следовательно, входные данные являются действительной авторизацией для использования UTXO.
Добавить комментарий