前言
在之前的文章中,我們看到了在DAG拓撲結構中可能出現的問題是定義區塊和轉賬的順序。在這篇文章中,我們描述了Taraxa的機制,該機制不僅可以確保在BlockDAG中進行排序,而且可以確保排序的過程是安全和公平。
為什么排序具有挑戰性?
在BlockDAG中進行排序有什么困難?
如果只是查看任何DAG數據結構,我們就只能建立部分排序,這意味著我們只能確定某些塊之間的排序關系,而不能確定所有塊之間的排序關系。這是一個例子。
在上圖中,我們可以100%確定地說在排序中藍色塊肯定在綠色和橙色塊之前出現。為什么?由于綠色和橙色塊指向藍色塊,這意味著在創建橙色和綠色塊時,藍色塊已經存在,否則橙色和綠色塊不知道他們會指向它。
但是,怎么才能知道綠色和橙色塊之間的排序關系呢?這個問題沒有確定的答案,答案具體取決于使用的排序算法的類型,對于不同的算法,順序可能會完全不同。
在排序過程中,我們不僅要保留一個自由度,而且還需要做出許多選擇以確保排序算法既公平又安全,因為需要確保不會出現不誠實地參與者對大多數誠實的網絡參與者給予偏見或進行攻擊。
現在來看一下Taraxa設計的BlockDAG的排序算法,看看我們如何解決這些問題。
人氣比賽
在Taraxa的BlockDAG拓撲結構中,每個區塊都包括向后的指針,這些指針不僅指向單個父塊,而且還指向區塊塊提議者已經看到并相信的DAG邊界上的所有塊。這里有很多概念,讓我們一一解開。
什么是邊界?在BlockDAG中,邊界指代的是一組最新的,沒有其他區塊指向它們的區塊。
安全團隊:FTX交易所遭到gas竊取攻擊事件技術分析:10月13日消息,據Beosin EagleEye Web3安全預警與監控平臺的輿情消息,FTX交易所遭到gas竊取攻擊,黑客利用FTX支付的gas費用鑄造了大量XEN TOKEN。Beosin安全團隊第一時間對事件進行了分析,結果如下:
1.以其中一筆攻擊交易為例
(0x8eb73bd5c08318a4cfd233940c3a58744830cda999e59ecbc56f094618a91d69),攻擊者先在鏈上部署攻擊合約(0xCba9b1Fd69626932c704DAc4CB58c29244A47FD3)
2.FTX熱錢包地址會向攻擊合約地址轉入小額的資金,利用攻擊合約(0xCba9...7FD3)進行批量創建子合約。由于整個攻擊中創建了大量合約,并且每次執行完子合約之后,子合約都會自毀。
3.接下來子合約fallback()函數去向Xen合約發起鑄幣請求,如下函數,claimRank()函數傳入一個時間期限(最小1天)進行鑄幣,鑄幣條件是只用支付調用gas費,并無其他成本,并且claimMintReward()函數為提取函數,該函數只判斷是否達到時間期限(本次黑客設置的時間期限為最小值1天),便可無條件提取。但在此次調用過程中,交易發起者為FTX熱錢包地址,所以整個調用過程的gas都是由FTX熱錢包地址所支付,而Xen鑄幣地址為攻擊者地址。
4. 1-3中的步驟,重復多次,并且每次重復過程中都會將已到期的代幣提取出來,并且同時發起新的鑄幣請求。
截止發文時,通過Beosin Trace追蹤發現,FTX交易所損失81ETH,黑客通過DODO,Uniswap將XEN Token換成ETH轉移。[2022/10/13 14:26:15]
聲音 | 加密技術分析師:自12月低點以來,萊特幣漲幅大于比特幣:加密技術分析師Marius Landman今日發推稱,自2019年12月17日的近期低點以來,比特幣上漲了28%,而萊特幣上漲了30%。萊特幣才是領先者,比特幣更強大只是人們的錯覺。[2020/1/8]
在上圖中,藍色塊是“邊界”區塊,而其余塊都不是。邊界區塊鏈很有趣因為這些區塊是所有區塊的基礎,其他由區塊提議者創建的區塊從排序上來說都在他們后面。從某種角度上說,下一個新區塊一定會引用這些區塊。但是,由于每個節點遇到的網絡傳播延遲不同,在遇到任何給定區塊時都會看到完全不同的情況,因此并非每個節點都會看到相同的邊界。因此,區塊提議者在任何給定的時刻都可能基于不同的邊界來構建其區塊。
什么是指針或父區塊?指針在圖中用箭頭表示,它是嵌入在一個區塊內的數據,該數據將此區塊“指向”或引用了另一個區塊。在Taraxa的DAG區塊結構中,指針會指向父塊集。父塊是被指針指向的區塊,因此可以理解為他們之前區塊的父親。
在上圖中,我們看到藍色區塊具有兩個指針,指向兩個由綠色塊表示的父區塊。這意味著在提議者創建藍色區塊時,提議者知道BlockDAG邊界上的兩個區塊,并認為這兩個區塊有效,因此將創建的藍色塊指向他們兩個。
這些指針將區塊連接起來的過程實際上是一次流行競賽-簡單來說比的是哪個區塊會被最多區塊所指向并且被認為是有效的。此外,如果指向某個特定區塊的區塊本身是“受歡迎”的,那么“受歡迎度”也將延續到該特定區塊。
現在,我們來衡量每個區塊的受歡迎程度。
權重-受歡迎的分數
動態 | 韋氏評級下調EOS技術分數:據cointelegraph消息,6月7日,美國金融研究公司韋氏評級在推特上宣布,由于區塊鏈在中心化方面存在“嚴重問題”,該公司下調了對EOS的評級。韋斯評級公司(Weiss Ratings)在推特上稱,這種加密貨幣存在嚴重的中心化問題,“他們上周的活動為緩解這一問題做了努力”,顯然指的是EOS開發商Block.one主辦的一場活動。6月1日,鑒于EOS的發展,Weiss決定降低EOS的技術分數。[2019/6/9]
為了衡量每個街區的受歡迎程度,我們采用了Zohar和Sompolinsky提出的GHOST協議。GHOST有助于根據嵌入在BlockDAG中的指針計算每個塊的權重。
什么是“權重”?如果將BlockDAG側向旋轉,則可以認為每個子區塊及其后代都與父代區塊隔離開了,因此GHOST下任何塊的權重就是該區塊及其所有后代的權重之和。
權重代表了所有試圖在該區塊上逐步建立其他區塊的集體努力,即使這種努力沒有得到協調并分散到多個后代中。
GHOST協議非常簡單,
>每個塊本身自然具有1的權重
>每個塊的重量等于其自身的重量加上指向它的所有塊的重量
>從DAG塊的邊界開始,然后向后測量
這是一個例子。
從邊界區塊開始,我們可以為每個區塊分配權重。藍色區塊位于DAG的邊界,沒有區塊指向它,因此它的權重為1。綠色區塊只有一個指向它的區塊,因此我們添加了綠色區塊自己的區塊權重加上指向它的區塊的權重,我們得到2,這是綠色區塊的新權重。再往前走,橙色區塊指向3個方塊,因此它的權重是三個方塊的權重加上自己的權重1:5+20+12+1=38的總和。
分析 | 慢霧發布TronBank “假幣攻擊”手法技術分析:TRC10 是 TRON 區塊鏈本身支持的技術代幣標準,沒有 TRON 虛擬機(TVM)。TRC10 提供了 2 個新參數:tokenValue、tokenId,msg.tokenvalue 表示當前 msg 調用中的標記值,默認值為 0。 msg.tokenid 表示當前 msg 調用中的標記 id,默認值為 0。tokenId 也是 Odyssey_v3.2 中的新功能。它可以在帳戶中名為 assetV2 的新地圖字段中找到。 使用 GetAccount(Account)獲取 tokenId 及其值。 TokenId 由系統從數字 1_000_001 開始設置。 創建新的 TRC10 代幣時,數字加 1 并設置此代幣的 ID。
TronBank 合約在 invest 函數內沒有判斷 msg.tokenid 導致任意的代幣(假幣)轉入,合約都以為是真幣 BTT。然后攻擊者再調用 withdraw 從合約中提取真幣 BTT。[2019/4/11]
看起來不錯,為啥我們現在不能按權重排序?好吧,不完全可以。這種簡單的策略存在一些非常細微的問題,讓我們進一步研究它們。
混淆順序的方法
讓我們看一個簡單的例子來理解為什么僅僅使用權重值作為排序機制的邏輯基礎是不夠的。
在上圖中,我們從場景(a)開始。
(a)我們看到有兩個橙色的區塊,它們的權重值都是1,所以它們的順序是模糊的。
(b)增加了另一個區塊,它指向前面的兩個區塊,但是現在它們的權重值都是2,而且仍然有不明確的順序。
分析 | CCN:比特幣價格技術分析:比特幣價格緩慢上行,與前一天的最低價6317美元相比上漲了4.5%。在盤初交易時段,BTC開始向6500美元逼近,盤中觸及約6580美元。在歐洲交易時段,BTC價格在高點附近開始穩定下來。在美國交易時段開始后,比特幣兌美元匯率已大幅下跌回調,目前已跌至6450美元附近。此外,ETF事件仍然會對交易員的買賣情緒產生影響。[2018/8/25]
(c)增加了幾個區塊,橙色區塊的問題并沒有消失,它們的重量仍然相同。不僅如此現在的情況更糟,新的問題是黃色區塊也有模糊的排序。
在上面的例子中,我們假設每個人都是誠實的——但我們仍然會遇到問題。如果你引入了一個惡意的玩家會怎樣?那個玩家可以在區塊DAG結構上主動地混淆排序。讓我們看看下面的例子。
在這個例子中,我們從(b)開始。
(b)我們有2個排序不明確的橙色區塊。
(d)另一個區塊出現并解決了這個問題,我們現在有了明確的排序。萬歲!
(e)但好景不長…一個惡意的玩家正在積極尋求保持模糊的排序,并創建了一個區塊(紅色),這增加了邊界區塊,算上這個區塊的權重就又回到了我們之前的問題,兩個橙色的區塊再次沒有很好的排序。
這種攻擊的另一個含義是,惡意的玩家不僅可以保持模糊的排序,還可以通過增加區塊前后切換排序,使網絡處于持續的混亂狀態。
雖然這些都是非常簡單的例子,但是這樣的問題可能會在更大的范圍內發生,也就是說整個區塊集群都處于不確定的排序狀態中。
那么我們如何解決這個問題呢?我們接下來會介紹錨鏈和幽靈指針的概念。
錨鏈-最受歡迎的途徑
計算權重之后的下一步是確定BlockDAG中的錨鏈。如果權重是每個區塊的受歡迎度評分,那么錨鏈是通過BlockDAG中的最受歡迎的路徑。在穿越(步行)路徑時所觀察到的區塊,也可以通過網絡得到廣泛的觀察(非常普遍)。
如何構建錨鏈?簡單!只要選擇一個起始點—或者在Taraxa的例子中,起始點是前一個具有實時最終性的區塊(我們關于實時最終性的文章即將發布)—然后向前走到它的子區塊中,每一步都選擇權重最高的區塊。這里有一個例子,
在上圖中,從G區塊開始向前走,有3個有重量的區塊可供選擇(381,765,381),其中最重的區塊是765。按照這樣的邏輯繼續朝這個方向走,從G區塊開始直到到達終點的路徑,就是構建出的錨鏈(綠色)。
這就是錨鏈生成的方法,它將BlockDAG“錨定”到一個路徑中,我們現在可以根據這個路徑構建一個排序算法。
雖然這種計算錨鏈的方法解決了每個被指向的塊具有相同的重量的問題,但是引出了另外一個問題,因為攻擊者仍然可以不斷地改變錨鏈(不收斂得很快)。所以我們引入幽靈指針,以幫助網絡更快地收斂到一個固定的錨鏈上,從而實現確定性排序。
并不是所有的指針都是一樣的
為了進一步防止網絡陷入無序狀態,我們引入了一個稱為
幽靈指針的特殊指針。其基本思想是在創建每個區塊時,它指向邊界上所有它看到并已驗證為合法的區塊,但是這樣的區塊是特殊的。
特殊區塊是錨鏈的終止區塊,每個新加入的區塊除了需要承認BlockDAG的邊界上存在其他合法區塊外,還將指向這個終止區塊的幽靈指針。這里一個重要的變化是區塊權重的計算中只考慮幽靈指針指向的區塊,而不考慮其他指針指向的區塊。
父塊變成了只有特殊的幽靈指針指向它的區塊。在TaraxaBlockDAG結構中,每一個區塊只會指向一個父區塊。其他的區塊只是簡單地觀察區塊樹的其他區塊,或者“祖先”——在以太坊,它們被稱為“叔叔”或“ommers”。這可以在前面提到,也可以非常明確地說明一個區塊可以有多少個父區塊存在。
這解決了一個基本問題,即在DAG圖所代表的隱式投票過程中,如何保證邊界上的所有區塊不是以模棱兩可的形式呈現。
讓我們來快速看一個例子,
>粗箭頭是幽靈指針(計算重量)
>細點箭頭是確認指針(沒有權重)
(a)兩個區塊(1.1和1.2)指向第一個創世區塊(0),粗線是幽靈指針,因為只有一個父區塊存在而這兩個區塊都指向它。現在的順序是模糊的,但是我們可以使用最低的哈希進行比較,假設(1.1)獲勝,并被認為是未來區塊的幽靈指針的候選。
(b)增加了3個區塊,但因為網絡延遲導致,不是所有這些區塊都在同一時間看到每一個新出的區塊,也就是說某些節點可以更快地看到某些區塊。例如,更近的物理距離導致的更少的網絡躍點會加快節點看到區塊的速度。區塊(2.1)和區塊(2.2)都見過前面的兩個區塊(1.1和1.2),所以它們都將幽靈指針指向這兩個區塊并誠實地將(1.1)標識為錨鏈上的終止區塊。但是,(2.3)沒有看到(1.1),所以它只能使用幽靈指針指向(1.2)而無法做其他事情。請注意,根據我們的規則,區塊的權重已經更新,但是只計算了使用幽靈指針指向它的子塊的部分。
(c)下一層的區塊出現了,第(3.1)區塊同時看到了(2.1)和(2.2)區塊,第(3.2)區塊同時看到了(2.1)和(2.3)區塊,第(3.3)區塊同時看到了(2.1、2.2和2.3)區塊。在發布時每個區塊選擇它們所看到的錨鏈上的終止區塊,并將它的幽靈指針指向它,然后繼續。
幽靈指針與錨鏈一起,有助于迫使網絡收斂到錨鏈上,穩定整體的排序。接下來,我們將描述如何最終基于錨鏈對區塊進行排序。
通過錨鏈排序
使用幽靈指針,讓我們重新計算前面的BlockDAG示例中的權重。請再次注意,只有使用幽靈指針指向的區塊才能將其權重計算到父塊中。
一旦錨鏈被繪制出來,我們就在錨鏈上的每個區塊(錨塊)周圍構造epoch。epoch就是讓錨塊可以觀察到的區塊數量,或者是錨塊直接或間接指向的塊。把他們想成是超級受歡迎的錨塊的朋友。
在上圖中,我們使用紅色虛線繪制每個錨塊epoch。不幸的是,第一個重量為25的錨塊只有他自己是epoch。下一個重量為21的錨塊具有epoc,包括它自己和它可以觀察到的另外兩個重量為1的塊。第三個錨塊的重量為18,只能觀察到一個錨塊。下一個塊的重量為17,它的epoch為3,其中包括一個塊的重量為1是它能夠直接觀察到,另一個塊的重量為2是它間接觀察到的。通過這種方法我們繼續區分直到每個錨塊的epoch都被繪制出來。
現在我們準備好對區塊進行排序了!區塊首先按epoch的順序從最古老到最新(從左到右)。在每個epoch中,通過查看哪個區塊指向哪個區塊,并使用權重值來決定哪個區塊先出現。或者如果這種方式失敗,則使用區塊hash作為與錨塊相同距離的區塊的判斷方式。
看epoch圖,G是第一個(1)。下一個epoch中只有一個區塊,所以這個權重25的區塊是第二區塊(2)。移動到下一個epoch,兩個權重值為1的區塊在權重21錨塊之前(因為它們是指向權重21的區塊),比較這兩個區塊的方式是比較誰的hash值更低來確定(3)和(4),然后,第5個區塊(5)是權重值21的區塊。我們一直進行下去直到所有epoch內的所有區塊都被排序。
如下所示,每個區塊中的數字表示順序,而不是權重。
我們終于搞定了!
但我們真的完成了嗎?那些沒有被加入排序的區塊呢?
在BlockDAG結構邊界附近總是有一些區塊不屬于錨鏈epoch的一部分。但是不要擔心,隨著更多的區塊被添加到邊界,它們最終會被包括在內。
難道錨鏈(以及因此產生的順序)不會隨著時間而改變嗎?
是的!在BlockDAG結構內存在重新排序的風險。這種風險隨時間呈指數下降,但從未真正消除,這就是為什么Taraxa需要實現了一個實時最終性過程(文章即將發布)。在BlockDAG結構中引入了真正的實時最終性,并且沒有重新排序的風險,這是在網絡中構建DApps的基礎。
請繼續關注。
?
撰文:PanteraCapital,區塊鏈風投機構 來源:鏈聞 總部位于硅谷的區塊鏈投資機構PanteraCapital可以算是最早涉足加密貨幣世界的專業投資機構之一.
1900/1/1 0:00:00來源:nakamoko 翻譯:頭等倉?? 本文作者LindaXie,曾擔任Coinbase產品經理,現為區塊鏈風投基金ScalarCapital聯合創始人,其成名作就是她的幣種指南系列文章.
1900/1/1 0:00:00據外媒1月31日報道,柬埔寨央行行長Chea?Serey于本周表示,該行將在本財政季度結束前推出一種“基于區塊鏈的”數字貨幣.
1900/1/1 0:00:00我經常聽到人們在區塊鏈領域中斷言以下形式的某種形式:如果平臺創建了本機代幣,則代幣本身的創建將對齊該激勵用戶在平臺上的最佳利益行事.
1900/1/1 0:00:00原文:《凱叔快評:疫情對區塊鏈行業有何影響》,有刪減發生在武漢的疫情已經嚴重影響每個人生活的方方面面.
1900/1/1 0:00:00本周美國佛羅里達州南區法院法官ChrisMcAliley駁回了UnitedAmerican針對礦機巨頭比特大陸和Kraken交易所的訴訟.
1900/1/1 0:00:00