干貨|為以太坊引入KZG承諾:工程師視角
什么是KZG10?承諾?
注3.6:如果啟動設置所計算的?,…?只計算到了指數d,這一組值是不能用來生成任何階數大于d的多項式的承諾的。反之亦然。
因為在安全的曲線上,沒有辦法用兩個點相乘來得出第三個點,所以??是一個無法求出的值,因此可以說,任意的承諾?c(f)?都只能表示一個階數小于等于d的多項式。
注3.7:使用KZG10承諾的證據基本上就是在證明?f(x)-某些余數?的結果可以按特定的辦法來分解,但這就要有一種辦法可以?相乘?這些因數,并與原始的承諾相比較?C(f)=f()。
為此,我們需要“配對方程”,就是一種能把曲線上的兩個點相乘并與另一個曲線點比較的乘法,因為我們無法直接讓這兩個曲線點直接相乘來得到合成的曲線點。
注3.8:上述兩個屬性,可以進一步用來證明某個承諾c(f)所代表的多項式f(x)的階數k小于d。
綜上,KZG10承諾可以有很好的屬性:
驗證承諾的過程是:提供底層多項式在任意點?r?上的值?y=f(r)?,以及除法多項式?q(x)=(f(x)-y)/(x-r)?在??點的值,并用?配對方程?來對比之前所提供的承諾?f。這就叫?開啟?在r點的承諾,而?q()?就是證據。容易看出,q(s)?就是?p(s)-r?除以?s-r?,恰好就是我們用配對方程來檢查的東西,即檢查?(f()-)*'=q()*'?。
Vitalik Buterin:賬戶抽象可為以太坊帶來數十億美元的收益:金色財經報道,最近在巴黎舉行的以太坊社區會議(EthCC)上的一次演講中,以太坊創始人Vitalik Buterin詳細介紹了賬戶抽象升級如何讓用戶用用于交易的代幣支付Gas費,從而吸引數十億人使用以太坊。帳戶抽象使用戶能夠從外部擁有的錢包(EOA)切換到基于智能合約的錢包。如果此次升級成功,錢包管理將比現在更加高效和輕松。Buterin和社區相信,這可以使加密技術得到廣泛采用。
此外,加密貨幣領域充斥著丟失助記詞或助記詞被盜的用戶。通過賬戶抽象,用戶可以創建充當可編程智能合約的非托管錢包。據報道,錢包恢復只是此次新升級帶來的眾多功能之一。Buterin相信此次升級可以給以太坊帶來數十億美元的收益。[2023/7/20 11:05:50]
在非交互且確定性的版本中,?FiatShamirHeuristic?提供了一種辦法來獲得相對隨機的點r:因為隨機性只跟我們嘗試證明的輸入有關,即,只要已經有了承諾?c=f()?,r就可以用哈希所有輸入來獲得,而?承諾的提出者?要負責提供?開啟點?和?證據。
使用預先計算好的拉格朗日多項式,f()?和?q()?都可以在?求值形式?下直接計算。要計算r處的開啟值,就需要把f(x)轉為?f(x)=a0+a1*x^1....?的系數形式。可以通過?反向快速傅立葉變換?來實現,復雜度為?O(dlogd),但甚至這里也有一種可用的替代算法,在?O(d)?的復雜度內完成計算,而無需使用反向快速傅立葉變換。
ZKSwap測試網激勵發放完成,Layer2轉賬成本為以太坊的1%:官方消息,基于ZK Rollup擴容技術的AMM去中心化交易所 ZKSwap (ZKS)表示,其測試網激勵的ZKS在ZKSwap的 Layer2 發放完成,在Layer2發送9000筆轉賬合計消耗的Gas成本(Layer2 到 Layer1 的上鏈費用)為1500美金。
對比而言,在以太坊主網完成9000筆轉賬需要消耗18萬美金的成本,ZKSwap上Layer2的轉賬成本只有以太坊的1%左右。官方預計,ZKSwap將在2月17日開啟代付Gas費用挖礦活動(Proof of Gas)和智能合約鎖倉挖礦活動。并在2月19日開啟流動性挖礦活動和交易即挖礦活動。[2021/2/16 19:52:20]
你可以使用單個開啟點和證據來證明f(x)的多個值,也就是多個索引值對應的數值,?index1=>value1、index2=>value2?…
除法多項式q(x)現在變成了f(x)除以零多項式?z(x)=(x-w^index1)*(x-w^index2)...(x-w^indexk)?的商
余數為?r(x)?
檢查?(f()-r())*'=q()*z(')
在PoS鏈的共同起步設置中,共享的數據塊會被表示為低階的多項式,KZG承諾可以用來檢查任意?隨機?分塊并驗證和確保?數據可得性,而無需獲得?兄弟數據點。這就開啟了隨機取樣的可能性。
Cardano創始人Charles Hoskinson:請不要再稱我為以太坊聯合創始人:Cardano創始人、IOHK CEO Charles Hoskinson在推特表示,他不希望人們稱他為以太坊聯合創始人。“你們能不能稱我為IOHK首席執行官和Cardano創始人?老實說,如果你們不停地提到E(以太坊),我就不會再接受采訪了。”
他還表示,自己只在以太坊工作了6個月,而他的很多精力都花在IOHK。此前,他最近更改了Reddit用戶名,以前使用ethereumcharles的昵稱,新昵稱是IOGCharles。( Cryptopotato)[2020/6/15]
現在,對于一個最大可能包含?2^28?個賬戶鍵的狀態,你需要至少?2^28?階的多項式來構建?扁平的?承諾。在更新和插入的時候,會有一些不便利。對任一賬戶的任意更改,都會觸發承諾的重新計算。
更新KZG10承諾
對任一?索引值=>數值?點的任何更改,比如更改了?indexk,都需要使用相應的拉格朗日多項式來更新承諾。復雜度約為每次更新?O(1)。
但是,因為f(x)本身也改變了,所以所有的見證?q_i()?,也即所有對第i個鍵值對的見證,也需要更新。總復雜度約為?O(N)
如果我們沒有維護預先計算好的?q_i()?見證,任何一條見證數據都要從頭開始計算,都需要?O(N)
聲音 | 江卓爾:分片提升容量難度大時間長 故而Vitalik提出使用BCH或者ETC作為以太坊數據層:7月25日消息,萊比特礦池CEO江卓爾表示,分布式系統(去中心化系統)有一個不可能三角,稱為分布式系統CAP定理,指的是在一個分布式系統中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區容錯性),三者不可兼得。Vitalik提出用分片方法提升容量,但分片方法的難點是一致性,也就是CAP中的C,Consistency(一致性),這個是一個要挑戰不可能三角的開發,所以開發難度很大,時間長,所以Vitalik才提出使用BCH或者ETC作為以太坊數據層的短期方案,來解決ETH的燃眉之急。[2019/7/25]
一種復雜度為?sqrt(N)?的更新KZG10承諾的構造
因此,為了實現理想承諾方案的第四點,我們需要一個特殊的構造:Verkletrie。
Verkle樹
需要表示的以太坊的狀態大約有?2^28約等于16^7約等于2.5億?個鍵值對。如果我們只使用扁平的承諾;甚至于,如果沒有預先計算好的見證數據,則每條見證數據都需要花?O(N)?來重新計算。
因此,我們需要把扁平的結構換成叫做?Verkle樹?的結構,跟默克爾樹一樣是樹結構。
動態 | Kakao稱其區塊鏈平臺Klaytn挖礦用時僅為以太坊的十五分之一:據Korea Herald消息,在首爾舉行的新聞發布會上,Kakao的區塊鏈子公司Ground X表示,其區塊鏈平臺Klaytn挖礦只花費了以太坊十五分之一的時間。以太坊挖礦時間為15秒,而Klaytn只需一秒即可完成。Ground X表示,區塊開采時間的縮短使得Klaytn每秒能完成300筆交易,而以太坊每秒只能完成20筆交易。[2019/7/9]
即,像默克爾樹一樣,構建出一棵承諾樹,這樣我們就可以保證階數?d?比較小。
每個父節點都編碼對其子節點的承諾,子節點就是一個映射,其索引值都存在其父節點內
實際上,父節點的承諾編碼了哈希后的子節點,因為承諾的輸入是標準化的、32字節的值。
葉子節點編碼了對其所存儲的數據的32字節哈希值的承諾;或者直接跳轉到數據,假如其32字節的數據的用法與下一章提到的?狀態樹?提議用法一樣的話。
要提供對一個分支的證據時,一個多值證明的承諾?D、E?可以圍繞使用fiatshamirheruristic產生一個相對隨機的點t來生成。
復雜度
這里是一份對?Verkle多值證明的分析
更新/插入葉子節點?index=>value?需要更新?log_d(N)?個承諾~?log_d(N)
為生成證據,證明者需要
計算?f_i(X)/(X-z_i)?在??處的值,用于生成?D?,復雜度總計?O(dlog_dN),但可以在更新/插入時調整以節約預計算,復雜度會變成Odlog_d(N)
計算?m?個~?O(log_d(N))?個?f_i(t)?來計算?h(t),總計為?O(dlog_dN)
計算?π,?ρ?,需要對?m~log_dN?個指數多項式的和做除法。需要約?O(dlog_dN)?來獲得分子的求值形式,以計算除法
證明的規模加上驗證的復雜度~?O(log_d(N))
Verkle樹構建
被提議的ETH狀態Verkle樹
單一的樹結構,存儲賬戶的?header?和?代碼分塊,還有?存儲項分塊,節點的承諾為階數d=256的多項式
把地址和頭/存儲空檔結合起來推導出一個32字節的?storageKey,本質上就是元組?(address,sub_key,leaf_key)?的一種表示
所推導的鍵的前30個字節用于構建普通的verkle樹節點pivots
后2個字節是一個樹高為2的子樹,表示最多65536個32字節的分塊
對于基本的數據,這個樹高為2的子樹最多有4個葉子承諾,來覆蓋haeader和code
因為一個分塊為?65536*32?字節的分塊表示為單個的字數,所以主樹上可能有許多子樹來存儲一個賬戶
Gas?定價方案
訪問類型?(address,sub_key,leaf_key)?的事件
每一個專門的訪問事件都收取?WITNESS_CHUNK_COST
每個專門的?address,sub_key?組合都收取額外的?WITNESS_BRANCH_COST
代碼默克爾化
代碼會自動成為verkle樹的一部分
一個區塊的header和code都作為一個樹高為2的承諾樹的一部分
單個分塊最多有4條見證數據,分別收取?WITNESS_CHUNK_COST,訪問賬戶需要收取一次?WITNESS_BRANCH_COST
數據采樣和PoS協議中的分片
ETHPoS的目標之一是能夠提交約1.5MB/s的數據量。要實現這一點,許多并行的區塊提議要能發出并在給定的12秒內驗證;也就是要存在多條分片,每個分片在每個slot都要發布自己的數據塊。若有大于2/3的投票支持,信標鏈區塊將包含分片數據塊,分叉選擇規則也將根據信標鏈區塊內所有數據塊及其祖先的數據可得性確定它是否能成為主鏈區塊。
注3:此時的分片不是鏈,任何隱含的順序都要由L2協議來解釋。
KZG承諾也可以用來構建數據有效性和可得性方案,客戶端無需訪問分片提議者發布的完整數據就可以校驗其可得性。
分片數據塊是?16384?個樣本,約為512kb;還有數據頭,主要由這些樣本相應的最大16384階的多項式承諾組成
但多項式求值形式?D?卻有?2^16384?的規模,即,1,w^1,…w^,…?w^32767,而W是32768的單元根
我們可以為數據擬合出最大16384階的多項式,并擴展到32768作為糾刪碼樣本,即計算?f(w^16384)?…?f(w^32767)
對每個點的值的證明也同時計算并與樣本一起發布
32768個樣本中獲得任意16384個都可以完全恢復出f(x)以及原始的樣本,即?f(1),f(w^1),f(w^2)…?f(w^16383)
這糾刪編碼的32768個樣本分為2048個分塊,每個分塊包含16個樣本,即512字節的數據;由分片提議者水平地發布,即將第i個分塊以及相應地證據發給第i個垂直子網絡,外加全局公開完整數據的承諾
在被指定的(shard,slot),每個驗證者都在?k~20?個垂直子網中下載和檢查這些分塊,并使用對應數據塊的承諾來驗證它們,以建立數據可得性保證
我們需要為每個(shard,slot)安排足夠多的驗證者,使得總體上一般都被獲取了;另外,還要滿足一些統計學上的要求,每個(shard,slot)約128個委員,需要有至少70個委員的見證,使得該分片數據塊能成功打包到信標鏈上,
至少需要約262144個驗證者
基準測試
如我們在?POCverklego代碼庫中看到的,以狀態樹的規模構建完一次verkle之后,插入和更新都非常快:
插入/更新的基準測試
證明生成驗證的基準測試
權益證明是科技時代一個偉大的算法發明。這個共識機制在區塊鏈經濟中起到了重要的作用。 共識機制 在類似以太坊這種去中心化區塊鏈的生態系統中,任何加密交易都需要被礦工證實真實性,確認交易安全之后才能.
1900/1/1 0:00:00區塊鏈安全是一個需要我們持續關注的問題,因為區塊鏈上的資產和傳統資產在本質上不太一樣,它是基于密碼學、公私鑰之類的技術。如果真的發生了詐騙的話,資產被追回的可能性是遠低于傳統資產的.
1900/1/1 0:00:00加密市場在國內經歷了三次大的監管,13年11月五部委發布《關于防范比特幣風險通知》強調比特幣不是貨幣,不能當做流通貨幣使用.
1900/1/1 0:00:00我們先來打個比方。 想象一下,我們回到了初中數學課堂上。「殘忍」的初中數學老師給我們每人發了一張卷子,上面列了100道數字很大的除法題。我們的任務是解出盡可能多的題.
1900/1/1 0:00:00涉區塊鏈存證效力范圍得以明確。6月17日,最高人民法院介紹我國互聯網司法發展情況,發布《人民法院在線訴訟規則》和《人民法院司法改革案例選編》.
1900/1/1 0:00:00盡管加密貨幣市場從5月份開始出現暴跌,但加密貨幣的總市值在過去一年內增長了400%,達到了約1.4萬億美元的高度.
1900/1/1 0:00:00