解碼比特幣腳本:數字貨幣背後的編程語言

介紹

比特幣常被稱爲可編程貨幣。其數字化特性爲用戶提供了在定義使用資金的條件方面的更大靈活性。

在討論比特幣時,談話通常圍繞錢包和幣。然而,更準確的概念是將錢包視爲鑰匙,將幣視爲支票,而區塊鏈則是一個安全的保險庫。每個保險庫都有一個狹窄的開口,可以插入支票或檢查內容。進入保險庫本身仍然限制在擁有正確鑰匙的人。

當密鑰持有者希望轉移資金時,他們會解鎖保險庫。這個過程涉及創建一個新的支票,引用原始的(並使其無效),並將其安全存放在僅供預定接收者訪問的保險庫中。新的接收者在支出這些資金時遵循相同的步驟。

本文探討了比特幣腳本——比特幣網路中的節點用來控制這些數字保險庫的鎖定和解鎖機制的編程語言。

比特幣的交易機制

根據我們的類比,每筆比特幣交易由兩個基本組成部分構成:一個用於保險庫訪問的密鑰(和一個鎖。密鑰解鎖包含您希望轉移的支票的保險庫,而新的支票則被放置在另一個用不同鎖安全保護的保險庫中。從這個新保險庫訪問資金需要另一個特定的密鑰。

該系統提供了顯著的靈活性。網路支持多種鎖定類型 - 有些保險庫可能需要多個密鑰,而其他保險庫可能需要訪問權限的證明。用戶可以根據他們的具體需求定制多種條件。

在技術術語中,密鑰被稱爲 scriptSig,而鎖被稱爲 scriptPubKey。經過仔細檢查,這些組件顯現爲數據片段和代碼塊的組合,共同形成一個緊湊的程序。

在交易執行期間,這個組合在網路中傳播。每個接收節點驗證交易的有效性。驗證失敗將導致資金不可訪問。

這些檢查)coins(在技術上被稱爲未花費交易輸出)UTXOs(。任何擁有適當密鑰的用戶都可以利用這些資金。具體來說,scriptSig充當密鑰,而scriptPubKey作爲鎖。

如果您的錢包包含UTXO,它們可能帶有一個條件,規定只有能夠證明擁有特定公鑰的個人才能解鎖相關資金。要解鎖它們,您必須提供一個使用與scriptPubKey中指定的公鑰相對應的私鑰進行數字籤名的scriptSig。

比特幣堆疊基礎知識

腳本作爲一種基於堆棧的語言。指令按垂直列排列,執行從頂部元素開始。例如,元素A、B和C形成一個堆棧,C在頂部,A在底部。在執行指令時,操作從堆棧的頂部元素開始。

元素在執行過程中被添加到棧中並從棧中“彈出”。

數據元素 ) 如籤名、哈希和公鑰( 與指令 ) 或操作碼( 不同。指令刪除數據並對其執行操作。考慮這個簡化的例子:

<檢查 if=“” equal=“”>

數據以紅色顯示,操作碼以藍色顯示。從左到右,字符串首先進入堆棧。操作碼 )假設爲此示例(然後移除堆棧頂部元素)(並應用MD5哈希,將結果推送回堆棧:d16fb36f0911f878998c136191af705e。

接下來, 進入堆棧,導致出現兩個相同的元素。最後, 移除頂部的兩個元素並進行比較,如果相同則將 <1> 推入堆棧,如果不同則推入 <0> 。

到達指令列表的末尾後,腳本驗證遵循兩個規則:如果剩餘元素爲null或由於未滿足條件而導致指令失敗,則發生失敗。在這個例子中,兩個條件都不適用 - 我們有一個非空元素 )<1>(,確認腳本有效性。這些相同的規則適用於實際的比特幣交易。

支付到公鑰 )P2PK(

Pay-to-Pubkey )P2PK( 代表最基本的交易形式。它將資金鎖定到特定的公鑰。通過這種方式接收資金時,接收者必須向發送者提供他們的公鑰,而不是比特幣地址。

2009年,中本聰與Hal Finney之間的第一次交易使用了P2PK。這種結構在比特幣早期非常常見,但在很大程度上已被Pay-to-Pubkey-Hash )P2PKH(所取代。

P2PK的鎖定腳本遵循簡單的格式: OP_CHECKSIG。顧名思義,OP_CHECKSIG根據提供的公鑰驗證籤名。相應的scriptSig僅包含。

執行過程再簡單不過:籤名進入棧中,然後是公鑰。OP_CHECKSIG 檢查這兩個元素,並根據公鑰驗證籤名。如果匹配,<1> 將被添加到棧中;否則,<0> 出現。

P2PK 已經不再被使用,原因將在下一節中探討。

支付至公鑰哈希 )P2PKH(

Pay-to-Pubkey-Hash )P2PKH( 代表了比特幣網路中最普遍的交易類型。現代錢包軟件通常默認實現這種格式。

P2PKH scriptPubKey 遵循以下結構:

OP_DUP OP_HASH160 <公鑰=“” hash=“”> OP_EQUALVERIFY OP_CHECKSIG

在檢查相應的 scriptSig 之前,讓我們了解一下涉及的操作碼:

) OP_DUP

OP_DUP 移除頂部元素,創建一個副本,並將兩個版本都推送回棧中。這使得在保留原始元素的同時對副本進行操作成爲可能。

OP_HASH160

此操作碼移除棧頂元素,並應用雙重哈希:首先進行 SHA-256 哈希,然後對 SHA-256 輸出進行 RIPEMD-160 哈希。生成的哈希返回到棧中。

OP_EQUALVERIFY

OP_EQUALVERIFY 結合了兩個操作:OP_EQUAL 和 OP_VERIFY。OP_EQUAL 移除兩個元素並檢查其是否相同,如果相同則推送 <1>,如果不同則推送 <0>。OP_VERIFY 移除頂部元素並驗證其真假值 ###non-null(。作爲 OP_EQUALVERIFY 結合在一起時,如果頂部兩個元素不匹配,則會導致交易失敗。

相應的scriptSig結構是:

<公鑰=“”>

解鎖P2PKH輸出需要提供有效的籤名及其對應的公鑰。

該過程建立在P2PK執行流程的基礎上,增加了對提供的公鑰與腳本中嵌入的哈希值匹配的驗證。

一個重要的區別:在 P2PKH 鎖定腳本中,公鑰保持隱藏 - 只顯示其哈希。在區塊鏈瀏覽器中檢查未花費的 P2PKH 輸出不會顯示公鑰信息。只有當收款人轉移資金時,密鑰才會變得可見。

這種方法提供了幾個優點。首先,公鑰哈希比完整的公鑰提供了更緊湊的傳輸——這促使了中本聰在2009年的實現。這些公鑰哈希構成了用戶交換的比特幣地址。

其次,公鑰哈希引入了一個額外的安全層,以防御量子計算威脅。由於公鑰在消費發生之前保持隱藏,因此確定相應的私鑰變得更加困難。任何攻擊都需要逆轉兩個連續的哈希操作)RIPEMD-160和SHA-256(。

BTC-0.41%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 留言
  • 轉發
  • 分享
留言
0/400
暫無留言
交易,隨時隨地
qrCode
掃碼下載 Gate App
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)