Guten Tag.
Ich habe 2 Adressen aus demselben privaten Schlüssel erstellt. Eine Adresse wird natürlich komprimiert, die andere nicht.
compressed_public_key = "025d9a1a0a5dab7e3e4a84c30a42ddc0d71b2da0fa1f3b99fbda9fc03eb8c75cd5"
corresponding_address = "mfjRUvWr9QZadpiRnbRfHS4UDSxdR9FE75"
uncompressed_public_key = "045d9a1a0a5dab7e3e4a84c30a42ddc0d71b2da0fa1f3b99fbda9fc03eb8c75cd535a0b893f20338d37d20eebe2941859dfe53b175f0bb24a27bc77741f0bb8cac"
uncompressed_address = "mi4kMd3HcLUGJSouNdJZ87eUBbi7cNE6C3"
Ich habe auch einige Münzen an jede Adresse geschickt.
utxo_to_compressed = "963baf6eb615a09afcb05ebcdbd3db05a163994dd2035002477c753ba3281eff"
utxo_to_uncompressed = "08a1286bb379f6eb5151828505b934c1b917201592bb76bd252a53b7a3009b17"
Mit Bitcore habe ich den private_key erstellt, um die Transaktionen und die Utxos wie folgt zu signieren:
privateKey = new bitcore.PrivateKey(BN, "testnet")
scriptSig = "76a914" + hashedPubKey + "88ac";
And the hashed public keys are:
1bf398bb044e55f1971e384cc1e6d861dca3adb9 for the uncompressed
025bafbac8a8a1fcbae04f9a6aa8b6f968c9d145 for the compressed
utxo_compressed = new bitcore.Transaction.UnspentOutput({
"txId": "08a1286bb379f6eb5151828505b934c1b917201592bb76bd252a53b7a3009b17",
"outputIndex": 0,
"address": "mi4kMd3HcLUGJSouNdJZ87eUBbi7cNE6C3",
"script": scriptSig,
"satoshis": 5000000000
});
utxo_uncompressed = new bitcore.Transaction.UnspentOutput({
"txId": "963baf6eb615a09afcb05ebcdbd3db05a163994dd2035002477c753ba3281eff",
"outputIndex": 0,
"address": "mfjRUvWr9QZadpiRnbRfHS4UDSxdR9FE75",
"script": scriptSig,
"satoshis": 5000000000
});
Das Signieren des komprimierten utxo ist kein Problem. Aber sobald ich versuche, die unkomprimierte Transaktion zu signieren, erhalte ich eine Fehlermeldung.
compressedTx = new bitcore.Transaction();
uncompressedTx = new bitcore.Transaction();
compressedTx.from(utxo).to(some output).sign(privateKey); <-This one works fine
uncompressedTx.from(utxo).to(some output).sign(privateKey); <-This one fails
//Some inputs have not been fully signed Use//
In der Vergangenheit habe ich Transaktionen von unkomprimierten öffentlichen Schlüsseln gesendet und eingelöst (ich habe es manuell mit einem einfachen Python-Code gemacht). Ich kann anscheinend keinen Grund finden, warum die Eingaben nicht signiert wurden.
Ich werde jede Hilfe, die Sie anbieten können, sehr zu schätzen wissen
komprimierter und unkomprimierter Pubkey haben unterschiedliche Hashes. Ihr Code sollte also ungefähr so aussehen:
scriptSig1 = "76a914" + hashedPubKey_1 + "88ac";
scriptSig2 = "76a914" + hashedPubKey_2 + "88ac";
folgenden Code von sign.cpp
etwa line25 jetzt. Scheint, dass das Signieren von unkomprimierten Schlüsseln in neuerem Kerncode absichtlich deaktiviert ist.
Ich habe nicht nachvollzogen, warum das deaktiviert wurde, vielleicht nur, um es potential hash collision
in Zukunft zu vermeiden und mehr Daten zu behalten standardized
.
// Signing with uncompressed keys is disabled in witness scripts
if (sigversion == SigVersion::WITNESS_V0 && !key.IsCompressed())
return false;
schultz
schultz