帳戶模型是共享帳本(區塊鏈)的主要記帳模型。與 UTXO 模型一樣,它用於記錄、儲存和執行鏈上交易。帳戶模型被以太坊所使用。
什麼是 UTXO 模型? UTXO 車型有什麼特色?請參考「什麼是 UTXO 模型」章節。
帳戶模型使用帳戶內餘額作為交易的會計計量單位。這是它與 UTXO 模型的主要區別。 UTXO 模型使用交易中未花費的加密貨幣部分作為會計衡量標準。帳戶模型可以看作是傳統銀行的數位版本。在該模型中,數位資產被記錄為帳戶內的餘額,就像傳統的銀行帳戶一樣。
帳戶模型是一個計算模型。當交易發生時,系統會根據使用者的交易指令,觸發節點改變帳戶餘額。然後由系統計算每個帳戶中餘額的變化並記錄餘額的最新狀態。
在以太坊中,帳戶的狀態不儲存在區塊鏈上,而是由節點在本地計算和儲存。區塊鏈上只儲存交易指令。
在以太坊中,有兩種類型的帳戶:外部所有帳戶(EOA)和合約帳戶。
指由私鑰控制的使用者帳戶。
使用者可以在 MetaMask 錢包中建立此類帳戶。每個 EOA 都有一個私鑰和一個地址,它可以直接發起交易。
指由智慧合約程式碼控制的帳戶。
與 EOA 不同,合約帳戶沒有私鑰,它擁有一個智慧合約程式碼。該帳戶由其智能合約程式碼運行。程式碼在合約帳戶建立時記錄在鏈上,並由 EVM 執行。
合約帳戶不能像 EOA 一樣發起交易,它只能呼叫其他合約內的函數來回應交易指令。簡單來說,交易指令會呼叫合約內的函數,提取參數(例如 $ETH 數量)來改變帳戶餘額,從而完成交易。
每當有人向合約位址發送交易時,它都會導致合約在 EVM 中運行,並將交易作為其輸入。發送到合約地址的交易可能有 $ETH 或數據,或兩者都有。如果它們包含 $ETH,它將「存入」到合約餘額中。如果它們包含數據,則數據可以在合約中指定一個命名函數並呼叫它,將參數傳遞給函數。
在帳戶模型中,交易的結果取決於餘額狀態。 帳戶餘額必須大於交易輸出。因此,交易順序驗證和餘額驗證對於使用帳戶模型的網路非常重要。帳戶模型中的節點在收到交易指令時會檢查發送者的餘額狀態(看它是否大於或等於轉移的輸出量)。