2016-05-14 4 views
1

Ich versuche, eine Bitcoin-Adresse in Ruby nach der Dokumentation von Bitcoin Wiki (bitcoin creation according bitcoin wiki) zu erstellen. Ausgangspunkt ist nur eine zufällige Zeichenfolge, die die Ausgabe von ripmed160 emuliert. Leider haben wir ganz ich nicht dabei erfolgreich zu sein, hier ist mein Code:create bitcoin Adresse in Ruby

require 'base58_gmp' 
tx_hash = "a8d0c0184dde994a09ec054286f1ce581bebf46446a512166eae7628734ea0a5" 

ripmed160 = tx_hash[0..39] 
ripmed160_with_pre = "00" + ripmed160 

sha1 = Digest::SHA256.hexdigest ripmed160_with_pre 
sha2 = Digest::SHA256.hexdigest sha1 

bin_address = Integer("0x" + ripmed160_with_pre + sha2[0..7]) 

bitcoin_address = "1" + Base58GMP.encode(bin_address, 'bitcoin') # => "1GPcbTYDBwJ42MfKkedxjmJ3nrgoaNd2Sf" 

ich etwas, das wie eine Bitcoin-Adresse aussieht, aber es von blockchain.info nicht erkannt wird, so denke ich, es ist ungültig. Können Sie mir bitte helfen, diese Arbeit zu machen.

+1

Es gibt einen anderen Fehler im Code, den Sie gezeigt haben ; Sie versuchen, in eine Ganzzahl zu konvertieren (mit 'Integer (" 0x "+ xx)' _twice_, was einen Fehler verursacht. Ich denke, dies ist nur ein Tippfehler oder Kopieren/Einfügen Fehler, da es den Code fehlschlägt, anstatt eine falsche Adresse geben – matt

+0

Anstatt 'Integer (" 0x "+ hex)', tun Sie 'hex.to_i (16)'. –

+0

Sie haben Recht. Ich habe den Code bearbeitet, jetzt scheitert es nicht mehr. – user3866773

Antwort

1

Wenn Sie das SHA256-Prüfsumme berechnen, stellen Sie sicher, dass es über den tatsächlichen Bytes des vorherigen Schrittes zu berechnen, nicht die Hex-Codierung dieses Bytes:

# First convert to actual bytes. 
bytes = [ripmed160_with_pre].pack('H*') 

# Now calculate the first hash over the raw bytes, and 
# return the raw bytes again for the next hash 
# (note: digest not hexdigest). 
sha1 = Digest::SHA256.digest bytes 

# Second SHA256, using the raw bytes from the previous step 
# but this time we can use hexdigest as the rest of the code 
# assumes hex encoded strings 
sha2 = Digest::SHA256.hexdigest sha1 
+0

Funktioniert! Vielen Dank – user3866773