Plutus Pioneer Program – Week 1 筆記

Lecture link: Plutus Pioneer Program – Lecture #1

Plutus Pioneer Program

這一門課程是 Cardano 背後的主要公司 IOHK 所舉辦。前十週會是基礎課程,手把手帶著我們用 Haskell 建立 Plutus Contract。並且在十週之後會發布測試鏈來讓課程參與者於進行測試。讓他們能夠在 Cardano 區塊鏈正式上線時順利發布自己的應用。

Unspent Transaction Output (UTXO) Model 與交易

UTXO 全名 Unspent Transaction Output,中文翻譯是「未花費帳目模型」,是目前 Bitcoin 所使用的交易模型。在 UTXO 模型底下進行交易的時候,自己所擁有的貨幣並不是集中管理,而是許多許多「交易歷史」的總和。

在區塊鏈上,所有交易都如下圖一樣,不斷的擴張一張有向無環圖。你可以想樣 UTXO 交易就像是真實的金錢一樣。今天你把 $1000 帶出門放在自己錢包裡,遇到資金需求時你拿身上的 $1000 與對方交易。這時參與支付的是「手上的 $1000」。而對交易(Transaction, 縮寫 Tx)來說,兩端輸入輸出的錢必然要保持一致。

如果錢不夠了,你回家把自己的小豬撲滿敲破用裡面的錢來支付,這時參與支付的是「手上的 $1000 + 小豬撲滿裡面的錢」。在區塊鏈上這兩處的金錢都被標記在你的名字下(錢包的公開金鑰),參與交易時區塊鏈計算會搜尋屬於金鑰底下的貨幣,並取用交易所需要的數量來進行。

以下圖為例。

交易一(Tx 1):Alice 決定分 Bob 10 Ada
這時加上 Bob 原本所擁有的 50 Ada,Bob 他就有 60 Ada。
交易二(Tx 2):Alice 和 Bob 需要各支付 Charlie 55 Ada

對 Bob 來說,剛剛 Alice 給 Bob 的 Ada 或是 Bob 原本自己擁有的 Ada 各自來說都不夠支付,因此會將兩者都作為該筆交易的輸入,並起輸出為 Bob 所剩下的 5 Ada。這就是模型名字中「未支付」的由來,所有交易都是基於未支付的帳目來進行。

總和來說,要知道一個人所擁有的貨幣數量,就是去檢查所有在區塊鏈上屬於那個人公開金鑰的未支付帳目即可。而不斷參與交易的,就是交易歷史中的未支付帳目。

UTXO 提供去中心化的記帳方式。使用者並沒有「帳號」這個概念。而這個概念是由區塊鏈科技所支持,所有的帳目對應到的都是公開金鑰,而貨幣如何計算也都是根據登記在區塊鏈上帳目。帳目的餘額就是登記在金鑰底下的所有交易輸出。UTXO 的好處就是非常簡單。輸入 = 輸出這件事非常容易驗證,也使得區塊鏈可以輕易的規模。

Extended-UTXO (E-UTXO) Model

但是對 UTXO 來說基本上與傳統的交易無異。我們會需要能夠安插邏輯在區塊鏈上來達成比較複查邏輯的自動化驗證。

E-UTXO 以 UTXO 為基本,新主要新增了三個功能

  • 在區塊鏈上的合約能具有「狀態」,可以在區塊鏈帳目上儲存資料(Machine state)
  • 可以撰寫合約邏輯來檢查該區塊鏈帳目是否成立(Contract continuity)
  • 可以對合約的有效期限做驗證(Validity interval)

綜合來說,UTXO 只能觀察到交易帳目中輸入項目的狀態,而 E-UTXO 更進一步使得能同時觀察到交易帳目中的輸入以及輸出,並且可以儲存資料與繼承合約邏輯。

在以太坊(Ethereum)中,合約腳本(script)可以看到整個 Blockchain 的狀態,但是最為人詬病的是合約是否能成功被寫到區塊鏈上是未知的,就算合約失敗仍然會消耗嘗試寫上區塊鏈的手續費(gas fee)。而在 Cardano 的 E-UTXO 上,合約是否能成功寫入可以在區塊鏈之外就被判斷好,使得驗證失敗的合約不需要消耗手續費。E-UTXO 的可見範圍為該交易帳目相關的進出項目,而經過嚴謹的數學證明,E-UTXO 模型與 Etherum 的交易模型是同等強大,代表能夠達成在以太坊實作的所有邏輯。

(文章歡迎轉載,請註明出處為 eopxd.com)

Author: eopXD

Hi 我是 eop ,希望人生過得有趣有挑戰XD

Leave a Reply