فهرست منبع

WIP: zk/gadget/less_than/tests/less_than_253: P-1 < P check added

aggstam 3 سال پیش
والد
کامیت
74d1e21fef
2فایلهای تغییر یافته به همراه26 افزوده شده و 3 حذف شده
  1. 11 1
      script/research/pallas_constants/src/main.rs
  2. 15 2
      src/zk/gadget/less_than.rs

+ 11 - 1
script/research/pallas_constants/src/main.rs

@@ -23,7 +23,10 @@ use std::{
 };
 
 use anyhow::Result;
-use darkfi::consensus::lead_coin::LeadCoin;
+use darkfi::{
+    consensus::lead_coin::LeadCoin,
+    validator::consensus::float_10::{fbig2base, Float10},
+};
 use darkfi_sdk::{crypto::pasta_prelude::PrimeField, pasta::pallas};
 
 /// Generate a string represenation of a `pallas::Base` constant
@@ -52,6 +55,13 @@ fn main() -> Result<()> {
     source.push_str(&to_constant("MU_RHO_PREFIX", pallas::Base::from(5), true));
     source.push_str(&to_constant("HEADSTART", LeadCoin::headstart(), true));
 
+    // P
+    const P: &str = "28948022309329048855892746252171976963363056481941560715954676764349967630337";
+    let p = Float10::try_from(P).unwrap();
+    let one = Float10::try_from("1").unwrap();
+    source.push_str(&to_constant("P", fbig2base(p.clone()), false));
+    source.push_str(&to_constant("P_MINUS_1", fbig2base(p - one), false));
+
     let mut cmd = Command::new("rustfmt");
     cmd.stdin(Stdio::piped()).stdout(Stdio::piped());
     cmd.args(["--edition=2021"]);

+ 15 - 2
src/zk/gadget/less_than.rs

@@ -405,6 +405,19 @@ mod tests {
             46116860184273879,
         ]);
 
+        const P: pallas::Base = pallas::Base::from_raw([
+            11037532056220336122,
+            2469829653914515739,
+            0,
+            4611686018427387904,
+        ]);
+        const P_MINUS_1: pallas::Base = pallas::Base::from_raw([
+            11037532056220336121,
+            2469829653914515739,
+            0,
+            4611686018427387904,
+        ]);
+
         let seed = poseidon_hash([pallas::Base::from(3), pallas::Base::from(10)]);
         let y = poseidon_hash([seed, pallas::Base::from(1)]);
 
@@ -413,8 +426,8 @@ mod tests {
         let value = pallas::Base::from(100_000_000_000);
         let target = sigma1 * value + sigma2 * value * value + HEADSTART;
 
-        let valid_a_vals = vec![pallas::Base::from(1), y];
-        let valid_b_vals = vec![pallas::Base::from(3), target];
+        let valid_a_vals = vec![pallas::Base::from(1), y, P_MINUS_1];
+        let valid_b_vals = vec![pallas::Base::from(3), target, P];
 
         let seed = poseidon_hash([pallas::Base::from(3), pallas::Base::from(2)]);