在區塊鏈行業,經常能聽到「區塊擁堵」、「交易速度太慢」等詞彙,其中最具代表性的就是此前以太坊上的「加密貓」造成的長時間網路擁堵事件。於是區塊鏈的擴容成為底層公鏈加速落地的一大突破口。在諸多解決方案中,分片成為最受熱捧,也最有望實現的擴容方案。top鏈就是利用分片技術實現擴容的代表性公鏈。
區塊鏈高速路上的分流術
所謂分片其實是一種傳統資料庫技術,它將大型資料庫分成更小、更快、更容易管理的部分,這些部分就叫做資料碎片。在區塊鏈中,分片就是把網路上的所有交易分成不同碎片,由各個節點組成的分片同時進行處理,把工作分散到每個分片,加快了處理速度。
有乙個形象的比喻,如果把區塊鏈比作高速公路,把待驗證的交易比作汽車,把驗證交易的節點比作收費口。原本繁忙的高速公路上只有乙個收費站,收費站裡只有乙個收費口,車輛排著長隊等待通過,結果就是越積越多,交通堵塞,幾近癱瘓。而分片技術就好比增加了十個收費口,極大提高了汽車通過的速度。按照這樣的思路,分片技術能夠顯著提高區塊鏈的交易速度。
儘管分片技術聽起來振奮人心,但是實現起來卻格外困難。也正因此,幾年前就宣布採用分片進行擴容的以太坊直到現在還沒有完成公升級。而top團隊經過近兩年時間的鑽研和開發,最終在今年11月8日宣布主網上線,也標誌著全球首條全狀態分片公鏈的誕生。
top的網路分片與節點擊舉
top鏈的全狀態分片分別是指網路分片、計算分片和狀態分片。top的網路分片是指把top網路劃分成幾個由更少節點組成的群組。比如,整個top網路有1000個節點,那就可以把top網路分成10個分片,每個分片由100個節點組成。實際情況是到目前為止,top網路共有4個分片,每個分片的節點數為256個,top的最大分片數量可以擴充套件到1024個,每個分片的節點數也可以提高到512個。隨著分片數和節點數量的不斷增加,top網路的處理能力將會越來越強,速度也會越來越快,最終形成良性迴圈。
那麼網路分片完成後,如何把節點分配到各個分片中呢?其實區塊鏈的節點就像一群學生,有勤奮好學、盡力完成任務的好學生,也有調皮搗蛋、專搞破壞的壞學生。如果把分片看做乙個班級,一旦班級裡的壞學生數量超過好學生數量,整個班級就會被壞學生掌控。所以必須保證每個分片中的「好學生」數量大於「壞學生」數量。因此,節點如何被分配到每個分片也顯得尤為重要,因為一旦乙個分片**現過多的「壞學生」,就會對整個分片造成破壞。當然節點的分配也肯定不是由top團隊自行決定,否則就違背了區塊鏈「去中心化」的意義。
針對如何把節點分配到各個分片的問題,top團隊採用了信標鏈對節點進行隨機選取。信標鏈是一條新的鏈,所有分片都連線到信標鏈上,並與之通訊。信標鏈的第乙個作用就是管理驗證者,就相當於管理節點這幫「學生」的班主任。當然,要成為驗證者,首先需要向「班主任」繳納一定金額的token,然後「班主任」就會隨機把這些「學生」分配到各個分片中去充當驗證者。
如果這個「學生」表現良好,做了身為驗證者應該做的事就會得到獎勵,相反,如果他違反規則就要受到懲罰,懲罰就是從抵押的token中扣除一部分,而當抵押金低於一定額度後,信標鏈就會將他從驗證者列表中移除。這就有效減小了節點作惡的可能性,而且作惡的節點被分配到同乙個分片的概率也相當小,可以保證區塊鏈的安全。
top如何成功解決狀態分片難題?
所謂計算分片就是在網路分片的基礎上,再把一筆筆的交易分配給每個分片來進行處理,比如可以根據賬戶位址進行分配,只要是某個位址發起的交易都由某個分片的節點進行處理。而在三種分片中,最難實現的是狀態分片,這也是很多分片公鏈無法突破的一大難點。
狀態分片提出,不同的分片需要儲存不同的資料,真正做到將資料庫分開,資料都分散放在不同的分片上。每乙個狀態分片中的節點都儲存著自己分片中的所有資料,而不是整個區塊鏈的資料。比如兩個使用者的資訊分別在兩個分片中儲存,那麼在任何乙個分片中都只有其中乙個人的資訊,而非同時保留兩個人的資訊。
因此,如果一筆交易的發起人和接受者處在兩個不同的分片上,交易資訊就必須在兩個分片之間進行共享,這時兩個分片之間就需要進行資訊的交換。而且,如果某個分片遭受攻擊,其中的交易就會遭到中斷,別的分片的節點無法代替工作,只能從遭受攻擊的分片內部節點開始修復。也就是它的容錯性和抗風險能力就會降低,甚至還有過度中心化的風險。
以太坊2.0是通過信標鏈來解決跨片之間的交易的。信標鏈不同於以太坊的主鏈,它儲存的是一系列經過計算的字串。這個字串的產生基於計算機中的一種雜湊運算,它就像生活中將豆子放進豆漿機處理之後,不能根據得到的豆漿去判斷之前豆子的形狀大小以及哪顆豆子對應哪滴豆漿一樣。而且,一旦多加了一顆豆子,得到的豆漿就會發生很大的改變。這個豆漿機就像是雜湊演算法,不能通過雜湊之後的結果去推導雜湊之前的樣子,而且只要雜湊之前的資料有一點改變,雜湊之後的結果就會發生很大的變化。
在以太坊信標鏈中,驗證者驗證並簽名交易,比如一筆轉賬交易,然後經過雜湊變成一段字串,將這個字串存到信標鏈中,此時這個字串就代表了一筆交易的資料,這樣做的好處就是,不用去深入**這筆交易到底在哪個分片中發生。分片中的狀態一旦發生改變(比如某個賬戶餘額發生了一點改變),驗證者就會把這個變化匯報給信標鏈。因此,信標鏈實時跟蹤著分片的變化,也建立起了分片間的聯絡與通訊。
但是,以太坊2.0這種對信標鏈過度依賴的設計會給其帶來很大的壓力,尤其是如果要實現海量業務上鏈和實時交易,信標鏈將會成為乙個很大的瓶頸。因此,top鏈並沒有通過信標鏈來實現跨片之間的資訊同步,而是通過三層共識網路中路由網路(routing network)的審計節點來實現。top鏈的審計節點第一是對分片已經驗證過的交易做審計,以防止分片內交易被篡改,第二就是做分片間的狀態同步,類似於跨行轉賬。這樣的設計讓top信標鏈只負責節點註冊、入網管理以及節點擊舉和輪換,大大減輕了其負擔。
實現了全狀態分片的top鏈在區塊鏈擴容方面基本已經掃除了障礙,再加上鏈上交易確認速度快,交易費用為零等特點,top鏈將會成為特別適合通訊、遊戲、社交、大資料、人工智慧、iot等海量高頻業務上鏈的公鏈。top鏈也將由此正式拉開「區塊鏈+」大規模落地的序幕。
區塊鏈分片技術的設計(思考)
區塊鏈的三難困境 去中心化 擴充套件性 安全性 犧牲擴充套件性方案 現在的位元幣 以太坊都是通過犧牲擴充套件性來換取安全性的。因為以太坊網路上的每筆交易,需要每個節點都計算 儲存和廣播一次。這意味著以太坊網路的計算資源,不可能大於單個節點的計算資源。將節點的計算 儲存 寬頻等資源記作,o c 將以太...
到底什麼是REST中的狀態
廢話不多說,貼上群裡大佬給的例子 業務場景,乙個迷宮api,使用者登陸後在起點,用請求進行移動 有狀態的unrestful介面 使用者傳送請求,比如我要往前走,伺服器根據儲存的使用者座標進行計算,能走就返回移動成功,不能走就返回有障礙物,用同樣的引數去請求,但是每次返回的結果卻不一樣,並且資源的狀態...
原型鏈 JS中的原型鏈到底是什麼
js中的建構函式和普通函式沒有本質區別,要用呼叫方式的不同來區分。在呼叫建構函式時要用new func 的方法來呼叫,此時函式會預設返回this 為了與普通函式區分,建構函式的函式名一般以大寫字母開頭。function person name,age var xiaoming person xiao...