比特幣如何決定使用哪個 scriptPubKey?
我正在研究比特幣協議,我可以通過我的 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 沒有對應的地址。