zerochainキャッチ・アップ
#zerochain入門
TL; DR;
moonty_sal.iconがzerochainの開発にキャッチアップする際に作成したメモです。
初手: 現行の仕様にキャッチ・アップ
zero chain に現行(2019/05/21現在)の仕様が整理されているでまず読む
https://medium.com/layerx-jp/秘匿化ブロックチェーン-zerochain-プロジェクト始動-11696bce0b13
https://gyazo.com/50a1d5aa62616ceb18fe43a0ad712f5e
https://gyazo.com/655185463764dbb6b16246981b36662e
public ... パブリックインプット
private .. プライベートインプット
statement ... 検証している内容
送金額は正しい範囲か?(マイナスの値などを送金しようとしていないか)
送金者の残高は正しい範囲か?(送金後にマイナスの残高にならないか)
送金者の公開鍵を用いて正しいアルゴリズムで正しい値が暗号化されているか?
受け手の公開鍵を用いて正しいアルゴリズムで正しい値が暗号化されているか?(3と同じ値が暗号化されていなければならない)
2で証明している残高は本当に現在の送金者の残高と一致しているか?
署名検証鍵は正しく計算されているか?
zerochainにおける鍵の種類
そぼぎ
Circuitが1つあると対応するpk, vkがそれぞれ存在する?
proof generation key = proving key?
https://gyazo.com/61d110bd27138c8d9a9cd4fd6c5c5a63
https://gyazo.com/015528dc7ab5836cdfdfab2a2cae4cbc
public / private input / はなんぞやとなるのでちょっと整理
zkSNARKsのおさらい
https://blog.ethereum.org/2016/12/05/zksnarks-in-a-nutshell/
https://github.com/gluk64/awesome-zero-knowledge-proofs
https://docs.google.com/presentation/d/1gfB6WZMvM9mmDKofFibIgsyYShdf0RV_Y8TLz3k1Ls0/edit#slide=id.p
これがわかりやすい (R1CS -> QAP, + Homomorphic Encryption) R1CS -> QAPでは因数定理を使う
ソースコードリーディング
core
code: core_ls.sh
bellman-verifier
jubjub ... https://z.cash/technology/jubjub/ Jubjub is a twisted Edwards curve of the form
built over the BLS12-381 scalar field
pairing ... ペアリング計算用のライブラリ群?
proofs
crypto ... Lifted El Gamal暗号を利用したhomomorphicな計算などのライブラリ (using jubjub)
keys ... 各種鍵を扱うためのライブラリ
primitives
ソースコードリーディング
zerochainの実装にキャッチアップする (1) confidential_transfer
zerochainの実装にキャッチアップする (2) setup
memo
https://github.com/zcash-hackworks/sapling-crypto/blob/master/src/circuit/ecc.rs
substrate 向けのRustのスタイルガイド: https://wiki.parity.io/Substrate-Style-Guide