From 29f0692efc5a611e34591bc061c46377465a5da5 Mon Sep 17 00:00:00 2001 From: Daniel Lubarov Date: Fri, 24 Feb 2023 23:10:26 -0800 Subject: [PATCH 1/5] Fix a few issues found by EVM tests --- evm/src/cpu/kernel/asm/core/create.asm | 23 +++++----- evm/src/cpu/kernel/asm/core/process_txn.asm | 22 ++++++--- evm/src/cpu/kernel/asm/core/syscall_stubs.asm | 45 +++++++++++++++++-- .../asm/mpt/hash/hash_trie_specific.asm | 12 +++-- .../kernel/asm/mpt/storage/storage_read.asm | 24 +++++----- .../kernel/asm/mpt/storage/storage_write.asm | 34 ++++++++------ .../cpu/kernel/asm/rlp/encode_rlp_string.asm | 2 + evm/src/generation/prover_input.rs | 11 ++++- 8 files changed, 121 insertions(+), 52 deletions(-) diff --git a/evm/src/cpu/kernel/asm/core/create.asm b/evm/src/cpu/kernel/asm/core/create.asm index dfdb6b76..e2552ff5 100644 --- a/evm/src/cpu/kernel/asm/core/create.asm +++ b/evm/src/cpu/kernel/asm/core/create.asm @@ -1,9 +1,17 @@ +// The CREATE syscall. +// +// Pre stack: value, CODE_ADDR, code_len, retdest +// Post stack: address +global sys_create: + %address + %jump(create) + // Create a new contract account with the traditional address scheme, i.e. // address = KEC(RLP(sender, nonce))[12:] // This can be used both for the CREATE instruction and for contract-creation // transactions. // -// Pre stack: CODE_ADDR, code_len, retdest +// Pre stack: sender, endowment, CODE_ADDR, code_len, retdest // Post stack: address // Note: CODE_ADDR refers to a (context, segment, offset) tuple. global create: @@ -21,18 +29,11 @@ global create: // Pre stack: sender, endowment, salt, CODE_ADDR, code_len, retdest // Post stack: address // Note: CODE_ADDR refers to a (context, segment, offset) tuple. -global create2: +global sys_create2: // stack: sender, endowment, salt, CODE_ADDR, code_len, retdest // Call get_create2_address and have it return to create_inner. - %stack (sender, endowment, salt) -> (salt, sender, endowment) - // stack: salt, sender, endowment, CODE_ADDR, code_len, retdest - DUP7 DUP7 DUP7 DUP7 // CODE_ADDR and code_len - // stack: CODE_ADDR, code_len, salt, sender, endowment, CODE_ADDR, code_len, retdest - PUSH create_inner - // stack: create_inner, CODE_ADDR, code_len, salt, sender, endowment, CODE_ADDR, code_len, retdest - SWAP5 // create_inner <-> salt - // stack: salt, CODE_ADDR, code_len, create_inner, sender, endowment, CODE_ADDR, code_len, retdest - DUP7 // sender + %stack (sender, endowment, salt, CODE_ADDR: 3, code_len) + -> (sender, salt, CODE_ADDR, code_len, create_inner, sender, endowment, CODE_ADDR, code_len) // stack: sender, salt, CODE_ADDR, code_len, create_inner, sender, endowment, CODE_ADDR, code_len, retdest %jump(get_create2_address) diff --git a/evm/src/cpu/kernel/asm/core/process_txn.asm b/evm/src/cpu/kernel/asm/core/process_txn.asm index 8671fb1c..6adc0831 100644 --- a/evm/src/cpu/kernel/asm/core/process_txn.asm +++ b/evm/src/cpu/kernel/asm/core/process_txn.asm @@ -40,6 +40,7 @@ global buy_gas: // stack: sender_addr, gas_cost, retdest %deduct_eth // stack: deduct_eth_status, retdest +global txn_failure_insufficient_balance: %jumpi(panic) // stack: retdest @@ -54,17 +55,26 @@ global process_based_on_type: global process_contract_creation_txn: // stack: retdest - // Push the code address & length onto the stack, then call `create`. + PUSH process_contract_creation_txn_after_create + // stack: process_contract_creation_txn_after_create, retdest %mload_txn_field(@TXN_FIELD_DATA_LEN) - // stack: code_len, retdest + // stack: code_len, process_contract_creation_txn_after_create, retdest PUSH 0 - // stack: code_offset, code_len, retdest + // stack: code_offset, code_len, process_contract_creation_txn_after_create, retdest PUSH @SEGMENT_TXN_DATA - // stack: code_segment, code_offset, code_len, retdest + // stack: code_segment, code_offset, code_len, process_contract_creation_txn_after_create, retdest PUSH 0 // context - // stack: CODE_ADDR, code_len, retdest + // stack: CODE_ADDR, code_len, process_contract_creation_txn_after_create, retdest + %mload_txn_field(@TXN_FIELD_VALUE) + %mload_txn_field(@TXN_FIELD_ORIGIN) + // stack: sender, endowment, CODE_ADDR, code_len, process_contract_creation_txn_after_create, retdest %jump(create) +global process_contract_creation_txn_after_create: + // stack: new_address, retdest + POP + JUMP + global process_message_txn: // stack: retdest %mload_txn_field(@TXN_FIELD_VALUE) @@ -162,5 +172,5 @@ global process_message_txn_code_loaded: global process_message_txn_after_call: // stack: success, retdest // TODO: Return leftover gas? Or handled by termination instructions? - POP // Pop success for now. Will go into the reciept when we support that. + POP // Pop success for now. Will go into the receipt when we support that. JUMP diff --git a/evm/src/cpu/kernel/asm/core/syscall_stubs.asm b/evm/src/cpu/kernel/asm/core/syscall_stubs.asm index dfaa8bac..d7f5b912 100644 --- a/evm/src/cpu/kernel/asm/core/syscall_stubs.asm +++ b/evm/src/cpu/kernel/asm/core/syscall_stubs.asm @@ -2,49 +2,86 @@ // Each label should be removed from this file once it is implemented. global sys_sdiv: + PANIC global sys_smod: + PANIC global sys_signextend: + PANIC global sys_slt: + PANIC global sys_sgt: + PANIC global sys_sar: + PANIC global sys_address: + PANIC global sys_balance: + PANIC global sys_origin: + PANIC global sys_caller: + PANIC global sys_callvalue: + PANIC global sys_calldataload: + PANIC global sys_calldatasize: + PANIC global sys_calldatacopy: + PANIC global sys_codesize: + PANIC global sys_codecopy: + PANIC global sys_gasprice: + PANIC global sys_extcodesize: + PANIC global sys_extcodecopy: + PANIC global sys_returndatasize: + PANIC global sys_returndatacopy: + PANIC global sys_extcodehash: + PANIC global sys_blockhash: + PANIC global sys_coinbase: + PANIC global sys_timestamp: + PANIC global sys_number: + PANIC global sys_prevrandao: + PANIC global sys_gaslimit: + PANIC global sys_chainid: + PANIC global sys_selfbalance: + PANIC global sys_basefee: -global sys_sload: -global sys_sstore: + PANIC global sys_msize: + PANIC global sys_gas: + PANIC global sys_log0: + PANIC global sys_log1: + PANIC global sys_log2: + PANIC global sys_log3: + PANIC global sys_log4: -global sys_create: + PANIC global sys_call: + PANIC global sys_callcode: + PANIC global sys_delegatecall: -global sys_create2: + PANIC global sys_staticcall: PANIC diff --git a/evm/src/cpu/kernel/asm/mpt/hash/hash_trie_specific.asm b/evm/src/cpu/kernel/asm/mpt/hash/hash_trie_specific.asm index 39253b9f..15f33cee 100644 --- a/evm/src/cpu/kernel/asm/mpt/hash/hash_trie_specific.asm +++ b/evm/src/cpu/kernel/asm/mpt/hash/hash_trie_specific.asm @@ -88,11 +88,15 @@ encode_account_after_hash_storage_trie: SWAP1 JUMP -encode_txn: +global encode_txn: PANIC // TODO -encode_receipt: +global encode_receipt: PANIC // TODO -encode_storage_value: - PANIC // TODO: RLP encode as variable-len scalar? +global encode_storage_value: + // stack: rlp_pos, value_ptr, retdest + %encode_rlp_scalar + // stack: rlp_pos', retdest + SWAP1 + JUMP diff --git a/evm/src/cpu/kernel/asm/mpt/storage/storage_read.asm b/evm/src/cpu/kernel/asm/mpt/storage/storage_read.asm index d8801cda..e93b333f 100644 --- a/evm/src/cpu/kernel/asm/mpt/storage/storage_read.asm +++ b/evm/src/cpu/kernel/asm/mpt/storage/storage_read.asm @@ -1,30 +1,32 @@ // Read a word from the current account's storage trie. // -// Pre stack: slot, retdest +// Pre stack: kexit_info, slot // Post stack: value -global storage_read: - // stack: slot, retdest +global sys_sload: + // stack: kexit_info, slot + SWAP1 + // stack: slot, kexit_info %stack (slot) -> (slot, after_storage_read) %slot_to_storage_key - // stack: storage_key, after_storage_read, retdest + // stack: storage_key, after_storage_read, kexit_info PUSH 64 // storage_key has 64 nibbles %current_storage_trie - // stack: storage_root_ptr, 64, storage_key, after_storage_read, retdest + // stack: storage_root_ptr, 64, storage_key, after_storage_read, kexit_info %jump(mpt_read) after_storage_read: - // stack: value_ptr, retdest + // stack: value_ptr, kexit_info DUP1 %jumpi(storage_key_exists) // Storage key not found. Return default value_ptr = 0, // which derefs to 0 since @SEGMENT_TRIE_DATA[0] = 0. - %stack (value_ptr, retdest) -> (retdest, 0) - JUMP + %stack (value_ptr, kexit_info) -> (kexit_info, 0) + EXIT_KERNEL storage_key_exists: - // stack: value_ptr, retdest + // stack: value_ptr, kexit_info %mload_trie_data - // stack: value, retdest + // stack: value, kexit_info SWAP1 - JUMP + EXIT_KERNEL diff --git a/evm/src/cpu/kernel/asm/mpt/storage/storage_write.asm b/evm/src/cpu/kernel/asm/mpt/storage/storage_write.asm index 7695b0c2..a56117a7 100644 --- a/evm/src/cpu/kernel/asm/mpt/storage/storage_write.asm +++ b/evm/src/cpu/kernel/asm/mpt/storage/storage_write.asm @@ -1,44 +1,50 @@ // Write a word to the current account's storage trie. // -// Pre stack: slot, value, retdest +// Pre stack: kexit_info, slot, value // Post stack: (empty) -global storage_write: +global sys_sstore: + %stack (kexit_info, slot, value) -> (slot, value, kexit_info) // TODO: If value = 0, delete the key instead of inserting 0. - // stack: slot, value, retdest + // stack: slot, value, kexit_info // First we write the value to MPT data, and get a pointer to it. %get_trie_data_size - // stack: value_ptr, slot, value, retdest + // stack: value_ptr, slot, value, kexit_info SWAP2 - // stack: value, slot, value_ptr, retdest + // stack: value, slot, value_ptr, kexit_info %append_to_trie_data - // stack: slot, value_ptr, retdest + // stack: slot, value_ptr, kexit_info // Next, call mpt_insert on the current account's storage root. %stack (slot, value_ptr) -> (slot, value_ptr, after_storage_insert) %slot_to_storage_key - // stack: storage_key, value_ptr, after_storage_write, retdest + // stack: storage_key, value_ptr, after_storage_insert, kexit_info PUSH 64 // storage_key has 64 nibbles %current_storage_trie - // stack: storage_root_ptr, 64, storage_key, value_ptr, after_storage_insert, retdest + // stack: storage_root_ptr, 64, storage_key, value_ptr, after_storage_insert, kexit_info %jump(mpt_insert) after_storage_insert: - // stack: new_storage_root_ptr, retdest + // stack: new_storage_root_ptr, kexit_info %current_account_data - // stack: old_account_ptr, new_storage_root_ptr, retdest + // stack: old_account_ptr, new_storage_root_ptr, kexit_info %make_account_copy - // stack: new_account_ptr, new_storage_root_ptr, retdest + // stack: new_account_ptr, new_storage_root_ptr, kexit_info // Update the copied account with our new storage root pointer. %stack (new_account_ptr, new_storage_root_ptr) -> (new_account_ptr, new_storage_root_ptr, new_account_ptr) %add_const(2) - // stack: new_account_storage_root_ptr_ptr, new_storage_root_ptr, new_account_ptr, retdest + // stack: new_account_storage_root_ptr_ptr, new_storage_root_ptr, new_account_ptr, kexit_info %mstore_trie_data - // stack: new_account_ptr, retdest + // stack: new_account_ptr, kexit_info // Save this updated account to the state trie. + %stack (new_account_ptr) -> (new_account_ptr, after_state_insert) %address %addr_to_state_key - // stack: state_key, new_account_ptr, retdest + // stack: state_key, new_account_ptr, after_state_insert, kexit_info %jump(mpt_insert_state_trie) + +after_state_insert: + // stack: kexit_info + EXIT_KERNEL diff --git a/evm/src/cpu/kernel/asm/rlp/encode_rlp_string.asm b/evm/src/cpu/kernel/asm/rlp/encode_rlp_string.asm index a19507d8..e094b8c3 100644 --- a/evm/src/cpu/kernel/asm/rlp/encode_rlp_string.asm +++ b/evm/src/cpu/kernel/asm/rlp/encode_rlp_string.asm @@ -44,6 +44,8 @@ global encode_rlp_string_small_single_byte: %mstore_rlp // stack: pos, retdest %increment + SWAP1 + // stack: retdest, pos' JUMP global encode_rlp_string_large: diff --git a/evm/src/generation/prover_input.rs b/evm/src/generation/prover_input.rs index 04a6f027..588454fd 100644 --- a/evm/src/generation/prover_input.rs +++ b/evm/src/generation/prover_input.rs @@ -73,7 +73,10 @@ impl GenerationState { // Return length of code. // stack: codehash, ... let codehash = stack_peek(self, 0).expect("Empty stack"); - self.inputs.contract_code[&H256::from_uint(&codehash)] + self.inputs + .contract_code + .get(&H256::from_uint(&codehash)) + .unwrap_or_else(|| panic!("No code found with hash {codehash}")) .len() .into() } @@ -82,7 +85,11 @@ impl GenerationState { // stack: i, code_length, codehash, ... let i = stack_peek(self, 0).expect("Unexpected stack").as_usize(); let codehash = stack_peek(self, 2).expect("Unexpected stack"); - self.inputs.contract_code[&H256::from_uint(&codehash)][i].into() + self.inputs + .contract_code + .get(&H256::from_uint(&codehash)) + .unwrap_or_else(|| panic!("No code found with hash {codehash}"))[i] + .into() } _ => panic!("Invalid prover input function."), } From e52b75b0d135cf4c1050fa4111eb7020c0c387e2 Mon Sep 17 00:00:00 2001 From: Daniel Lubarov Date: Sat, 25 Feb 2023 08:20:32 -0800 Subject: [PATCH 2/5] Fix `hash_or_noop` for general hash sizes --- plonky2/src/plonk/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plonky2/src/plonk/config.rs b/plonky2/src/plonk/config.rs index 36d29cff..cacc8421 100644 --- a/plonky2/src/plonk/config.rs +++ b/plonky2/src/plonk/config.rs @@ -53,7 +53,7 @@ pub trait Hasher: Sized + Clone + Debug + Eq + PartialEq { /// Hash the slice if necessary to reduce its length to ~256 bits. If it already fits, this is a /// no-op. fn hash_or_noop(inputs: &[F]) -> Self::Hash { - if inputs.len() <= 4 { + if inputs.len() * 8 <= Self::HASH_SIZE { let mut inputs_bytes = vec![0u8; Self::HASH_SIZE]; for i in 0..inputs.len() { inputs_bytes[i * 8..(i + 1) * 8] From 52e34265c6ac13adece54c47b4dd6150b5be1cbb Mon Sep 17 00:00:00 2001 From: Daniel Lubarov Date: Sat, 25 Feb 2023 08:52:50 -0800 Subject: [PATCH 3/5] Bump plonky2 to 0.1.2 --- plonky2/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plonky2/Cargo.toml b/plonky2/Cargo.toml index 6cbc1b6b..f7b63868 100644 --- a/plonky2/Cargo.toml +++ b/plonky2/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "plonky2" description = "Recursive SNARKs based on PLONK and FRI" -version = "0.1.1" +version = "0.1.2" license = "MIT OR Apache-2.0" authors = ["Daniel Lubarov ", "William Borgeaud ", "Nicholas Ward "] readme = "README.md" From 2133c7f3ba6cc19de66b9af26ed03e807bfb2372 Mon Sep 17 00:00:00 2001 From: Daniel Lubarov Date: Sat, 25 Feb 2023 08:55:55 -0800 Subject: [PATCH 4/5] Use new plonky2 --- ecdsa/Cargo.toml | 2 +- evm/Cargo.toml | 2 +- evm/src/fixed_recursive_verifier.rs | 12 ++++++------ evm/src/get_challenges.rs | 2 +- insertion/Cargo.toml | 4 ++-- starky/Cargo.toml | 4 ++-- starky/src/get_challenges.rs | 2 +- system_zero/Cargo.toml | 4 ++-- u32/Cargo.toml | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/ecdsa/Cargo.toml b/ecdsa/Cargo.toml index 04dbd19c..0a156654 100644 --- a/ecdsa/Cargo.toml +++ b/ecdsa/Cargo.toml @@ -13,7 +13,7 @@ anyhow = { version = "1.0.40", default-features = false } itertools = { version = "0.10.0", default-features = false } plonky2_maybe_rayon = { version = "0.1.0", default-features = false } num = { version = "0.4.0", default-features = false } -plonky2 = { version = "0.1.1", default-features = false } +plonky2 = { version = "0.1.2", default-features = false } plonky2_u32 = { version = "0.1.0", default-features = false } serde = { version = "1.0", default-features = false, features = ["derive"] } diff --git a/evm/Cargo.toml b/evm/Cargo.toml index f2c192c8..d9de1d16 100644 --- a/evm/Cargo.toml +++ b/evm/Cargo.toml @@ -25,7 +25,7 @@ num = "0.4.0" once_cell = "1.13.0" pest = "2.1.3" pest_derive = "2.1.0" -plonky2 = { version = "0.1.1", default-features = false, features = ["timing"] } +plonky2 = { version = "0.1.2", default-features = false, features = ["timing"] } plonky2_util = { version = "0.1.0" } rand = "0.8.5" rand_chacha = "0.3.1" diff --git a/evm/src/fixed_recursive_verifier.rs b/evm/src/fixed_recursive_verifier.rs index e662874f..0f04cc33 100644 --- a/evm/src/fixed_recursive_verifier.rs +++ b/evm/src/fixed_recursive_verifier.rs @@ -182,7 +182,7 @@ where let mut builder = CircuitBuilder::new(CircuitConfig::standard_recursion_config()); let recursive_proofs = - core::array::from_fn(|i| builder.add_virtual_proof_with_pis::(inner_common_data[i])); + core::array::from_fn(|i| builder.add_virtual_proof_with_pis(inner_common_data[i])); let pis: [_; NUM_TABLES] = core::array::from_fn(|i| { PublicInputs::from_vec(&recursive_proofs[i].public_inputs, stark_config) }); @@ -303,8 +303,8 @@ where let common = &root.circuit.common; let root_vk = builder.constant_verifier_data(&root.circuit.verifier_only); let is_agg = builder.add_virtual_bool_target_safe(); - let agg_proof = builder.add_virtual_proof_with_pis::(common); - let evm_proof = builder.add_virtual_proof_with_pis::(common); + let agg_proof = builder.add_virtual_proof_with_pis(common); + let evm_proof = builder.add_virtual_proof_with_pis(common); builder .conditionally_verify_cyclic_proof::( is_agg, &agg_proof, &evm_proof, &root_vk, common, @@ -330,8 +330,8 @@ where let mut builder = CircuitBuilder::::new(CircuitConfig::standard_recursion_config()); let has_parent_block = builder.add_virtual_bool_target_safe(); - let parent_block_proof = builder.add_virtual_proof_with_pis::(&expected_common_data); - let agg_root_proof = builder.add_virtual_proof_with_pis::(&agg.circuit.common); + let parent_block_proof = builder.add_virtual_proof_with_pis(&expected_common_data); + let agg_root_proof = builder.add_virtual_proof_with_pis(&agg.circuit.common); let cyclic_vk = builder.add_verifier_data_public_inputs(); builder @@ -579,7 +579,7 @@ where } let mut builder = CircuitBuilder::new(shrinking_config()); - let proof_with_pis_target = builder.add_virtual_proof_with_pis::(&last.common); + let proof_with_pis_target = builder.add_virtual_proof_with_pis(&last.common); let last_vk = builder.constant_verifier_data(&last.verifier_only); builder.verify_proof::(&proof_with_pis_target, &last_vk, &last.common); builder.register_public_inputs(&proof_with_pis_target.public_inputs); // carry PIs forward diff --git a/evm/src/get_challenges.rs b/evm/src/get_challenges.rs index 7e6a1ba7..fdc0e315 100644 --- a/evm/src/get_challenges.rs +++ b/evm/src/get_challenges.rs @@ -199,7 +199,7 @@ impl StarkProofTarget { permutation_challenge_sets, stark_alphas, stark_zeta, - fri_challenges: challenger.fri_challenges::( + fri_challenges: challenger.fri_challenges( builder, commit_phase_merkle_caps, final_poly, diff --git a/insertion/Cargo.toml b/insertion/Cargo.toml index e39e2bd3..125e72e3 100644 --- a/insertion/Cargo.toml +++ b/insertion/Cargo.toml @@ -6,8 +6,8 @@ edition = "2021" [dependencies] anyhow = { version = "1.0.40", default-features = false } -plonky2 = { version = "0.1.1", default-features = false } +plonky2 = { version = "0.1.2", default-features = false } [dev-dependencies] -plonky2 = { version = "0.1.1" } +plonky2 = { version = "0.1.2" } diff --git a/starky/Cargo.toml b/starky/Cargo.toml index 4f459613..e47184d7 100644 --- a/starky/Cargo.toml +++ b/starky/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "starky" description = "Implementation of STARKs" -version = "0.1.0" +version = "0.1.1" license = "MIT OR Apache-2.0" authors = ["Daniel Lubarov ", "William Borgeaud "] readme = "README.md" @@ -21,7 +21,7 @@ anyhow = { version = "1.0.40", default-features = false } itertools = { version = "0.10.0", default-features = false } log = { version = "0.4.14", default-features = false } plonky2_maybe_rayon = { version = "0.1.0", default-features = false } -plonky2 = { version = "0.1.1", default-features = false } +plonky2 = { version = "0.1.2", default-features = false } [dev-dependencies] env_logger = { version = "0.9.0", default-features = false } diff --git a/starky/src/get_challenges.rs b/starky/src/get_challenges.rs index 2f1a9064..b34b427d 100644 --- a/starky/src/get_challenges.rs +++ b/starky/src/get_challenges.rs @@ -175,7 +175,7 @@ where permutation_challenge_sets, stark_alphas, stark_zeta, - fri_challenges: challenger.fri_challenges::( + fri_challenges: challenger.fri_challenges( builder, commit_phase_merkle_caps, final_poly, diff --git a/system_zero/Cargo.toml b/system_zero/Cargo.toml index b8604984..2595eb03 100644 --- a/system_zero/Cargo.toml +++ b/system_zero/Cargo.toml @@ -8,11 +8,11 @@ edition = "2021" anyhow = "1.0.40" itertools = "0.10.0" log = "0.4.14" -plonky2 = { version = "0.1.1" } +plonky2 = { version = "0.1.2" } plonky2_util = { version = "0.1.0" } rand = "0.8.4" rand_chacha = "0.3.1" -starky = { version = "0.1.0" } +starky = { version = "0.1.1" } [dev-dependencies] criterion = "0.4.0" diff --git a/u32/Cargo.toml b/u32/Cargo.toml index 0fd11a4a..bde1b534 100644 --- a/u32/Cargo.toml +++ b/u32/Cargo.toml @@ -10,8 +10,8 @@ edition = "2021" anyhow = { version = "1.0.40", default-features = false } itertools = { version = "0.10.0", default-features = false } num = { version = "0.4", default-features = false } -plonky2 = { version = "0.1.1", default-features = false } +plonky2 = { version = "0.1.2", default-features = false } [dev-dependencies] -plonky2 = { version = "0.1.1", default-features = false, features = ["gate_testing"] } +plonky2 = { version = "0.1.2", default-features = false, features = ["gate_testing"] } rand = { version = "0.8.4", default-features = false, features = ["getrandom"] } From 7781dd366fa9ab4bd7bd688764b021b911864c5b Mon Sep 17 00:00:00 2001 From: Daniel Lubarov Date: Sat, 25 Feb 2023 10:17:28 -0800 Subject: [PATCH 5/5] Plonky2 to 0.1.3 --- plonky2/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plonky2/Cargo.toml b/plonky2/Cargo.toml index f7b63868..db81fab0 100644 --- a/plonky2/Cargo.toml +++ b/plonky2/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "plonky2" description = "Recursive SNARKs based on PLONK and FRI" -version = "0.1.2" +version = "0.1.3" license = "MIT OR Apache-2.0" authors = ["Daniel Lubarov ", "William Borgeaud ", "Nicholas Ward "] readme = "README.md"