非人类思想的UTXO的天才发明
发布于 3 个月前 作者 stvenyin 30911 次浏览 来自 比特币

明日复明日,明日何其多,我生待明日,万事成蹉跎!

  • 比特币上由于只有UTXO的概念,我们需要导入区块链数据库,解析所有的交易,并为了抽取出在区块链上的某个用户的交易情况而查询交易。
  • 而用以太坊,我们则可以实时在区块链上,根据一个地址的实际情况实时查看当前账户情况和交易状态
  • UTXOs的好处有:更加私密(用户要是每笔交易都换一个地址,那么就很难找到其中两个地址的相关性);潜在的可扩展性。
  • 账户的好处:节省大量空间(每笔交易只有一个输入、一个输出、一个签名);更大的可替代性;简单(编码简单,不需要更为复杂脚本);
  • 轻客户端
  • 总结:比特币更注重隐私性所以中本聪才会用非人类的思维的UTXO,而以太坊更注重的商业的发展和普及,所以账户更方便。

比特幣UTXO模型介紹-如何解讀比特幣交易 如果你曾上過BlockExplorer觀察自己的比特幣入金狀況,你是否曾經被搞的一頭霧水呢?這正是因為比特幣所使用的交易模型並非我們直覺的Account Base,而是一種叫做UTXO的模型。在我的前一篇文章:深入了解NEX: Neon Exchange中,也提到了比特幣所使用UTXO Model與乙太坊使用的Account Model在功能上的一些差異,但究竟這兩個Model到底差在哪兒? image.png ETH與Account Model 乙太坊所使用的Account Model比較容易理解,就好像我們每個人都擁有一個銀行帳戶一樣。在ETH的世界中,每個地址就像是一個帳戶,每一次的扣款、交易過後,都會將帳戶的餘額紀錄在區塊鍊當中。因此在認證交易時只要檢查帳戶是否有足夠的餘額就可以了。這個方法簡單、直觀,較利於智能合約的開發。 如果你層上過Etherscan觀察你的交易紀錄,也會發現一切都簡單好懂。輸入你的交易id之後你會看到這種畫面: image.png

簡單的From A To B,這只要看得懂英文應該就可以理解了。

比特幣與UTXO Model UTXO全名是Unspent Transaction Outputs,相較於Account Model比較沒那麼直觀。 在比特幣的世界裡,並沒有一個紀錄所有帳戶餘額的帳本。那麼要怎麼確定一個地址現在有多少餘額呢?簡單的說,你要回顧以前所有的交易,並且找到所有寄給你的Bitcoin,再把他們全都加起來,才會知道。

交易中的Input與Output 幣特幣中的一筆「交易」也較為複雜:假設今天,Fred給了Alice 2個BTC、Ted給了Alice 3 個BTC,我們把這兩筆寄給Alice,總和為5的BTC稱為Unspent Transaction Outputs:也就是說現在Alice擁有了兩筆Unspent Transcation Outputs,可以當作他未來轉錢給別人的Input。

如果現在Alice想要轉5 BTC給Bob,他要將前面兩筆總和剛好為5的UTXO當作這筆交易的Input。而礦工要驗證的就是並沒有其他交易在先前的區塊當中,已經使用過這筆Unspent Output。如果同一筆Output已經被發送過,那它就不是Unspent了,這就是比特幣預防Double Spending的方法。 image.png 還有一個條件就是,Output跟Input總數要吻合。實際上在交易的時候,並不可能剛剛好總是找到兩筆加起來等於你要轉出金額的Output,就好像上圖中,如果Alice只想轉4.5個BTC給Bob,那麼他就要多加一欄的output,把多出來的0.5個BTC轉給自己,這樣的交易才是平衡的。

我們可以實際來看看比特幣的交易長什麼樣子。我們現在如果想要觀察BlockExplorer上自己的交易紀錄,會發現他長的這付德性: image.png 一筆Transaction包含了大量的Input與Output,這很有可能是一筆交易所出金的紀錄,所有含有很多的Output。而左邊的Input則可能是大量入金交易所錢包的交易Output。

有趣的是,我們實際上在一筆交易之中無法「確定」真正的交易金額。例如下面這一筆紀錄中,右邊包含了三個output,我們無法確定究竟0.2、0.03以及56.38三個output究竟哪一個才是真正的目的地。搞不好Alice只有一筆Unspent Transaction Output 56.61 BTC,因此他在這筆交易中雖然他只想要轉0.2BTC,卻必須要動用他唯一一筆UTXO,而剩下的56.38再轉回給自己。 image.png 當然,現在的比特幣錢包已經幫我們Take Care這些事情了,所以在使用的時候就好像銀行帳戶一樣,我們只要輸出目的地址,錢包就會幫我們找出合適的Unspent Output當作Input來完成交易。但如果你很閒,或是要洗錢之類的,就可以自己來打包奇怪的input output來增加匿名性。

UTXO的優勢與劣勢 UTXO因為沒有帳戶的存在,因此容許平行進行多筆交易。假如你有許多的UTXOs,你可以同時進行多筆Transaction而不會被阻擋。再來就是匿名性,如上面提過得,你可以輕易的隱藏自己的交易目的。除此之外,UTXO也被認為比較安全且有效率,可以透過Simple Payment Verification (SPV)來快速驗證檢驗交易。

但UTXO最大的缺點就在於他是"Stateless"的,這對於其上應用程式開發非常的不利。就像有名的Qtum雖然底子是UTXO的交易模式,但是仍然會設計Account Abstraction Layer來讓應用程式開發變得容易。

小結 現在區塊鍊應用開發當道,UTXO叫傾向被大家視為一種只能簡單處理交易的模型,我覺得一定程度上算是時代的產物吧!畢竟離比特幣的發明也已經十年了,儘管有一些特性是無可取代,但是大家仍是偏好朝向Account Model或是混合式的架構前進。

但不論怎麼說,比特幣永遠都是區塊鍊世界的老大!而且現在大家免不了還是要用到BTC交易,所以我們還是有義務要了解UTXO運作方式的!

總之,希望這篇文章可以對大家對比特幣有深一點的理解啦!如果喜歡我的文章,可以stevenyin@antonsteemit,這個寒假會努力產出一些區塊鍊相關的文章。如果我有寫錯或是不清楚的地方,也歡迎在留言中指正或一起討論呦!

回到顶部