10月29日,以太坊聯(lián)合創(chuàng)始人Vitalik Buterin發(fā)布了一份關(guān)于跨分片交易的新提案,所謂跨分片交易,是以太坊2.0平臺需要實現(xiàn)的一種功能。
以下是提案譯文:
以太坊2.0 階段2 (phase 2)的要求之一,是能夠快速地將ETH從一個分片移動到另一個分片。盡管通過常用接收機制的跨分片交易是可能的,因為協(xié)議本身只需提供對彼此分片的每個分片的狀態(tài)根的訪問,但跨分片ETH需要在協(xié)議活動中實現(xiàn)更安全的目的。原因是我們需要跟蹤每個分片中有多少ETH,并且我們需要一個重要的機制來防止跨分片傳輸?shù)闹胤牛╮eplay)問題。
一般來說,基于收據(jù)(receipt)的機制確實解決了這一問題,但它是通過具有“已消耗收據(jù)ID”的狀態(tài)樹來實現(xiàn)的,這將相當(dāng)復(fù)雜地添加到當(dāng)前名義上的無狀態(tài)系統(tǒng)中。之所以需要此收據(jù)ID樹,是因為我們允許收據(jù)(receipt)無序使用。也就是說,如果愛麗絲(Alice)從分片A向分片B發(fā)送一筆交易,然后Applebaum也從分片A向分片B發(fā)送一筆交易,那么有可能會出現(xiàn)Appelbaum的交易更早在分片B中被接受的情況。這是必要的,因為系統(tǒng)使用的是gas方法來處理收據(jù)消耗交易,愛麗絲(Alice)可能會決定不為這筆傳輸交易支付費用。
因此,這里就出現(xiàn)了一個問題:我們是否可用一個按順序處理收據(jù)的機制,來代替處理收據(jù)的機制,這樣對于“上次從分片A收到的分片B的收據(jù)ID” ,我們只需一個變量可遞增?
也就是說,每個分片A保持其狀態(tài),對于每個其他分片B而言,則是兩個值:(i)將從分片A發(fā)送到分片B的下一個收據(jù)的nonce,以及(ii)將從分片B接收到分片A的下一個收據(jù)的nonce。
至于“誰來買單”問題的答案很簡單:區(qū)塊生產(chǎn)者需處理每個區(qū)塊來自其他分片一定數(shù)量的收據(jù),通過對收據(jù)的源分片收費來限制費率。然而,這里有一個主要問題:如果一個人通過從所有分片向特定分片發(fā)送收據(jù)(可能是意外的,也可能是故意的),對其進行了拒絕服務(wù)攻擊時,會發(fā)生什么呢?
N個分片分別發(fā)送N個收據(jù),會對目標(biāo)分片產(chǎn)生o(N2)的負(fù)載。
為了解決這個問題,我們可以采用以下機制:每個分片都需在一個區(qū)塊中處理最高N個收據(jù)(例如N = 64);如果其他分片處理的收據(jù)少于N,它可使用其它分片的Merkle證明來證明這一點。每個分片不斷地向信標(biāo)鏈(beacon chain)轉(zhuǎn)發(fā)它已處理的收據(jù)總數(shù),這用于提供更新的“gas價格”,以便將收據(jù)發(fā)送到該分片。例如,每一區(qū)塊分片的收據(jù)處理隊列是滿的,gas價格可增加10%,最多可達到N。
這確保了在極端情況下,DoS攻擊最終無法增加接受分片隊列的長度,因此,每則消息都會得到處理,但這始終可發(fā)送一筆執(zhí)行最小數(shù)量跨分片活動的交易?;蛘撸制枰獙⑵銭IP 1559 gasprice發(fā)布到信標(biāo)鏈來處理區(qū)塊費用;該費用也可用于此項功能。
如果我們有這種發(fā)送ETH跨分片的機制,我們還可以將其用于通用收據(jù)發(fā)送功能,從而創(chuàng)建一個有強大保證的跨分片交易系統(tǒng)。
這里存在的主要挑戰(zhàn)是,為了計算收據(jù)的效果,我們需要有人自愿提供狀態(tài)的Merkle驗證內(nèi)容。如果未寫入完整狀態(tài),則無法在協(xié)議級別強制執(zhí)行此操作;但可以做的是添加表單要求:“為了包含你自己的一筆交易,你還必須為隊列中的跨分片收據(jù)提供驗證內(nèi)容?!?br /> 責(zé)任編輯;zl
評論
查看更多