14-ETH-賬戶

聲明:本文是要點筆記,介紹和系列筆記均收錄在專題:區塊鏈技術與應用

BTC系統是基於交易的賬本,系統中並未顯示記錄賬戶有多少錢,只能通過UTXO進行推算。但實際中,使用起來較爲彆扭。

A 轉給 B 錢的時候,需要說明幣的來源。實際中只需要存錢說明來源,花錢則不用。此外,賬戶中的錢在花的時候,必須一次性全部花出去。

如上圖,B 收到 A 的10個BTC,他想要給C 轉 3 個BTC,如果直接轉給 C 轉 3 個BTC,那麼其餘 7 個比特幣會以交易費的形式給挖出區塊的礦工。因此,爲了避免這種情況,需要採用上圖的方式,將3個BTC轉給C,將剩餘7個BTC轉到自己的另一賬戶 B'上面。

以太坊系統則採用了基於賬戶的模型,與現實中銀行賬戶相似。系統中顯示記錄每個賬戶以太幣的數量,轉賬是否合法只需要查看轉賬者賬戶中以太幣是否足夠即可,同時也不需要每次全部轉賬。同時,這也也天然地防範了雙花攻擊。

當然,以太坊發這種模式也存在缺點,這種模式存在重放攻擊(replay attack)的缺陷。A 向 B 轉賬,過一段時間,B 將 A 的交易重新發布,從而導致 A 賬戶被扣錢兩次。

爲了防範重放攻擊,給賬戶交易添加計數器記錄該賬戶交易過多少次,轉賬時候將轉賬次數計入交易的內容中。系統中全節點維護賬戶餘額和該計數器的交易數,從而防止本地篡改餘額或進行重放攻擊。

以太坊系統中存在兩類賬戶:外部賬戶和合約賬戶。

  1. 外部賬戶:類似於BTC系統中公私鑰對。存在賬戶餘額balance和計數器nonce
  2. 合約賬戶:並非通過公私鑰對控制。(不能主動發起交易,只能接收到外部賬戶調用後才能發起交易或調用其他合約賬戶)其除了balance和nonce之外還有code(代碼)、storage(相關狀態-存儲)

創建合約時候會返回一個地址,就可以對其調用。調用過程中,代碼不變但狀態會發生改變。

爲什麼要做以太坊,換基於賬戶的模型?

比特幣中支持每次更換賬戶,但以太坊是爲了支持智能合約,而合約簽訂雙方是需要明確且較少變化的。尤其是對於合約賬戶來說,需要保持穩定狀態。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章