MASP(Multi-Asset Shielded Pool)
https://github.com/anoma/masp/tree/main
ZCashのSapling回路を拡張させ、トークンの種類も秘匿化させたもの
Saplingと何が違うのか
MASPには、変更されたSpend回路とOutput回路に加えて、変換比率の公開リストに従って異なる資産タイプ間のシールドされた変換を可能にするConvert回路が含まれています。
実装としては、zcash_primitivesとmasp_primitivesを比較すれば良い
Convert回路
Convert回路は、トランザクションにコンバート値のコミットメントを追加し、支出、出力、コンバート値のコミットメントの同型和がゼロであることを保証することによって、資産タイプの燃焼と鋳造を可能にするメカニズムを提供します。
コンバージョンコミットメントは、AllowedConversion Treeで先に公開されたAllowedConversionから構築されます。AllowedConversionは、許可された変換資産を定義します。AllowedConversion Treeは、台帳に格納されたメルクルハッシュツリーである。
spend_proofの引数にasset_typeが追加されている
https://github.com/anoma/masp/blob/main/masp_primitives/src/sapling/prover.rs#L37
https://github.com/anoma/masp/blob/main/masp_primitives/src/asset_type.rs#L18
Nullfier計算するとこ
https://github.com/anoma/masp/blob/main/masp_primitives/src/sapling.rs#L619
blake2s_simdと言うハッシュ関数が使われている