區塊鏈以太坊筆記part2

2021-10-09 14:49:17 字數 2343 閱讀 3296

首先介紹以太坊中採用的賬戶模式。位元幣中採用的是基於交易的賬本,這種模式下,系統中並沒有顯式地記錄賬戶中有多少錢,需要用utxo裡的資訊推算。這種模式優點在於隱私保護比較好,但是使用上比較彆扭,與我們的日常體驗不太一樣。如a->b(10btc),a轉給b的這10個位元幣,需要說清楚幣的**,比如7個幣是從c來的,3個幣是從d來的,證明幣的**的合法性。這和銀行不一樣,銀行是你存錢時要說明幣的**,但花錢時是不用的。位元幣中還有比較不方便的地方是,如果a在前面交易中收到一筆輸出(一些幣),在下一步要花位元幣時必須全部花出去,不能只花一部分。

如圖1,如果是這個樣子,那麼剩下的7個幣是相當於交易費給出去了,開銷太大。所以需要把剩下的7個幣轉回給自己,如圖2。很多位元幣錢包可以自動生成這種接受餘額的位址,每次交易都會換乙個新位址,這是有利於隱私保護的。但這和日常生活很不一樣,問題就在於位元幣沒有這種基於賬戶的交易的概念。

以太坊採用的是基於賬戶的模型(account-based ledger),這和銀行賬號比較相似,系統中需要顯式地記錄有多少以太幣。如a->b(10eth),要看這個交易是否合法,只需要檢查a賬戶上是否有足夠的錢即可,不需要去說明是哪些**的以太幣從a轉給了b。b->c(3eth)也可以進行,不需要再轉給b』,也不需要從b畫乙個雜湊指標指到a說明**。

這種方式的好處:以太坊這種基於賬戶的模式對double spending attack有天然的防禦功能,因為我們並不考慮幣的**,每花一次幣,就把錢從餘額上面扣掉。

關於能否篡改餘額:不會的,以太坊會防範這個。在你發布交易時,不需要說明你的餘額,你的餘額是系統中全節點維護的狀態中要儲存的,也就是狀態樹這個資料結構中儲存的。狀態樹中包含乙個重要的域就是餘額(balance),它無法被篡改。要修改餘額,需要所有的全節點都認為你的餘額發生了變化,否則其他節點是不認的。

這種方式的缺點:replay attack(重放攻擊),a發布了乙個交易,過了一段時間,這個交易被寫到區塊鏈上,a就以為這個轉賬交易完成了。假設b是有惡意的 ,他把這個交易又在網上重新廣播了一次,其他節點以為a又給b轉了一次賬,a的錢就被扣了兩次。

解決replay attack的方法:加乙個計數器nonce來記錄交易次數,記錄這個賬戶有史以來一共發布了多少次交易。轉賬時,這個交易次數要成為這個交易內容的一部分一起發布出去,都是受到發布交易者簽名的保護。因為受到簽名的保護,這個nonce別人是改不了的。系統中每個節點維護a這個賬戶的狀態,不僅要維護a的餘額,還要維護a的nonce值。nonce在賬戶剛創立時都是0,每次收到這個賬戶發起的交易,nonce+1。如果有人重放這個交易,節點發現nonce已經是21了,也就是已經被執行過一次了,就不會再執行了。

以太坊中有兩類賬戶:

外部賬戶(externally owned account):類似於位元幣中的賬戶,用公私鑰控制,本地產生公私鑰對,誰擁有這個私鑰,誰就掌握這個賬戶的控制權,也稱作普通賬戶。

外部賬戶中的狀態有:賬戶餘額(balance),計數器(nonce)

合約賬戶(smart contract account):不是通過公私鑰對控制。乙個合約可以呼叫另乙個合約,所以需要用nonce值來記錄呼叫的次數。但是合約賬戶不能主動發起乙個交易,這是以太坊中的規定,所有交易只能由外部賬戶發起。

外部賬戶發起乙個交易,如果呼叫乙個合約賬戶,這個合約賬戶可以傳送乙個message來呼叫另乙個合約賬戶。

合約賬戶中的狀態有:賬戶餘額(balance)計數器(nonce)**(code)相關狀態儲存(storage)(包括每個變數的取值)

合約賬戶怎麼被呼叫呢?建立合約賬戶時會給你乙個位址,知道這個位址就可以呼叫這個合約。呼叫合約會使其狀態發生變化,code不變,但storage會變。

為什麼要設計這樣一種新的模型——以太坊?以太坊支援智慧型合約,合約要求參與者要有比較穩定的身份,這與我們日常生活類似,我們簽合同需要合同雙方身份保持穩定。(位元幣位址變化頻繁,身份一直在變)現在有人提出通過智慧型合約來實現一些金融衍生品(financial derivative),比如期權、**,往裡面投錢,**未來的**走勢,**正確得到收益,如果投完錢賬戶就變了,就很難把投進去的錢還回來。

以太坊中我們也可以建立很多個位址,用以保護隱私。

以太坊區塊鏈

由私鑰控制.與 無關聯 可以建立發起交易給另外乙個賬戶.外部賬號之間的交易是轉賬 外部賬戶轉賬到合約賬戶可以啟用合約賬戶 被合約 控制,有關聯的 可以響應外部賬戶發起的交易 這裡需要注意的是這裡的merkle樹並不是位元幣的merkle樹,以太坊使用的是mpt樹.merkle樹的變種,功能更強大.可...

以太坊 理解區塊鏈

目錄 一直都說在聽說區塊鏈,都說是什麼劃時代的技術,一種顛覆性的技術,繼人工智慧後的一種革命性的技術。各種光鮮詞彙全用在區塊鏈上,就一直沒明白它到底高深在何處?今天的網際網路世界可以說是資訊網際網路,以前一直說地球村,網際網路將地球變小了,你在地球的這邊可以隨時和地球的另一邊進行交流,如果說資訊網際...

區塊鏈2 0 以太坊

如果把位元幣說成是一本全球賬本,以太坊就可以被看作一台全球計算機 乙個任何人都可以上傳和執行應用程式,並且程式的有效執行能得到保證的地方,這種保證依賴的正是以太坊系統去中心化的,由全球成千上萬的計算機組成的共識網路。以太坊需要數以千計的人在他們的個人電腦上執行乙個軟體來支撐整個網路。網路中的每個節點...