DAS 中二維裡德-所羅門碼的替代方案

本文為機器翻譯
展示原文

致謝:這是與 Emanuele Viterbo 和 Dankrad Feist 的合作成果,並得到了 ESP 撥款 FY24-1745“DAS 中二維裡德-所羅門碼的改進”的支持。

本文闡述瞭如何在以太坊 PeerDAS 協議中使用區塊循環碼 (BC 碼) 來替代一維 (1D) 和二維 (2D) Reed-Solomon (RS) 碼。我們提出了一種高效的編碼和重構方法。
在與 BC 代碼相同的實現框架內開發的算法
相應的 1D RS 算法。所提出的編碼算法也允許
KZG承諾方案的優雅集成。我們對其進行了評估和比較。
本文從碼率、停止率以及局部碼的大小等方面比較了BC碼與一維和二維RS碼的性能。更詳細的版本發表於SVF2026

區塊循環碼

SVD2025引入了塊循環 (BC) 碼,作為 PeerDAS 中一維(目前使用)和二維 RS 碼(預計稍後集成)的可行替代方案。與二維 RS 碼類似,BC 碼包含多個局部碼,每個局部碼都可以設計為[(n_0,k_0),D] [ ( n 0 , k 0 ) , D ]堆疊的一維 RS 碼。所謂堆疊的一維 RS 碼,是指碼字堆疊成 D 行(每行長度為n_0 n 0k_0 k 0列,表示信息符號)的[n_0D ,k_0D] [ n 0 D , k 0 D ] RS 碼。因此,它與 KZG 方案兼容。事實證明,BC 碼能夠實現某些速率、停止速率和局部碼大小的運行狀態,而這些狀態是 1D 或 2D RS 碼都無法實現的。

在二維RS碼中,符號排列在一個二維正方形網格中,每一行或每一列的符號都受到線性約束。在BC碼中,符號排列在一個圓上,該圓被分割成多個重疊的弧。每個弧都有兩個相鄰的重疊弧,一個在其左側,另一個在其右側(順時針方向)。每個弧上的符號都受到一組線性約束。我們將在下一小節中給出更具體的描述。

BC法規簡介

bc代碼
bc-code 1534×1471 210 KB

圖 1:塊循環碼示意圖。在本例中,綠色背景的信息符號與粉色背景區域的奇偶校驗符號組合,形成最終排列。閉合曲線內的符號組表示局部碼。

考慮圖 1 所示的包含n= 16符號的示例。圓上μ = 4個弧(其中兩個用閉合曲線標記),每個弧包含n₀=6符號這些符號均勻分佈在圓上。總共有k= 8不受約束的符號,記為 d₁ , , d₈ 每個局部碼包含k₀= 4不受約束符號。其餘符號的生成受到某些線性約束。在每個弧中,以某種方式添加 ρ =n₀-k₀= 2冗餘符號使得對應的局部碼成為一個一維 RS 碼。例如,對應於單個弧的符號向量(d_1, d_2, p_{11}, p_{12}, d_3, d_4) ( d1 , d2 , p11 , p12 , d3 , d4 )構成RS一個碼字。因此,一個弧與一個局部碼唯一對應,我們可以互換使用弧和局部碼這兩個詞。兩個相鄰局部碼的重疊區域恰好包含ω = 2ω = 2符號,因此我們將ω稱為重疊寬度。每個未約束的符號都屬於兩個不同的局部碼,我們稱之為重疊因子,λ 。在本例中,λ = 2λ = 2。SVD2025中提出的通用 BC 碼中, λ值可以更大其他參數,例如 ωρ 也可以進行適當的修改。SVD2025指出,對於λ=2,3 的BC可恢復的總擦除次數為λρ 可容忍的總擦除次數與n比值稱為停止率,S。下表總結了 BC 碼可調參數符號。

BC代碼的參數

符號參數的含義
\mu μ本地代碼數量
λ重疊因子(每個符號都是λ局部碼的一部分)
ρ本地代碼中冗餘符號的數量
ω重疊寬度(兩個相鄰本地碼重疊的符號數)
[n_0,k_0]=[\lambda\omega+\rho,\lambda\omega] [ n 0 , k 0 ] = [ λ ω + ρ , λ ω ]本地代碼塊長度和維度
[n,k]=[\mu(\omega+\rho),\mu\omega] [ n , k ] = [ μ ( ω + ρ ) , μ ω ]全局代碼塊長度和維度
R=\frac{\omega}{\omega+\rho} R = ω ω + ρ速度
S=\frac{\lambda\rho}{\mu(\omega+\rho)} S = λ ρ μ ( ω + ρ )停止率
R_0=\frac{\lambda\omega}{\lambda\omega+\rho} R 0 = λ ω λ ω + ρ本地代碼率
S_0=\frac{\rho}{\lambda\omega+\rho} S 0 = ρ λ ω + ρ本地代碼停止率

堆疊式 BC 代碼

WZ2024詳細描述了將一維 RS 碼轉換為堆疊一維 RS 碼的過程。該過程同樣適用於 BC 碼,因為 (a) BC 碼中的每個局部碼都是一維 RS 碼,(b) 編碼可以通過一系列局部一維 RS 編碼器完成,每個局部碼的評估點都經過精心選擇。我們將通過一個示例來描述堆疊 BC 碼的編碼過程。

編碼算法

編碼-1-1
編碼-1-1 1539×434 36.4 KB

圖 2編碼前 blob 0 的結構。

編碼-2-1
編碼為2-1,分辨率為1698×425,分辨率為36.1 KB

圖 3 BC 碼中擴展(編碼)blob 0 的結構。

我們藉助圖 2 和圖 3 所示的示例來描述編碼。這裡,重疊因子λ = 2 ,且有μ = 4 個局部碼。我們選擇堆疊參數D = 64 一個blob8192有限域符號組成,這些符號排列在k = 128單元中。每個 blob 都是 \ mathbb {F}_q^{(D \times k)} = \mathbb{F}_q^{(64 \times 128)} F ( D × k ) q = F ( 64 × 128 ) q的一個元素,而每個單元格屬於\mathbb{F}_q^{64} F 64 q 有限域q的大小要求將在下文中簡要描述。首先,我們將 Blob 0 的128單元格分割成μ = 4段,每個段包含ω= 32單元格。這四個段分別索引為 Segment(0,0)、Segment(0,2)、Segment(0,4)Segment ( 0,6 ) 編碼過程我們兩個連續之間生成放置包含冗餘符號循環地, Segment ( 0,6 )視為Segment ( 0,0 )相鄰 。由此得到的8片段,索引為Segment ( 0,0 )Segment ( 0,7) 共同構成擴展編碼)blob。通常,冗餘片段將包含ρ個單元,但在本例中,由於編碼率選擇為R=0.5,因此ρ = ω= 32 所以擴展blob 的每個片段都包含32 個單元格。

圖 2 顯示了具有128 128 個細胞的 blob 0。為了預測擴展 blob 的結構,與 Blob 0 0關聯的細胞的第二個索引保持為0\text{-}31,64\text{-}95,128\text{-}159,192\text{-}223 0 - 31 , 64 - 95 , 128 - 159 , 192 - 223 。擴展 blob 0 中具有上述索引的單元格將保留與 blob 0相同數據擴展blob 0索引32-63、96-127、160-191、224-255單元編碼期間填充冗餘數據。

我們選擇一個素域\mathbb{F}_q F q ,使得\mathbb{H}_3 \subset \mathbb{H}_2 \subset \mathbb{H}_1 \subset \mathbb{H}_0 \subset \mathbb{F}_q^* H 3 H 2 H 1 H 0 F q\mathbb{F}_q^* F q中滿足大小約束的子群鏈。

\begin{aligned}|\mathbb{H}_3| &= D = 64,\\|\mathbb{H}_2| &= \omega D = 2048,\\|\mathbb{H}_1| &= 2\omega D = 4096,\\|\mathbb{H}_0| &= 2\lambda\omega D = 8192 .\end{aligned}
| H 3 | = D = 64 | H 2 | = ω D = 2048 , | H 1 | = 2 ω D = 4096 , | H 0 | = 2 λ ω D = 8192

可以觀察到,與橢圓曲線bls12-381相關的素數q滿足2^{32} \mid (q-1) 2 32 ( q 1 ) ,因此適合尋找上述子群鏈。子群樹如圖 4 所示接下來,我們將描述如何構造擴展的 blob 0 0

  1. 該編碼由4局部碼組成索引0-3 編碼過程是逐個對每個局部碼進行單獨編碼。圖 3 清晰地標示出構成每個局部碼的單元格。

  2. 3ω=96 = 96單元\text{單元}(0,0-95)單元( 0,0-95 )3ωD = 96 ×64=6144 3ωD = 96 × 64 = 6144有限符號組成,形成一個([n_0=96,k_0=64],D=64) ( [ n0 = 96 , k0 = 64 ] , D = 64 )堆疊一維 RS 碼字。利用 blob 0 0 數據中位於 \text{Cells}(0,0-31) 和 \text{Cells } ( 0,64-95 )符號可以構造次數至多2\omega D = 4096 2 ω D = 4096多項式f_0(X) \in \mathbb{F}_q[X] f 0 ( X ) F q [ X ] 擴展blob每個單元都與\mathbb{H}_3 H 3的一個陪集相關聯,如下所示:

    \begin{aligned}\text{Cells}(0,0-31) &\Leftrightarrow \mathbb{H}_3, \beta^{64}\mathbb{H}_3, \beta^{32}\mathbb{H}_3, \ldots, \beta^{124}\mathbb{H}_3 \\\text{Cells}(0,64-95) &\Leftrightarrow \beta^{2}\mathbb{H}_3, \beta^{66}\mathbb{H}_3, \beta^{34}\mathbb{H}_3, \ldots, \beta^{126}\mathbb{H}_3 \\\text{Cells}(0,32-63) &\Leftrightarrow \beta\mathbb{H}_3, \beta^{65}\mathbb{H}_3, \beta^{33}\mathbb{H}_3, \ldots, \beta^{125}\mathbb{H}_3\end{aligned}
    細胞 0,0-31 H 3 , β 64 H 3 , β 32 H 3 , , β 124 H 3細胞 0,64-95 β 2 H 3 , β 66 H 3 , β 34 H 3 , , β 126 H 3細胞 0,32-63 β H 3 , β 65 H 3 , β 33 H 3 , , β 125 H 3

    96個單元格中的每一個單元格中, f_0(X) f 0 ( X )在相應的陪集上進行求值,求值結果成為該單元格的內容。這產生了一個堆疊的局部碼0 0RS碼字。多項式f_0(X) f 0 ( X )的構造方式使得擴展塊單元( 0,0-31 )單元格(0,32-63)結果對應的值完全相同。這是通過將數據值作為求值結果,並根據這些數據值插值多項式來實現的。

  3. 對局部代碼1、23重複相同的步驟相應的多項式分別表示為f_1(X)、f_2(X ) f_3 ( X ) 用於構建每個f_i ( X )blob數據(i=1,2,3 每個局部代碼關聯單元以及用作評估點的陪集如下所示。

    (a)本地代碼1 1 : \text{單元格}(0,64\text{-}159)單元格( 0 , 64 - 159 )

    \begin{aligned}f_1(X) &\Leftrightarrow \text{Blob 的單元格}(0,64\text{-}95) \text{和} \text{Blob 的單元格}(0,128\text{-}159) \\\text{單元格}(0,64\text{-}95) &\Leftrightarrow \beta^2 \mathbb{H}_3, \beta^{66} \mathbb{H}_3, \beta^{34} \mathbb{H}_3, \ldots, \beta^{126} \mathbb{H}_3 \\\text{單元格}(0,96\text{-}127) &\Leftrightarrow \beta^3 \mathbb{H}_3, \beta^{67} \mathbb{H}_3, \beta^{35} \mathbb{H}_3, \ldots, \beta^{127} \mathbb{H}_3 \\\text{Cells}(0,128\text{-}159) &\Leftrightarrow \mathbb{H}_3, \beta^{64} \mathbb{H}_3, \beta^{32} \mathbb{H}_3, \ldots, \beta^{124} \mathbb{H}_3\end{aligned}
    f 1 ( X ) 斑點0細胞( 0 , 64 - 95 )細胞( 0 , 128 - 159 )細胞 0,64-95 β 2 H 3 , β 66 H 3 , β 34 H 3 , , β 126 H 3細胞 0,96-127 β 3 H 3 , β 67 H 3 , β 35 H 3 , , β 127 H 3細胞 0,128-159 H 3 , β 64 H 3 , β 32 H 3 , , β 124 H 3

    (b)本地代碼2 2 : \text{單元格}(0,128\text{-}223)單元格( 0 , 128 - 223 )

    \begin{aligned}f_2(X) &\Leftrightarrow \text{Blob 0 的單元格}(0,64-95) 和 } \text{Blob 0 的單元格}(0,128-159) \\\text{Blob 0 的單元格}(0,128-159) &\Leftrightarrow \mathbb{H}_3, \beta^{64} \mathbb{H}_3, \beta^{32} \mathbb{H}_3, \ldots, \beta^{124} \mathbb{H}_3 的單元格}(0,160-191) &\Leftrightarrow \beta \mathbb{H}_3, \beta^{65} \mathbb{H}_3, \beta^{33} \mathbb{H}_3, \ldots, \beta^{125} \mathbb{H}_3 \\\text{Cells}(0,192\text{-}223) &\Leftrightarrow \beta^2 \mathbb{H}_3, \beta^{66} \mathbb{H}_3, \beta^{34} \mathbb{H}_3, \ldots, \beta^{126} \mathbb{H}_3\end{aligned}
    f 2 ( X ) 斑點0細胞( 0 , 64 - 95 )細胞( 0 , 128 - 159 )細胞 0,128-159 H 3 , β 64 H 3 , β 32 H 3 , , β 124 H 3細胞 0,160-191 β H 3 , β 65 H 3 , β 33 H 3 , , β 125 H 3細胞 0,192-223 β 2 H 3 , β 66 H 3 , β 34 H 3 , , β 126 H 3

    (c)本地代碼3 3 : \text{單元格}(0,192\text{-}255)單元格( 0 , 192 - 255 )\text{單元格}(0,0\text{-}31)單元格( 0 , 0 - 31 )

    \begin{aligned}f_3(X) &\Leftrightarrow \text{Blob 的單元格}(0,64\text{-}95) \text{和} \text{Blob 的單元格}(0,128\text{-}159) \\\text{單元格}(0,192\text{-}223) &\Leftrightarrow \beta^2 \mathbb{H}_3, \beta^{66} \mathbb{H}_3, \beta^{34} \mathbb{H}_3, \ldots, \beta^{126} \mathbb{H}_3 \\\text{單元格}(0,224\text{-}255) &\Leftrightarrow \beta^3 \mathbb{H}_3, \beta^{67} \mathbb{H}_3, \beta^{35} \mathbb{H}_3, \ldots, \beta^{127} \mathbb{H}_3 \\\text{Cells}(0,0\text{-}31) &\Leftrightarrow \mathbb{H}_3, \beta^{64} \mathbb{H}_3, \beta^{32} \mathbb{H}_3, \ldots, \beta^{124} \mathbb{H}_3\end{aligned}
    f 3 ( X ) 斑點0細胞( 0 , 64 - 95 )細胞( 0 , 128 - 159 )細胞 0,192-223 β 2 H 3 , β 66 H 3 , β 34 H 3 , , β 126 H 3細胞 0,224-255 β 3 H 3 , β 67 H 3 , β 35 H 3 , , β 127 H 3細胞 0,0-31 H 3 , β 64 H 3 , β 32 H 3 , , β 124 H 3

    觀察可知,本地代碼3 3呈循環式,即將右端單元格中的數據與左端起始單元格中的數據綁定在一起。如圖 1.0 所示。值得注意的是,這種編碼方式是系統性的,也就是說,blob 中的數據在擴展的 blob 中可以原樣訪問。

樹
樹狀圖1636×632 16.8 KB

圖 2 BC 碼的子群樹。這裡, \beta β\mathbb{H}_0 H 0的生成元。

接下來介紹使用 FFT 的精確算法。我們用{\bf u} \in \mathbb{F}_q^{64 \times 128} u F 64 × 128 q表示 blob 0。我們用{\bf u}[\textsf{start}\text{-}\textsf{end}] u [ start - end ]表示單元格\text{Cell}(0,\textsf{start}) Cell ( 0 , start )\text{Cell}(0,\textsf{end}) Cell ( 0 , end )處的數據。我們定義四個(D\times \omega) = (64 \times 32) ( D × ω ) = ( 64 × 32 )的 blob 數據數組,它們以向量化的形式表示,即長度為2048 × 2048 的向量:

\begin{aligned}\mathbf{u}_0 &= \mathbf{u}[0\text{-}31], \\\mathbf{u}_2 &= \mathbf{u}[64\text{-}95], \\\mathbf{u}_4 &= \mathbf{u}[128\text{-}159], \\\mathbf{u}_6 &= \mathbf{u}[192\text{-}223].\end{aligned}
u 0 = u [ 0-31 ] u 2 = u [ 64 - 95 ] , u 4 = u [ 128 - 159 ] , u 6 = u [ 192 - 223 ]

擴展的團塊表示為{\bf \hat{x}} \in \mathbb{F}_q^{64 \times 256} ^ x F 64 × 256 q ,並且我們有

\hat{\mathbf{x}}_i = \hat{\mathbf{x}}[32i\text{-}(32i+31)], \quad i=0,1,\ldots,7.
^ x i = ^ x [ 32 i - ( 32 i + 31 ) ] , i = 0 , 1 ,

來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
59
收藏
19
評論