Я пытался восстановить публичный ключ с подписью, но мне не удалось

Я использовал данные, которые поступают от https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki#p2sh-p2wpkh. Это легко узнать, как получить sigHash. Но когда я пытаюсь восстановить открытый ключ, все от меня ожидали.

И мой вопрос

  1. Сообщение должно быть подписано не 64f3b0f4dd2bb3aa1ce8566d220cc74dda9df97d8490cc81d89d735c92e59fb6?
  2. Если сообщение 64f3b0f4dd2bb3a...59fb6, ничего плохого в моем коде?

Мой код

импорт уровнем

из алгоритма ECDSA.импорт уровнем int_to_string, string_to_int
от импорта binascii hexlify

прик = "eb696a065ef48a2192da5b28b694f87544b30fae8327c4510137a922f32c6dcf"
прик = байт.fromhex(прик)

pubk = "03ad1d8e89212f0b92c74d23bb710c00662ad1470198ac48c43f7d6f93a2a26873"

сиг = '3044022047ac8e878352d3ebbde1c94ce3a10d057c24175747116f8288e5d794d12d482f0220217f36a485cae903c713331d877c1f64677e3622ad4010726870540656fe9dcb'
сиг = байт.fromhex(сиг)

raw_msg = "64f3b0f4dd2bb3aa1ce8566d220cc74dda9df97d8490cc81d89d735c92e59fb6"
raw_msg = байт.fromhex(raw_msg)

попробуйте:
 по умолчанию = по алгоритму ECDSA.VerifyingKey.from_public_key_recovery(
 подпись=сиг данных=raw_msg, кривой=уровнем.кривые.Кривая secp256k1, sigdecode=уровнем.утиль.sigdecode_der)
 печати([hexlify(паб.to_string()) для паба в умолчанию])

за исключением исключений, как е:
 поднять е

деф check_recovery(паб):

 padx = (б'\0'*32 + int_to_string(паб.умолчанию.точка.х()))[-32:]
 если паб.умолчанию.точка.г() & 1:
 УП = Б'\3'+padx
другое:
 УП = Б'\2'+padx

 возвращение hexlify(СК)

список = [check_recovery(P) для P в умолчанию]
печать(списки)
печати([л == pubk для L в списки])

То, что я получил, был: ['519e33c6b146628b4010ae2b56aa9127ae9b795c82df021979436296daf4cceac17eb495101c3c15011e9d5a08163122054ad375730ee2e219504540eb658211 b', 'd28ba1b718b542f52fe42b51635850b5900f111affbbdcbb63465e9a3dd79ffb80251268ba8d5b5ba4aaec8a682145af51b87bd7c7ab9e956895d31db24c4d4b b'] [б'03519e33c6b146628b4010ae2b56aa9127ae9b795c82df021979436296daf4ccea', '03d28ba1b718b542f52fe42b51635850b5900f111affbbdcbb63465e9a3dd79ffb б'] [Ложное, Ложное]

Что я пропустил?

+395
jayfer 29 мая 2010 г., 18:47:52
15 ответов

Рассмотрим сценарий, в котором 5 держателей криптовалют хотим создать партнерство. Их все добавить деньги в бумажник, чтобы финансировать идею. Кошелек делится между всеми партнерами для просмотра и пополнения, но для того чтобы вывести, все 5 (или, возможно, большинство 4/5) должен посмотреть предлагаемая сделка даст какое-то разрешение. Есть криптовалюты, которые могли бы соответствовать описанному выше сценарию?

+988
Dr Anonymous 03 февр. '09 в 4:24

Как вы упомянули, сумму стоимости затраченных (входов) должна быть выше или равна сумме стоимости созданных монет (выходов) ; разница в том, что Шахтер плату.

Это условие проверяется каждый одноранговой P2P-сети для ретрансляции транзакций и блоков, содержащих операции не соблюдая это условие будет отклонена в рамках правил консенсуса.

Поэтому невозможно, чтобы "сорить деньгами" создавая больше денег, чем у вас ; но там была одна пресловутая ошибка, когда это не было доказано: значение переполнения инцидента.

+943
thgie 12 мая 2011 г., 15:20:29

Биткоины провел через скрипты сделки, которая может быть достаточно сложной. Как шахтеры понимают, что такое транзакция?

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

+829
n8d 26 июн. 2011 г., 12:30:34

Шестигранные-закодированных сама сделка выглядит нормально на первый взгляд. Когда вы посылаете это, вы получите сообщение об ошибке? Это может быть просто, что у вас есть плата за сделку в ноль, попробуйте увеличить плату (за счет уменьшения количества в ваш единственный выходной) и попробуйте снова.

+671
Reny C Martina 4 сент. 2017 г., 14:17:33

У меня есть исследования на молнии сети, и хотя я понимаю концепцию, я не понял следующее: Предположим, что сетевой канал открыт между сторонами и все операции были завершены успешно (никаких отмен). Для баланса сделки "убежать" сетевой канал, будет подтверждение от сети (то есть сети как сейчас) все-таки необходимо?

В качестве примера: Джон дает Нейтан 0.20 БТЦ (транзакции внутри сети освещения) - никаких комиссий:идеальное - Натан хочет отправить 0.20 BTC на бирже - подтверждение от сети потребуется, верно?

Так что, по сути, самым большим преимуществом является уменьшение транзакционных времени и нулевой пошлины между доверенными лицами, право? Сделки все равно будет неизбежен?

+630
Timothy Johnson 3 нояб. 2016 г., 20:52:04

Как использовать Bitcoin API в мой код или как интегрировать его в мой код ? это требуется какой-то заряд ?

+599
Joker BRO 19 июл. 2010 г., 23:15:28

Вы не можете получить все из них в один присест. Вы можете позвонить getpubkeys("адрес") для каждого адреса (или сделать это через GUI, перейдя по адресам вкладке, щелкнув правой кнопкой мыши на адрес и выберите "открытые ключи")

Кроме того, вы можете получить ваш мастер публичных ключей (xpub) и производные от них.

+544
Olly Campbell 5 сент. 2013 г., 10:08:00

В библиотеке есть папка документация, а также примеры загрузки! Вы всегда должны проверить эти первые :-)

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

Во-первых, при регистрации, вы всегда нужны TransactionOutput доступен.

Поскольку вы предоставили scriptPubKey ненароком, я написал следующее, которые должны работать, если вы замените свой закрытый ключ. Как правило, эти запросы делаются с использованием API/экземпляр bitcoind и т. д.

Для non-segwit сделках, вы можете просто хранить в scriptPubKey (заметьте, я просто использовать 0 на сумму в TxOut), но для segwit, вы должны заполнить правильно количество.

использовать BitWasp\биткоин\скрипт\ScriptFactory;
использовать BitWasp\биткоин ключ\PrivateKeyFactory\;
использовать BitWasp\биткоин\операции\TransactionFactory;
использовать BitWasp\биткоин\операции\Фабрика\подписанта;
использовать BitWasp\биткоин\операции\минус;
использовать BitWasp\биткоин\Utxo\Utxo;
использовать BitWasp буфера\Buffertools\;
использовать BitWasp\биткоин\операции\TransactionOutput;

/** @VAR в Utxo[] $utxos */
$utxos = использование array_map(функция (массив $utxo) {
 список ($txid, $Uвых, $scriptPubKey) = $utxo;
 возврат новый Utxo(новый минус(буфер::ведьма($txid, 32), $Uвых), новый TransactionOutput(0, ScriptFactory::fromHex($scriptPubKey)));
}, [
 ['459eee043d30b29c4f9e9b3b55af78f5b4fe4bd818bee49a4b75becd6422ae14', 0, '76a91458b6e991b45487df810f4d96d5315da739637f1788ac'],
 ['621c6b92cc2c68b18fef3a90a3284d1263ea43e0cbce21d9ef6f51747bd215ec', 0, '76a91458b6e991b45487df810f4d96d5315da739637f1788ac'],
 ['92a271c568aea34c3e2661db9b8fc7f0d82d90065db1b6eed1c124146ef77898', 0, '76a91458b6e991b45487df810f4d96d5315da739637f1788ac'],
 ['99c43b144adb6d114180c11f26bc08264c806b355d96a824891ab0831c7facfd', 0, '76a91458b6e991b45487df810f4d96d5315da739637f1788ac'],
]);

$прив = PrivateKeyFactory::fromWif('yourprivkeyhere');
$Хекс = '010000000414ae2264cdbe754b9ae4be18d84bfeb4f578af553b9b9e4f9cb2303d04ee9e45000000001976a91458b6e991b45487df810f4d96d5315da739637f1788acffffffffec15d27b74516fefd921cecbe043ea63124d28a3903aef8fb1682ccc926b1c62000000001976a91458b6e991b45487df810f4d96d5315da739637f1788acffffffff9878f76e1424c1d1eeb6b15d06902dd8f0c78f9bdb61263e4ca3ae68c571a292000000001976a91458b6e991b45487df810f4d96d5315da739637f1788acfffffffffdac7f1c83b01a8924a8965d356b804c2608bc261fc18041116ddb4a143bc499000000001976a91458b6e991b45487df810f4d96d5315da739637f1788acffffffff0336150000000000001976a9141485d9d03b41aaa9dca7d70d7f63ff4a0826100e88ac00000000000000001e6a1c246698efc5d81b78ceadf3179316b5eb6cc5c2c347c0b7b42121a94e92180000000000001976a91458b6e991b45487df810f4d96d5315da739637f1788ac00000000';
$ТХ = TransactionFactory::fromHex($шестигранные);
$подписанта = новый подписанта($Техас);
по каждому элементу ($utxos как $я => $utxo) {
 $синьора->знак($Я, $з, $utxo->то getoutput());
}

$подпись = $синьора->получить();

Эхо $подпись->getHex() . PHP_EOL;
+476
redbella 3 мая 2017 г., 14:23:19

Да.

Если ваш кошелек не поддерживает это, вы можете использовать https://cashaddr.bitcoincash.org для преобразования старых адресов на новые адреса, и отправить по новым адресам.

+398
statenjason 11 мар. 2017 г., 13:49:24

Какой самый дешевый и простой способ приобрести биткоины для новичка?

Я купил биткойны в банкомате и платить 10% премии. Я скачал бумажник мицелия на моем iPhone и я заметил, что сборы с ума. В настоящее время минимальная плата составляет 12,68$, и если я хочу, чтобы отправить больше суммы взноса составляет 15%! Я думаю, эти сборы просто чистое безумие. Я в настоящее время смотрю разные сайты, но я не знаю, какой из них лучший. Есть так много там.

Не могли бы вы помочь новичкам купить биткойны?

+318
Jorgefilemon 26 мая 2015 г., 8:32:59

Закрытый ключ-это число, и вспомнил, как такового. Он может быть создан думала, что различных средств (как HD-кошельки, детерминированные поколение, от BIP39 семян, или случайно). Он обычно хранится как 32-байтовый массив.

Закрытым ключом, затем преобразуется в публичный ключ. Это требует сложной математической операции, и результаты в пару координат на эллиптической кривой. Это обычно хранится в 33-байт или 65-байтовый массив.

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

Закрытый ключ никогда не покидает ваш компьютер/бумажник/приложение. Адрес общественности.

+310
Kalyan 20 дек. 2018 г., 8:47:48

Не без помощи ВСН Шахтер. В принципе нет никакого способа, чтобы претендовать на эти монеты под Биткоин деньги, так как они спороть все изменения SegWit до разветвления.

Эти монеты На самом деле рассматривать как "каждый может потратить" монеты на ВСН сети (в отличие от биткоин, утверждающих, что это нарушает никаких правил, поэтому сделка будет признаваться действительным), так что Шахтер может претендовать на эти для себя, если вы найдете хороший, то можно вежливо попросить их претензии и направить их на вас.

+146
Mohammad Yousuf 19 мая 2015 г., 18:22:16

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

Почему бы вам когда-нибудь купить биткоин выше цена добычи?

Я слышал разные оценки, сколько стоит моя биткоин.

Один ответ по этой теме на quoara предполагает затраты на электричество около 400$ (это с конца августа 2017 года).

Источник: https://www.quora.com/How-much-does-it-cost-to-mine-1-Bitcoin-in-the-US

Скажем, с инвестиций в оборудование и повышенной трудности он сейчас стоит 1000$ или даже 2000$ помоему биткоин.

Учитывая, что это относительно дешево добывать Bitcoin и есть даже серверные решения, вы можете арендовать, есть ли логическая причина купить биткоины по более высокой цене, чем они стоили в производстве? Почему люди залог свои дома для того, чтобы купить биткоин за 17.000 долларов за монету, когда они могли просто купить компьютеры и электроэнергии и оплатить только часть за монету?

Не стоит цена на биткоин будет очень тесно привязана к цене производства биткоин?

+136
Cordon Green 30 окт. 2019 г., 13:46:51

Я где-то читал, что биткоин может обрабатывать только 7 транзакций в секунду. Это работает для операций 604,800 в день. В настоящее время визовые процессы около 1700 операций в секунду (и может обрабатывать гораздо большее количество, чем это). Это означает, что система Bitcoin может обрабатывать менее 1/200 токового выхода обработку.

Это правильно? Мне трудно поверить, что так много людей будут покупать в систему, которая настолько неэффективна / отрогам.

Кроме того, если мое предположение верно, то предположим, что есть (в среднем) 700 транзакций в секунду в течение определенного периода 10 мин (я.е, в 70 раз максимальная выходная частота) это значит нам придется подождать 70 * 10 мин. Для всех этих операций должны быть подтверждены? Если да, то почему не может какой-то злой актер завалят (я.е отложить) система отправляя тысячи мелких операций в сети?

Спасибо заранее

+111
user45978 3 авг. 2012 г., 15:36:01

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

Предположим, Давид посылает Алисе сумма в виде двух выходов, output0: 10 биткоинов и выход1: 20 биткоинов в той же транзакции. Теперь Алиса хочет передать 5 биткоина к Еве. Элис нужно потратить всего 30 биткоинов, путем перечисления 5 в Еву и оставшиеся 25 сама?

Или она может выбрать любого из выходных например output0: 10, передача 5 биткоинов в Еву и изменения 5 биткоинов для себя? Если это так, как это отслеживается, так как хэш транзакции Давида могут быть использованы, чтобы провести выход1: 20 биткоинов.

+80
Irina 15 февр. 2016 г., 2:56:36

Показать вопросы с тегом