乙個可爭議的斷言建立了乙個邏輯決策點,協議最終要解決這個問題。如果da有效,系統將進入右上角的新狀態,有乙個新的狀態雜湊,並有da中指定的***(支付和日誌)。或者在另乙個分支上,da無效,它被拒絕,狀態不變。
舊的arbitrum協議
最初的arbitrum協議每次處理乙個可爭論的斷言。某個當事方會提出乙個da,然後會有乙個質疑期,在此期間任何人都可以對da提出質疑。如果沒有人提出質疑,則確認da;否則將執行爭議協議,取消da(為安全起見,以防提出者和質疑者合謀 "烹製 "爭議結果)。
這很簡單,但有兩個缺點。首先,由於一次只能有乙個訴訟請求,虛擬機器的進展速度將受到限制。本質上,在每個挑戰期內都必須停止進展。第二,惡意方可以通過故意挑戰為該虛擬機器製作的所有da來凍結該虛擬機器。這將使攻擊者付出一系列的賭注,但如果他們願意付出這個代價,他們可以至少在某些情況下長時間地保持進度。
新的和改進的
我在這篇文章中介紹的新的arbitrum rollup協議解決了上述兩個缺點。多個da可以被 "管道化",這樣乙個虛擬機器的進度就像驗證節點可以模擬虛擬機器的計算一樣快。其次,正如我們在下面會看到的那樣,乙個惡意行為者不能減慢進度,他們只能暫時延遲鏈上對結果的認可,而這些結果對誠實的各方來說已經是 "不可信的最終結果"。
那是怎麼做到的呢?讓我們來挖掘一下新協議......
每個狀態最多可以有乙個da跟隨它。如果乙個da沒有跟隨狀態,那麼任何人都可以建立乙個跟隨它的da,建立乙個新的分支點。結果將是一棵可能的未來樹。
協議的另乙個重要部分是staking。任何人都可以放乙個stake在樹上的乙個方格上。通過在乙個方格上staking,你是在斷言這個方格最終會被協議所確認。換句話說,你是在斷言你已經在從當前狀態到你所staking的方格的路徑上的每乙個da採取了正確的分支。如果你錯了,你可以預期失去你的stake資產。
staking的行動不能被撤銷。你可以將你的stake向右移動--在每個分支點選擇向上或向下--但你不能向左移動,因為這相當於撤銷你之前做出的stake承諾。
做出可爭論斷言的一方需要在該da的 "da有效 "繼承人上staking。通常情況下,他們可以通過將現有的賭注移動到右邊,將其放在所需的繼承方格上來滿足這一要求。在極少數情況下,如果他們不能做到這一點,他們可以在所需的方格上放置乙個額外的stake。但要注意的是,他們就會在兩條不一致的道路上staking,這樣他們最終至少要失去兩個stakes中的乙個--自相矛盾可不是明智之舉)。)
關於賭注還有乙個細節:如果你所賭的方塊被確認並成為公認的歷史,你可以選擇收回你的賭注。這意味著,如果你是正確的,你可以將你的賭注保留在原地,等待系統 "趕上 "你,然後你就可以收回你的賭注。
在這一點上,你可能會擔心,可能性的樹狀圖會變得非常大,而且『枝繁葉茂』。這在實踐中是不可能發生的,因為這需要多方對相互不一致的結果進行押注。他們中只有乙個人可以是正確的,而其他人都會失去他們的利益。更有可能的是,這棵 "樹 "實際上是乙個有效的da鏈,乙個接乙個,而且所有的賭注都在同乙個結果上。
staking期限
我們需要系統在時間過長之前,對每個可爭議斷言做出決定。所以,當乙個da被新增到鏈上,建立乙個分支點時,會有乙個deadline與該da相關聯。這個deadline在未來足夠遠,如果大家選擇這樣做的話,就有時間檢查這個da是否有效,並在鏈上得到乙個交易來押注這個da的結果。如果有人想承諾支援或反對該da的有效性的賭注,他們必須在截止日期之前這樣做。(在截止日期後,仍然可以引入利害關係,但他們不參與決定支援或反對該da。) 一旦到了最後期限,所有與決定該訴訟請求有關的利害關係都將被告知。
爭議如果alice和bob分別位於不同的位置,那麼有兩種情況之一是真的。要麼是有一條從其中乙個到另乙個的向右移動的路徑--這意味著他們的主張是一致的--要麼就沒有這樣的路徑。如果沒有一條向右移動的路徑連線alice和bob的方塊,那麼他們一定是在某些事情上有分歧。他們之間總會有乙個獨特的爭議點--乙個獨特的da,對於這個da,他們中的乙個人以這個da有效為賭注,而另乙個人則以它無效為賭注。
每當雙方發生爭議時,系統可以啟動雙方之間的互動式爭議解決協議。我沒有篇幅在這裡描述爭議解決協議--我只想說,這是乙個類似於我們在其他arbitrum檔案中描述的二段式互動協議。
爭議解決協議的結果是,有一方將被認定為不正確。該方將喪失其利益。賭注將被從其所在的鏈上抹去。其中一部分將交給爭端中的另一方,其餘的將被銷毀。
多個糾紛可以同時進行,但每個賭注者一次最多只能參與乙個糾紛。因為輸家的賭注會被抹去,所以每次糾紛都會減少系統中的分歧量。輸掉賭注的當事人如果願意可以重新賭注,但新的賭注將無法影響賭注期限已經過去的da。這樣做的效果是,在乙個da的賭注期限過後,爭端將逐步消除關於如何處理該da的任何分歧。
確認結果
當乙個da的下注截止日期過後,所有剩餘的及時(下注截止日期前)下注都在該da的同一分支上,系統可以確認該da的結果。該da被接受或拒絕,當前狀態移動到該da右側的相應方格。
如果da被確認為有效,例如如支付,就會在鏈上生效。虛擬機器的狀態就是這樣向前移動的。
在一般情況下,當事人會誠實地行事,因為他們不想因為押注在虛假的索賠上而失去自己的賭注。只有有效的da才會被斷言,在乙個單一的鏈條上,沒有人會在任何da的無效分支上押注。在這種情況下,每乙個da都可以在其押注期限到期後立即得到確認。
為什麼它是去信任的
arbitrum rollup的乙個重要屬性是它是去信任的--乙個誠實的一方可以迫使虛擬機器表現正確並取得進步。要知道為什麼,想象一下,alice總是在每個da上押在真實的分支上,如果樹曾經空了,她就會斷言da。
因為alice是在真實的樹狀圖上staking,所以她會贏得她所陷入的每一場糾紛。如果其他人不同意alice的觀點,他們要麼(a)在與第三方的無關糾紛中失去自己的股權,要麼(b)最終與alice發生糾紛,並將股權輸給她。無論哪種情況,所有與alice意見相左的人最終都會失去自己的股權。只有與alice意見一致的stake才會存活,所以alice在樹上的路徑最終將是唯一一條有及時stake的路徑--而alice的路徑將被確認。
因為這種方式的系統是不可信的,如果alice被押在乙個方塊上,並且她知道通往那個方塊的路徑是真實的,那麼alice就可以確定自己所在的方塊最終會被確認。對於alice來說,那條路徑就如同最終的一樣。
即使你沒有被押在一條路上,如果你看到有好幾個人被押在這條路上,而且你相信這些人中至少有乙個人是誠實的,那麼你可以肯定那條路最終會被確認--就你而言,那條路就是最終的路。
去信任最終性的好處
為什麼說結果的去信任性是有價值的?經典的例子來自於之前對其他rollup協議的討論。假設乙個虛擬機器要向alice進行支付。支付事件是在誠實的路徑上,但要在鏈上確認支付發生的方塊,還需要一段時間。
去信任性的結果就是給alice提供了乙個馬上拿到錢的方法。如果bob有立即支付的錢,他可以馬上把錢給alice,作為交換,alice把未來尚未確認的付款轉讓給bob(加上支付給bob的最低費用)。bob只有在他能確定付款會真正發生的情況下才會想這麼做。bob可以通過押注誠實的結果來確定這一點--那麼他就會對付款最終會發生充滿信任的信心。不僅僅是bob能做到這一點,任何有資金的人都可以借給他。任何有資金的人都可以用同樣的方式把資金借給alice和其他像她一樣的人。這些人可以通過提供更低的費用來相互競爭,促使alice馬上獲得資金的成本降低。
關鍵的一點是,這種市場機制的可行性取決於去信任的結果。如果 "每個人 "都已經知道這件事最終會被確認,那麼一件事在鏈上確認的延遲就不會有那麼多不便。
不僅對於支付是如此,對於虛擬機器做的其他事情也是如此。如果虛擬機器要發出乙個日誌項,宣布某件事情已經發生,那麼去信任的結果意味著任何人都可以肯定地行動,該日誌項將在鏈上得到確認。
延遲攻擊
因為這個系統是有去信任性的,所以壞人不能強行製造錯誤的結果。他們可以嘗試做的是減緩進展。這樣做需要他們犧牲利害關係,如果利害關係的金額很大,那麼代價就會很高。
讓我們想象一下,有人有動機發動延遲攻擊,而且他們願意犧牲利害關係。他們能造成的最壞的損失是什麼?
首先要注意的是,壞人無法阻止誠實的當事人繼續建立出誠實的路徑。而且他們也無法阻止誠實方在最終確認誠實分支的過程中獲得去信任的信心。
攻擊者能做的就是在假分支上staking,以延遲誠實路徑的鏈上確認。他們每放乙個stake,就會對誠實方多產生一次糾紛,在這種情況下,誠實方就會拿走攻擊者的一大塊stake。一旦攻擊者的所有stake都被拿下,鏈上進度將繼續進行。
如果攻擊者將多個賭注放在虛假的結果上呢?那麼這些賭注就必須在糾紛中逐一拿下。如果有多人押注在誠實的結果上,這些人都可以對攻擊者進入糾紛,同時努力拿下攻擊者的賭注。而且注意,大家都會很清楚發生了什麼事,很多人都會想參與進來,押注在真實的結果上,這樣他們就可以加入到利用糾紛搶奪攻擊者股權的餵養狂潮中。如果有k人在誠實的一方下注,那麼攻擊者將花費k個賭注來購買乙個爭端期的延遲。如果攻擊者下更多的賭注,那很可能會吸引更多的老實人賭注。這對攻擊者來說是個不好的動態。
優化可以進行各種優化,以減少操作協議所需的鏈上記賬量,降低鏈上氣體成本,並使針對延遲攻擊者的有益餵養狂潮更容易上演。我不會在這裡鑽研這些優化,這篇文章已經夠長了。
前進的道路
我們正在offchain實驗室構建這個協議。預計這個arbitrum rollup協議將很快被推送到我們的開源**庫中
一文讀懂區塊鏈衍生技術 擴容
在區塊鏈領域,對於 擴容 一直是爭議不斷的。為什麼要有 擴容 這個事情呢?這是因為,位元幣的區塊容量太小,導致位元幣系統處理交易速度過慢,於是,位元幣社群提出一種設想 通過擴充套件位元幣區塊容量這種方式來提公升位元幣處理交易的速度 後來,以太坊也提出了一些擴容手段。下面我們將用通俗的語言,為大家介紹...
一文讀懂Nginx
問 nginx的負載均衡演算法有什麼?預設是什麼演算法?答 1 輪詢 按請求的時間輪詢查空閒的後端伺服器 2 指定輪詢機率 機率的原因是後端伺服器的效能不均勻,好的多分點,差的少分點 3 固定ip繫結固定伺服器 預設是加權輪詢,就是優先訪問權重高的伺服器 問 nginx是單執行緒的嗎?答 是單執行緒...
一文讀懂SpringMVC
主要講的是dispatcherservlet這個類 ioc其實是乙個map,工程啟動後掃瞄路徑,根據類的全限定名建立bean 問 怎麼根據路徑找到方法?map還存key為 aaa value為該controller例項 問 autowired原理?自定義註解,在載入的時候,掃瞄controller層...