Цитировать по имени
цитировать ответ
|
Re: Разница между открытым ключом и Bitcoin адрес
- чик - Дэнни, спасибо, вы были более полезны мои вопросы в течение последних нескольких недель. Я пытался получить более глубокое понимание того, как все работает под капотом этого зверя. Могу ли я спросить, кто вы цитируете "обременяет выход с требованием поставить подпись с ключом, который хэшей для данного значения хэш-функции"
В этом обстоятельстве, что отношение данной хэш-значение для адреса назначения? Подпись вы говорите происходит от секретного ключа происхождения продукции, правильно?
Плачу к пабу-ключ-хэшу делает ссылку на хэш ключа паба, но не сам открытый ключ? Я думаю, что это точка PKH?
Есть ли ресурс, который вы можете предложить мне, что охватывает такие вещи весь путь до конца?
благодаря
Шорена проделал очень хорошую работу, отвечать вам на высоком уровне, обычно используемых терминов. Тем не менее, ваши вопросы начинают получать в некоторых довольно сложных деталей протокола Bitcoin таким образом, чтобы понять, как она на самом деле работает собирается потребовать от вас отучиться некоторые вещи, которые большинство людей считают, о Bitcoin. Первое, что нужно понять, что "Bitcoin адрес" это абстракция, которая существует только на уровне интерфейса человека. Мы используем "адреса" чтобы сделать его проще, чтобы обсудить передачу контроля значения с теми, которые на самом деле не заинтересованы в том, что на самом деле происходит. Там нет адреса в сделках или в blockchain. Данные, которые хранятся там просто, как правило, преобразуется в адрес представления, когда это показано для людей. Следующее, что нужно понять, что Bitcoins не "послал" в любом месте. Они, конечно, не посылаются на адрес (так как я только что сказал, адреса не существуют даже на уровне протокола). В самом деле, понятие "Bitcoins" как вещь, которая может быть отправлена только абстракция, которая существует только на уровне интерфейса человека. Мы используем понятие "Bitcoin", а также "Фракции Bitcoins" чтобы сделать его легче обсуждать передачу контроля значения с теми, которые на самом деле не заинтересованы в том, что на самом деле происходит. Там нет ничего, что можно назвать "Bitcoin" или "Satoshi" в сделках или в blockchain. Значение, которое связано с выходом только обычно называют как количество Bitcoins, когда это показано для людей. Возможно, мы сохраним эту идею, что Bitcoins просто абстракция и на самом деле не существует для другого разговора, сейчас это достаточно, чтобы понять, что операции транслируются со сверстниками в сети Bitcoin, эти сверстники проверить, что сделка действительна, а затем ретранслировать его к своим сверстникам, в конце концов, он получает шахтерам (или майнинг), которые убедитесь, что он является действительным, и включает сделку в блоке, они выполняют доказательство правильности работы на блоке и блок затем передается на все сверстники ретранслировать и добавил к blockchain каждого. Таким образом, в конце концов, что у вас есть это сделка, зарегистрированная в общей blockchain, не Bitcoins удаляется из кошелька и отправлен в любом месте. Что на самом деле существует в сделках являются выходными сценариями. В любом случае, кроме сделки поколения, сделки Переданного значения с входами, которые являются не более чем неизрасходованные результаты предыдущих операций (сделки поколения получить там значение от другого механизма, который не имеет значения для этого обсуждения). Все операции, а затем присвоить некоторые или все из их стоимости новых неизрасходованных выходов. Каждый выход имеет сценарий, который должен быть удовлетворен с некоторыми данными в любом входе, который пытается провести его. Если вход не передает данные, что позволяет на выходе скрипт будет успешно выполнен, то сделка недействительна. Есть опкод (код операции) байты, которые используются для создания сценария. Вы можете увидеть список опкода здесь: https://en.bitcoin.it/wiki/ScriptОдин возможный выход скрипт: 0x14 <20 байт ripemd160 хэш открытого ключа>
Когда этот выход упоминается как вход в транзакции, данные, путем ввода транзакций в стек. Сценарий затем обрабатывается. Данные, что этот сценарий ожидает подаваться на вход операции является ECDSA подписи сделки, которая тратит этот вывод, а затем открытый ключ.
Таким образом, стек состоит из подписи на дне, а затем открытый ключ на вершине этого.
OP_DUP говорит дублировать любой элемент, который находится на вершине стека обработки (самая вещь в последнее время добавил, что в данном случае является открытым ключом), и нажмите на результат на вершине стека.
Таким образом, стек теперь состоит из подписи на дне, то открытый ключ на вершине, что, то дубликат этого открытого ключа на вершине этого.
OP_HASH160 говорит, чтобы удалить верхний элемент из стека, использовать алгоритм ripemd160 для хеширования данных, которые были просто удалены, и нажмите результат обратно на вершину стека.
Так что теперь стек теперь состоит из подписи на дне, то открытый ключ на вершине, что, то ripemd160 хэш этого открытого ключа на вершине этого.
0x14 является шестнадцатеричным представлением числа 20. Он говорит, чтобы раздвинуть следующие 20 байт скрипта в стек. Это 20 байт ripemd160 хэш от выхода, затрачиваемых.
Так что теперь стек теперь состоит из подписи на дне, то открытый ключ на вершине, что, то ripemd160 хэш этого открытого ключа на вершине, что, то ripemd160 хэш от вывода, который тратится на вершине, что ,
OP_EQUALVERIFY говорит, чтобы удалить два верхних элемента из стека и убедиться, что они равны друг другу. Если они не равны, то сделка недействительна и мы можем остановить обработку. Это подтверждает, что открытый ключ, который был поставлен лицом тратить выходные хэш на то же значение, что и хэш ripemd160, что выход был обременен в своем сценарии. Это открытый ключ, что выходной сценарий ожидает.
Таким образом, до тех пор, как два хэш были равны, стек теперь состоит из подписи на дне, то открытый ключ на вершине этого.
OP_CHECKSIG говорит, чтобы удалить элемент на вершине стека и считают его быть открытым ключом ECDSA, затем удалите следующий элемент из вершины стека и считают его подпись сделки, которая пытается провести выходные. Затем используйте ECDSA с помощью открытого ключа, чтобы убедиться, что подпись является действительной подписью сделки. Мы уже определились с OP_EQUALVERIFY, что это ожидаемый открытый ключ, так что теперь мы должны быть уверены, что транжира имеет контроль над закрытым ключом (так как без секретного ключа, они бы не смогли создать правильную подпись). Если подпись недействительна, то сделка не действительна, и мы можем остановить обработку. Если подпись действительна, то не останется ничего в стеке, нет ничего не осталось от сценария к процессу, и мы ничего, что сообщили недействительными не сталкивалась, поэтому вход является действительным, и будут приняты все узлы, работающие под управлением Bitcoin протокол.
Это скрипт оплаты к паб-ключ-хэш. Как вы можете видеть, это было бы сложным и запутанно, чтобы выписать каждый раз, когда вы хотите, чтобы кто-то использовать этот сценарий в выходе из сделки, что они создают. Кроме того, все, кроме значения хэш-функции в этом сценарии является постоянным. Таким образом, при создании бумажников, мы все можем согласиться, чтобы назвать этот скрипт "версия 1" скрипт. Тогда я мог бы просто дать вам значение хэш-функции и сказать вам, чтобы использовать скрипт версии 1.
Конечно, я бы до сих пор, чтобы дать вам 160-битное значение хэша-то, и есть шанс, что вы могли бы сделать опечатки и поставить неправильный хэш там! Тогда никто не сможет провести выходные вы создаете (если кто-то еще не достаточно удачливы иметь ключ, который хэшей какой бы то ни значение, которое вы ввели. Таким образом, я могу создать 4 байт контрольной суммы на этом 160 битное значение, и дать вам, что, как хорошо. Теперь есть только 1 в 4294967295 вероятность того, что любая опечатка, что вы делаете в любой хэш или контрольная сумма будет по-прежнему приводит в хэш, который соответствует контрольной суммы.
Теперь я просто нужен простой способ, чтобы дать вам версию сценария, хэш, и контрольную сумму. Если я пошлю его к вам в двоичных (и использовать полные байты для представления версии), то я должен отправить вам поток 200 единиц и нулей! Base58 представление числа использует почти все английские алфавитные символы, а также почти все основания 10 цифр. Он выходит из немногого, которые трудно отличить от других одинаковой формы символов (0, O, I, L) (ноля, капитального О, капитала глаз, строчный эль). Так что, если мы начнем с 8-разрядной версией, добавьте 160 битное хэш-значение, добавьте 32 битную контрольную сумму, а затем преобразовать полученные 200 битное число в base58, мы получим гораздо более короткий буквенно-цифровой строку (обычно около 34 символов ). Мы называем это 34 символов строки "Bitcoin адрес",
Итак, все, что мы должны сделать, это весь бумажник создатели согласны, что, когда они получают один из них "адреса" они будут проверять контрольную сумму для предотвращения опечаток, а затем распознать, какой скрипт для создания на основе номера версии.
После того, как у нас есть такая система создания "адреса" от стандартных сценариев с некоторыми переменными данными, становится возможным придумать новый стандарт сценария и присвоить ему номер версии. Бумажник создатели могут затем добавить новые сценарии к их кошелькам и все пользователи должны знать, чтобы сделать использование нового сценария является то, что новый "адрес" выглядит как.
Таким образом, вы можете, мы надеемся увидеть здесь, что выходные сценарии загромождать выход с условием, что должно быть выполнены с входными данными для того, чтобы выход будет использоваться для питания значения для сделки. Обратите внимание на то, что сделки, фактически не отправлять биткойны в любом месте. Они просто загромождать выходы с условиями. Пользователи, которые хотят провести эти выходные удовлетворять эти условия с входными данными, а также создавать новые выходы, которые обременены с новыми условиями.
Если вы еще не сделали этого, я полагаю, что вы читали Bitcoin официальный документ, который Сатоши Накамото писал: https://bitcoin.org/bitcoin.pdf
Есть некоторые обобщения в там, и есть некоторые детали реализации, которые впоследствии были улучшены, так что это не точно описать, как Bitcoin работает, но дает хороший обзор на высоком уровне общих понятий.
Что касается некоторых из этих деталей, Вы можете узнать много от изучения Bitcoin вики. Я предлагаю вам начать с нижеследующим, если вы ищете подробную информацию о материале, который я только что описал:
https://en.bitcoin.it/wiki/Base58Check_encoding https://en.bitcoin.it/wiki/Address https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses https://en.bitcoin.it/wiki/List_of_address_prefixes https://en.bitcoin.it/wiki/Script https://en.bitcoin.it/wiki/Transaction
|