溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Conflux是怎樣優(yōu)化帶寬的使用效率的

發(fā)布時間:2021-12-22 16:28:50 來源:億速云 閱讀:108 作者:柒染 欄目:互聯(lián)網(wǎng)科技

本篇文章給大家分享的是有關(guān)Conflux是怎樣優(yōu)化帶寬的使用效率的,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

早期的區(qū)塊鏈系統(tǒng)往往吞吐量很低,相應(yīng)的對帶寬要求也不高,共識協(xié)議本身才是它們性能的瓶頸。例如比特幣網(wǎng)絡(luò)平均每 10 分鐘只產(chǎn)生 1MB 大小的區(qū)塊,在如今的寬帶網(wǎng)絡(luò)環(huán)境下幾乎是可以忽略不計的。

近年來,隨著 Conflux 等新一代區(qū)塊鏈的發(fā)展和成熟,區(qū)塊鏈的吞吐量有了質(zhì)的飛躍,網(wǎng)絡(luò)帶寬越來越成為限制區(qū)塊鏈性能進(jìn)一步提高的瓶頸。這次,就讓我們來聊一聊 Conflux 是如何優(yōu)化帶寬的使用效率的。

交易廣播是在區(qū)塊鏈上達(dá)成共識的第一步。每當(dāng)用戶發(fā)起一筆交易時,這筆交易從客戶端程序出發(fā),被發(fā)往一個或幾個全節(jié)點。之后,全節(jié)點之間通過點對點網(wǎng)絡(luò)將交易轉(zhuǎn)發(fā)給各自的鄰居節(jié)點,直到最終所有的全節(jié)點都收到這筆交易。

區(qū)塊鏈的吞吐量越大則每個節(jié)點需要轉(zhuǎn)發(fā)的交易數(shù)量也就越多。因此,在區(qū)塊鏈的吞吐量和網(wǎng)絡(luò)帶寬處于相同的數(shù)量級時,交易轉(zhuǎn)發(fā)過程的帶寬利用率將直接影響了整個區(qū)塊鏈系統(tǒng)最終的吞吐性能。

我們首先來看一個最簡單的方案:每當(dāng)一個全節(jié)點收到一筆新的交易時,該全節(jié)點就將這筆交易發(fā)送給它的所有鄰居節(jié)點。

按照上述方案,每個節(jié)點將多次從不同的鄰居節(jié)點收到同一筆交易,這意味著無論是交易的發(fā)送還是交易的接收,都有著成倍的冗余,網(wǎng)絡(luò)帶寬的利用率自然也非常低。以一筆 200 字節(jié)大小的交易為例,如果每個節(jié)點有 8 個鄰居,那么這筆交易就要為每個全節(jié)點帶來約 1.6kB 的發(fā)送量和 1.6kB 的接收量——而其中大部分流量是被浪費掉的。

即使是比特幣,作為一個吞吐率只有 7 筆/秒、交易轉(zhuǎn)發(fā)的帶寬利用率完全不構(gòu)成性能瓶頸的系統(tǒng),也不再使用上面這種毫無優(yōu)化的方案了。

比特幣的方案是,當(dāng)一個比特幣節(jié)點 A 第一次收到這筆交易時,它將這筆交易的哈希值(32字節(jié))發(fā)送給所有的鄰居節(jié)點(除了發(fā)給它交易的節(jié)點)。鄰居節(jié)點 B 收到哈希值后查看自己已經(jīng)收到的交易中有沒有哈希值一樣的。如果有,就說明 B 已經(jīng)收到過這筆交易,不需要再接收一次;如果沒有,B 就向 A 請求這筆交易的完整內(nèi)容。

上述過程中,發(fā)送交易哈希值的環(huán)節(jié)稱為 announcement,對于交易哈希值的檢測可以保證每個節(jié)點只需要接收一次完整的交易內(nèi)容,MT5避免重復(fù)傳送完整交易帶來的帶寬浪費。

但是 announcement 本身也需要使用網(wǎng)絡(luò)帶寬。粗略地計算可知上述方案中每個節(jié)點在announcement 環(huán)節(jié)約發(fā)送 250 字節(jié),雖然比 1.6kB 少了很多,但仍超過了轉(zhuǎn)發(fā)一筆交易的數(shù)據(jù)量。

我們的目標(biāo),是在比特幣交易轉(zhuǎn)發(fā)方案的基礎(chǔ)上,將 announcement 環(huán)節(jié)產(chǎn)生的數(shù)據(jù)發(fā)送量壓縮至八分之一。

為了實現(xiàn)這一點,最簡單的方法是縮短 announcement 環(huán)節(jié)廣播的交易哈希值長度。本文中,為了將這個哈希值與應(yīng)用層面(錢包/智能合約)所使用的 32 字節(jié)交易哈希值區(qū)分,我們將應(yīng)用層面交易的哈希值稱為交易的 ID, 轉(zhuǎn)發(fā)中 announcement 環(huán)節(jié)用到的短哈希值稱為交易的 FID (Forwarding ID).

在比特幣的方案中,F(xiàn)ID 與 ID 相等,長達(dá) 32 個字節(jié)。如果我們將 FID 設(shè)為 ID 值的前 4 個字節(jié),就可以達(dá)到降低數(shù)據(jù)發(fā)送量的目標(biāo)。

然而,更短的交易 FID 在節(jié)省帶寬的同時也會帶來安全性上的隱患。如果兩筆不同的交易 Tx1 和 Tx2 有相同的交易 FID ,一個節(jié)點收到第一筆交易 Tx1 后,在鄰居節(jié)點發(fā)來第二筆交易 Tx2 的 FID 時,會因為 FID 沖突誤認(rèn)為自己已經(jīng)收到了這筆交易,從而不再請求 Tx2 的完整內(nèi)容。這樣將阻塞第二筆交易 Tx2 在網(wǎng)絡(luò)中的廣播。

我們可以具體來算一下交易的 FID 沖突發(fā)生的概率:

假設(shè)交易的生成速率是每秒 6000 筆交易,每個全節(jié)點收到一筆交易 FID 時,會將它和過去 5 分鐘內(nèi)收到的 FID 對比,來判斷是否請求這筆交易的完整內(nèi)容。這樣,一筆交易的 FID 和已經(jīng)存在的交易 FID 沖突的概率是 6000 * 300 / 232,大約是 0.04 %。這意味著每秒平均有 2.4 筆交易會因為 FID 值沖突而無法廣播。

雖然 0.04% 的沖突概率看似不是很高,但這只是沒有攻擊的正常情況。利用特定的攻擊策略,一個攻擊者可以阻塞任意一筆交易的廣播,從而實現(xiàn)阻止特定交易的目的。

攻擊的策略也并不復(fù)雜:4 字節(jié)的 FID 一共只有 232 個可能的取值,也就是大概 42 億個。攻擊者只要為每一個 FID 取值預(yù)先構(gòu)造一筆交易并存起來,然后就可以根據(jù)受害者廣播的交易的 FID 值,從自己預(yù)先存的 42 億筆交易中找到 FID 值相同的交易,并搶在受害者前面發(fā)送到盡可能多的節(jié)點,則先接收到攻擊者發(fā)送的交易的節(jié)點就會因為 FID 沖突而忽略受害者的交易。即使受害者重發(fā)了另一筆交易,攻擊者也有能力重復(fù)這個過程。

根據(jù)概率上的計算,攻擊者要挑選 42 億個 FID 不同的交易,需要嘗試構(gòu)造約 1000 億筆交易。對于服務(wù)器級的 CPU 來說,構(gòu)造約 1000 億筆交易只需花一個星期的時間。計算所需的存儲空間在優(yōu)化后也只需要 32GB。

從整體來說,實施上述攻擊的成本并不算很高。但是在特定的情景下(如 Fomo3D 等合約),交易被阻塞可能為受害者帶來不小的損失。所以這種風(fēng)險必須從一開始就被排除掉。

以上就是Conflux是怎樣優(yōu)化帶寬的使用效率的,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI