零知識證明

PLONK

PLONK 是一套 SNARK,其招牌特色是「通用、可更新」的可信設置。Groth16 每個程式都需要重辦一場電路專屬的儀式,PLONK 卻只辦一次 Powers of Tau 儀式,就把那單一份結構化參考字串,重複用在任何不超過某尺寸上限的電路上。更動你的合約邏輯,你只需從同一份公開 SRS 重新導出證明金鑰即可——不必再辦新儀式。正是這份實用性,讓 PLONK 與它的後代成了許多生產級證明堆疊的骨幹。

PLONK 採用一種建立在兩個想法上的「PLONK 式」算術化。其一,執行的每一列都由一條帶有選擇器係數的靈活閘方程式所支配——qL·a + qR·b + qO·c + qM·(a·b) + qC = 0——因此只要開關各個選擇器,單一一種閘的形狀就能編碼加法、乘法、常數,或更豐富的自訂閘。其二,必須在不同列之間攜帶相同值的導線,由一個排列論證(一個大乘積檢查)綁在一起,藉此在不增添任何乘法約束的情況下,強制落實電路的接線。一切都用 KZG 做承諾,並以 Fiat-Shamir 化為非互動式。

正是這份自訂閘的靈活性,讓 PLONK 如此易於擴充:設計者為橢圓曲線運算或雜湊加上量身打造的閘,再搭配查表論證(plookup)來廉價地處理範圍檢查與查表式邏輯。這一脈相承的家族——TurboPLONK、UltraPLONK、Halo2、Plonky2——驅動著各式 zkEVM 與通用證明系統,以 Groth16 那略小一些的證明,換來大幅更佳的開發者體驗,以及一個你永遠不必重辦的設置。

gate constraint per row: qL·a + qR·b + qO·c + qM·(a·b) + qC = 0

PLONK 的通用設置,是它相對於 Groth16 在實務上的決定性優勢:一場儀式服務你的整個生態系,且能熬過電路的更動。你付出略大的證明與驗證成本,換來「永遠不必再辦一場儀式」的特權。