比特幣交易

    比特幣交易是比特幣系統中最重要的部分。比特幣交易的本質是一種特殊設計的數據結構。而區塊鏈是記錄比特幣交易的總賬簿,每個比特幣交易都被記錄在區塊鏈上。這種數據結構的生命週期包括:被創建、被簽名加密、被廣播、被驗證、被添加到新創建的區塊。

       1. 交易結構

    比特幣交易這種數據結構包含6個字段:版本、輸入數量、輸入、輸出數量、輸出、時鐘時間。比特幣交易的基本單位是未使用交易輸出(UTXO),一個比特幣用戶在整個區塊鏈上的所有UTXO之和即爲其比特幣餘額(實際上比特幣的設計中並不存在“餘額”的概念)。在交易中,被消耗的UTXO就是交易的輸入,產生的UTXO就是交易的輸出。一筆比特幣交易通過所有者簽名來解鎖其當前擁有的UTXO,通過新所有者地址來鎖定並創建新的UTXO。此外還存在一種特殊的交易稱爲Coinbase交易,這是每個區塊中的首個交易,是作爲挖礦獎勵產生的全新的比特幣給贏家礦工。

        交易輸出包含三個字段:總量(8字節),表示以聰爲單位的比特幣值;鎖定腳本尺寸(1~9字節),用字節表示後面的鎖定腳本長度;鎖定腳本(變長),定義了支付所需條件的腳本。

         交易輸入結構包含五個字段:交易(32字節),指向交易包含的被花費的UTXO的哈希指針;輸出索引(4字節),被花費的UTXO的索引號,第一個是0;解鎖腳本尺寸(1~9個字節),解鎖腳本尺寸,用腳本表示的後面的解鎖腳本長度;解鎖腳本(變長),一個達到UTXO鎖定腳本中的條件的腳本;序列號(4字節),目前未被使用的交易替換功能,設成0xFFFFFFFF。

        交易費可以當作爲了包含交易到下一個區塊的一種獎勵,也可以當作針對欺詐交易和任何種類的系統濫用的一種避免方法。交易費不是強制的,但是包含交易費能夠提高交易被處理的優先級。交易的數據結構中沒有顯式包含交易費的字段,但是交易費=輸入之和-輸出之和。

       2. 交易鏈條和鼓勵交易

      交易鏈條類似於信用卡的透支消費。

        3. 交易腳本

      比特幣錢包客戶端通過兩類腳本來驗證交易:解鎖腳本和鎖定腳本。

      鎖定腳本用來鎖定比特幣交易的輸出,即交易後新的比特幣擁有者獲取了比特幣。解鎖腳本是用來滿足先前鎖定腳本所設定的鎖定條件的腳本。比特幣客戶端會同時執行鎖定和解鎖腳本來驗證一筆交易。對於每一筆比特幣交易的輸入,驗證軟件會先檢索輸入所指向的UTXO,每個UTXO中本身包含着定義其花費條件的鎖定腳本。軟件再從輸入交易中讀取解鎖腳本,同時執行這兩個腳本。具體地,軟件採用從解鎖腳本中複製而來的數據放入主堆棧中和解鎖腳本一起執行,如果執行結果爲真,則這個輸入就是一個對UTXO的有效授權,這使得UTXO被標記爲“已使用”,並從UTXO集中被移除。考慮腳本在主堆棧中的執行情況,如果腳本執行完畢後堆棧頂部結果爲真(任何非零值)或執行後堆棧內爲空,則交易有效;如果腳本執行完後堆棧頂部結果爲假或者執行被操作符禁止(OP_VERIFY     OP_RETURN)或者有條件終止(OP_ENDIF),則交易無效。

(未完待續)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章