Может кто-то посоветовать:
1. Как ECDSA используется для проверки транзакций ..?
2. В идеале, как pybitcointools можно использовать делать # 1
Из tx_valid.json, первый тест вектор:
Код:
[
["Ниже десериализация операции, которые являются действительными."],
["Они находятся в форме"],
["[[[Prevout хэш, prevout индекс, prevout scriptPubKey], [вход 2], ...],"],
["serializedTransaction, enforceP2SH]"],
["Объекты, которые только одна строка (как этот) игнорируются"],
["Ниже приводится 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63"],
["Это представляет особый интерес, поскольку она содержит в неверном кодировке подпись, которая принимает OpenSSL"],
["См http://r6.ca/blog/20111119T211504Z.html"],
["Кроме того, первая транзакция OP_CHECKMULTISIG в стандартной форме"],
[[["60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0, "1 0x41 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG"]],
"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000490047304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", правда]
["Ниже десериализация операции, которые являются действительными."],
["Они находятся в форме"],
["[[[Prevout хэш, prevout индекс, prevout scriptPubKey], [вход 2], ...],"],
["serializedTransaction, enforceP2SH]"],
["Объекты, которые только одна строка (как этот) игнорируются"],
["Ниже приводится 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63"],
["Это представляет особый интерес, поскольку она содержит в неверном кодировке подпись, которая принимает OpenSSL"],
["См http://r6.ca/blog/20111119T211504Z.html"],
["Кроме того, первая транзакция OP_CHECKMULTISIG в стандартной форме"],
[[["60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0, "1 0x41 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG"]],
"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000490047304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000", правда]
Теперь мы имеем следующее:
Код:
# входы
ины = ["% S:% d" % ("60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1", 0)] # Ины = ["prevout хэш: индекс prevout"]
# ScriptPubKey входов
scriptPubKey = '514104cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4410461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af52ae'
Диффузоры = [{ 'значение': 1000000, 'Скрипт': '76a914660d4ef3a743e3e696ad990364e555c271ad504b88ac'}]
сырой = mktx (модули, выходы)
# "0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba2600000000000ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000"
# Из test_vector (или) выборки на Tx: 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63: 0)
подписанные = "0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000490047304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000"
der_sig = "0048304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2bab01" # Примечание: эта подпись не является канонической, так как значения как г и S имеют самый высокий набор бит (т.е. в идеале г и s должны быть дополнены nullbytes)
Поэтому, учитывая всю информацию из тестовых векторов, как же проверить подпись против необработанного сделки?
(NB. Я делаю это в качестве средства, чтобы узнать, как Bitcoin знаков / проверяет сделки. До сих пор у меня не было никакой проблемы с эти UnitTests)