Wallet
創建解鎖腳本時,誰來驗證腳本?
我熟悉創建解鎖腳本的多種方式。但在這種情況下,讓我們使用 P2PKH。當我們生成解鎖腳本時(請原諒簡單):
<dup> <hash160> <wallet address> <equalverify> <checksig> |<signature> <Public Key>
諸如挖礦節點之類的節點是將該數據推送到堆棧中並使用操作碼驗證它還是錢包軟體?
需要明確的是,您列出的是鎖定和解鎖腳本:
- 鎖定腳本:
DUP HASH160 <recipient address> EQUALVERIFY CHECKSIG
- 解鎖腳本:
<signature> <pubkey>
鎖定腳本 (
scriptPubKey
) 是發送方 S 向接收方 R 付款的交易的一部分。解鎖腳本是 R 使用他們收到的錢將其進一步發送到目的地 D 的任何交易的一部分。為了清楚起見,在我描述的範例中,有兩個事務:一個從 S 到 R,另一個從 R 到 D。
- 在第一步中,R 將它們的地址提供給 S。S 以上面鎖定腳本的形式使用它們自己的一些輸入以及對 R 的輸出構造一個事務。
- 在第二步中,D 將他們的地址提供給 R。R 使用 S 發送的資金和上面的解鎖腳本來授權支出作為輸入,以及具有基於 D 的地址的鎖定腳本的輸出構造一個交易。
該 R->D 事務(帶有
<signature> <pubkey>
in 的事務)經歷以下步驟:
- 它是由 R 的錢包創建的,可能會對其進行一些基本的安全檢查
- 它由 R 的錢包發出,然後進一步轉發到其他節點。如果這些是完整節點,它們將通過執行
scriptSig
、yielding[sig pubkey]
並將其作為輸入提供給前一個交易來驗證腳本scriptPubKey
(如果簽名和公鑰有效,則評估為真)。如果此評估返回失敗,則忽略該事務。並非所有節點都是完整節點,有些可能會跳過完整檢查。- 在某些時候,交易到達其目的地 D,這是一個與任何其他節點一樣的節點,並且可能會或可能不會對其進行完全驗證,具體取決於所使用的軟體。
- 在某個時候,交易會到達一個或多個礦工,他們希望將其包含在他們下一次建構區塊的嘗試中。礦工應該對交易執行完全驗證,因為如果他們不這樣做,並且將交易包含在一個塊中,儘管它是無效的,那麼整個塊將是無效的,並被網路的完整節點忽略。