Erzeugt ein privater Schlüssel immer denselben öffentlichen Schlüssel und dieselbe Adresse?

Es scheint, als ob Sie je nach Methode unterschiedliche öffentliche Schlüssel und Adressen erhalten, wenn Sie bitcoin-ruby mit demselben privaten Schlüssel verwenden. Irgendwas mache ich wohl falsch, aber ich weiß nicht wo es liegt...

Ich kann einen privaten Schlüssel, einen öffentlichen Schlüssel und eine Adresse mit generieren

def generate_address
  private_key, public_key = Bitcoin::generate_key
  address = Bitcoin::pubkey_to_address(public_key)
  [private_key, public_key, address]
end

Und als Beispiel könnte dies Folgendes generieren:

priv_key= "9d524654045c891327a1dc0c329bcd42311b1767b81d7e997486e841ca5a2a87"
publ_key = "04353457464a32ede1b80fd7299f616320b52cc22796cd27d5b41594f418c2ea26dfeec97273f89b2d908a44fce981ff19f2e2de1408538bb0c0528992ce47f3be"
address = "n1693JDDu5ukbtNh2sHXdZSobKnVEpdtjL"

Wenn ich den privaten Schlüssel dann aber in eine andere Funktion stecke, die die Schlüsseldetails auf andere Weise generiert, bekomme ich eine andere Adresse! Warum ist das?

def key_details(prikey)
  #returns prikey, prikey_hash58, pubkey_hash58, pubkey_uncompressed, address as a hash
  my_key = Bitcoin::Key.new(prikey)
  # binding.pry
  { prikey:prikey, 
    prikey_base58:my_key.to_base58, 
    pubkey_58:my_key.pub, 
    pubkey: my_key.pub_uncompressed, 
    address:my_key.addr
  }
end

Antworten (1)

Der Unterschied besteht darin, dass die erste Funktion unkomprimierte öffentliche Schlüssel und die zweite Funktion komprimierte öffentliche Schlüssel verwendet. Unkomprimierte öffentliche Schlüssel sind 65 Bytes groß und komprimierte 33 Bytes.

Weitere Informationen zu komprimierten öffentlichen Schlüsseln finden Sie unter: Was ist ein komprimierter Bitcoin-Schlüssel?