プログラミング言語Lurkの保管場所が公開されました。Lurkは再帰的zk-SNARKs(zero knowledge Succinct Non-interactive ARguments of Knowledge)のための完全チューリングプログラミング言語で、SNARK証明やブロックチェーンコンセンサス、Filecoin Virtual Machine(FVM)、分散型アプリケーション、IPFSやIPLDによるデータ統合などを可能にします。
概要
Lurkは、SchemeとCommon Lispの影響を受けたLispの静的スコープを持つ特有の言語です。この特徴は、多くのプログラミング言語と比較してzk-SNARKを用いて直接証明できることを意味します。その結果、得られる証明の情報量は比較的少なく、明示的に含まれる情報のみを明らかにし、迅速に検証することができます。
つまり、Lurkは証明されるプログラムの開発を、よりシンプルにします。さらに、従来のSNARKプログラムよりも「強力」なプログラムを書くことができ、また、ドメインの専門家でなくてもプログラムを書くことができるようになるため、SNARKプログラミングがより身近なものになります。
Lurkは、Protocol LabsのシニアリサーチエンジニアであるChhi’mèd Künzang氏によって、Filecoinの証明を実装するために行われた開発の延長上で作成されました。Filecoinの証明には、知識を証明するための効率的で暗号的に安全なメカニズムであるSNARKsが使用されています。「ZK」(ゼロ知識)は、FilecoinのSNARKsの必須要素ではありませんが、証明される内容に関する情報を一切明かすことなく証明できることを意味しています。Filecoinは、コア暗号プロトコルであるProof of Replication(PoRep)とProof of Space-time(PoSt)の両方にSNARKsを使用しています。(これらの技術は高度なものですので、このProtoSchoolチュートリアルをご覧ください)。Filecoin Proofsの需要は、前世代のSNARKsを限界まで引き伸ばし、同時に次世代の可能性を模索、認識、発見することを促しました。
Lurkの登場です。
ほとんどのzk-SNARKオーサリング言語とは異なり、Lurkは完全なチューリングマシンであるため、与えられた課題に対して計算を行い証明することができます(リソースの制限を受けることがあります)。LurkはLispであるため、そのコードは単にLurkデータであり、任意のデータをLurkプログラムとして直接評価することができます。LurkはSNARKに適したPoseidonハッシュ(Neptuneが提供)を使って複合データを構築するので、コンテンツアドレッシングが可能です。
Lurkは現在、複数のバックエンド証明システム、特にGroth16とSnarkPack+、Novaにて多くの主要な機能をサポートしています。
- 検証可能な計算
- 簡潔な証明
- ゼロ知識
- チューリング完全性
- 内容アドレス指定可能なデータの任意のトラバーサル
- 高次関数(例:計算への公開入力としての関数、証明付き)
- IPFSやIPLDとの自然な統合のためのコンテンツアドレッサブルデータ
LurkとFilecoin
LurkはFilecoinのプロトコル開発を複数の方法でサポートすることができます。例えば、LurkとFilecoin Virtual Machine(FVM)の統合により、LurkプログラムとアプリケーションをFilecoinブロックチェーン上で検証することが可能になります。これにより、Filecoinスマートコントラクト(またはアクター)は、アプリケーション固有のゼロ知識証明可能な計算へのファーストクラスのネイティブアクセスを提供することができます。Filecoinアクターは、Filecoinネットワークに保存されたデータ上で長期的なLurkの仲介、編成、およびインセンティブを与えるために使用する可能性があります。さらに、Filecoinセクター、プライベートストレージ、またはチェーン自体を含む複数のソースから、パブリックデータとプライベートデータを組み合わせた証明をすることができます。
さらに今後の改良で、LurkはFilecoinのHierarchical Consensusの改良を可能にする予定です。階層型コンセンサスは、ブロックチェーンネットワークを水平方向に拡張し、データ送信量と柔軟性を向上させるフレームワークです。階層型コンセンサスでは、ユーザーのサブセットが、システム内の他のサブネットとのシームレスな相互作用を維持しながら、独立した状態とコンセンサスアルゴリズムを持つ新しいサブネットを生成することができます。サブネットは、定期的にサブネットの状態の証明を親にコミットさせることで、チェーンのセキュリティを保証します。これにより、最新のグローバルなコンセンサスが確保され、階層内の他のサブネットにメッセージが伝わります。現在の階層型コンセンサスの実装では、サブネットの証明の検証には、そのサブネットへの完全なアクセスが必要です。Lurkは、サブネットで行われた状態の変更について自己検証可能な証明を構築することで、この依存関係を完全に取り除くことができ、システムのスケーラビリティと柔軟性を向上させることができます。
Lurkエコシステムの他の主要なプレーヤー
Lurkエコシステムには、Protocol LabsとFilecoin Foundationがサポートする研究者や開発チームが含まれています。
ハーバード大学SEASのコンピューターサイエンスの准教授であるNada Amin氏は、LurkのLispを自動実行が可能なプログラミングシステムにすることに取り組んでいます。Lurkについて、彼女は次のように語っています。
Lurkについては、”再帰的ゼロ知識証明のためのLispを実装する普遍的な回路を作るというプロジェクトは、とても刺激的だと思います。なぜなら、zk-SNARKはLispのマッピング(例えば、consに対するhash-cons)であり、zk-SNARKを民主化する可能性を持っているからです。”
Lurkとの統合がFilecoin Foundationによって資金提供されている開発中のプログラミング言語、Glowの研究者と開発者は、分散型アプリ(DApps)を構築するためのシンプルなドメイン特化型言語に取り組んでいます。Glowの開発元であるMutual Knowledge Systems社の社長であるFrançois-René Rideau氏は、「通常、Glowのコードの一部はオフチェーン(DAppのユーザーによって)、一部はオンチェーン(共有合意によって)で実行されます」と説明しています。”GlowのコードをLurkにコンパイルすることで、オフチェーンで証明を構築し、コンセンサスを検証のみに使用することができるため、ガス料金を下げ、プライバシーを高め、DAppsのセキュリティとスケーラビリティを向上させます。”と述べています。
同じくFilecoin Foundationから資金提供を受けたYatima社は、Rustで実装された依存型関数型プログラミング言語と定理証明、部分構造型、メタプログラミングを特徴としており、これにはIPFSにはコンテンツアドレッシング機能も搭載されています。YatimaのASTはIPLD形式でエンコードされており、YatimaのプログラムをIPFSネットワーク上での共有、Filecoinへのストレージが出来る他、Webやブロックチェーンランタイムを含むあらゆるWASMプラットフォームで決定論的に評価できるようになっています。
YatimaはLurkと連携し、任意のコンパイル時のゼロ知識検証を可能にしています。形式的な証明は表現力が豊かですが、検証にはコストがかかることがあります。これらの形式的な証明をLurkに、つまりzk-SNARKにコンパイルすることで、Yatimaは形式的な証明の時間・空間的な検証を可能にすることができるのです。
有能な研究者やエンジニアのチームと、増え続ける貢献者が存在するので、我々はLurkの将来に期待しています。
今後の予定
今後数ヶ月の間に、Lurkのウェブサイトとブログを公開し、Lurkの技術的特徴や歴史的背景について、より深く掘り下げる予定です。これらの情報を得るには、Twitterで@Filecoinと@ProtoResearchをフォローしましょう。
より詳しい情報は、GitHubのLurkレポをご覧ください。
本ブログは、www.filecoin.io/blog からの翻訳となります。
ソース:https://filecoin.io/blog/posts/introducing-lurk-a-programming-language-for-recursive-zk-snarks/
コメント