Switch-board (Nebula)
Nebulaのswitch-boardは、1つの回路内に切り替えできる複数の回路を混在させることができるテクニックです。
Switch-boardは、HyperNovaやMovaなどのいくつかのfolding-schemeであれば、変更なしに導入できます。論文では、R1CSに沿って説明されていますが、CCSでも同様の手法を使って書くことができます。さらに、switch-boardを使うことで、使用していない回路にはコストがかからないpay-per-useをfolding-schemeの変更なしに行えます。
HyperNovaのようなすでにNon-uniformなIVCでは、このswitch-board回路をいくつかコピーして一つの回路にすることで、複数の回路を一つのfoldingで実行でき、foldingのオーバーヘッドを減らすことも期待できます。
なお、一つのswitch-board回路で一度に実行できる内部の回路の個数は1つだけです。
R1CSで書かれたℓ個の異なる回路、(ただし入力の長さは同じ)、があるとします。
Aiを全て結合したA∗を考えますが、Bi,Ciも同様にuniversal-switchboard回路を作ることができます。
下の図で、AiとSwitch constrains以外の場所は全て0となります。また、この行列に対するz∗は、図内の右側です。

この行列に対するzは z∗=(1,×,w∗)で定義されます。w∗には、選択したい回路のフラグと、その回路に対する入力とwitnessが含まれますが、それ以外は全て0となります。
これを実現する制約をswitch constrainsに定義していきます。まず、Aiに対応するzをzi′=(si,xi,wi)とします。
siはセレクターで、次のSingle switch constraintとBinary switch constraintを満たすように制約します。
Single switch constraint: Enforce ∑i=1ℓsi=1.
Binary switch constraint: For i∈[1,ℓ], enforce si⋅(1−si)=0
次に、このセレクターsiを使って、使用したい回路以外の入力を0であることを強制したいので、次の制約を定義します。
Input consistency constraint: For i∈[1,ℓ], enforce ×⋅si=xi
もし、sk=1の場合はxi=0,i=kである必要があります。さらに、入力が0の回路はwitnessが0でも問題ないので、wi=0,i=kとすることができます。
HyperNovaでは0へのコミットは無料なので、使わない回路にコストはかかりません。
Novaの場合は、もう少し工夫が必要ですが、同様の方法で実現できます。
参考
Last updated