將 R1CS 轉換為 QAP - 檢查最後一步
通過閱讀 Vitalik Buterin 關於從 R1CS 創建 QAP 的優秀文章,我了解到將函式轉換為三組向量,向量的數量是我們扁平程式碼中“門”或約束的數量,以及每個向量的大小是變數的數量。
我還明白,要轉換為 QAP,我們最終會得到另外三組向量,每個向量i包含一個多項式的係數,該多項式是從原始組的每個線性約束的第 i 個值內插而來的(你知道我的意思)。
我想檢查我對下一步的理解,我們通過創建 (s · A) * (s · B) - (s · C) = H * Z 推導出單個多項式
在 Vitalik 的範例中,這是否意味著我們將計算執行為:
( 1 * A 1 (x)) + (3 * A 2 (x)) + (35 * A 3 (x)) …
因此,使用他的範例將是:
( 1 * 0.833x 3 - 5x 2 + 9.166x - 5 ) + (3 * A 2 (x)) ….
我想確定的是,在這一點上,我應該在見證人(在他的範例中為 1、3、35、9、27、30)和每個和組的相應多項式之間執行內積,不是每個組中相應多項式的見證和評估之間的值。
例如,我不應該這樣做:
(1 * A 1 (1) ) + (3 * A 2 (3)) + (35 * A 3 (35)) + (9 * A 4 (9))……
也就是用x代替witness中的對應值
(1 * 0.833(1) 3 - 5(1) 2 + 9.166(1) - 5) + (3 * A 2 (3)) ….
兩者都有。要生成 QAP 系統,您需要執行內積見證和多項式(不進行評估)。要驗證 SNARK 證明,您需要在“有毒廢物”乘以組元素時進行內積見證和多項式評估。請注意,它實際上是公共輸入和見證連接(所有變數)。