【译】What is a UTXO, and how does it work for a blockchain ledger?
首先我想給出一些定義,以免你對比特幣一無所知。
- 單向散列(或簡稱“散列”) - 一種將數字數量轉換為固定長度“摘要”的加密算法。 該算法通過僅給出摘要的方式來做到這一點,不可能確定輸入數據是什么,并且此外不可能預測來自給定輸入數據的摘要是什么。 最常見的例子是在比特幣中廣泛使用的SHA256,但還有很多其他的包括SHA3,RIPEMD160,scrypt等等。
- 公鑰密碼系統 - 一種密碼機制,通過它可以將“私鑰”密鑰轉換為“公鑰”并用于證明私鑰的所有權而不泄露秘密。 此外,可以使用公鑰對數據進行加密,以便只有持有私鑰的人才能對其進行解密。 在比特幣中,這通常用于簽署交易。 有可能通過僅使用簽名數據和公鑰來證明交易的創建者擁有私密密鑰。
- Merkle root - 一種樹型數據結構,它使用單向哈希來保存多個數據片段,使得在不改變merkle根哈希的最終值的情況下,樹的輸入中的任何數據都不能被修改。
- UTXO - 未使用的事務輸出,事務中未使用的輸出
- Block - 區塊鏈上最小的可驗證且不可偽造的單位。 它包含各種數據來證明它的共識以及交易
那么,讓我們來談談交易如何在這方面發揮作用。 比特幣交易在某些方面類似于收銀員的支票。 當你想花費一筆交易的“輸出”時,你必須花費整個事情。 這與您無法走進銀行并說“我想兌現這張支票的一半”類似。 但是,在這種模式下,沒有相當于現金或銀行賬戶。 因此,為了在任何地方匯款,您必須“兌現”支票,并從兌現流程中“輸出”支票到您預定的目的地,然后再查看自己。
這個“兌現過程”實際上是比特幣中的交易。 在一筆交易中,您花費了一次或多次“支票”(實際上稱為UTXO),并從這些花費的資金中為新目的地創建一個或多個UTXO。 您在交易中使用的UTXO稱為“vins”,您創建的新UTXO稱為“vouts”。 一旦UTXO被一筆交易花費,它可以被認為已經消失并被銷毀。 你可以在區塊鏈中看到它的歷史,但是沒有什么可以做到的。
所以,目前我們的系統中存在的一個問題是,檢查通常會寫出姓名,例如“Jordan Earls”。 任何人當然可以說他們是互聯網上的任何名字。 這是我們將公鑰加密和編程引入UTXO的地方。 在比特幣中,UTXO包含一個腳本或一個計算機程序,如果您可以通過說“真”來使腳本結束,那么這些腳本或計算機程序是可以使用的。 讓我們看看最簡單的腳本,它可以做一些有用的事情:
[pubKey] OP_CHECKSIG這被稱為“pay-to-pubkey”腳本 。 這是第一個標準的比特幣交易類型。 第一項是[pubKey] 。 這是公鑰的數據。 請記住,每個公鑰都有一個私有密鑰,它的所有者保密。 發布公鑰是安全的,但不公開私鑰。 比特幣“腳本”語言是基于堆棧的。 所以想象你有一堆文件。 你把公鑰寫在一張紙上,然后放在堆棧上。 該腳本的下一部分是OP_CHECKSIG。 這個特定的操作將會從堆棧頂部取走兩件東西。 它的第一件事就是公鑰。 然后,它的第二件事就是加密簽名。
不過現在這很混亂。 OP_CHECKSIG從棧中獲取2個值(也稱為參數),但我們的腳本似乎只有1個值, pubKey 。 這是vin部分變得重要的地方。 您可以將vout腳本想象為支票上的“付款”字段,并將vin腳本想象為您在后面簽名的地方,證明您確實是“付款至”字段中的預定方。 在比特幣中,腳本只有在花費之后才會執行。 當它被使用時,它首先執行vin腳本,然后將結果數據從vin棧放到vout棧中。 所以在實際執行中,腳本可能看起來很像:
[signature from vin] [pubKey] OP_CHECKSIG人們可以認為vout腳本是一種挑戰,而vin則是讓vout滿足它的答案。 無論如何,現在我們有一個提供簽名并嘗試花這些資金的vin,我們實際上可以執行腳本。 如果簽名和公鑰是有效的,那么OP_CHECKSIG將在堆棧上推“真”,導致UTXO成功消耗。
所以在一個交易中,每個vin指定一個以前的UTXO,并提供一個導致UTXO腳本返回“true”的答案。 如果使用了無效簽名或類似簽名,則腳本將返回“false”并且該事務無效。 部分消費UTXO是不可能的。 它必須完全用完或者保持不動。 這意味著如果你有一個UTXO值10個令牌,并且你想向Bob發送7個令牌,那么你必須進行一個花費這10個令牌UTXO的事務,并創建2個輸出。 一個輸出給Bob(使用他的公鑰)和一個輸出給你自己(確保你可以給vout提供一個“回答”來成功地使用它)。 這第二個輸出回到自己被稱為“更改地址”。
最后,我們有一種使用事務和腳本交換令牌的合理方式。 但是,我們面臨一個問題。 當有人向您發送交易輸出時,您如何確定其交易的結果只使用未消耗的輸出。 這是區塊鏈概念變得重要的地方。
比特幣中的一個塊有一個標題。 標題包含以下內容:
- 版
- 先前的塊頭散列
- 塊中所有事務的Merkle根散列
- 創作時間
- 困難
- 杜撰
該塊的主體是完整的交易(最終也是證人,但這是另一個話題)。
由于每個塊都包含對前一個塊的引用,所以不可能秘密修改前一個塊。 修改以前的塊會改變塊散列,從而破壞由塊散列組成的“鏈”。
比特幣使用工作證明(PoW)共識系統。 這將在后面的文章中更詳細地解釋,但基本上它是一個系統,要求塊創建過程中的參與者(礦工)投入一定數量的計算工作來解決難題。 解決這一難題的第一位礦工獲得了獎勵,他們創建的塊被添加到網絡的區塊鏈中。 必須完成多少工作由塊中指定的“難度”控制。
在PoW中,只有塊頭實際用于共識機制。 merkle root hash確保盡管如此,可以驗證塊體中的每個事務,并確保每個事務都已收到。
一旦創建了塊,交易可以被認為是永久性的。 “雙重支出”UTXO的唯一方法是取代發生支出交易的區塊。 這在某些情況下可以自然發生(稱為孤立塊),但由于在包含塊的事務之上構建了更多塊,因此這種可能性成指數性地降低了可能性,并且此外需要指數級更多的工作來惡意攻擊和替換。
這就是為什么許多接受比特幣的服務等待3或6個確認(塊放置在包含塊的交易之上)。 區塊鏈可能被破壞,并且這些資金被另一筆交易花費是難以置信的。
我們只剩下一個問題。 令牌最初來自哪里? 他們來自采礦過程。 作為采礦的一部分,礦工增加了一項名為“coinbase”交易的特殊交易。 這筆交易沒有投入,并且允許有一定數量的產出(比特幣目前為12)。 這個coinbase交易是流通中的所有代幣實際來自哪里。 如果沒有令牌,就不會創建任何交易,因此沒有任何事情要做。
現在我們有一個功能正常的區塊鏈,它能夠安全地保存它的價值,確保雙重支出極難執行(并且通過更多確認來增加難度)。 您現在應該足夠了解比特幣,Qtum和其他UTXO加密貨幣在協議級別的真實工作原理,并且可以開始查看區塊鏈中更高級的主題。
參考文獻:
總結
以上是生活随笔為你收集整理的【译】What is a UTXO, and how does it work for a blockchain ledger?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【译】The missing expla
- 下一篇: 知识图谱资料收集