Title: SOLVED [Why are my generated transactions non-canonical?] Post by: comp006 on June 16, 2015, 04:37:57 PM Hi,
I'm writing a c++ library to sign Bitcoin transactions (you can find it here: https://github.com/sgeisler/EasyBitcoin). I tryed to send a transaction from 1HikVCL5PsR75toN23yEifLqmg8uXAepoz to some other address. At the moment only the code to sign the input (https://github.com/sgeisler/EasyBitcoin/blob/TxInSigTest/TransactionInput.cpp) is implemented, so I first created a raw transaction with coinbin and then replaced the unsigned input with the signed input generated by my script. Code: 0100000001883971b9025799b61040fdd0bc516a4c631f8753f689962fc72980de4f2aabc8000000006a47304402207a57c1db269e2ab4706279309a4d1d91112478d92132c2580d4b6f21670dce0502200590c8be6be1616c41db4663800c3b3d9d36ffa0e4d1c7b08082b0b00f679f9a01210440af8583e795691debf6331605a444a1bd2ae3e3978b38ff1d2c7f69443b6c01ffffffff01905f0100000000001976a914ed25801aa39644aaa7fcef2944ba200e05e615be88ac00000000 Coinbin shows it as signed when I try to verify it: verify at coinb.in (https://coinb.in/?verify=0100000001883971b9025799b61040fdd0bc516a4c631f8753f689962fc72980de4f2aabc8000000006a47304402207a57c1db269e2ab4706279309a4d1d91112478d92132c2580d4b6f21670dce0502200590c8be6be1616c41db4663800c3b3d9d36ffa0e4d1c7b08082b0b00f679f9a01210440af8583e795691debf6331605a444a1bd2ae3e3978b38ff1d2c7f69443b6c01ffffffff01905f0100000000001976a914ed25801aa39644aaa7fcef2944ba200e05e615be88ac00000000#verify) But when I try to broadcast it it shows: Quote 64: non-canonical I don't know what I'm doing wrong. I mainly followed this tutorial (http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html). Do you know if a bitcoin transaction debugger exists? It would be great if you could help me :) EDIT: I think I've found my error, I'm only hashing the input and not the whole tx (silly me), will try to hash the whole tx. But why did coinb.in accept the signature if it wasn't correct? Title: Re: SOLVED [Why are my generated transactions non-canonical?] Post by: tspacepilot on June 17, 2015, 08:12:01 AM Hi, I'm writing a c++ library to sign Bitcoin transactions (you can find it here: https://github.com/sgeisler/EasyBitcoin). I tryed to send a transaction from 1HikVCL5PsR75toN23yEifLqmg8uXAepoz to some other address. At the moment only the code to sign the input (https://github.com/sgeisler/EasyBitcoin/blob/TxInSigTest/TransactionInput.cpp) is implemented, so I first created a raw transaction with coinbin and then replaced the unsigned input with the signed input generated by my script. Code: 0100000001883971b9025799b61040fdd0bc516a4c631f8753f689962fc72980de4f2aabc8000000006a47304402207a57c1db269e2ab4706279309a4d1d91112478d92132c2580d4b6f21670dce0502200590c8be6be1616c41db4663800c3b3d9d36ffa0e4d1c7b08082b0b00f679f9a01210440af8583e795691debf6331605a444a1bd2ae3e3978b38ff1d2c7f69443b6c01ffffffff01905f0100000000001976a914ed25801aa39644aaa7fcef2944ba200e05e615be88ac00000000 Coinbin shows it as signed when I try to verify it: verify at coinb.in (https://coinb.in/?verify=0100000001883971b9025799b61040fdd0bc516a4c631f8753f689962fc72980de4f2aabc8000000006a47304402207a57c1db269e2ab4706279309a4d1d91112478d92132c2580d4b6f21670dce0502200590c8be6be1616c41db4663800c3b3d9d36ffa0e4d1c7b08082b0b00f679f9a01210440af8583e795691debf6331605a444a1bd2ae3e3978b38ff1d2c7f69443b6c01ffffffff01905f0100000000001976a914ed25801aa39644aaa7fcef2944ba200e05e615be88ac00000000#verify) But when I try to broadcast it it shows: Quote 64: non-canonical I don't know what I'm doing wrong. I mainly followed this tutorial (http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html). Do you know if a bitcoin transaction debugger exists? It would be great if you could help me :) EDIT: I think I've found my error, I'm only hashing the input and not the whole tx (silly me), will try to hash the whole tx. But why did coinb.in accept the signature if it wasn't correct? My best guess is that coinb.in isn't actually verifying the signature. I can see that it "decoded" the transaction and it has a check next to "signed". But, alas, I'm not familiar with this interface, perhaps it turns green or something if the signature is valid? Did you go back to try the coinb.in again after you figured out the error? I'm curious what you found. Title: Re: SOLVED [Why are my generated transactions non-canonical?] Post by: johoe on June 17, 2015, 11:17:06 AM The pubkey in the scriptSig looks also strange:
0440af8583e795691debf6331605a444a1bd2ae3e3978b38ff1d2c7f69443b6c01 33 bytes (compressed) but starts with 04 indicating uncompressed. Title: Re: SOLVED [Why are my generated transactions non-canonical?] Post by: comp006 on June 17, 2015, 01:17:48 PM It works now: https://blockchain.info/de/tx/64d45ef207f6b283540db006bf6ddd43a1c312ca826e08336053fe7f6bab0b8a (my first transaction signed with my own library :) )
The txs produced now look like this: Code: 0100000001883971b9025799b61040fdd0bc516a4c631f8753f689962fc72980de4f2aabc8000000006b483045022100f24f95da3b0df769a79af676c6d0cbd781fa7c0d04be1712c3b148b53472fad702200dc0b3635bba2a0af15104d86ef86ccc74811287184956aa4b612e041e5a5ace01210340af8583e795691debf6331605a444a1bd2ae3e3978b38ff1d2c7f69443b6c01ffffffff01905f0100000000001976a914b7675e0b90a09cb97674702be07b119c989b835088ac00000000 Code: 01000000 version So it seems to work now. I don't know what went wrong with the pubKey (I'm using openssl for all the crypto. Thx to all :) Title: Re: SOLVED [Why are my generated transactions non-canonical?] Post by: OutCast3k on June 17, 2015, 07:02:54 PM **snip** My best guess is that coinb.in isn't actually verifying the signature. I can see that it "decoded" the transaction and it has a check next to "signed". But, alas, I'm not familiar with this interface, perhaps it turns green or something if the signature is valid? Did you go back to try the coinb.in again after you figured out the error? I'm curious what you found. That is correct, coinb.in's verify page will just check to see if a signature exists not if its valid or not. Hope this helps. |