背景
比特幣系統(tǒng)在設計理念上之所以是去中心化的,是因為需要礦工(礦池)以及它本身全節(jié)點的分散化,然后才能通過這些手段實現(xiàn)了比特幣系統(tǒng)的抗審查性( censorship resistance)。因為這個原因,比特幣區(qū)塊的大小也一直存在著爭議,因為這關系到比特幣的安全性問題。如果使用更大的區(qū)塊,這就需要比特幣網(wǎng)絡承載更多的交易量,但這同時也會帶來問題,每一個區(qū)塊在傳播交易所需要的時間將會更多。在這方面是有利于大礦工和礦池的,但是增加節(jié)點數(shù)據(jù)量對于用戶來說,普通電腦可能根本無法運行全節(jié)點的數(shù)據(jù)。
這條路走不通,總會有其他辦法的。所有在當時就有人提出可以通過增加比特幣的網(wǎng)絡交易效率,同時還能減少大區(qū)塊有可能產(chǎn)生的危險。其中最后前途的創(chuàng)新,就是今天的主題:可逆式布魯姆查找表(Invertible Bloom Lookup Table),簡稱IBLT。這一概念首先是由Bitcoin Core和Bitcoin XT開發(fā)者加文·安德烈森(Gavin Andresen)提出的,并且它也得到了應用,例如Blockstream的閃電網(wǎng)絡(Lightning Network)開發(fā)者Paul “Rusty” Russell,他就在應用IBLT這一想法。
“如果我們能夠完成這項工作,這意味著比特幣網(wǎng)絡對帶寬的需求會更少,塊數(shù)據(jù)也會更少,這將有利于網(wǎng)絡的健康,” Russell說。
解決了什么問題
在一筆比特幣的交易過程中,都需要經(jīng)歷這些步驟,就是先通過節(jié)點到節(jié)點來完成對等式網(wǎng)絡的交易,然后通過個人節(jié)點的內(nèi)存池進行存儲。當一位礦工發(fā)現(xiàn)一個區(qū)塊時,它包括(部分)區(qū)塊中的交易,隨后在同一對等網(wǎng)絡中廣播該區(qū)塊。 當然,這意味著,區(qū)塊中所有的交易,都有效地在網(wǎng)絡上發(fā)送了兩次:一次作為一筆交易,另一次則作為區(qū)塊的一部分。
在上面這個交易流程中我們可以看出,就是在區(qū)塊中出現(xiàn)了部分冗余信息,大多數(shù)節(jié)點已經(jīng)知道該區(qū)塊包含的部分內(nèi)容了。所以如果可以對這一點進行優(yōu)化的話,那就可以在一定程度上提高加快區(qū)塊的廣播速度。同時這也降低了中心化的壓力,因為礦工們可以更快的將區(qū)塊打包出來,同時網(wǎng)絡的運行速度可以提高。
問題
如果想要通過可逆式布魯姆查找表來解決提高交易速度,主要的問題那就是每個區(qū)塊當中的交易集,因為一般情況下他們是不同的。原因就是這些交易集存儲在所有個人節(jié)點的內(nèi)存池中。這其中最大的差異,則是區(qū)塊在被發(fā)現(xiàn)之前,最后通過網(wǎng)絡的交易。此外,就是所有人的節(jié)點內(nèi)存池,彼此之間也會多少有些不同。這就導致了如果沒有看到整個區(qū)塊,我們是很難知道在一個新的的區(qū)塊中,以為礦工所進行的交易。
這就是可逆式布魯姆查找表要解決的問題,可逆式布魯姆查找表結合了多種數(shù)學技巧,可以讓交易集達到一致狀態(tài)。因此,它們可以允許兩個不同的內(nèi)存池進行對照以及協(xié)調。
