Какова связь между scriptSig и scriptPubKey?

Сценарий: A отправляет 1 BTC в B.

scriptSig появляется в сценарии ввода.

scriptSig = <sig> <pubKey>
  1. Здесь открытый ключ - это открытый ключ отправителя A. (это открытый ключ, соответствующий его адресу биткойн, который имеет некоторую нерастраченную транзакцию).

Что такое sig-часть scriptSig?

scriptPubKey

scriptPubKey = OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

pubKeyHash = Хэш открытого ключа получателя (в нашем случае, B).

  1. Отправитель (A) имеет только адрес биткойна получателя (B), так как он получает pubKeyHash из своего адреса биткойна?

Теперь это мое понимание до сих пор:

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

  2. Этот сценарий ввода также используется для проверки того, что отправитель (A) является фактическим владельцем биткойнов, хранящимся в ссылочном выходе предыдущей транзакции.

  3. Сценарий вывода говорит нам, сколько биткойнов отправитель хочет передать получателю, а также упоминает адрес биткойна получателя.

Вопросы:

  1. Открытый ключ в скриптеSig отличается от открытого ключа в scriptPubKey?

  2. Каким образом подписанная информация Отправителя будет проверена получателем, если они не имеют один и тот же открытый ключ?

  3. Я попытался понять пример, указанный в вики, который показывает, как скрипт выполняется в стеке, но не мог его понять.

У меня есть еще несколько вопросов, но я думаю, что я задам им другой вопрос, а не разместил его здесь.

Спасибо.

41 голос | спросил Neon Flash 9 MaramSat, 09 Mar 2013 10:41:56 +04002013-03-09T10:41:56+04:0010 2013, 10:41:56

5 ответов


36

Прежде всего, два соответствующих скрипта используются в двух разных транзакциях: один, который переводит средства на адрес (Transaction A ) и тот, который тратит эти средства (Transaction B ). scriptPubKey создается пользователем, который создает транзакцию A . Он в основном добавляет условие требования к создаваемому продукту. Пользователь может требовать только и, следовательно, тратить биткойны, связанные с выходом, если он может доказать, что он владеет выходом.

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

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

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

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

ответил cdecker 9 MarpmSat, 09 Mar 2013 22:22:32 +04002013-03-09T22:22:32+04:0010 2013, 22:22:32
3

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

«Отправитель (A) имеет только адрес биткойна получателя (B), так как он получает pubKeyHash из своего адреса биткойна?»

Ключом является то, что отправителю (A) не нужно получать pubKeyHash из «своего» адреса биткойна, потому что это не имеет значения. (Я также задавался вопросом то же самое!)

Сначала подумайте о scriptPubKey . A создает это с адресом биткойна B вместо <pubKeyHash>. Это работа А. То, что A сказал, «1 BTC теперь принадлежит B, но .... только если B может доказать, что он является истинным владельцем адреса биткойна, который B предоставил мне». Теперь возьмите A из картинки.

B приходит и в своем кошельке, он видит, что эта сумма 1 BTC появляется. Так технически B «владеет» им. Но для того, чтобы B потратил его, это отправить кому-то другому, B должен доказать, что биткойн-адрес, который он дал A, действительно был его. Здесь находится scriptSig . Таким образом, <sig> <pubKey> является ответственностью B, и B все равно знает эту информацию.

Прочитав много статей об этом, документация разработчика объясняет это лучшими руками. https://bitcoin.org/en/developer-guide#transactions У вас просто есть читать его медленно несколько раз.

Dev-документы также отвечают на ваш другой вопрос «Что такое sig-часть скриптаSig?»

  

... данные Боб-знаки включают   txid и индекс вывода предыдущей транзакции, предыдущий   output_pubkey script, сценарий pubkey Bob создает, который позволит   следующий получатель тратит эту транзакционную продукцию, а количество   satoshis, чтобы потратить на следующего получателя.

ответил cloudnthings 11 Jpm1000000pmWed, 11 Jan 2017 21:40:08 +030017 2017, 21:40:08
2

Пожалуйста, ознакомьтесь с документом разработчика. Это намного яснее. https://bitcoin.org/en/developer-guide#transactions

ответил jiayaoqijia 4 32015vEurope/Moscow11bEurope/MoscowWed, 04 Nov 2015 11:20:56 +0300 2015, 11:20:56
0

Пусть есть 2 транзакции, транзакция A (coinbase) & Транзакция B . ScriptPubkey - заблокировать транзакцию A для открытого ключа. ScriptSig - используется в транзакции B , чтобы разблокировать транзакцию A

Так как Transaction A является коинбазой (добытой шахтером), не будет ScriptSig. ScriptPubkey of Transaction A - это скрипт открытого ключа шахтера (то есть заблокирован открытым ключом шахтера, поэтому в будущем он может разблокировать его секретный ключ [ie ScriptSig])

Шахтер может потратить эту биткойновую транзакцию на Алису, предоставив ScriptSig (подписанный с секретным ключом шахтера) во вход Transaction B. Помните, что открытый ключ майнера генерируется из его Private Key, это возможно для программы Bitcoin для проверки ScriptPubkey транзакции A из ScriptSig транзакции B, тогда, если действительный, транзакция B будет добавлена ​​в Blockchain.

ScriptPubkey транзакции B будет публичным ключом Алисы, поэтому в будущем только Алиса может потратить этот биткойн с помощью ScriptSig в транзакции C.

ответил suhailvs 16 AM000000120000003631 2017, 00:09:36
0

Простое и менее техническое объяснение новичков: Пусть Алиса будет отправителем, а Боб - получателем. Алиса создает ScriptPubKey, соответствующую секретным ключам кошелька Боба. Затем она передает этот ScriptPubKey вместе с сатоши в сети биткойнов, и сатоши начинают появляться в кошельке Боба в качестве баланса. Итак, ScriptPubKey действует как «блокировка».

Теперь, чтобы Боб потратил эти сатоши, он должен удовлетворять условиям, которые Алиса помещает в ScriptPubKey. Поэтому он создает scriptSig (или скрипт подписи) как решение, которое удовлетворяет условиям ScriptPubKey, чтобы тратить эти сатоши. Здесь scriptSig действует как ключ к блокировке ScriptPubKey.

ответил Abhishek Sinha 18 Jpm1000000pmThu, 18 Jan 2018 16:26:57 +030018 2018, 16:26:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132