Transactions

比特幣如何決定使用哪個 scriptPubKey?

  • March 29, 2021

我正在研究比特幣協議,我可以通過我的 bash 腳本創建地址。

地址“P2PKH”和“P2PK”具有相同的過程。

壓縮或未壓縮的公鑰 – SHA256 – RIPEMD160。當我使用創建事務時,createrawtransaction我可以看到該協議預設使用 P2PKH 驗證,並且listunspent我可以在其中找到它的 scriptPubKey。

我的問題是:協議(以及程式碼中的位置)如何辨識驗證?我想了解協議何時添加 OP_PUSHBYTES[33] PBKEY OP_CHECKSIG而不是OP_DUP OP_HASH160 OP_PUSHBYTES[20] HASH160(PB) OP_EQUALVERIFY OP_CHECKSIG以及如何使用P2PK而不是P2PKH

更新

例如,我的地址是:(testnet)

mwqCgoJBcyciRUawXerkvom8sbg3zkjrvV

導入我的地址(我的錢包裡沒有,我從比特幣核心之外創建了這個地址)

bitcoin-cli importaddress mwqCgoJBcyciRUawXerkvom8sbg3zkjrvV

然後我挖了 101 個區塊

bitcoin-cli generatetoaddress 101 mwqCgoJBcyciRUawXerkvom8sbg3zkjrvV >> /dev/null

之後我檢查我的 UTXO:

bitcoin-cli listunspent 1 101 '["'mwqCgoJBcyciRUawXerkvom8sbg3zkjrvV'"]'
[
 {
   "txid": "531dcfeea3f87feb4101bfea6fe91ffb0262072cb27acc56f885677ccca089cd",
   "vout": 0,
   "address": "mwqCgoJBcyciRUawXerkvom8sbg3zkjrvV",
   "label": "",
   "scriptPubKey": "76a914b2f58389a224c2fac62b51e78aad7ed058b50f5f88ac",
   "amount": 50.00000000,
   "confirmations": 101,
   "spendable": false,
   "solvable": false,
   "safe": true
 }
]

檢索 UTXO

bitcoin-cli getrawtransaction 531dcfeea3f87feb4101bfea6fe91ffb0262072cb27acc56f885677ccca089cd 2 | jq

...
{
     "value": 50,
     "n": 0,
     "scriptPubKey": {
       "asm": "OP_DUP OP_HASH160 b2f58389a224c2fac62b51e78aad7ed058b50f5f OP_EQUALVERIFY OP_CHECKSIG",
       "hex": "76a914b2f58389a224c2fac62b51e78aad7ed058b50f5f88ac",
       "reqSigs": 1,
       "type": "pubkeyhash",
       "addresses": [
         "mwqCgoJBcyciRUawXerkvom8sbg3zkjrvV"
       ]
     }
   },

...

為什麼我有 P2PKH 而不是 P2PK?如果我只導入地址(HASH160(PB)),我的公鑰的雜湊值如何?最後一個問題,我知道如果錢包找到1第一個字元,它預設應用 P2PKH。如何改用 P2PK(學習目的)。

協議不是決定 scriptPubKey 的因素,而是您的錢包創建了交易。你的錢包根據給定的地址選擇要使用的 scriptPubKey。它使用 P2PKH 作為1...地址,因為這是該類型地址指定的 scriptPubKey。它不能將這些地址用於 P2PK,因為它們沒有包含足夠的 P2PK 資訊——它們只有 pubkey 的 hash160,而不是完整的 pubkey 本身。此外,對這些地址使用不同的 scriptPubKey 意味著比特幣被發送到接收者不一定在看的 scriptPubKey。

這同樣適用於所有其他地址類型 - 地址類型指定要創建的 scriptPubKey。


為什麼我有 P2PKH 而不是 P2PK?

因為那是您導入的地址類型。m您正在使用 regtest,因此 P2PKH 地址以or開頭n

如果我只導入地址(HASH160(PB)),我的公鑰的雜湊值如何?

地址指定雜湊。

最後一個問題,我知道如果錢包找到 1 作為第一個字元,它預設應用 P2PKH。如何改用 P2PK(學習目的)。

你不能。P2PK 沒有地址類型。沒有 P2PK 地址。

一些軟體和區塊鏈瀏覽器會顯示 P2PK scriptPubKeys 的 P2PKH 地址,但這是不正確的。P2PK scriptPubKeys 沒有對應的地址。

引用自:https://bitcoin.stackexchange.com/questions/100510