paint-brush
Risc0 ব্যবহার করে আপনার প্রথম ZK প্রকল্প তৈরি করা: নতুনদের জন্য একটি গাইডদ্বারা@luffysama
529 পড়া
529 পড়া

Risc0 ব্যবহার করে আপনার প্রথম ZK প্রকল্প তৈরি করা: নতুনদের জন্য একটি গাইড

দ্বারা Luffy Sama13m2023/10/05
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

শেষ পর্যন্ত, আপনি Risc0-এ শূন্য-জ্ঞান প্রমাণের বাস্তব অভিজ্ঞতা পাবেন। কোন উন্নত গণিত বা ক্রিপ্টোগ্রাফি ব্যাকগ্রাউন্ডের প্রয়োজন নেই। বাস্তব-বিশ্ব সমাধানগুলি তৈরি করা শুরু করার জন্য আমরা কোডিং অপরিহার্য বিষয়গুলিতে ফোকাস করব৷ এই হ্যান্ডস-অন প্রবর্তনের লক্ষ্য হল শক্তিশালী গোপনীয়তা প্রযুক্তিকে যেকোনো বিকাশকারীর জন্য বোধগম্য করা।
featured image - Risc0 ব্যবহার করে আপনার প্রথম ZK প্রকল্প তৈরি করা: নতুনদের জন্য একটি গাইড
Luffy Sama HackerNoon profile picture

ভূমিকা :

শূন্য-জ্ঞান প্রমাণ ব্যক্তিগত, নিরাপদ লেনদেন সক্ষম করে। zkSNARKs এবং zkSTARKs-এর সাহায্যে, একজন প্রমাণকারী প্রকৃত তথ্য প্রকাশ না করেই যাচাইকারীর কাছে কিছু তথ্যের অধিকারী প্রমাণ করতে পারেন।


এতে বেনামী এবং গোপনীয়তার বিশাল সম্ভাবনা রয়েছে। কিন্তু zkSTARKs এবং zkSNARKs জটিল। Risc0 তাদের আরও অ্যাক্সেসযোগ্য করে তোলে। আসুন এটি খুব মৌলিক বাস্তবায়ন দেখুন:


এই টিউটোরিয়ালটি কভার করবে:

  • Risc0 এর ইনস্টলেশন

  • মরিচা ব্যবহার করে আপনার প্রথম শূন্য-জ্ঞান প্রমাণ প্রোগ্রাম লেখা


পূর্বশর্ত:

  • শর্টকাট কপি পেস্ট করুন

  • ইনস্টলেশন প্রয়োজন:

    • মরিচা ভাষা
    • কার্গো ক্রেট
  • মরিচা মধ্যে কিছু মৌলিক কোডিং জ্ঞান

  • কোড এডিটর (সম্ভব হলে VSCODE)


শেষ পর্যন্ত, আপনি Risc0-এ শূন্য-জ্ঞান প্রমাণের বাস্তব অভিজ্ঞতা পাবেন। কোন উন্নত গণিত বা ক্রিপ্টোগ্রাফি ব্যাকগ্রাউন্ডের প্রয়োজন নেই।


বাস্তব-বিশ্ব সমাধানগুলি তৈরি করা শুরু করার জন্য আমরা কোডিং অপরিহার্য বিষয়গুলিতে ফোকাস করব৷ এই হ্যান্ডস-অন প্রবর্তনের লক্ষ্য হল শক্তিশালী গোপনীয়তা প্রযুক্তিকে যেকোনো বিকাশকারীর জন্য বোধগম্য করা।

স্থাপন :

  • (ম্যাকওএসের জন্য) জং এবং কার্গো ইনস্টল করতে, আপনি টার্মিনালে নীচের কমান্ডটি চালাতে পারেন:

    curl [https://sh.rustup.rs](https://sh.rustup.rs/) -sSf | sh


  • Risc0 ইনস্টল করতে, আপনি জং ইনস্টল করার পরে নীচের কমান্ডটি চালান এবং টার্মিনালটি পুনরায় চালু করুন:

    cargo install cargo-risczero


  • উপরের কমান্ডগুলি সফলভাবে তৈরি করার জন্য, আপনাকে প্রয়োজনীয় নির্ভরতাগুলি ইনস্টল করতে হবে। brew install openssl brew install pkgconf


  • এর পরে, আমাদের এর সাথে risc0 টুলচেন ইনস্টল করতে হবে: cargo risczero install


এটাই আমাদের প্রয়োজন। সুতরাং, আসুন কোড এডিটরের দিকে যাই।

কিছু জাদুকরী লাইন লেখা:

এখন যেহেতু আমরা ইনস্টলেশনটি সম্পন্ন করেছি আপনি এই আবরা কদবরা 🪄 পদক্ষেপগুলি পড়তে এবং অনুসরণ করতে পারেন:


  1. কোড এডিটর খুলুন এবং এডিটরের টার্মিনালে আপনি যেখানে আপনার প্রোজেক্ট তৈরি করতে চান সেই জায়গায় যান।


  2. টার্মিনালে নীচের কমান্ডটি ব্যবহার করে প্রকল্পের একটি নতুন উদাহরণ তৈরি করুন: cargo risczero new multiply


    কমান্ড আমাদের জন্য একটি মৌলিক টেমপ্লেট তৈরি করে যাকে multiply বলা হয়

  3. আপনি multiply নামে তৈরি একটি ফোল্ডার দেখতে পাচ্ছেন। এর মধ্যে cd. cd multiply


  4. ফোল্ডার গঠন খুব সহজ.


    1. আমাদের একটি হোস্ট ফোল্ডার এবং একটি পদ্ধতি ফোল্ডার আছে।


    2. হোস্ট ফোল্ডারে হোস্ট প্রোগ্রাম থাকে যাকে আমরা গেস্ট প্রোগ্রাম বলি। আপনি চাইলে যাচাই করার ক্ষমতাও রয়েছে এতে।


    3. মেথডস ফোল্ডারে গেস্ট প্রোগ্রাম থাকে যা zkvm অ্যাপ্লিকেশনের অংশ ধারণ করে যা প্রমাণিত হয়। এটি হোস্টের কাছ থেকে ইনপুট প্যারামগুলি গ্রহণ করে, তারপর যুক্তির উপর ভিত্তি করে, এটি ফলাফল তৈরি করে, সেগুলিকে জার্নালে পাঠায় এবং রসিদ হিসাবে হোস্টের কাছে পাঠায়৷


    4. বাকি ফাইল প্রয়োজন অনুযায়ী যেতে যেতে ব্যাখ্যা করা হবে.

  5. গেস্ট প্রোগ্রাম দিয়ে শুরু করা যাক।


    1. ফাইলের নাম পরিবর্তন করা যাক main.rs —> multiply.rs

    2. src ফোল্ডারে bin নামে একটি ফোল্ডার তৈরি করুন এবং এতে mutiply.rs সরান। আপনার ফোল্ডার গঠন এই মত কিছু দেখতে হবে:

    3. Cargo.toml খুলুন এবং name = "method_name” —> name = "multiply” এ আপডেট পরিবর্তন করুন।

    4. Cargo.toml এ নিচের কোডটি যোগ করুন।

       [[bin]] name = "multiply" path = "src/bin/multiply.rs"
    5. সুতরাং আপনার চূড়ান্ত Cargo.toml এর মত দেখাবে:

    6. এখন, multiply.rs খুলুন। এখানে আমরা প্রধান ফাংশন সম্পাদনা করব। এটি সেই ফাংশন যা zkvm-এ কার্যকর করা হবে।


      1. নীচের কোডে, আমরা হোস্ট প্রোগ্রাম থেকে ইনপুট নিচ্ছি। তারপরে আমরা নিশ্চিত করছি যে ইনপুটটি তুচ্ছ উপাদান নয় যা 1। তারপর আমরা পণ্যটি গণনা করি এবং অবশেষে এটি প্রোগ্রামের হোস্টের কাছে ফিরিয়ে দিই।

         // We will get the values for these variables from host program let a:u64 = env::read(); let b:u64 = env::read(); // To avoid trivial factors like multiplication by 1 if a == 1 || b == 1 { panic!("Trivial factors !!") // The panic! macro in Rust is used to intentionally crash a program when an unrecoverable error occurs } // Caculate the product of the two numbers let product = a.checked_mul(b).expect("Integer Overflow"); // Commit back the output to the host to save it as receipt env::commit(&product);
      2. উপরের পরিবর্তনের পর, আপনার multiply.rs এর মত দেখতে হবে।

    7. Cargo.toml of methods ফোল্ডারে আরও একটি চূড়ান্ত পরিবর্তন আছে।

    8. name = "multiply-methods” এর মান খুলুন এবং আপডেট করুন।


    9. আপনার চূড়ান্ত Cargo.toml নিচের মত দেখাবে।

    10. এখানে আমাদের কাজ শেষ.

    11. এখন, হোস্ট প্রোগ্রামে যাওয়া যাক।

      1. আপনার হোস্ট ফোল্ডার এখন এই মত দেখতে হবে.

      2. আমরা main.rs কে prover.rs এবং verify.rs দুটি ফাইলে বিভক্ত করতে চাই।


      3. src এর অধীনে একটি নতুন ফোল্ডার তৈরি করুন এবং এটিকে bin হিসাবে নাম দিন।


      4. main.rs সরান। ফাইল তৈরি করুন এবং তাদের নাম দিন verify.rs এবং prove.rs


      5. আপনার ফোল্ডার গঠন এই মত কিছু দেখতে হবে এখন.

      6. prove.rs খুলুন, এবং কোডিং শুরু করা যাক:


      7. নীচের কোড যোগ করুন. এগুলো আমাদের প্রয়োজন হবে এমন আমদানি।

         use multiply_methods::MULTIPLY_ELF; // It is a binary file of multiply_method use risc0_zkvm::{ default_prover, serde::{from_slice, to_vec}, ExecutorEnv, };


      8. মূল ফাংশন পরিবর্তন করা যাক.

         fn main() { // Declaring our secret input params let a: u64 = 17; let b: u64 = 23; // First, we construct an executor environment let env = ExecutorEnv::builder() .add_input(&to_vec(&a).unwrap()) // Passing the input params to environment so it can be used by gues proggram .add_input(&to_vec(&b).unwrap()) .build() .unwrap(); // Obtain the default prover. let prover = default_prover(); // Produce a receipt by proving the specified ELF binary. let receipt = prover.prove_elf(env, MULTIPLY_ELF).unwrap(); // Extract journal of receipt (ie output c, where c = a * b) let c: u64 = from_slice(&receipt.journal).unwrap(); // Print an assertion println!("Hello, world! I know the factors of {}, and I can prove it!", c); // Let's serialize the receipt so we can save it to an file for verifier program to verify. let serialized = bincode::serialize(&receipt).unwrap(); // Writing the serialized contect to receipt.bin file let _saved_file = match std::fs::write("./receipt.bin", serialized){ Ok(()) => println!("Receipt saved and serialized as receipt.bin"), Err(_) => println!("Something went wrong !!"), }; }


      9. আপনার চূড়ান্ত prove.rs এই মত দেখা উচিত.

      10. আসুন আমাদের verify.rs এ কোডটি খুলি এবং যোগ করি।


      11. এখানে, আমরা গেস্ট প্রোগ্রাম ইমেজ আইডি এবং কিছু মৌলিক আমদানি আমদানি করব।

         use multiply_methods::MULTIPLY_ID; use risc0_zkvm::Receipt;


      12. মূল ফাংশন পরিবর্তন করা যাক.

         fn main(){ // Let's impor the receipt that was generated by prove let receipt_path ="./receipt.bin".to_string(); let receipt_file = std::fs::read(receipt_path).unwrap(); // As we has serialized the receipt we need to desrialize it let receipt = bincode::deserialize::<Receipt>(&receipt_file).unwrap(); // Let's verify if the receipt that was generated was not created tampered with let _verification = match receipt.verify(MULTIPLY_ID){ Ok(()) => println!("Proof is Valid"), Err(_) => println!("Something went wrong !!"), }; }


      13. আপনার চূড়ান্ত verify.rs দেখতে এরকম কিছু হওয়া উচিত।

      14. আমি প্রতিশ্রুতি দিচ্ছি যে এগুলোই চূড়ান্ত পরিবর্তন। এখন, আমরা প্রায় সম্পন্ন.


      15. host ফোল্ডারে Cargo.toml খুলুন এবং নির্ভরতার অধীনে নীচের পরিবর্তনগুলি করুন।

         multiply-methods = { path = "../methods" }
      16. আপনার Cargo.toml এর মত দেখাবে।

    12. আমাদের কোড কাজ করে কিনা তা দেখার শেষ সময় এসেছে।


    13. প্রজেক্টের রুট ডিরেক্টরিতে আপনার কনসোলটি ফায়ার করুন এবং console cargo run --release --bin prove এ নিচের কমান্ডটি চালান


    14. এই কমান্ডটি যাচাইকারীর জন্য প্রমাণ এবং রসিদ তৈরি করবে।


      প্রথমবার চালানোর সময় অনেক সময় লাগবে। তাই এটি সম্পূর্ণ না হওয়া পর্যন্ত একটি কফি দখল চিন্তা করবেন না.


    15. একবার এটি হয়ে গেলে, আপনি চাইলে, আপনি যে রসিদ তৈরি করেছেন তা যাচাই করতে পারেন। তার জন্য, এই কমান্ডটি চালান cargo run --release --bin verify


      প্রথমবার চালানোর সময় অনেক সময় লাগবে। তাই এটি সম্পূর্ণ না হওয়া পর্যন্ত একটি কফি দখল চিন্তা করবেন না.


    অভিনন্দন!!! Risc0 ব্যবহার করে আপনার প্রথম ZK অ্যাপ লিখতে। আপনার যদি কোন সাহায্যের প্রয়োজন হয়, দয়া করে আমাকে একটি মন্তব্য করুন, এবং আমি আপনার কাছে ফিরে আসব।