ETH-15賬戶

內容整理自 北京大學肖臻老師《區塊鏈技術與應用》公開課 15-ETH-賬戶

以太坊和比特幣賬戶模式的不同:

比特幣採用基於交易的賬本,該模式系統沒有顯式的記錄每個賬戶有多少錢,想知道有多少錢根據UTXO中的信息推算。該模式隱私保護比較好,但是使用上與日常不一樣:1.轉賬時需要說明幣的來源  2.前面的交易中收到的幣,在花的時候必須要一次性花出去,不能只花一部分,否則差額就會成爲費用,所以剩下的幣必須要轉回給自己。

以太坊採用基於賬戶的模型,類似日常的銀行賬戶,系統中顯式記錄每個賬戶有多少個以太幣。驗證交易是否合法只要驗證賬戶中是否有足夠的錢即可。 轉賬時不用說明幣的來源。也不用把剩下的錢轉回給自己。

好處:

對於double spending有天然的防禦,不需要記錄幣的來源,每花一次錢都會從賬戶中扣掉,花兩次就扣兩次。

防範有人發佈交易時篡改餘額,發佈交易的時候不需要說明自己的餘額,餘額是系統中全節點狀態中要保存的,以太坊中重要的數據結構--狀態樹,就是所有賬戶的狀態組成的一棵樹,賬戶狀態裏包含的一個重要的域就是balance,這個balance沒有辦法篡改,如果想改必須是所有的全節點認爲該餘額是發生了變化,否則其他節點不會認,自己沒有辦法隨便改。

防範replay attack,重放攻擊,即收錢的人是惡意的,別人給你轉過的錢你想再轉一遍。比特幣中不會出現該攻擊,因爲是明顯的double spending。
以太坊中,加一個計數器nonce,用來記錄交易次數,記錄賬戶有史以來一共發佈過多少個交易。轉賬的時候交易次數要成爲交易內容的一部分,一起包含進去,
都是受到交易者簽名的保護,因此nonce的值別人無法修改。系統其他節點維護髮布者交易的狀態,不僅要維護balance,還要維護nonce。

賬戶類別:

以太坊中有兩類賬戶,一類叫作外部賬戶externally owned account,類似比特幣中的賬戶,用公私鑰控制。本地產生公私鑰對,掌握私鑰的人掌握賬戶的控制權,也叫作普通賬戶,狀態有balance和nonce;一類叫作合約賬戶smart contract account,不是通過公私鑰對來控制。除了balance和nonce之外,還有代碼code以及相關狀態storage,包括每個變量的取值,這些都屬於合約賬戶的一部分。

合約賬戶也有nonce。一個合約可以調用另一個合約,所以合約賬戶同樣需要nonce來記錄調用次數。但是合約賬戶不能主動發起一個交易,所有交易只能由外部賬戶發起。外部賬戶的交易如果調用了合約賬戶,合約賬戶可以發送一個message,調用另外一個合約,這是可以的,但是不能自己發起交易。創建合約的時候會返回一個地址,知道該地址就可以調用合約賬戶,調用過程中storage會發生變化。

爲什麼要設計一種新的賬戶系統模型?

以太坊創始人Vitalik創建以太坊的時候,比特幣已經有比較成熟的代碼可以作爲參考。
比特幣基於交易的賬戶模型,對於隱私保護比較好,每次交易可以換一個新的賬戶。
但是以太坊要支持的是智能合約,合約要求參與者有比較穩定的身份。
這個與日常生活類似,比如生活中籤合同,籤合同時對方是一個身份,簽完之後變了一個身份,找不到了;也可能突然出現一個人說自己是當時籤合同的人,只是換了一個身份,都會給合同的執行帶來一定的困難。
對於用智能合約實現的金融衍生品financial derivative,比如期權期貨,如果投錢的賬戶投錢之後就變了,到時候沒法把錢還回來。
如果自己有隱私保護的需要,也可以創建多個賬戶,針對不同情況使用不同賬戶進行不同交易。

 

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