當前位置:
首頁 > 最新 > 比特幣和以太坊的記賬方式——UTXO和賬戶餘額

比特幣和以太坊的記賬方式——UTXO和賬戶餘額

第章 引言

本文介紹比特幣的核心概念UTXO,以及拿以太坊為實現相同的記賬功能的賬戶制對比。

雖然這兩個概念有很多文章介紹了,我希望描述的更易於理解。

第1章 銀行賬號的賬戶餘額

你去銀行里存錢,銀行會給你建一個賬戶。銀行賬戶在用戶層面上呈現出來的是一個銀行卡賬號和用戶的姓名,有了賬戶就可以記錄用戶存了多少錢。

在銀行里賬戶的「物理實體」是這樣的:用戶的賬戶和餘額使用一個資料庫來存儲,最簡單的就是一張Excel表,比如:第一列是用戶名,第二列卡號,第三列是存款金額……

用戶賬戶上的餘額調整實際發生的過程就是對資料庫的更改。

很多科普比特幣的文章就用銀行賬戶來做類比,說比特幣的地址就類似於銀行賬戶,比特幣地址後面的餘額就相當於銀行賬戶里的存款金額。這樣理解是可以的,但涉及到比特幣的底層設計時,就不是這樣了。

第2章 比特幣的UTXO

比特幣本質上不是和銀行的賬戶那樣設計的。為了理解UTXO,我先講一個故事。

在古代的歐洲,如果A要給B寄一個東西,又不想讓郵遞員偷看,就按下面的流程走。

第一步,A把要寄的東西放進一個箱子,並且加一把鎖a。然後寄給B。因為加鎖了,郵遞員就不可能看到了。

第二步,B收到箱子後,又給箱子加了把鎖b。再寄回給A。

第三步,A收到後,把鎖a解開,然後再把帶鎖b的箱子寄回給B。這樣B收到後就可以打開箱子了。

這就是古代的加密通信。

這個加密通信的過程總結來說是這樣的:A給要寄的東西設置一個打開障礙,讓這個障礙只有B的鑰匙才能解開。

現在我們將上述過程全部電子化,搬到互聯網上。因為在互聯網上,B可以直接將自己的那把鎖廣播給A,可以省掉上述第一步。

A有一個電子文檔要發給B,就可以這樣干:

第一步,B直接通過網路將自己的電子鎖發送給A。請注意,因為這一步沒有加密,所以B的電子鎖是所有在網路上的人都能看到的。

第二步,A拿到電子鎖將文檔鎖起來,發給了B。因為文檔加密了,所以雖然網路上的人都能看到加密後的文檔,但無法解密。

第三步,B使用自己的電子鑰匙解開加密文檔,讀到了明文。

電子加密通信結束。

這個電子加密通信的過程總結來說是這樣的:A給通信內容設置一個查看障礙,讓這個障礙只有B才能解開。

現在我們將上述電子加密通信改造成發送比特幣。

A要發1個比特幣給B,就可以這樣干:

第一步,B直接將自己的比特幣地址發送給A。請注意,發送過程是全網公開的,所有人都能看到B的比特幣地址。實際上這個地址就是一把電子鎖

第二步,A將B的地址當成電子鎖,把自己的1個比特幣,使用這把鎖鎖進去,然後將加密後的這個比特幣發到互聯網上去。請注意,全網所有人都是可以看到這個加密後的比特幣的,但只有B有私鑰(鑰匙),所以只有B才能再次解開這個比特幣,並且再次加密到別人的地址上。

A就這樣完成了1個比特幣的發送給B。

另外,在第二步中,A首先也是要用自己的私鑰(鑰匙)先將自己這1個比特幣進行解密(這是上一個人發給A的加密過程)然後才能結合B的地址進行再加密。

A發送比特幣給的過程總結來說是這樣的:A給這個比特幣設置一個解鎖障礙,讓這個障礙只有B(的私鑰)才能解開。

所謂的UTXO就是只有B的私鑰才能解開的這個東西,只B解開之前,這玩意就是未解鎖狀態,未解鎖狀態就是一個「未花費的錢」,比特幣學術話語叫「未花費的交易輸出」,英文叫unspend transaction output。

你有多少比特幣,本質上就是你擁有多少UTXO。

第3章 UTXO的「物理實體」

上述是為了理解比特幣UTXO的概念表述的過程,那UTXO具體的「物理實體」是啥樣子呢?

UTXO具體是以數據的形式存在的,數據是存在比特幣客戶端里,任何一個比特幣客戶端都可以保存比特幣網路上所有的UTXO,也就是所有人的比特幣都是存在任意一個比特幣客戶端的。

一筆具體的UTXO,比如你的一個比特幣,存儲的數據主要代表了以下兩個含義:

1一個數字,被命名為「聰」,這就是比特幣的數量,1BTC=1億聰。

2一個鎖定腳本,就是第2章里描述的「解鎖障礙」,如果誰想花這筆UTXO,就必須提供一個被滿足「解鎖條件」的數據,這個數據一般又叫著簽名。

總結一句話,一筆UTXO就是「一個數字加一個鎖定腳本。」

更具體一點,一筆UTXO在電腦里存的主要數據是以下四個部分:

1生成這筆UTXO的交易的txid;

2生成這筆UTXO的交易的輸出序列號sequence。因為大部分交易是一個或多個輸入,多個輸出,第一個輸入序列號是0,第二個是1。

3鎖定腳本lockscript。

4是金額value

第4章 UTXO的好處

第一個好處是極端的安全。發送比特幣就是一個先用私鑰解密,再加密到目標公鑰的過程,而接收比特幣只需要提供一個地址。除非這套加密和解密的加密演算法被破解了,否則不會出問題。這種加密演算法是極端的安全的,如果加密演算法被破解了,那全世界的銀行什麼的更加完蛋了,這種事發生的可能性是幾乎不可能的。

第二個好處就是隱私。用戶要是每筆交易都使用一個地址,那用戶的資金是很難被追蹤的。

第三個好處是非常大的可擴展性,這個要結合SPV驗證、UTXO證明和UTXO分片這些理論來講。這些內容目前的比特幣(BTC和BCH)都是沒有徹底解決掉的,如果解決掉了,比特幣(BTC或BCH)是可以擴展到無限tps的。

第5章 以太坊的賬戶

相對於比特幣的UTXO,以太坊的賬戶餘額制就好理解太多了,你可以直接使用銀行的賬戶來類比,非常準確。

以太坊的賬戶制就是一個代表特定用戶的「地址」,可理解為銀行卡號和用戶名。當然這個「地址」是不計名的,不需要身份證的。這個「地址」後面就可以建一個值來充值以太坊的餘額,地址還可以添加一些欄位來充當「token的餘額」,這就是為一個以太坊地址可以收非常多的各種幣。

以太坊賬戶要發送ETH的過程是和比特幣不一樣的。以太坊這個系統是部署好一個「sent」函數,任何賬戶發送ETH都是向系統調用這個函數來完成。這就類似於銀行改用戶的餘額就是使用數據的修改函數一樣。以太坊系統驗證賬戶發送ETH的過程是驗證這筆交易是否是這個賬戶發出去的,用戶使用「簽名」的方式來證明是賬戶擁有者發送的交易。

第6章 賬戶制的好處

賬戶制比UTXO的好處很明顯,可以節省大量的交易位元組空間。賬戶制每筆交易都是只需要一個輸入、一個輸出和一個簽名。UTXO是可能需要多個輸入的,每個輸入都需要單獨簽名,也可能需要多個輸出,每個輸出都需要鎖定腳本。這樣會大大增加交易的位元組數量。

因為發送以太幣是調用系統的sent函數,所以不需要在交易里留下「解鎖腳本」和「鎖定腳本」,而UTXO制相當於每筆交易都要寫一遍「sent函數」,即在比特幣系統里「sent函數」的代碼是被重複填寫無數遍的,這些全部是要記錄在區塊鏈里。而以太坊的sent函數的代碼只需要部署到一個區塊里,然後每一次發送交易,就去調用就好了,不需要重寫代碼。

賬戶制的另一個大好處就是可以編寫複雜狀態。

UTXO制的餘額只有兩種狀態——花費或未花費。不存在50%花費這種概念。但以太坊的賬戶制就可以編寫出花費條件,比如可以重寫一個sent函數,讓輸入達到什麼條件就發送多少幣給輸出,這樣就可以實現各種狀態。這就是有狀態的智能合約的概念。你看EOS的ICO智能合約,實現了每隔23小時就可以向投ICO的地址發相應的代幣,就知道以太坊的發送幣可以編寫出多少種可能性了。

比特幣(BTC和BCH都一樣)的腳本系統是無法編寫出有狀態的合約的,但以太坊就可以輕鬆編寫出來。

第7章 結束語

比特幣能夠成功成為一種世界貨幣,UTXO居功至偉。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 閃電HSL 的精彩文章:

TAG:閃電HSL |