Глядя на исходный код v0.9.3 в miner.cpp:
CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey)
{
CPubKey pubkey;
if (!reservekey.GetReservedKey(pubkey))
return NULL;
CScript scriptPubKey = CScript() << pubkey << OP_CHECKSIG;
return CreateNewBlock(scriptPubKey);
}
По умолчанию scriptPubKey
используется pay-to-pubkey? Нужно ли его сохранять для совместимости? Я просто удивлен, что он не использует хеш-плату за публичный ключ.
Плата за PubKey (P2PK) и оплата за PubKey-Hash (P2PKH) были представлены в оригинальной версии Биткойн 0.1. P2PK использовался по умолчанию для майнинга и платежей, полученных по протоколу интерактивных платежей IP-to-IP ; P2PKH предназначался для использования в неинтерактивных платежах, но транзакции P2PKH занимают больше места в блокчейне, чем P2PK.
Это экономия места, почему Накамото решил использовать P2PK для майнинга и интерактивных платежей, даже когда у него был P2PKH, или у него была какая-то другая причина для использования других типов транзакций? Думаю, только он знает.
В ситуации, когда вам не нужны более короткие адреса P2PKH, такие как майнинг, интерактивные платежи или оплата сдачи на собственный публичный ключ, использование P2PK может быть лучшим вариантом, хотя у P2PKH есть преимущество в плане безопасности, если вы не не использовать адреса повторно, и если ECDSA когда-нибудь будет взломан определенным образом, это сделает атаки возможными, но медленными для выполнения.
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
Числа выше предполагают, что вы используете сжатый открытый ключ , который широко используется сегодня, но не был реализован до Bitcoin Core 0.6.0 . Если вы хотите рассмотреть более старые «несжатые» открытые ключи, добавьте 32 байта к <key>
размерам байтов. Кроме того, мы игнорируем все постоянные факторы при создании вывода или ввода и просто учитываем количество байтов в скрипте.
Я не знаю о каких-либо проблемах совместимости — многие майнеры и майнинговые пулы используют свое собственное программное обеспечение для оплаты на адреса P2PKH, как вы можете видеть из монетных баз в последних блоках.
PREVOUT + SCRIPTSIG = 36 + (1 + 1 + 33 + 1 + (71 or 72)) = 143 or 144
ввод P2PKH.
Ник Оделл
морсекодер
Ник Оделл
морсекодер
Дэвид А. Хардинг
Ник Оделл