From 3a7e57bd383c8899dcd02d173f9f99cf210b3a55 Mon Sep 17 00:00:00 2001 From: Arthur Paulino Date: Wed, 7 Feb 2024 12:56:51 -0300 Subject: [PATCH] chore: make BN256 the default field for the REPL --- demo/bank.lurk | 16 ++++++++-------- demo/chained-functional-commitment.lurk | 8 ++++---- demo/functional-commitment.lurk | 8 ++++---- demo/protocol.lurk | 4 ++-- demo/vdf.lurk | 8 ++++---- src/cli/field_data.rs | 10 +++++----- src/cli/mod.rs | 8 ++++---- src/cli/repl/meta_cmd.rs | 24 ++++++++++++------------ src/cli/zstore.rs | 10 +++++----- src/field.rs | 10 +++++----- tests/lurk-cli-tests.rs | 2 +- 11 files changed, 54 insertions(+), 54 deletions(-) diff --git a/demo/bank.lurk b/demo/bank.lurk index 83c1cad5cf..c1624f51aa 100644 --- a/demo/bank.lurk +++ b/demo/bank.lurk @@ -192,7 +192,7 @@ ledger2 ;; Now we can open the committed ledger transfer function on a transaction. -!(call 0x348a2e97903fff808be52461d19c3192b6868830598be397b361a21bfc8a45f9 '(1 0 2)) +!(call 0x207bca2dcc9fb4d1d3e3939d2c1e6a3adaabf41dc0174dd39b9949d697b55aaa '(1 0 2)) ;; And the record reflects that Church sent one unit to Satoshi. @@ -202,7 +202,7 @@ ledger2 ;; We can verify the proof.. -!(verify "Nova_Pallas_10_398a87b5f99157b86abde88a67754791f72fed93ccd8db68d693bc9f7e26738c") +!(verify "Nova_BN256_10_11882126c5f0dd9a94f76ff58ea5c499cfe2364162585c320c55f53651e16ffd") ;; Unfortunately, this functional commitment doesn't let us maintain state. ;; Let's turn our single-transaction function into a chained function. @@ -219,24 +219,24 @@ ledger2 ;; Now we can transfer one unit from Church to Satoshi like before. -!(chain 0x0e484bf02f72ad529ebb9ded8fc2f4c2b1519a758e0f0238973bf0cd8dd97f72 '(1 0 2)) +!(chain 0x07ec757321b69b7902c2c5629535c343c1eb335c0ca12275a95ec28918e0af47 '(1 0 2)) !(prove) -!(verify "Nova_Pallas_10_11df37aff14b2fc8c1fea85fcc07ebececa4ef3e974764c73c49a2ce64eeb8f1") +!(verify "Nova_BN256_10_0b72908859e73ee3014067a5eaa557a995aea262cfb5f3621922024a176b8281") ;; Then we can transfer 5 more, proceeding from the new head of the chain. -!(chain 0x3cb56c66573d29a478b62ff6d59df557dd2e6a924ff408644e61e31c3847a9cd '(5 0 2)) +!(chain 0x18b99c6b580d518129921ebf70023b5d757861b935f7f537460c99130eb4447d '(5 0 2)) !(prove) -!(verify "Nova_Pallas_10_3541178de43221c6d12f82ff6da37807971079d11ced58e3564ba2f34e77cfc4") +!(verify "Nova_BN256_10_0d8159faab0d85855d4cf53c7e36a2357a1766a1540afbafb0ef93d7e1537ca8") ;; And once more, this time we'll transfer 20 from Turing to Church. -!(chain 0x38172b9b6212b557d94b9896ea569e77fa35ac979700bedcc97f711322169905 '(20 1 0)) +!(chain 0x0b2d868fad0e6ec88e9ba6818ae9a0345aab06abc2c226200ff3ed45c60a41db '(20 1 0)) !(prove) -!(verify "Nova_Pallas_10_2dd41df4b593c4f8b4a0a058d94b8dbcded8343f829d1aaf2765f0b8e0eda03b") +!(verify "Nova_BN256_10_0a253296edb4d6c204edd92e63176efed7c30e9f5928b52ba9be2b3f2e6e8b08") diff --git a/demo/chained-functional-commitment.lurk b/demo/chained-functional-commitment.lurk index 0eff5e57e1..565b7769c4 100644 --- a/demo/chained-functional-commitment.lurk +++ b/demo/chained-functional-commitment.lurk @@ -9,7 +9,7 @@ ;; We chain a next commitment by applying the committed function to a value of 9. -!(chain 0x3e47de9fb674019306d566345ab360d92f955e29e015432b10ecb58476f42f01 9) +!(chain 0x2b444b40b27bac0dff8416c0f3c708a505a636d86ba66bdbe86497c515afb651 9) ;; The new counter value is 9, and the function returns a new functional commitment. @@ -21,7 +21,7 @@ ;; We can verify the proof. -!(verify "Nova_Pallas_10_1b894ae4e13a74970afb9ff982fd0e9c4dc439a8317ac85eeaf97ab6c3d8f35e") +!(verify "Nova_BN256_10_0f54f9e56fa6c436618597c971daa7b525ad80ac48be11226284fd4f8167e60a") ;; Now let's chain another call to the new head, adding 12 to the counter. @@ -35,7 +35,7 @@ ;; And verify. -!(verify "Nova_Pallas_10_29a1a6b7ceca05a40f92883dc7d3c11dd8e7cca698665bc7a9faaaa96cdde96a") +!(verify "Nova_BN256_10_281771b7af2f96cac51cb7579d94f0a6f56e9a9d951b753f8514b2b4ec6ce4db") ;; One more time, we'll add 14 to the head commitment's internal state. @@ -49,7 +49,7 @@ ;; Verify. -!(verify "Nova_Pallas_10_13f092af20ac415822a0528d41e5c1f5565bfa6d0ec376445e677f411eb3ddd4") +!(verify "Nova_BN256_10_22ab68c1fa6e75f54d213a3ada71edd21331bf58826263a79e3fdd32f1c4c62d") ;; Repeat indefinitely. diff --git a/demo/functional-commitment.lurk b/demo/functional-commitment.lurk index 17b5d2cb65..20541fa2ab 100644 --- a/demo/functional-commitment.lurk +++ b/demo/functional-commitment.lurk @@ -10,7 +10,7 @@ ;; We open the functional commitment on input 5: Evaluate f(5). -!(call 0x05adecdb07d3d8d4a9d8027c163a70ef66c18ec311abc8381c2df92c58e216b5 5) +!(call 0x1a1975f9bc4e30d4c0e80482418a314c9d2a5bc0eea2770da310886f455825d1 5) ;; We can prove the functional-commitment opening. @@ -18,12 +18,12 @@ ;; We can inspect the input/output expressions of the proof. -!(inspect "Nova_Pallas_10_1c3654a2491282df9c31cba2d104649a496b3d1bac4bb5352004a21c94554027") +!(inspect "Nova_BN256_10_15c837e5040ac70c00030c228b61fde2c164d930ba6ea396353b3cfcaa16609d") ;; Or the full proof claim -!(inspect-full "Nova_Pallas_10_1c3654a2491282df9c31cba2d104649a496b3d1bac4bb5352004a21c94554027") +!(inspect-full "Nova_BN256_10_15c837e5040ac70c00030c228b61fde2c164d930ba6ea396353b3cfcaa16609d") ;; Finally, and most importantly, we can verify the proof. -!(verify "Nova_Pallas_10_1c3654a2491282df9c31cba2d104649a496b3d1bac4bb5352004a21c94554027") +!(verify "Nova_BN256_10_15c837e5040ac70c00030c228b61fde2c164d930ba6ea396353b3cfcaa16609d") diff --git a/demo/protocol.lurk b/demo/protocol.lurk index 0860517a4b..60a4a0f503 100644 --- a/demo/protocol.lurk +++ b/demo/protocol.lurk @@ -13,13 +13,13 @@ :descr "demo protocol") ;; This is the prover's pair, whose hash is -;; 0x09910d31a7568d66855bcc83fccc4826063dfdf93fe5e1f736c83ec892ed139e +;; 0x237fe43a25f3830ab6ac86451b93e74e8ef6ef1e8735a3f53478b7fe76b1a466 (commit '(13 . 17)) ;; Let's prove it and write the proof to the file protocol-proof !(prove-protocol my-protocol "protocol-proof" - 0x09910d31a7568d66855bcc83fccc4826063dfdf93fe5e1f736c83ec892ed139e + 0x237fe43a25f3830ab6ac86451b93e74e8ef6ef1e8735a3f53478b7fe76b1a466 '(13 . 17)) ;; Now it can be verified diff --git a/demo/vdf.lurk b/demo/vdf.lurk index b601c93299..7d9bb79ade 100644 --- a/demo/vdf.lurk +++ b/demo/vdf.lurk @@ -8,7 +8,7 @@ (fastexp 2 5) ;; (4p - 3) / 5 -!(def r 23158417847463239084714197001737581570690445185553317903743794198714690358477) +!(def r 17510594297471420177797124596205820070838691520332827474958563349260646796493) !(def fifth-root (lambda (n) (fastexp n r))) @@ -16,7 +16,7 @@ (fifth-root 42) -(fifth 0x2e6606ca7e8983f71964677e06cd8fd13ee0d46bf3c3e52d3af1b80df06f730b) +(fifth 0x2a7b0ae43e98616d25287ce004700ac747ed8f5e95761ee4869ac0a851b3d3ee) !(def round (lambda (state) (let ((x (car state)) @@ -47,11 +47,11 @@ (minroot '(123 456 1) 10) -(minroot-inverse '(0x27ec1d892ff1b85d98dd8e61509c0ce63b6954da8a743ee54b1f405cde722eb1 0x0da555f3ff604e853948466204d773c4c34d8cf38cea55351c9c97593613fb3b 11) 10) +(minroot-inverse '(0x1896bbc5df5819f436df3f86f6c707bdee372c1046bfa70196cf0f358497acc2 0x0ba0c60958b05f0ca1153cab833cbc315f7f10c4e1b9630ec8829cea907cb688 11) 10) !(prove) -!(verify "Nova_Pallas_10_3d385361e08449cad361ccbe45d4c41685bcee7ece87b33c47b8953309002f64") +!(verify "Nova_BN256_10_2b96123c7e47229622beeef7080c005e9d18ed0cfd2c0b7f06e1d9f1cfcf83a8") !(def timelock-encrypt (lambda (secret-key plaintext rounds) (let ((ciphertext (+ secret-key plaintext)) diff --git a/src/cli/field_data.rs b/src/cli/field_data.rs index ee8afd4ef0..0f786463bd 100644 --- a/src/cli/field_data.rs +++ b/src/cli/field_data.rs @@ -77,7 +77,7 @@ impl Serialize for FieldData { mod tests { use crate::field::LurkField; use ff::Field; - use pasta_curves::Fq; + use halo2curves::bn256::Fr as Bn; use serde::{Deserialize, Serialize}; use super::{de, ser, HasFieldModulus}; @@ -113,7 +113,7 @@ mod tests { let s = Struct { str: "hi".into(), int: 42, - ff: Fq::double(&Fq::ONE), + ff: Bn::double(&Bn::ONE), }; assert_eq!(s, de(&ser(s.clone()).unwrap()).unwrap()) } @@ -122,7 +122,7 @@ mod tests { fn enum1_roundtrips() { let e11 = Enum1::CaseStr("bye".into()); let e12 = Enum1::CaseInt(11); - let e13 = Enum1::CaseFF(Fq::double(&Fq::double(&Fq::ONE))); + let e13 = Enum1::CaseFF(Bn::double(&Bn::double(&Bn::ONE))); for e in [e11, e12, e13] { assert_eq!(e, de(&ser(e.clone()).unwrap()).unwrap()); } @@ -147,11 +147,11 @@ mod tests { } let e11 = Enum1::CaseStr("bye".into()); let e12 = Enum1::CaseInt(11); - let e13 = Enum1::CaseFF(Fq::double(&Fq::double(&Fq::ONE))); + let e13 = Enum1::CaseFF(Bn::double(&Bn::double(&Bn::ONE))); let e21 = Enum2::CaseStr2("bye".into()); let e22 = Enum2::CaseInt2(11); - let e23 = Enum2::CaseFF2(Fq::double(&Fq::double(&Fq::ONE))); + let e23 = Enum2::CaseFF2(Bn::double(&Bn::double(&Bn::ONE))); for (e1, e2) in [(e11, e21), (e12, e22), (e13, e23)] { assert_eq!(e2.clone(), de(&ser(e1.clone()).unwrap()).unwrap()); diff --git a/src/cli/mod.rs b/src/cli/mod.rs index 728e84caa8..f88adfb7ed 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -94,7 +94,7 @@ struct LoadArgs { #[clap(long, value_enum)] backend: Option, - /// Arithmetic field (defaults to "Pallas") + /// Arithmetic field (defaults to "BN256") #[clap(long, value_enum)] field: Option, @@ -207,7 +207,7 @@ struct ReplArgs { #[clap(long, value_enum)] backend: Option, - /// Arithmetic field (defaults to "Pallas") + /// Arithmetic field (defaults to "BN256") #[clap(long, value_enum)] field: Option, @@ -422,7 +422,7 @@ struct VerifyArgs { #[clap(value_parser)] proof_key: String, - /// Arithmetic field (defaults to "Pallas") + /// Arithmetic field (defaults to "BN256") #[clap(long, value_enum)] field: Option, @@ -445,7 +445,7 @@ struct InspectArgs { #[clap(value_parser)] proof_key: String, - /// Arithmetic field (defaults to "Pallas") + /// Arithmetic field (defaults to "BN256") #[clap(long, value_enum)] field: Option, diff --git a/src/cli/repl/meta_cmd.rs b/src/cli/repl/meta_cmd.rs index 5c38f148b4..69c1249036 100644 --- a/src/cli/repl/meta_cmd.rs +++ b/src/cli/repl/meta_cmd.rs @@ -238,7 +238,7 @@ where description: &[], example: &[ "!(commit '(13 . 21))", - "(let ((n (open 0x0071a3fe5e3a0dea9f7257e3210ea719f3464f2aa52a2cd6e6176c8275a75b25))) (* (car n) (cdr n)))", + "(let ((n (open 0x178217493faea2931df4e333837ba9312d0bb9f59bb787c1f40fd3af6d845001))) (* (car n) (cdr n)))", ], run: |repl, args, _path| { let first = repl.peek1(args)?; @@ -254,8 +254,8 @@ where description: &[], example: &[ "!(hide 12345 '(13 . 21))", - "(secret (comm 0x3be5f551534baa53a9c180e49b48c4a75ed7642a82197be5f674d54681de4425))", - "(open 0x3be5f551534baa53a9c180e49b48c4a75ed7642a82197be5f674d54681de4425)", + "(secret (comm 0x1884a703eea837ffae6ae99ec9af8e90d3fce7666c7953ffbe5eac7463ed1819))", + "(open 0x1884a703eea837ffae6ae99ec9af8e90d3fce7666c7953ffbe5eac7463ed1819)", ], run: |repl, args, _path| { let (first, second) = repl.peek2(args)?; @@ -284,7 +284,7 @@ where description: &[], example: &[ "!(commit '(13 . 21))", - "!(fetch 0x0071a3fe5e3a0dea9f7257e3210ea719f3464f2aa52a2cd6e6176c8275a75b25)", + "!(fetch 0x178217493faea2931df4e333837ba9312d0bb9f59bb787c1f40fd3af6d845001)", ], run: |repl, args, _path| { let hash = *repl.get_comm_hash(args)?; @@ -299,7 +299,7 @@ where description: &[], example: &[ "!(commit '(13 . 21))", - "!(open 0x0071a3fe5e3a0dea9f7257e3210ea719f3464f2aa52a2cd6e6176c8275a75b25)", + "!(open 0x178217493faea2931df4e333837ba9312d0bb9f59bb787c1f40fd3af6d845001)", ], run: |repl, args, _path| { let hash = *repl.get_comm_hash(args)?; @@ -349,8 +349,8 @@ where ], example: &[ "!(prove '(1 2 3))", - "!(verify \"Nova_Pallas_10_002cd7baecd8e781d217cd1eb8b67d4f890005fd3763541e37ce49550bd9f4bf\")", - "!(open 0x002cd7baecd8e781d217cd1eb8b67d4f890005fd3763541e37ce49550bd9f4bf)", + "!(verify \"Nova_BN256_10_048476fa5e4804639fe4ccfe73d43bf96da6183f670f0b08e4ac8c82bf8efa47\")", + "!(open 0x048476fa5e4804639fe4ccfe73d43bf96da6183f670f0b08e4ac8c82bf8efa47)", ], run: |repl, args, _path| { if !args.is_nil() { @@ -368,8 +368,8 @@ where description: &["Verify proof key and print the result."], example: &[ "!(prove '(1 2 3))", - "!(verify \"Nova_Pallas_10_166fafef9d86d1ddd29e7b62fa5e4fb2d7f4d885baf28e23187860d0720f74ca\")", - "!(open 0x166fafef9d86d1ddd29e7b62fa5e4fb2d7f4d885baf28e23187860d0720f74ca)", + "!(verify \"Nova_BN256_10_048476fa5e4804639fe4ccfe73d43bf96da6183f670f0b08e4ac8c82bf8efa47\")", + "!(open 0x048476fa5e4804639fe4ccfe73d43bf96da6183f670f0b08e4ac8c82bf8efa47)", ], run: |repl, args, _path| { let first = repl.peek1(args)?; @@ -548,7 +548,7 @@ where description: &[], example: &[ "(commit (lambda (x) x))", - "!(call 0x2f14c82533e8347d128b07e6610d0fc901f71418c2a6ea3e618cfe654f73f4b1 0)", + "!(call 0x2f31ee658b82c09daebbd2bd976c9d6669ad3bd6065056763797d5aaf4a3001b 0)", ], run: Self::call, }; @@ -567,7 +567,7 @@ where (let ((counter (+ counter x))) (cons counter (commit (add counter))))))) (add 0)))", - "!(chain 0x14cb06e2d3c594af90d5b670e73595791d7462b20442c24cd56ba2919947d769 1)", + "!(chain 0x2b444b40b27bac0dff8416c0f3c708a505a636d86ba66bdbe86497c515afb651 1)", ], run: |repl, args, path| { Self::call(repl, args, path)?; @@ -905,7 +905,7 @@ where "(commit '(13 . 17))", "!(prove-protocol my-protocol", " \"protocol-proof\"", - " 0x09910d31a7568d66855bcc83fccc4826063dfdf93fe5e1f736c83ec892ed139e", + " 0x237fe43a25f3830ab6ac86451b93e74e8ef6ef1e8735a3f53478b7fe76b1a466", " '(13 . 17))", ], run: |repl, args, _path| { diff --git a/src/cli/zstore.rs b/src/cli/zstore.rs index 303da66c2e..2e744e969a 100644 --- a/src/cli/zstore.rs +++ b/src/cli/zstore.rs @@ -312,7 +312,7 @@ impl ZStore { #[cfg(test)] mod tests { - use pasta_curves::Fp; + use halo2curves::bn256::Fr as Bn; use rand::{rngs::StdRng, Rng}; use rand_core::SeedableRng; use rayon::prelude::{IntoParallelIterator, ParallelIterator}; @@ -331,7 +331,7 @@ mod tests { use super::{ZDag, ZStore}; /// helper function that interns random data into a store - fn rng_interner(rng: &mut StdRng, max_depth: usize, store: &Store) -> Ptr { + fn rng_interner(rng: &mut StdRng, max_depth: usize, store: &Store) -> Ptr { let rnd = rng.gen::(); let tag = match rnd % 4 { 0 => Tag::Expr(ExprTag::try_from((rnd % 11) as u16).unwrap()), @@ -341,10 +341,10 @@ mod tests { _ => unreachable!(), }; if max_depth == 0 { - store.intern_atom(tag, Fp::from_u64(rnd)) + store.intern_atom(tag, Bn::from_u64(rnd)) } else { match rnd % 4 { - 0 => store.intern_atom(tag, Fp::from_u64(rnd)), + 0 => store.intern_atom(tag, Bn::from_u64(rnd)), 1 => intern_ptrs!( store, tag, @@ -397,7 +397,7 @@ mod tests { #[test] fn test_filtered_dag() { - let store = Store::::default(); + let store = Store::::default(); let one = store.num_u64(1); let two = store.num_u64(2); let thr = store.num_u64(3); diff --git a/src/field.rs b/src/field.rs index 7c45a14768..628126861c 100644 --- a/src/field.rs +++ b/src/field.rs @@ -37,15 +37,15 @@ use crate::tag::{ContTag, ExprTag, Op1, Op2}; #[cfg_attr(not(target_arch = "wasm32"), derive(Arbitrary))] #[cfg_attr(not(target_arch = "wasm32"), serde_test)] pub enum LanguageField { - /// The Pallas field, - #[default] - Pallas, - /// The Vesta field, - Vesta, /// The BN256 scalar field, + #[default] BN256, /// THe Grumpkin scalar field, Grumpkin, + /// The Pallas field, + Pallas, + /// The Vesta field, + Vesta, } impl std::fmt::Display for LanguageField { diff --git a/tests/lurk-cli-tests.rs b/tests/lurk-cli-tests.rs index 2a01c0810b..8d11203bb6 100644 --- a/tests/lurk-cli-tests.rs +++ b/tests/lurk-cli-tests.rs @@ -55,7 +55,7 @@ fn test_prove_and_verify() { let mut file = File::create(lurk_file.clone()).unwrap(); file.write_all(b"!(prove (+ 1 1))\n").unwrap(); - file.write_all(b"!(verify \"Nova_Pallas_10_090cee5a184bc9b76a965e59b87cd1a1eac30c2b0f243e7ee0232e51d14ebbf6\")\n").unwrap(); + file.write_all(b"!(verify \"Nova_BN256_10_18748ce7ba3dd0e7560ec64983d6b01d84a6303880b3b0b24878133aa1b4a6bb\")\n").unwrap(); let mut cmd = lurk_cmd(); cmd.env("LURK_PERF", "max-parallel-simple");