Score:1

สิ่งที่จำเป็นในการตรวจสอบ zk-SNARK?

ธง za

ฉันกำลังพยายามตรวจสอบ zk-SNARK จากสัญญาที่มั่นคงแบบออฟไลน์ใน Rust

นี่คือสัญญาการตรวจสอบที่ตรวจสอบหลักฐานใน ด้านความมั่นคง.

และ นี้ เป็นธุรกรรมที่มีหลักฐานและอินพุตสาธารณะ

หลักฐานถูกต้องและฉันสามารถทำซ้ำการตรวจสอบแบบออฟไลน์ได้โดยใช้ Solidity อย่างไรก็ตามใน Rust ฉันไม่สามารถเข้าถึงพรีคอมไพล์ Solidity ที่ตรวจสอบการจับคู่ BN254 ได้ ดังนั้นฉันจึงใช้งานนี้ตาม arkworks/curve crate:

ผับ fn check_pairings (g1s: Vec<G1Affine>, g2s: Vec<G2Affine>) -> บูล {
    assert_eq!(g1s.len(), g2s.len());
    ให้ mut res = Fp12::one();
    สำหรับ (g1, g2) ใน g1s.iter().zip(g2s.iter()) {
        ถ้า g1.is_zero() || g2.is_zero() {
            ดำเนินต่อ;
        }
        res = res * Bn254::จับคู่(*g1, *g2);
    }
    res.is_one()
}

รหัสจะขึ้นอยู่กับ การใช้งาน Ethereum BN526 และโปรดทราบว่า:

  • อินพุต (เวกเตอร์ของจุด G1 และ G2) เทียบเท่ากับการนำความแข็งแกร่งไปใช้ ดังนั้นฉันจึงมั่นใจได้ว่าการรวมกันของอินพุต การโหลดหลักฐาน ฯลฯ ถูกต้อง

  • โดยพื้นฐานแล้วเป็นอัลกอริทึมที่อธิบายไว้ในต้นฉบับ Groth16 กระดาษ หน้า 18 ส่วนประกอบของจุดถูกทำให้เป็นโมฆะเพื่อให้คำศัพท์ทั้งหมดอยู่ในด้านเดียวกันของสมการ

  • เป็นเส้นโค้งเดียวกันในการใช้งานทั้งสองแบบ

ฉันพลาดอะไรไปรึเปล่า? มีขั้นตอนปฏิบัติเพิ่มเติมเมื่อตรวจสอบ zk-SNARK หรือไม่ จำเป็นต้องมีการปรับค่าให้เป็นมาตรฐานหรือไม่?

meshcollider avatar
gb flag
คุณหมายความว่ารหัสสนิมของคุณไม่สามารถตรวจสอบการพิสูจน์ได้อย่างถูกต้องหรือไม่?
WristMan avatar
za flag
@meshcollider ใช่ รหัสของฉันตรวจสอบการพิสูจน์ไม่ถูกต้อง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา