# UTXO Model VS Account/Balance Model ![](https://hackmd.io/_uploads/By-ogSWhK.png) 區塊鏈可以代表狀態機的系統 a blockchain qualifies as a stateful system 他記錄了過去的所有事件 Its entire purpose is to record past events and user interactions ## UTXO Model (Bitcoin base) - 在 UTXO 模型當中,使用了整個交易樹代表狀態 - 基於交易,所有參與交易者需要同步狀態,在交易次數上升的情況下使所有節點保持同步變得很困難 - 當用户執行代表變換狀態的交易行為,需先驗證: 1. 發送者的餘額 2. 此交易量是否為 unspent 儲存在鏈上的資料會比較多 ## Account/Balance Model. (Eth base) - 在 Account 模型當中,僅使用帳戶跟餘額代表狀態 - 需防止 `replay attacks`,所以每筆交易都有一個公開的隨機數,隨著交易次數而+1 - 實際儲存帳戶狀態跟計算是在本地節點,區塊鏈只儲存從一個狀態到另外一個狀態的指令 ## 針對智能合約適性的比較 賬戶模型邏輯更直觀。增加和減少餘額使開發人員更容易創建需要狀態信息或涉及多方的交易。只要發送賬戶有足夠的餘額來支付執行費用,簽名交易就是有效的。檢查餘額在計算上比驗證交易輸出是否已花費或未花費的成本更低。對於與其他智能合約交互的代碼控制帳戶尤其如此。合約之間的內部交易可以通過調整合約的餘額在虛擬機中進行。UTXO 模型會產生計算開銷,因為必須明確記錄所有支出交易。 UTXO 模型中的智能合約需要包括選擇發送資產時使用哪些輸出的邏輯,以及處理更改輸出的邏輯。由於 UTXO 模型本質上是無狀態的,它強制交易包含狀態信息,從而使整體設計複雜化。 UTXO 模型的一個好處是它允許在智能合約中更簡單地並行化交易。不同交易中使用的多個 UTXO 可以同時處理,因為它們都是指獨立的輸入。 在賬戶模型中,交易的結果取決於輸入狀態。必須謹慎處理並行執行事務。一般來說,影響同一個賬戶的交易應該順序執行。 一個關鍵的結論是,UTXO 模型在處理簡單交易時更好。帳戶模型在處理更複雜的邏輯時很有用。因此,當前智能合約平台的流行趨勢是使用混合模型,其中 UTXO 模型用於餘額,賬戶模型用於智能合約。 ## 參考資料 https://academy.horizen.io/technology/expert/utxo-vs-account-model/