Blick auf die v0.9.3-Quelle in miner.cpp:
CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey)
{
CPubKey pubkey;
if (!reservekey.GetReservedKey(pubkey))
return NULL;
CScript scriptPubKey = CScript() << pubkey << OP_CHECKSIG;
return CreateNewBlock(scriptPubKey);
}
Der Standardwert scriptPubKey
ist ein Pay-to-Pubkey? Muss es aus Kompatibilitätsgründen aufbewahrt werden? Ich bin nur überrascht, dass es keinen Pay-to-Pubkey-Hash verwendet.
Pay-to-PubKey (P2PK) und Pay-to-PubKey-Hash (P2PKH) wurden beide in der ursprünglichen Version von Bitcoin 0.1 eingeführt. P2PK wurde standardmäßig für Mining und Zahlungen verwendet, die mit dem interaktiven IP-zu-IP-Zahlungsprotokoll empfangen wurden ; P2PKH war für die Verwendung in nicht interaktiven Zahlungen gedacht – aber P2PKH-Transaktionen nehmen mehr Platz in der Blockchain ein als P2PK.
Ist diese Platzersparnis der Grund dafür, dass Nakamoto P2PK für Mining und interaktive Zahlungen verwendet, obwohl er P2PKH zur Verfügung hatte, oder hatte er einen anderen Grund für die Verwendung unterschiedlicher Transaktionstypen? Ich denke, nur er weiß es.
In einer Situation, in der Sie die kürzeren P2PKH-Adressen nicht benötigen, wie z. B. Mining, interaktive Zahlungen oder das Bezahlen mit Ihrem eigenen Pubkey für Wechselgeld, kann die Verwendung eines P2PK die bessere Option sein, obwohl P2PKH einen Sicherheitsvorteil bietet, wenn Sie es nicht tun Adressen nicht wiederverwenden und wenn ECDSA eines Tages auf eine bestimmte Art und Weise gebrochen wird, macht das Angriffe möglich, aber langsam auszuführen.
Type Output Input Total Bytes
ScriptPubKey ScriptSig
push ....... 1 push ... 1
<key> ...... 33 <sig> ... ~72
P2PK checksig ... 1
-------------- -------------
Total ...... 35 Total ... ~73 ~108
dup ........ 1 push .... 1
hash160 .... 1 <sig> ... ~72
push ....... 1 push .... 1
P2PKH <hash> ..... 20 <key> ... 33
equal ...... 1
checksig ... 1
-------------- --------------
Total ...... 25 Total ... ~107 ~132
Die obigen Zahlen gehen davon aus, dass Sie einen komprimierten öffentlichen Schlüssel verwenden, der heute weit verbreitet ist, aber erst mit Bitcoin Core 0.6.0 implementiert wurde . Wenn Sie die älteren "unkomprimierten" öffentlichen Schlüssel berücksichtigen möchten, addieren Sie 32 Bytes zu den <key>
Bytegrößen hinzu. Außerdem ignorieren wir alle konstanten Faktoren beim Erstellen einer Ausgabe oder Eingabe und berücksichtigen nur die Anzahl der Bytes im Skript.
Mir sind keine Kompatibilitätsprobleme bekannt – viele Miner und Mining-Pools verwenden ihre eigene Software, um an P2PKH-Adressen zu zahlen, wie Sie den Coinbases in den letzten Blöcken entnehmen können.
PREVOUT + SCRIPTSIG = 36 + (1 + 1 + 33 + 1 + (71 or 72)) = 143 or 144
für die P2PKH-Eingabe gerechnet.
Nick Odell
Morsecoder
Nick Odell
Morsecoder
David A. Harding
Nick Odell