jackjack (OP)
Legendary
Offline
Activity: 1176
Merit: 1280
May Bitcoin be touched by his Noodly Appendage
|
|
August 11, 2011, 05:06:50 PM Last edit: August 11, 2011, 07:10:24 PM by jackjack |
|
Bonjour Je pense être à deux doigts de résoudre mon problème mais j'y suis pas encore et comme il est assez pointu (en tout cas pour moi) je comprendrais peut-être mieux une explication venant d'un francophone Ce que je veux c'est signer une transaction Je sais signer un message, je connais la syntaxe d'une transaction, ce qu'il me manque c'est le message à signer Je sais que c'est un Hash, donc un sha256^2 Je sais que l'argument de ce Hash est la transaction modifiée, en fonction de SIGHASH Voici la partie non sûre : Si j'utilise SIGHASH_ALL, le message est la transaction où : tous les scriptSig(non encore connu encore puisque justement je les veux) sont supprimés à l'emplacement du scriptSig à la position n, je mets le scriptPubKey de l'input correspondant (une fois signé, j'obtiendrais alors le scriptSig pour l'input n) j'ajoute à la fin 01000000 car j'utilise SIGHASH_ALL De plus, suite à une réponse de Mike sur le forum dev, j'ai lu la fonction SignatureHash qui initialise le message comme ceci : "CDataStream ss(SER_GETHASH);" Sachant que SER_GETHASH = 4, il faudrait donc que je rajoute au début de ma transaction modifiée 0400000000000000, soit 4 en int64 Donc finalement, j'arrive à ça (j'ai pris une vraie tx pour pouvoir comparer : http://blockexplorer.com/rawtx/a467d767729385c191d3e463ceb8a436a1c0dda9d362955909c64196db86e573 ) : 04000000 or 0400000000000000 or nothing 01000000 #version 01 #1 input 177a1f8fdfe69a2ad022f056bf45ef8162c7c8a1672919b885308b3b16162307 #inverted hash of the tx 00000000 #index
#old scriptpubkey instead of scriptsig __________________________________________________________ 19 #length of scriptPubKey 76 #OP_DUP a9 #OP_HASH160 14 #length of hash 5f10ada9157add69864482ef8c99ef8787943f04 # NOT inverted hash160 of my pubkey 88 #OP_VERIFY ac #OP_CHECKSIG __________________________________________________________ ffffffff #sequence 01 #1 output 80841e0000000000 #value 19 #length of scriptPubKey 76 #OP_DUP a9 #OP_HASH160 14 #length of hash 5c3f294acb5059a968c4a35700b5432a7397002b # NOT inverted hash160 of pubkey to which I send money 88 #OP_VERIFY ac #OP_CHECKSIG 00000000 #locktime 01000000 #hashtype = SIGHASH_ALL
Je sais qu'il y a des développeurs dans le coin, si vous êtes occupés postez même un mini message si ça prendrait trop de temps, j'approfondirai de mon côté
|
Own address: 19QkqAza7BHFTuoz9N8UQkryP4E9jHo4N3 - Pywallet support: 1AQDfx22pKGgXnUZFL1e4UKos3QqvRzNh5 - Bitcointalk++ script support: 1Pxeccscj1ygseTdSV1qUqQCanp2B2NMM2 Pywallet: instructions. Encrypted wallet support, export/import keys/addresses, backup wallets, export/import CSV data from/into wallet, merge wallets, delete/import addresses and transactions, recover altcoins sent to bitcoin addresses, sign/verify messages and files with Bitcoin addresses, recover deleted wallets, etc.
|
|
|
sirk390
|
|
August 11, 2011, 07:06:36 PM Last edit: August 11, 2011, 07:17:06 PM by sirk390 |
|
Salut jackjack, Je te conseille la page du wiki sur OP_CHECKSIG: https://en.bitcoin.it/wiki/OP_CHECKSIGLe raw dump dans la section "Code samples and raw dumps" est correct. Il donne le raw dump de la première transaction de bitcoin. Attention, car à l'époque on ne pushait pas encore le hash160 de la clef publique mais directement la clef publique dans le TxIn . (e.g. "PUSH_DATA(pubkey), OP_CHECKSIG" au lieu d'aujourd'hui "OP_DUP OP_HASH160 PUSH_DATA(pubKeyHash) OP_EQUALVERIFY OP_CHECKSIG") Il n'y a pas besoin de rajouter 0400000000000000 au début de ta transaction. Ton début est correct mais il te manque des choses par la suite. Si tu veux j'ai une version de vérification qui fonctionne en python. Je peux te la fournir si tu en as besoin. Chris
|
|
|
|
jackjack (OP)
Legendary
Offline
Activity: 1176
Merit: 1280
May Bitcoin be touched by his Noodly Appendage
|
|
August 11, 2011, 07:21:59 PM |
|
Ah je croyais que c'était une transaction ce code-là... Je vais pouvoir creuser de ce côté-là Merci pour tes infos et ta propostion, effectivement je veux bien ton code ça m'aiderait je pense
|
Own address: 19QkqAza7BHFTuoz9N8UQkryP4E9jHo4N3 - Pywallet support: 1AQDfx22pKGgXnUZFL1e4UKos3QqvRzNh5 - Bitcointalk++ script support: 1Pxeccscj1ygseTdSV1qUqQCanp2B2NMM2 Pywallet: instructions. Encrypted wallet support, export/import keys/addresses, backup wallets, export/import CSV data from/into wallet, merge wallets, delete/import addresses and transactions, recover altcoins sent to bitcoin addresses, sign/verify messages and files with Bitcoin addresses, recover deleted wallets, etc.
|
|
|
jackjack (OP)
Legendary
Offline
Activity: 1176
Merit: 1280
May Bitcoin be touched by his Noodly Appendage
|
|
August 11, 2011, 07:30:31 PM |
|
Je viens de comparer les deux scripts, je ne vois pas la différence en dehors du fait que le wiki utilise comme scriptPubkey "Pubkey OP_CHECKSIG" et la transaction que j'utilise "OP_DUP OP_HASH160 <hash> OP_VERIFY OP_CHECKSIG"
|
Own address: 19QkqAza7BHFTuoz9N8UQkryP4E9jHo4N3 - Pywallet support: 1AQDfx22pKGgXnUZFL1e4UKos3QqvRzNh5 - Bitcointalk++ script support: 1Pxeccscj1ygseTdSV1qUqQCanp2B2NMM2 Pywallet: instructions. Encrypted wallet support, export/import keys/addresses, backup wallets, export/import CSV data from/into wallet, merge wallets, delete/import addresses and transactions, recover altcoins sent to bitcoin addresses, sign/verify messages and files with Bitcoin addresses, recover deleted wallets, etc.
|
|
|
sirk390
|
|
August 11, 2011, 07:55:21 PM |
|
Pour ta transaction "a467d767729385c191d3e463ceb8a436a1c0dda9d362955909c64196db86e573" je trouve ceci:
01 00 00 00 01 17 7a 1f 8f df e6 9a 2a d0 22 f0 56 bf 45 ef 81 62 c7 c8 a1 67 29 19 b8 85 30 8b 3b 16 16 23 07 00 00 00 00 19 76 a9 14 5f 10 ad a9 15 7a dd 69 86 44 82 ef 8c 99 ef 87 87 94 3f 04 88 ac ff ff ff ff 01 30 c1 1d 00 00 00 00 00 19 76 a9 14 5c 3f 29 4a cb 50 59 a9 68 c4 a3 57 00 b5 43 2a 73 97 00 2b 88 ac 00 00 00 00 01 00 00 00
J'ai l'impression que c'est ta "value" qui n'est pas bonne.
|
|
|
|
jackjack (OP)
Legendary
Offline
Activity: 1176
Merit: 1280
May Bitcoin be touched by his Noodly Appendage
|
|
August 11, 2011, 08:05:48 PM |
|
Je m'étais trompé dans le montant, après correction j'ai le même message que toi Mais la vérification fonctionne chez toi? Et tu as le même hash que moi? Mon vérifieur me dit que 3044022044d64dd439555d659ec6d3a530a2eb2a5747e8f29522aa87636acc33bc1a54d40220720f8f8d776b4aba6916892bd5994d0a71436d738cd106907ecec57182ee8eb101 n'est pas une signature de Hash("0100000001177a1f8fdfe69a2ad022f056bf45ef8162c7c8a1672919b885308b3b16162307000000001976a9145f10ada9157add69864482ef8c99ef8787943f0488acffffffff0130c11d00000000001976a9145c3f294acb5059a968c4a35700b5432a7397002b88ac0000000001000000") = 14e230ca4b3d2963630bb186dee8146fcf401d0de03eccc9926cf33944ce216c par l'adresse 19ff...
|
Own address: 19QkqAza7BHFTuoz9N8UQkryP4E9jHo4N3 - Pywallet support: 1AQDfx22pKGgXnUZFL1e4UKos3QqvRzNh5 - Bitcointalk++ script support: 1Pxeccscj1ygseTdSV1qUqQCanp2B2NMM2 Pywallet: instructions. Encrypted wallet support, export/import keys/addresses, backup wallets, export/import CSV data from/into wallet, merge wallets, delete/import addresses and transactions, recover altcoins sent to bitcoin addresses, sign/verify messages and files with Bitcoin addresses, recover deleted wallets, etc.
|
|
|
sirk390
|
|
August 11, 2011, 08:17:49 PM |
|
La validation fonctionne pour moi, mais mon hash n'est pas le même: tx: 0100000001177a1f8fdfe69a2ad022f056bf45ef8162c7c8a1672919b885308b3b16162307000000001976a9145f10ada9157add69864482ef8c99ef8787943f0488acffffffff0130c11d00000000001976a9145c3f294acb5059a968c4a35700b5432a7397002b88ac0000000001000000
hash: 17f9b587ac131d7d9a2a2f7ebd274b184eca4abc48a129e7e1411b97042ad7fd
pubkey: 04bb50e2d89a4ed70663d080659fe0ad4b9bc3e06c17a227433966cb59ceee020decddbf6e00192011648d13b1c00af770c0c1bb609d4d3a5c98a43772e0e18ef4
sig:3044022044d64dd439555d659ec6d3a530a2eb2a5747e8f29522aa87636acc33bc1a54d40220720f8f8d776b4aba6916892bd5994d0a71436d738cd106907ecec57182ee8eb1
|
|
|
|
jackjack (OP)
Legendary
Offline
Activity: 1176
Merit: 1280
May Bitcoin be touched by his Noodly Appendage
|
|
August 11, 2011, 08:22:29 PM |
|
C'est bizarre La fonction Hash c'est bien sha256^2 non? Je viens d'essayer sha256 quand même mais ça ne marche pas non plus
|
Own address: 19QkqAza7BHFTuoz9N8UQkryP4E9jHo4N3 - Pywallet support: 1AQDfx22pKGgXnUZFL1e4UKos3QqvRzNh5 - Bitcointalk++ script support: 1Pxeccscj1ygseTdSV1qUqQCanp2B2NMM2 Pywallet: instructions. Encrypted wallet support, export/import keys/addresses, backup wallets, export/import CSV data from/into wallet, merge wallets, delete/import addresses and transactions, recover altcoins sent to bitcoin addresses, sign/verify messages and files with Bitcoin addresses, recover deleted wallets, etc.
|
|
|
sirk390
|
|
August 11, 2011, 08:25:53 PM |
|
oui oui, c'est bien sha256^2. Pour info, le premier hash vaut 50ddacb3456b7d5eb4a9fe5954f022bfd280ac6d8f33e3c32a0a5bef32991514
|
|
|
|
davout
Legendary
Offline
Activity: 1372
Merit: 1008
1davout
|
|
August 11, 2011, 08:29:42 PM |
|
Je comprends pas vraiment votre problème mais je comprends votre douleur
|
|
|
|
jackjack (OP)
Legendary
Offline
Activity: 1176
Merit: 1280
May Bitcoin be touched by his Noodly Appendage
|
|
August 11, 2011, 08:38:36 PM |
|
Ah mon péché mignon, oublier de repasser d'une chaîne de caractères hexa à la valeur hexa... Du coup j'ai le bon hash
Mais la vérification ne marche pas, bizarre De toute façon si chez toi ça marche c'est que c'est bon, c'est juste ma fonction de vérification qui déconne
Dernière question, pourquoi tu as enlevé l'octet final de la signature? Le 01?
|
Own address: 19QkqAza7BHFTuoz9N8UQkryP4E9jHo4N3 - Pywallet support: 1AQDfx22pKGgXnUZFL1e4UKos3QqvRzNh5 - Bitcointalk++ script support: 1Pxeccscj1ygseTdSV1qUqQCanp2B2NMM2 Pywallet: instructions. Encrypted wallet support, export/import keys/addresses, backup wallets, export/import CSV data from/into wallet, merge wallets, delete/import addresses and transactions, recover altcoins sent to bitcoin addresses, sign/verify messages and files with Bitcoin addresses, recover deleted wallets, etc.
|
|
|
sirk390
|
|
August 11, 2011, 08:43:48 PM |
|
Je comprends pas vraiment votre problème mais je comprends votre douleur Lol oui, c'est douloureux de l'hexa et de relire le code de bitcoin pendant des heures et des heures. Mais, c'est aussi un grand plaisir de réussir à vérifier sa première transaction.
|
|
|
|
sirk390
|
|
August 11, 2011, 08:48:42 PM |
|
Dernière question, pourquoi tu as enlevé l'octet final de la signature? Le 01?
Un octet contenant le hashtype est concaténé à la fin de la signature. (c.f. script.cpp:943 et https://en.bitcoin.it/wiki/OP_CHECKSIG règle 4)
|
|
|
|
jackjack (OP)
Legendary
Offline
Activity: 1176
Merit: 1280
May Bitcoin be touched by his Noodly Appendage
|
|
August 11, 2011, 09:04:06 PM |
|
C'est bon! En fait dans mes fonctions de signature/vérification je Hashais les paramètres, donc quand je passais le Hash de la tx en arguement, je Hashais 2 fois (donc sha256^4) Voilà, maintenant il suffit de nettoyer le bordel dans mon code et c'est bon Dernière question, pourquoi tu as enlevé l'octet final de la signature? Le 01?
Un octet contenant le hashtype est concaténé à la fin de la signature. (c.f. script.cpp:943 et https://en.bitcoin.it/wiki/OP_CHECKSIG règle 4) Ah oui merci, promis je relirai dix fois le wiki ce soir pour retenir ces petits détails Je comprends pas vraiment votre problème mais je comprends votre douleur Je confirme ce que dit sirk390, c'est horrible mais quel bonheur de voir cette couleur verte synonyme de signature valide! Un grand merci à toi sirk390! Tu apparaîtras dans les remerciements, promis! Et dès que j'aurais implémenté tout ça tu verras que j'en ai fait bon usage
|
Own address: 19QkqAza7BHFTuoz9N8UQkryP4E9jHo4N3 - Pywallet support: 1AQDfx22pKGgXnUZFL1e4UKos3QqvRzNh5 - Bitcointalk++ script support: 1Pxeccscj1ygseTdSV1qUqQCanp2B2NMM2 Pywallet: instructions. Encrypted wallet support, export/import keys/addresses, backup wallets, export/import CSV data from/into wallet, merge wallets, delete/import addresses and transactions, recover altcoins sent to bitcoin addresses, sign/verify messages and files with Bitcoin addresses, recover deleted wallets, etc.
|
|
|
davout
Legendary
Offline
Activity: 1372
Merit: 1008
1davout
|
|
August 11, 2011, 10:42:09 PM |
|
Je comprends pas vraiment votre problème mais je comprends votre douleur Lol oui, c'est douloureux de l'hexa et de relire le code de bitcoin pendant des heures et des heures. Mais, c'est aussi un grand plaisir de réussir à vérifier sa première transaction. C'est clair. J'ai failli me m'évanouir de bonheur ce matin en réussissant à faire un script qui me permettait de convertir un .pem généré par openssl en clef privée checksummée importable directement par le client bitcoin Le coup de travailler sans s'en rendre compte sur une chaine en hexa au lieu de données binaires c'est un grand classique... Sinon y a aussi le coup du little/big endian qui m'a bien torturé
|
|
|
|
|