待字閨中開(kāi)發(fā)了一門(mén)區(qū)塊鏈方面的課程:《深入淺出ETH原理與智能合約開(kāi)發(fā)》,馬良老師講授据某。此簡(jiǎn)書(shū)文集記錄我的學(xué)習(xí)筆記。
課程共8節(jié)課诗箍。其中哗脖,前四課講ETH原理,后四課講智能合約。
第四課分為三部分:
- Ethash算法
- EVM框架
- Bloom Filter / Recipt
這篇文章是第四課第三部分的學(xué)習(xí)筆記:Bloom Filter / Recipt 才避。
這節(jié)課主要講解了Bloom Filter的原理橱夭,收據(jù)和日志,以及前四課總結(jié)桑逝。
1棘劣、Bloom Filter
Bloom過(guò)濾器是一個(gè)允許用戶(hù)描述特定的關(guān)鍵詞組合而不必精確表述的基于概率的過(guò)濾方法。它能讓用戶(hù)在有效搜索關(guān)鍵詞的同時(shí)保護(hù)他們的隱私楞遏。
以問(wèn)路為例茬暇。問(wèn)的越詳細(xì),得到的結(jié)果越精確寡喝,但是隱私就暴露了糙俗。而問(wèn)的越少,得到的結(jié)果就越不準(zhǔn)確预鬓,隱私得到了保護(hù)巧骚。具體操作過(guò)程中要考慮隱私性和準(zhǔn)確性的平衡。
Bloom過(guò)濾器如何工作:
上圖中舉一個(gè)簡(jiǎn)單的Bloom過(guò)濾器的例子格二,有一個(gè)16位的字段和三個(gè)哈希函數(shù)劈彪。
往Bloom Filter里添加關(guān)鍵詞P1時(shí),三個(gè)哈希函數(shù)分別將三個(gè)位置的數(shù)據(jù)變成了1顶猜。再往Bloom Filter里添加關(guān)鍵詞P2時(shí)沧奴,又有一些位置被設(shè)置為了1。如圖所示长窄。依次添加其它的關(guān)鍵詞滔吠。
當(dāng)判斷關(guān)鍵詞P3是否屬于前述的關(guān)鍵詞時(shí),代入到各哈希函數(shù)挠日,如果所得結(jié)果對(duì)應(yīng)的位都為1屠凶,表示這個(gè)關(guān)鍵詞有可能已被該過(guò)濾器記錄。之所以這一結(jié)論并不確定肆资,是因?yàn)檫@些字節(jié)1也有可能是其他關(guān)鍵詞運(yùn)算的重疊結(jié)果矗愧。簡(jiǎn)單來(lái)說(shuō),Bloom過(guò)濾器正匹配代表著“可能是”郑原。
而另一方面唉韭,如果我們代入關(guān)鍵詞計(jì)算后的結(jié)果某位為0,說(shuō)明該關(guān)鍵詞并沒(méi)有被記錄在過(guò)濾器里犯犁。負(fù)匹配的結(jié)果不是可 能属愤,而是一定。也就是說(shuō)酸役,負(fù)匹配代表著“一定不是”住诸。
2驾胆、Recipt and Log
收據(jù)的結(jié)構(gòu)主要分為三個(gè)部分。
第一部分是Post state贱呐,即處理后的狀態(tài)丧诺。在一個(gè)交易執(zhí)行后,有一個(gè)state object的對(duì)象代表所有在全局狀態(tài)樹(shù)中的節(jié)點(diǎn)奄薇,這些所有state object加總(RLP)后的Keccek就是這里的Post state驳阎。
第二部分是Log。有兩類(lèi)馁蒂,一是虛擬機(jī)每一步的執(zhí)行過(guò)程呵晚,一是智能合約的事件。
這些日志包含三部分內(nèi)容:topic沫屡、 data饵隙、 contract address。其中topic的舉例如圖沮脖。
接下來(lái)的bloom即前一小節(jié)介紹的內(nèi)容金矛,作用查詢(xún)某個(gè)日志是否在這個(gè)結(jié)構(gòu)中。
第三部分是與Gas有關(guān)倘潜。CumulativeGasUsed是交易執(zhí)行到跟這個(gè)收據(jù)有關(guān)的交易時(shí)绷柒,總共使用的Gas志于,作用是控制全局使用的Gas涮因,要小于區(qū)塊的Gas上限。GasUsed是本交易使用的Gas伺绽。
3养泡、原理部分總結(jié)
不足之處,請(qǐng)批評(píng)指正奈应。