diff --git a/benchmarks/tasm_neptune_transaction_removal_records_integrity.json b/benchmarks/tasm_neptune_transaction_removal_records_integrity.json index 0ebd30a87..8ffde4dc8 100644 --- a/benchmarks/tasm_neptune_transaction_removal_records_integrity.json +++ b/benchmarks/tasm_neptune_transaction_removal_records_integrity.json @@ -1,9 +1,9 @@ [ { "name": "tasm_neptune_transaction_removal_records_integrity", - "clock_cycle_count": 29578, - "hash_table_height": 5615, - "u32_table_height": 13250, + "clock_cycle_count": 29594, + "hash_table_height": 5621, + "u32_table_height": 13245, "case": "CommonCase" } ] \ No newline at end of file diff --git a/benchmarks/tasm_neptune_transaction_transaction_kernel_mast_hash.json b/benchmarks/tasm_neptune_transaction_transaction_kernel_mast_hash.json index c8829fc56..85b18e806 100644 --- a/benchmarks/tasm_neptune_transaction_transaction_kernel_mast_hash.json +++ b/benchmarks/tasm_neptune_transaction_transaction_kernel_mast_hash.json @@ -1,14 +1,14 @@ [ { "name": "tasm_neptune_transaction_transaction_kernel_mast_hash", - "clock_cycle_count": 7822, - "hash_table_height": 3631, - "u32_table_height": 74, + "clock_cycle_count": 7754, + "hash_table_height": 3601, + "u32_table_height": 73, "case": "CommonCase" }, { "name": "tasm_neptune_transaction_transaction_kernel_mast_hash", - "clock_cycle_count": 8484, + "clock_cycle_count": 8486, "hash_table_height": 3967, "u32_table_height": 74, "case": "WorstCase" diff --git a/profiles/tasm_neptune_transaction_removal_records_integrity.profile b/profiles/tasm_neptune_transaction_removal_records_integrity.profile index 6e8a38e16..02b834559 100644 --- a/profiles/tasm_neptune_transaction_removal_records_integrity.profile +++ b/profiles/tasm_neptune_transaction_removal_records_integrity.profile @@ -1,7 +1,7 @@ tasm_neptune_transaction_removal_records_integrity: # call graph - tasm_neptune_transaction_transaction_kernel_mast_hash: 4642 + tasm_neptune_transaction_transaction_kernel_mast_hash: 4658 tasm_list_unsafeimplu32_new___digest: 36 tasm_memory_dyn_malloc: 25 tasm_list_unsafeimplu32_set_length___digest: 5 @@ -17,11 +17,11 @@ tasm_neptune_transaction_removal_records_integrity: tasm_hashing_absorb_pad_varnum_zeros: 93 tasm_hashing_absorb_read_remainder: 14 tasm_list_unsafeimplu32_set_element___digest: 8 - tasm_hashing_hash_varlen: 196 - tasm_hashing_absorb: 182 - tasm_hashing_absorb_hash_all_full_chunks: 41 - tasm_hashing_absorb_pad_varnum_zeros: 82 - tasm_hashing_absorb_read_remainder: 23 + tasm_hashing_hash_varlen: 212 + tasm_hashing_absorb: 198 + tasm_hashing_absorb_hash_all_full_chunks: 53 + tasm_hashing_absorb_pad_varnum_zeros: 104 + tasm_hashing_absorb_read_remainder: 5 tasm_list_unsafeimplu32_set_element___digest: 8 tasm_hashing_hash_varlen: 156 tasm_hashing_absorb: 142 @@ -1486,18 +1486,18 @@ tasm_neptune_transaction_removal_records_integrity: tasm_arithmetic_u64_eq: 6 tasm_list_unsafeimplu32_get_element___digest: 8 tasm_hashing_eq_digest: 15 - total: 29578 + total: 29594 # aggregated - tasm_neptune_transaction_transaction_kernel_mast_hash: 4642 + tasm_neptune_transaction_transaction_kernel_mast_hash: 4658 tasm_list_unsafeimplu32_new___digest: 144 tasm_memory_dyn_malloc: 350 tasm_list_unsafeimplu32_set_length___digest: 5 - tasm_hashing_hash_varlen: 6298 - tasm_hashing_absorb: 6088 - tasm_hashing_absorb_hash_all_full_chunks: 3987 - tasm_hashing_absorb_pad_varnum_zeros: 1153 - tasm_hashing_absorb_read_remainder: 408 + tasm_hashing_hash_varlen: 6314 + tasm_hashing_absorb: 6104 + tasm_hashing_absorb_hash_all_full_chunks: 3999 + tasm_hashing_absorb_pad_varnum_zeros: 1175 + tasm_hashing_absorb_read_remainder: 390 tasm_list_unsafeimplu32_set_element___digest: 168 tasm_list_unsafeimplu32_get_element___digest: 1480 tasm_memory_push_ram_to_stack___digest: 50 @@ -1586,4 +1586,4 @@ tasm_neptune_transaction_removal_records_integrity: tasm_arithmetic_u64_div2: 1764 tasm_hashing_swap_digest: 784 tasm_hashing_eq_digest: 30 - total: 29578 + total: 29594 diff --git a/src/mine_loop.rs b/src/mine_loop.rs index 4d3721552..f3175edb9 100644 --- a/src/mine_loop.rs +++ b/src/mine_loop.rs @@ -205,7 +205,7 @@ fn make_coinbase_transaction( let kernel = TransactionKernel { inputs: vec![], outputs: vec![coinbase_addition_record], - pubscript_hashes_and_inputs: vec![], + public_announcements: vec![], fee: Amount::zero(), timestamp, coinbase: Some(coinbase_amount), @@ -219,7 +219,7 @@ fn make_coinbase_transaction( lock_script_witnesses: vec![], input_membership_proofs: vec![], output_utxos: vec![coinbase_utxo.clone()], - pubscripts: vec![], + public_announcements: vec![], mutator_set_accumulator, }; let validity_logic = @@ -493,8 +493,7 @@ mod mine_loop_tests { let four_neptune_coins = Amount::from(4).to_native_coins(); let receiver_privacy_digest = Digest::default(); let sender_randomness = Digest::default(); - let pubscript: PubScript = PubScript::default(); - let pubscript_input: Vec = vec![]; + let public_announcement = PublicAnnouncement::default(); let tx_output = Utxo { coins: four_neptune_coins, lock_script_hash: LockScript::anyone_can_spend().hash(), @@ -506,8 +505,7 @@ mod mine_loop_tests { utxo: tx_output, sender_randomness, receiver_privacy_digest, - pubscript, - pubscript_input, + public_announcement, }), ], 1.into(), diff --git a/src/models/blockchain/block/mod.rs b/src/models/blockchain/block/mod.rs index e86611aa0..450db1a80 100644 --- a/src/models/blockchain/block/mod.rs +++ b/src/models/blockchain/block/mod.rs @@ -114,7 +114,7 @@ impl Block { outputs: vec![], fee: 0u32.into(), timestamp, - pubscript_hashes_and_inputs: vec![], + public_announcements: vec![], coinbase: Some(total_premine_amount), mutator_set_hash: MutatorSetAccumulator::::new().hash(), }, @@ -477,7 +477,7 @@ mod block_tests { use crate::{ config_models::network::Network, models::{ - blockchain::transaction::PubScript, state::wallet::WalletSecret, + blockchain::transaction::PublicAnnouncement, state::wallet::WalletSecret, state::UtxoReceiverData, }, tests::shared::{get_mock_global_state, make_mock_block}, @@ -518,8 +518,7 @@ mod block_tests { // create a new transaction, merge it into block 1 and check that block 1 is still valid let new_utxo = Utxo::new_native_coin(other_address.lock_script(), 10.into()); let reciever_data = UtxoReceiverData { - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), receiver_privacy_digest: other_address.privacy_digest, sender_randomness: random(), utxo: new_utxo, diff --git a/src/models/blockchain/transaction/mod.rs b/src/models/blockchain/transaction/mod.rs index 0c0146341..2c0af8402 100644 --- a/src/models/blockchain/transaction/mod.rs +++ b/src/models/blockchain/transaction/mod.rs @@ -14,10 +14,8 @@ use std::cmp::max; use std::hash::{Hash as StdHash, Hasher as StdHasher}; use std::time::SystemTime; use tracing::{debug, error, warn}; -use triton_vm::instruction::LabelledInstruction; -use triton_vm::program::Program; use triton_vm::proof::Proof; -use triton_vm::{triton_asm, NonDeterminism, PublicInput}; +use triton_vm::NonDeterminism; use twenty_first::shared_math::b_field_element::BFieldElement; use twenty_first::shared_math::bfield_codec::BFieldCodec; use twenty_first::util_types::algebraic_hasher::AlgebraicHasher; @@ -25,7 +23,7 @@ use twenty_first::util_types::emojihash_trait::Emojihash; use self::amount::Amount; use self::native_coin::native_coin_program; -use self::transaction_kernel::{PubScriptHashAndInput, TransactionKernel}; +use self::transaction_kernel::TransactionKernel; use self::utxo::{LockScript, TypeScript, Utxo}; use self::validity::TransactionValidationLogic; use super::block::Block; @@ -36,32 +34,14 @@ use crate::util_types::mutator_set::mutator_set_accumulator::MutatorSetAccumulat use crate::util_types::mutator_set::mutator_set_trait::MutatorSet; use crate::util_types::mutator_set::removal_record::RemovalRecord; -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, GetSize, BFieldCodec)] -pub struct PubScript { - pub program: Program, -} - -impl Default for PubScript { - fn default() -> Self { - Self { - program: Program::new(&triton_asm!(halt)), - } - } +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, GetSize, BFieldCodec, Default)] +pub struct PublicAnnouncement { + pub message: Vec, } -impl From> for PubScript { - fn from(instrs: Vec) -> Self { - Self { - program: Program::new(&instrs), - } - } -} - -impl From<&[LabelledInstruction]> for PubScript { - fn from(instrs: &[LabelledInstruction]) -> Self { - Self { - program: Program::new(instrs), - } +impl PublicAnnouncement { + pub fn new(message: Vec) -> Self { + Self { message } } } @@ -75,7 +55,7 @@ pub struct PrimitiveWitness { pub lock_script_witnesses: Vec>, pub input_membership_proofs: Vec>, pub output_utxos: Vec, - pub pubscripts: Vec, + pub public_announcements: Vec, pub mutator_set_accumulator: MutatorSetAccumulator, } @@ -277,9 +257,9 @@ impl Transaction { let merged_kernel = TransactionKernel { inputs: [self.kernel.inputs, other.kernel.inputs].concat(), outputs: [self.kernel.outputs, other.kernel.outputs].concat(), - pubscript_hashes_and_inputs: [ - self.kernel.pubscript_hashes_and_inputs, - other.kernel.pubscript_hashes_and_inputs, + public_announcements: [ + self.kernel.public_announcements, + other.kernel.public_announcements, ] .concat(), fee: self.kernel.fee + other.kernel.fee, @@ -323,9 +303,9 @@ impl Transaction { other_witness.output_utxos.clone(), ] .concat(), - pubscripts: [ - self_witness.pubscripts.clone(), - other_witness.pubscripts.clone(), + public_announcements: [ + self_witness.public_announcements.clone(), + other_witness.public_announcements.clone(), ] .concat(), mutator_set_accumulator: self_witness.mutator_set_accumulator.clone(), @@ -527,34 +507,7 @@ impl Transaction { return false; } - // verify pubscripts - for ( - PubScriptHashAndInput { - pubscript_hash, - pubscript_input, - }, - pubscript, - ) in self - .kernel - .pubscript_hashes_and_inputs - .iter() - .zip(primitive_witness.pubscripts.iter()) - { - if *pubscript_hash != Hash::hash(pubscript) { - return false; - } - - let secret_input: Vec = vec![]; - - // The pubscript is satisfied if it halts gracefully without crashing. - if let Err(err) = pubscript.program.run( - PublicInput::new(pubscript_input.to_vec()), - NonDeterminism::new(secret_input), - ) { - warn!("Could not verify pubscript for transaction; got err: \"{err}\"."); - return false; - } - } + // in regards to public announcements: there isn't anything to verify true } @@ -573,7 +526,7 @@ mod witness_tests { lock_script_witnesses: vec![], input_membership_proofs: vec![], output_utxos: vec![], - pubscripts: vec![], + public_announcements: vec![], mutator_set_accumulator: MutatorSetAccumulator::new(), }; diff --git a/src/models/blockchain/transaction/native_coin.rs b/src/models/blockchain/transaction/native_coin.rs index b55433829..e72617461 100644 --- a/src/models/blockchain/transaction/native_coin.rs +++ b/src/models/blockchain/transaction/native_coin.rs @@ -41,7 +41,7 @@ pub fn native_coin_reference( // Kernel mast hash is the Merkle root whose leafs are // - hash_varlen(input_sequence) // - hash_varlen(output_sequence) - // - hash_varlen(pubscript_hashes_and_inputs_sequence) + // - hash_varlen(public_announcements_sequence) // - hash_varlen(fee_sequence) // - hash_varlen(coinbase_sequence) // - hash_varlen(timestamp_sequence) @@ -61,7 +61,7 @@ pub fn native_coin_reference( *Vec::>::decode(&read_secret_input)?; let input_sequence = &sequences[0]; let output_sequence = &sequences[1]; - let pubscript_sequence = &sequences[2]; + let public_announcements_sequence = &sequences[2]; let fee_sequence = &sequences[3]; let coinbase_sequence = &sequences[4]; let timestamp_sequence = &sequences[5]; @@ -114,7 +114,7 @@ pub fn native_coin_reference( let leafs = [ Hash::hash_varlen(input_sequence), Hash::hash_varlen(output_sequence), - Hash::hash_varlen(pubscript_sequence), + Hash::hash_varlen(public_announcements_sequence), Hash::hash_varlen(fee_sequence), Hash::hash_varlen(coinbase_sequence), Hash::hash_varlen(timestamp_sequence), diff --git a/src/models/blockchain/transaction/transaction_kernel.rs b/src/models/blockchain/transaction/transaction_kernel.rs index 8bd47f0c9..fdcc60c79 100644 --- a/src/models/blockchain/transaction/transaction_kernel.rs +++ b/src/models/blockchain/transaction/transaction_kernel.rs @@ -12,7 +12,7 @@ use twenty_first::{ }, }; -use super::{amount::pseudorandom_amount, Amount}; +use super::{amount::pseudorandom_amount, Amount, PublicAnnouncement}; use crate::{ util_types::mutator_set::{ addition_record::{pseudorandom_addition_record, AdditionRecord}, @@ -21,21 +21,11 @@ use crate::{ Hash, }; -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, GetSize, BFieldCodec)] -pub struct PubScriptHashAndInput { - pub pubscript_hash: Digest, - pub pubscript_input: Vec, -} - -pub fn pseudorandom_pubscript_struct(seed: [u8; 32]) -> PubScriptHashAndInput { +pub fn pseudorandom_public_announcement(seed: [u8; 32]) -> PublicAnnouncement { let mut rng: StdRng = SeedableRng::from_seed(seed); - let digest: Digest = rng.gen(); let len = 10 + (rng.next_u32() % 50) as usize; - let input: Vec = (0..len).map(|_| rng.gen()).collect_vec(); - PubScriptHashAndInput { - pubscript_hash: digest, - pubscript_input: input, - } + let message = (0..len).map(|_| rng.gen()).collect_vec(); + PublicAnnouncement { message } } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, GetSize, BFieldCodec, TasmObject)] @@ -45,7 +35,7 @@ pub struct TransactionKernel { // `outputs` contains the commitments (addition records) that go into the AOCL pub outputs: Vec, - pub pubscript_hashes_and_inputs: Vec, + pub public_announcements: Vec, pub fee: Amount, pub coinbase: Option, @@ -86,7 +76,7 @@ impl TransactionKernel { let output_utxos_sequence = self.outputs.encode(); - let pubscript_sequence = self.pubscript_hashes_and_inputs.encode(); + let pubscript_sequence = self.public_announcements.encode(); let fee_sequence = self.fee.encode(); @@ -158,7 +148,7 @@ pub fn pseudorandom_transaction_kernel( .map(|_| pseudorandom_addition_record(rng.gen::<[u8; 32]>())) .collect_vec(); let pubscripts = (0..num_pubscripts) - .map(|_| pseudorandom_pubscript_struct(rng.gen::<[u8; 32]>())) + .map(|_| pseudorandom_public_announcement(rng.gen::<[u8; 32]>())) .collect_vec(); let fee = pseudorandom_amount(rng.gen::<[u8; 32]>()); let coinbase = pseudorandom_option(rng.gen(), pseudorandom_amount(rng.gen::<[u8; 32]>())); @@ -168,7 +158,7 @@ pub fn pseudorandom_transaction_kernel( TransactionKernel { inputs, outputs, - pubscript_hashes_and_inputs: pubscripts, + public_announcements: pubscripts, fee, coinbase, timestamp, @@ -182,25 +172,25 @@ pub mod transaction_kernel_tests { use rand::{random, thread_rng, Rng, RngCore}; use crate::{ - tests::shared::{random_pubscript_struct, random_transaction_kernel}, + tests::shared::{random_public_announcement, random_transaction_kernel}, util_types::mutator_set::{removal_record::AbsoluteIndexSet, shared::NUM_TRIALS}, }; use super::*; #[test] - pub fn decode_pubscripthash_and_input() { - let pubscript = random_pubscript_struct(); + pub fn decode_public_announcement() { + let pubscript = random_public_announcement(); let encoded = pubscript.encode(); - let decoded = *PubScriptHashAndInput::decode(&encoded).unwrap(); + let decoded = *PublicAnnouncement::decode(&encoded).unwrap(); assert_eq!(pubscript, decoded); } #[test] - pub fn decode_pubscripthashes_and_inputs() { - let pubscripts = vec![random_pubscript_struct(), random_pubscript_struct()]; + pub fn decode_public_announcements() { + let pubscripts = vec![random_public_announcement(), random_public_announcement()]; let encoded = pubscripts.encode(); - let decoded = *Vec::::decode(&encoded).unwrap(); + let decoded = *Vec::::decode(&encoded).unwrap(); assert_eq!(pubscripts, decoded); } @@ -231,7 +221,7 @@ pub mod transaction_kernel_tests { outputs: vec![AdditionRecord { canonical_commitment: random(), }], - pubscript_hashes_and_inputs: Default::default(), + public_announcements: Default::default(), fee: Amount::one(), coinbase: None, timestamp: Default::default(), diff --git a/src/models/blockchain/transaction/validity.rs b/src/models/blockchain/transaction/validity.rs index 3c1d9e79f..833c85aff 100644 --- a/src/models/blockchain/transaction/validity.rs +++ b/src/models/blockchain/transaction/validity.rs @@ -1,5 +1,5 @@ pub mod kernel_to_lock_scripts; -pub mod kernel_to_typescripts; +pub mod kernel_to_type_scripts; pub mod lockscripts_halt; pub mod removal_records_integrity; pub mod tasm; @@ -18,7 +18,7 @@ use twenty_first::shared_math::bfield_codec::BFieldCodec; use self::lockscripts_halt::LockScriptsHalt; use self::removal_records_integrity::RemovalRecordsIntegrity; use self::{ - kernel_to_lock_scripts::KernelToLockScripts, kernel_to_typescripts::KernelToTypeScripts, + kernel_to_lock_scripts::KernelToLockScripts, kernel_to_type_scripts::KernelToTypeScripts, typescripts_halt::TypeScriptsHalt, }; use super::{transaction_kernel::TransactionKernel, PrimitiveWitness}; diff --git a/src/models/blockchain/transaction/validity/kernel_to_typescripts.rs b/src/models/blockchain/transaction/validity/kernel_to_type_scripts.rs similarity index 100% rename from src/models/blockchain/transaction/validity/kernel_to_typescripts.rs rename to src/models/blockchain/transaction/validity/kernel_to_type_scripts.rs diff --git a/src/models/blockchain/transaction/validity/tasm/transaction_kernel_mast_hash.rs b/src/models/blockchain/transaction/validity/tasm/transaction_kernel_mast_hash.rs index 253afb7b1..140f6226e 100644 --- a/src/models/blockchain/transaction/validity/tasm/transaction_kernel_mast_hash.rs +++ b/src/models/blockchain/transaction/validity/tasm/transaction_kernel_mast_hash.rs @@ -95,8 +95,8 @@ impl BasicSnippet for TransactionKernelMastHash { let kernel_to_inputs_with_size = tasm_lib::field_with_size!(TransactionKernel::inputs); let kernel_to_outputs_with_size = tasm_lib::field_with_size!(TransactionKernel::outputs); - let kernel_to_pubscripts_with_size = - tasm_lib::field_with_size!(TransactionKernel::pubscript_hashes_and_inputs); + let kernel_to_public_announcements = + tasm_lib::field_with_size!(TransactionKernel::public_announcements); let kernel_to_fee_with_size = tasm_lib::field_with_size!(TransactionKernel::fee); let kernel_to_coinbase_with_size = tasm_lib::field_with_size!(TransactionKernel::coinbase); let kernel_to_timestamp_with_size = @@ -120,29 +120,29 @@ impl BasicSnippet for TransactionKernelMastHash { // populate list[8] with inputs digest dup 1 // _ *kernel *list *kernel {&kernel_to_inputs_with_size} - // _ *kernel *list *inputs *inputs_size + // _ *kernel *list *inputs inputs_size call {hash_varlen} // _ *kernel *list d4 d3 d2 d1 d0 dup 5 push 8 // _ *kernel *list d4 d3 d2 d1 d0 *list 8 call {set_element} // _ *kernel *list // populate list[9] with outputs digest dup 1 // _ *kernel *list *kernel - {&kernel_to_outputs_with_size} // _ *kernel *list *outputs *outputs_size + {&kernel_to_outputs_with_size} // _ *kernel *list *outputs outputs_size call {hash_varlen} // _ *kernel *list d4 d3 d2 d1 d0 dup 5 push 9 // _ *kernel *list d4 d3 d2 d1 d0 *list 9 call {set_element} // _ *kernel *list - // populate list[10] with pubscript_hashes_and_inputs digest + // populate list[10] with public_announcements digest dup 1 // _ *kernel *list *kernel - {&kernel_to_pubscripts_with_size} - // _ *kernel *list *pubscript_hashes_and_inputs *pubscript_hashes_and_inputs_size_size + {&kernel_to_public_announcements} + // _ *kernel *list *kernel_to_public_announcements kernel_to_public_announcements_size call {hash_varlen} // _ *kernel *list d4 d3 d2 d1 d0 dup 5 push 10 // _ *kernel *list d4 d3 d2 d1 d0 *list 10 call {set_element} // _ *kernel *list // populate list[11] with fee digest dup 1 // _ *kernel *list *kernel - {&kernel_to_fee_with_size} // _ *kernel *list *fee *fee_size + {&kernel_to_fee_with_size} // _ *kernel *list *fee fee_size call {hash_varlen} // _ *kernel *list d4 d3 d2 d1 d0 dup 5 push 11 // _ *kernel *list d4 d3 d2 d1 d0 *list 11 call {set_element} // _ *kernel *list @@ -150,7 +150,7 @@ impl BasicSnippet for TransactionKernelMastHash { // populate list[12] with coinbase digest dup 1 // _ *kernel *list *kernel {&kernel_to_coinbase_with_size} - // _ *kernel *list *coinbase *coinbase_size + // _ *kernel *list *coinbase coinbase_size call {hash_varlen} // _ *kernel *list d4 d3 d2 d1 d0 dup 5 push 12 // _ *kernel *list d4 d3 d2 d1 d0 *list 12 call {set_element} // _ *kernel *list @@ -158,7 +158,7 @@ impl BasicSnippet for TransactionKernelMastHash { // populate list[13] with timestamp digest dup 1 // _ *kernel *list *kernel {&kernel_to_timestamp_with_size} - // _ *kernel *list *timestamp *timestamp_size + // _ *kernel *list *timestamp timestamp_size call {hash_varlen} // _ *kernel *list d4 d3 d2 d1 d0 dup 5 push 13 // _ *kernel *list d4 d3 d2 d1 d0 *list 13 call {set_element} // _ *kernel *list @@ -166,7 +166,7 @@ impl BasicSnippet for TransactionKernelMastHash { // populate list[14] with mutator set hash digest dup 1 // _ *kernel *list *kernel {&kernel_to_mutator_set_hash_with_size} - // _ *kernel *list *mutator_set_hash *mutator_set_hash_size + // _ *kernel *list *mutator_set_hash mutator_set_hash_size call {hash_varlen} // _ *kernel *list d4 d3 d2 d1 d0 dup 5 push 14 // _ *kernel *list d4 d3 d2 d1 d0 *list 14 call {set_element} // _ *kernel *list @@ -298,21 +298,20 @@ impl Function for TransactionKernelMastHash { let outputs_hash = Hash::hash_varlen(&outputs_encoded); // address += BFieldElement::one() + BFieldElement::new(outputs_size as u64); - // pubscript_hashes_and_inputs - // let pubscript_hashes_and_inputs_size = memory.get(&address).unwrap().value() as usize; - // let pubscript_hashes_and_inputs_encoded = (0..pubscript_hashes_and_inputs_size) + // public_announcements + // let public_announcements_size = memory.get(&address).unwrap().value() as usize; + // let public_announcements_encoded = (0..public_announcements_size) // .map(|i| { // *memory // .get(&(address + BFieldElement::new(i as u64))) // .unwrap() // }) // .collect_vec(); - let pubscript_hashes_and_inputs = kernel.pubscript_hashes_and_inputs; - let pubscript_hashes_and_inputs_encoded = pubscript_hashes_and_inputs.encode(); - let pubscript_hashes_and_inputs_hash = - Hash::hash_varlen(&pubscript_hashes_and_inputs_encoded); + let public_announcements = kernel.public_announcements; + let public_announcements_encoded = public_announcements.encode(); + let public_announcements_hash = Hash::hash_varlen(&public_announcements_encoded); // address += - // BFieldElement::one() + BFieldElement::new(pubscript_hashes_and_inputs_size as u64); + // BFieldElement::one() + BFieldElement::new(public_announcements_size as u64); // fee // let fee_size = memory.get(&address).unwrap().value() as usize; @@ -378,7 +377,7 @@ impl Function for TransactionKernelMastHash { let leafs = [ inputs_hash, outputs_hash, - pubscript_hashes_and_inputs_hash, + public_announcements_hash, fee_hash, coinbase_hash, timestamp_hash, diff --git a/src/models/state/archival_state.rs b/src/models/state/archival_state.rs index f879ff414..254ea11c5 100644 --- a/src/models/state/archival_state.rs +++ b/src/models/state/archival_state.rs @@ -699,7 +699,7 @@ mod archival_state_tests { use crate::config_models::network::Network; use crate::models::blockchain::transaction::utxo::LockScript; - use crate::models::blockchain::transaction::PubScript; + use crate::models::blockchain::transaction::PublicAnnouncement; use crate::models::blockchain::transaction::{amount::Amount, utxo::Utxo}; use crate::models::state::archival_state::ArchivalState; use crate::models::state::wallet::utxo_notification_pool::UtxoNotifier; @@ -864,8 +864,7 @@ mod archival_state_tests { let sender_tx = genesis_receiver_global_state .create_transaction( vec![UtxoReceiverData { - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), receiver_privacy_digest: random(), sender_randomness: random(), utxo: Utxo { @@ -982,8 +981,7 @@ mod archival_state_tests { }, sender_randomness: random(), receiver_privacy_digest: random(), - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), }, UtxoReceiverData { utxo: Utxo { @@ -992,8 +990,7 @@ mod archival_state_tests { }, sender_randomness: random(), receiver_privacy_digest: random(), - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), }, ]; let sender_tx = global_state_lock @@ -1095,8 +1092,7 @@ mod archival_state_tests { }, sender_randomness: random(), receiver_privacy_digest: random(), - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), }, UtxoReceiverData { utxo: Utxo { @@ -1105,8 +1101,7 @@ mod archival_state_tests { }, sender_randomness: random(), receiver_privacy_digest: random(), - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), }, ]; let sender_tx = global_state @@ -1235,8 +1230,7 @@ mod archival_state_tests { // Add a valid input to the block transaction let one_money: Amount = Into::::into(1); let receiver_data = UtxoReceiverData { - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), receiver_privacy_digest: random(), sender_randomness: random(), utxo: Utxo { @@ -1289,8 +1283,7 @@ mod archival_state_tests { let sender_randomness: Digest = random(); let receiver_data_for_alice = vec![ UtxoReceiverData { - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), receiver_privacy_digest: alice_spending_key.to_address().privacy_digest, sender_randomness, utxo: Utxo { @@ -1299,8 +1292,7 @@ mod archival_state_tests { }, }, UtxoReceiverData { - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), receiver_privacy_digest: alice_spending_key.to_address().privacy_digest, sender_randomness, utxo: Utxo { @@ -1312,8 +1304,7 @@ mod archival_state_tests { // Two outputs for Bob let receiver_data_for_bob = vec![ UtxoReceiverData { - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), receiver_privacy_digest: bob_spending_key.to_address().privacy_digest, sender_randomness, utxo: Utxo { @@ -1322,8 +1313,7 @@ mod archival_state_tests { }, }, UtxoReceiverData { - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), receiver_privacy_digest: bob_spending_key.to_address().privacy_digest, sender_randomness, utxo: Utxo { @@ -1464,8 +1454,7 @@ mod archival_state_tests { }, sender_randomness: random(), receiver_privacy_digest: genesis_spending_key.to_address().privacy_digest, - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), }, UtxoReceiverData { utxo: Utxo { @@ -1474,8 +1463,7 @@ mod archival_state_tests { }, sender_randomness: random(), receiver_privacy_digest: genesis_spending_key.to_address().privacy_digest, - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), }, ]; let tx_from_alice = alice_state_lock @@ -1492,8 +1480,7 @@ mod archival_state_tests { }, sender_randomness: random(), receiver_privacy_digest: genesis_spending_key.to_address().privacy_digest, - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), }, UtxoReceiverData { utxo: Utxo { @@ -1502,8 +1489,7 @@ mod archival_state_tests { }, sender_randomness: random(), receiver_privacy_digest: genesis_spending_key.to_address().privacy_digest, - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), }, UtxoReceiverData { utxo: Utxo { @@ -1512,8 +1498,7 @@ mod archival_state_tests { }, sender_randomness: random(), receiver_privacy_digest: genesis_spending_key.to_address().privacy_digest, - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), }, ]; let tx_from_bob = bob_state_lock diff --git a/src/models/state/mempool.rs b/src/models/state/mempool.rs index d7aaeca03..08d265832 100644 --- a/src/models/state/mempool.rs +++ b/src/models/state/mempool.rs @@ -382,7 +382,7 @@ mod tests { models::{ blockchain::{ block::block_height::BlockHeight, - transaction::{amount::Amount, utxo::Utxo, PubScript, Transaction}, + transaction::{amount::Amount, utxo::Utxo, PublicAnnouncement, Transaction}, }, shared::SIZE_20MB_IN_BYTES, state::{ @@ -580,8 +580,7 @@ mod tests { }; output_utxos_generated_by_me.push(UtxoReceiverData { - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), receiver_privacy_digest: premine_receiver_address.privacy_digest, sender_randomness: random(), utxo: new_utxo, @@ -608,8 +607,7 @@ mod tests { }, sender_randomness: random(), receiver_privacy_digest: other_receiver_address.privacy_digest, - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), }]; let tx_by_other_original = other_global_state .create_transaction(output_utxo_data_by_miner, 1.into()) @@ -710,8 +708,7 @@ mod tests { utxo, receiver_privacy_digest: premine_address.privacy_digest, sender_randomness: random(), - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), }; let tx_by_preminer_low_fee = preminer_state .create_transaction(vec![receiver_data.clone()], 1.into()) diff --git a/src/models/state/mod.rs b/src/models/state/mod.rs index b25f2107f..107e8d549 100644 --- a/src/models/state/mod.rs +++ b/src/models/state/mod.rs @@ -22,16 +22,14 @@ use self::wallet::wallet_state::WalletState; use self::wallet::wallet_status::WalletStatus; use super::blockchain::block::block_height::BlockHeight; use super::blockchain::block::Block; -use super::blockchain::transaction::transaction_kernel::{ - PubScriptHashAndInput, TransactionKernel, -}; +use super::blockchain::transaction::transaction_kernel::TransactionKernel; use super::blockchain::transaction::utxo::{LockScript, TypeScript, Utxo}; use super::blockchain::transaction::validity::{TransactionValidationLogic, ValidationLogic}; use super::blockchain::transaction::{ amount::{Amount, Sign}, Transaction, }; -use super::blockchain::transaction::{PrimitiveWitness, PubScript, Witness}; +use super::blockchain::transaction::{PrimitiveWitness, PublicAnnouncement, Witness}; use crate::config_models::cli_args; use crate::models::peer::HandshakeData; use crate::models::state::wallet::monitored_utxo::MonitoredUtxo; @@ -226,8 +224,7 @@ pub struct UtxoReceiverData { pub utxo: Utxo, pub sender_randomness: Digest, pub receiver_privacy_digest: Digest, - pub pubscript: PubScript, - pub pubscript_input: Vec, + pub public_announcement: PublicAnnouncement, } impl GlobalState { @@ -466,12 +463,9 @@ impl GlobalState { .expect("Adding change UTXO to UTXO notification pool must succeed"); } - let pubscript_hashes_and_inputs = receiver_data + let public_announcements = receiver_data .iter() - .map(|x| PubScriptHashAndInput { - pubscript_hash: Hash::hash(&x.pubscript), - pubscript_input: x.pubscript_input.clone(), - }) + .map(|x| x.public_announcement.clone()) .collect_vec(); let timestamp = SystemTime::now() .duration_since(UNIX_EPOCH) @@ -481,7 +475,7 @@ impl GlobalState { let kernel = TransactionKernel { inputs, outputs: transaction_outputs, - pubscript_hashes_and_inputs, + public_announcements: public_announcements.clone(), fee, timestamp: BFieldElement::new(timestamp.try_into().unwrap()), coinbase: None, @@ -530,11 +524,6 @@ impl GlobalState { ); } - let pubscripts = receiver_data - .iter() - .map(|rd| rd.pubscript.clone()) - .collect_vec(); - let mutator_set_accumulator = self .chain .light_state() @@ -554,7 +543,7 @@ impl GlobalState { lock_script_witnesses: vec![secret_input; spendable_utxos_and_mps.len()], input_membership_proofs, output_utxos: output_utxos.clone(), - pubscripts, + public_announcements, mutator_set_accumulator, }; @@ -1120,15 +1109,14 @@ mod global_state_tests { }; let sender_randomness = Digest::default(); let receiver_privacy_digest = recipient_address.privacy_digest; - let (pubscript, pubscript_input) = recipient_address - .generate_pubscript_and_input(&output_utxo, sender_randomness) + let public_announcement = recipient_address + .generate_public_announcement(&output_utxo, sender_randomness) .unwrap(); let receiver_data = vec![UtxoReceiverData { utxo: output_utxo.clone(), sender_randomness, receiver_privacy_digest, - pubscript, - pubscript_input, + public_announcement, }]; let tx: Transaction = global_state_lock .lock_guard_mut() @@ -1163,16 +1151,15 @@ mod global_state_tests { }; let other_sender_randomness = Digest::default(); let other_receiver_digest = receiving_address.privacy_digest; - let (other_pubscript, other_pubscript_input) = receiving_address - .generate_pubscript_and_input(&utxo, other_sender_randomness) + let other_public_announcement = receiving_address + .generate_public_announcement(&utxo, other_sender_randomness) .unwrap(); output_utxos.push(utxo.clone()); other_receiver_data.push(UtxoReceiverData { utxo, sender_randomness: other_sender_randomness, receiver_privacy_digest: other_receiver_digest, - pubscript: other_pubscript, - pubscript_input: other_pubscript_input, + public_announcement: other_public_announcement, }); } diff --git a/src/models/state/wallet/address/generation_address.rs b/src/models/state/wallet/address/generation_address.rs index 854b5c290..c3a60af86 100644 --- a/src/models/state/wallet/address/generation_address.rs +++ b/src/models/state/wallet/address/generation_address.rs @@ -24,7 +24,7 @@ use crate::config_models::network::Network; use crate::models::blockchain::shared::Hash; use crate::models::blockchain::transaction::utxo::LockScript; use crate::models::blockchain::transaction::utxo::Utxo; -use crate::models::blockchain::transaction::PubScript; +use crate::models::blockchain::transaction::PublicAnnouncement; use crate::models::blockchain::transaction::Transaction; use crate::util_types::mutator_set::addition_record::AdditionRecord; use crate::util_types::mutator_set::mutator_set_trait::commit; @@ -48,30 +48,32 @@ pub struct ReceivingAddress { pub spending_lock: Digest, } -fn pubscript_input_is_marked(pubscript_input: &[BFieldElement]) -> bool { - matches!(pubscript_input.first(), Some(&GENERATION_FLAG)) +/// Determine if the public announcement is flagged to indicate it might be a generation +/// address ciphertext. +fn public_announcement_is_marked(announcement: &PublicAnnouncement) -> bool { + matches!(announcement.message.first(), Some(&GENERATION_FLAG)) } fn derive_receiver_id(seed: Digest) -> BFieldElement { Hash::hash_varlen(&[seed.values().to_vec(), vec![BFieldElement::new(2)]].concat()).values()[0] } -fn receiver_identifier_from_pubscript_input( - public_script_input: &[BFieldElement], +fn receiver_identifier_from_public_announcement( + announcement: &PublicAnnouncement, ) -> Result { - match public_script_input.get(1) { + match announcement.message.get(1) { Some(id) => Ok(*id), - None => bail!("Public script does not contain receiver ID"), + None => bail!("Public announcement does not contain receiver ID"), } } -fn ciphertext_from_pubscript_input( - pubscript_input: &[BFieldElement], +fn ciphertext_from_public_announcement( + announcement: &PublicAnnouncement, ) -> Result> { - if pubscript_input.len() <= 2 { - bail!("Public script does not contain ciphertext."); + if announcement.message.len() <= 2 { + bail!("Public announcement does not contain ciphertext."); } - Ok(pubscript_input[2..].to_vec()) + Ok(announcement.message[2..].to_vec()) } /// Encodes a slice of bytes to a vec of BFieldElements. This @@ -160,13 +162,13 @@ impl SpendingKey { let mut received_utxos_with_randomnesses = vec![]; // for all public scripts that contain a ciphertext for me, - for matching_script in transaction + for matching_announcement in transaction .kernel - .pubscript_hashes_and_inputs + .public_announcements .iter() - .filter(|psd| pubscript_input_is_marked(&psd.pubscript_input)) - .filter(|psd| { - let receiver_id = receiver_identifier_from_pubscript_input(&psd.pubscript_input); + .filter(|pa| public_announcement_is_marked(pa)) + .filter(|pa| { + let receiver_id = receiver_identifier_from_public_announcement(pa); match receiver_id { Ok(recid) => recid == self.receiver_identifier, Err(_) => false, @@ -174,7 +176,7 @@ impl SpendingKey { }) { // decrypt it to obtain the utxo and sender randomness - let ciphertext = ciphertext_from_pubscript_input(&matching_script.pubscript_input); + let ciphertext = ciphertext_from_public_announcement(matching_announcement); let decryption_result = match ciphertext { Ok(ctxt) => self.decrypt(&ctxt), _ => { @@ -337,23 +339,18 @@ impl ReceivingAddress { .concat()) } - /// Generate a pubscript input, which is a ciphertext only the + /// Generate a public announcement, which is a ciphertext only the /// recipient can decrypt, along with a pubscript that reads /// some input of that length. - pub fn generate_pubscript_and_input( + pub fn generate_public_announcement( &self, utxo: &Utxo, sender_randomness: Digest, - ) -> Result<(PubScript, Vec)> { + ) -> Result { let mut ciphertext = vec![GENERATION_FLAG, self.receiver_identifier]; ciphertext.append(&mut self.encrypt(utxo, sender_randomness)?); - let pubscript = triton_asm!( - {&tasm_lib::io::InputSource::StdIn.read_words(ciphertext.len())} - halt - ); - - Ok((pubscript.into(), ciphertext)) + Ok(PublicAnnouncement::new(ciphertext)) } /// Generate a lock script from the spending lock. Satisfaction @@ -361,27 +358,6 @@ impl ReceivingAddress { /// the transaction. The logic contained in here should be /// identical to `verify_unlock`. pub fn lock_script(&self) -> LockScript { - // currently this script is just a placeholder - // const DIVINE: BFieldElement = BFieldElement::new(8); - // const HASH: BFieldElement = BFieldElement::new(48); - // const POP: BFieldElement = BFieldElement::new(2); - // const PUSH: BFieldElement = BFieldElement::new(1); - // const ASSERT_VECTOR: BFieldElement = BFieldElement::new(64); - // const READ_IO: BFieldElement = BFieldElement::new(128); - // let mut push_digest = vec![]; - // for elem in self.spending_lock.values().iter().rev() { - // push_digest.append(&mut vec![PUSH, *elem]); - // } - // let instrs = vec![ - // vec![ - // DIVINE, DIVINE, DIVINE, DIVINE, DIVINE, HASH, POP, POP, POP, POP, POP, - // ], - // push_digest, - // vec![ASSERT_VECTOR], - // vec![READ_IO, READ_IO, READ_IO, READ_IO, READ_IO], - // ] - // .concat(); - let mut push_spending_lock_digest_to_stack = vec![]; for elem in self.spending_lock.values().iter().rev() { push_spending_lock_digest_to_stack.push(triton_instr!(push elem.value())); @@ -400,6 +376,7 @@ impl ReceivingAddress { } fn get_hrp(network: Network) -> String { + // NOLGA: Neptune lattice-based generation address let mut hrp = "nolga".to_string(); let network_byte: char = match network { Network::Alpha => 'm', @@ -466,7 +443,7 @@ mod test_generation_addresses { config_models::network::Network, models::blockchain::{ shared::Hash, - transaction::{amount::Amount, transaction_kernel::PubScriptHashAndInput, utxo::Utxo}, + transaction::{amount::Amount, utxo::Utxo}, }, tests::shared::make_mock_transaction, }; @@ -592,22 +569,19 @@ mod test_generation_addresses { }; let sender_randomness: Digest = random(); - let (pubscript, pubscript_input) = receiving_address - .generate_pubscript_and_input(&utxo, sender_randomness) + let public_announcement = receiving_address + .generate_public_announcement(&utxo, sender_randomness) .unwrap(); let mut mock_tx = make_mock_transaction(vec![], vec![]); assert!(spending_key.scan_for_announced_utxos(&mock_tx).is_empty()); // Add a pubscript for our keys and verify that they are recognized - assert!(pubscript_input_is_marked(&pubscript_input)); + assert!(public_announcement_is_marked(&public_announcement)); mock_tx .kernel - .pubscript_hashes_and_inputs - .push(PubScriptHashAndInput { - pubscript_hash: Hash::hash(&pubscript), - pubscript_input, - }); + .public_announcements + .push(public_announcement); let announced_txs = spending_key.scan_for_announced_utxos(&mock_tx); assert_eq!(1, announced_txs.len()); diff --git a/src/models/state/wallet/mod.rs b/src/models/state/wallet/mod.rs index aa66ee414..57e6ff5c6 100644 --- a/src/models/state/wallet/mod.rs +++ b/src/models/state/wallet/mod.rs @@ -351,7 +351,7 @@ mod wallet_tests { use crate::models::blockchain::shared::Hash; use crate::models::blockchain::transaction::amount::{Amount, AmountLike}; use crate::models::blockchain::transaction::utxo::{LockScript, Utxo}; - use crate::models::blockchain::transaction::PubScript; + use crate::models::blockchain::transaction::PublicAnnouncement; use crate::models::state::wallet::utxo_notification_pool::UtxoNotifier; use crate::models::state::UtxoReceiverData; use crate::tests::shared::{ @@ -706,8 +706,7 @@ mod wallet_tests { }, sender_randomness: random(), receiver_privacy_digest: other_wallet_recipient_address.privacy_digest, - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), }]; let input_utxos_mps_keys = two_utxos .into_iter() @@ -774,8 +773,7 @@ mod wallet_tests { let (mut block_1, _, _) = make_mock_block(&genesis_block, None, own_address); let receiver_data_12_to_other = UtxoReceiverData { - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), receiver_privacy_digest: own_address.privacy_digest, sender_randomness: premine_receiver_global_state .wallet_state @@ -790,8 +788,7 @@ mod wallet_tests { }, }; let receiver_data_one_to_other = UtxoReceiverData { - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), receiver_privacy_digest: own_address.privacy_digest, sender_randomness: premine_receiver_global_state .wallet_state @@ -1035,8 +1032,7 @@ mod wallet_tests { ); let receiver_data_six = UtxoReceiverData { - pubscript: PubScript::default(), - pubscript_input: vec![], + public_announcement: PublicAnnouncement::default(), receiver_privacy_digest: own_address.privacy_digest, utxo: Utxo { coins: Into::::into(6).to_native_coins(), diff --git a/src/rpc_server.rs b/src/rpc_server.rs index d48f91a08..bbaa90a6f 100644 --- a/src/rpc_server.rs +++ b/src/rpc_server.rs @@ -495,9 +495,9 @@ impl RPC for NeptuneRPCServer { // TODO: Allow user to set fee here. Don't set it automatically as we want the user // to be in control of this. But we could add an endpoint to get recommended fee // density. - let (pubscript, pubscript_input) = - match address.generate_pubscript_and_input(&utxo, sender_randomness) { - Ok((ps, inp)) => (ps, inp), + let public_announcement = + match address.generate_public_announcement(&utxo, sender_randomness) { + Ok(pa) => pa, Err(_) => { tracing::error!( "Failed to generate transaction because could not encrypt to address." @@ -509,8 +509,7 @@ impl RPC for NeptuneRPCServer { utxo, sender_randomness, receiver_privacy_digest, - pubscript, - pubscript_input, + public_announcement, })] .to_vec(); diff --git a/src/tests/shared.rs b/src/tests/shared.rs index 7576c1ba1..f5089cd86 100644 --- a/src/tests/shared.rs +++ b/src/tests/shared.rs @@ -49,14 +49,14 @@ use crate::models::blockchain::transaction; use crate::models::blockchain::transaction::amount::pseudorandom_amount; use crate::models::blockchain::transaction::amount::Amount; use crate::models::blockchain::transaction::transaction_kernel::pseudorandom_option; -use crate::models::blockchain::transaction::transaction_kernel::pseudorandom_pubscript_struct; +use crate::models::blockchain::transaction::transaction_kernel::pseudorandom_public_announcement; use crate::models::blockchain::transaction::transaction_kernel::pseudorandom_transaction_kernel; -use crate::models::blockchain::transaction::transaction_kernel::PubScriptHashAndInput; use crate::models::blockchain::transaction::transaction_kernel::TransactionKernel; use crate::models::blockchain::transaction::utxo::TypeScript; use crate::models::blockchain::transaction::validity::removal_records_integrity::RemovalRecordsIntegrityWitness; use crate::models::blockchain::transaction::validity::TransactionValidationLogic; use crate::models::blockchain::transaction::PrimitiveWitness; +use crate::models::blockchain::transaction::PublicAnnouncement; use crate::models::blockchain::transaction::Witness; use crate::models::blockchain::transaction::{utxo::Utxo, Transaction}; use crate::models::channel::{MainToPeerThread, PeerThreadToMain}; @@ -531,9 +531,9 @@ pub fn random_addition_record() -> AdditionRecord { pseudorandom_addition_record(rng.gen::<[u8; 32]>()) } -pub fn random_pubscript_struct() -> PubScriptHashAndInput { +pub fn random_public_announcement() -> PublicAnnouncement { let mut rng = thread_rng(); - pseudorandom_pubscript_struct(rng.gen::<[u8; 32]>()) + pseudorandom_public_announcement(rng.gen::<[u8; 32]>()) } pub fn random_amount() -> Amount { @@ -755,12 +755,9 @@ pub fn make_mock_transaction_with_generation_key( outputs.push(addition_record); } - let pubscript_hashes_and_inputs = receiver_data + let public_announcements = receiver_data .iter() - .map(|x| PubScriptHashAndInput { - pubscript_hash: Hash::hash(&x.pubscript), - pubscript_input: x.pubscript_input.clone(), - }) + .map(|x| x.public_announcement.clone()) .collect_vec(); let timestamp: u64 = SystemTime::now() .duration_since(UNIX_EPOCH) @@ -772,7 +769,7 @@ pub fn make_mock_transaction_with_generation_key( let kernel = TransactionKernel { inputs, outputs, - pubscript_hashes_and_inputs, + public_announcements, fee, timestamp: BFieldElement::new(timestamp), coinbase: None, @@ -800,7 +797,7 @@ pub fn make_mock_transaction_with_generation_key( .collect_vec(); let pubscripts = receiver_data .iter() - .map(|rd| rd.pubscript.to_owned()) + .map(|rd| rd.public_announcement.clone()) .collect(); let output_utxos = receiver_data.into_iter().map(|rd| rd.utxo).collect(); let primitive_witness = PrimitiveWitness { @@ -810,7 +807,7 @@ pub fn make_mock_transaction_with_generation_key( lock_script_witnesses: spending_key_unlock_keys, input_membership_proofs, output_utxos, - pubscripts, + public_announcements: pubscripts, mutator_set_accumulator: tip_msa, }; let validity_logic = @@ -841,7 +838,7 @@ pub fn make_mock_transaction( kernel: TransactionKernel { inputs, outputs, - pubscript_hashes_and_inputs: vec![], + public_announcements: vec![], fee: 1.into(), timestamp, coinbase: None, @@ -873,7 +870,7 @@ pub fn make_mock_transaction_with_wallet( let kernel = TransactionKernel { inputs, outputs, - pubscript_hashes_and_inputs: vec![], + public_announcements: vec![], fee, timestamp, coinbase: None, @@ -921,7 +918,7 @@ pub fn make_mock_block( let tx_kernel = TransactionKernel { inputs: vec![], outputs: vec![coinbase_addition_record], - pubscript_hashes_and_inputs: vec![], + public_announcements: vec![], fee: Amount::zero(), timestamp: BFieldElement::new(block_timestamp), coinbase: Some(coinbase_amount), @@ -934,7 +931,7 @@ pub fn make_mock_block( lock_script_witnesses: vec![], input_membership_proofs: vec![], output_utxos: vec![coinbase_utxo.clone()], - pubscripts: vec![], + public_announcements: vec![], mutator_set_accumulator: previous_mutator_set.clone(), input_lock_scripts: vec![], };