From c75f725d85b4874d5b9f7bbcad0ffbe86cd48029 Mon Sep 17 00:00:00 2001 From: Babur Makhmudov Date: Thu, 30 Jul 2026 21:37:18 +0400 Subject: [PATCH 1/4] feat: forked transaction-view for increased limits --- Cargo.toml | 6 +- solana/transaction-view/Cargo.toml | 15 +-- solana/transaction-view/README.md | 55 +++++++++ solana/transaction-view/benches/bytes.rs | 5 +- .../benches/transaction_view.rs | 6 +- solana/transaction-view/src/bytes.rs | 109 ++---------------- .../src/instructions_frame.rs | 82 ++++--------- .../src/resolved_transaction_view.rs | 8 +- solana/transaction-view/src/sanitize.rs | 31 ++--- .../transaction-view/src/transaction_frame.rs | 30 ++--- .../transaction-view/src/transaction_view.rs | 18 +-- 11 files changed, 127 insertions(+), 238 deletions(-) create mode 100644 solana/transaction-view/README.md diff --git a/Cargo.toml b/Cargo.toml index 16afd214..88bce4bd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["solana/account"] +members = ["solana/account", "solana/transaction-view"] resolver = "3" [workspace.package] @@ -21,6 +21,7 @@ arc-swap = "1.9.1" bincode = "1.3.3" bitflags = "2.11.1" blake3 = "1.8.5" +criterion = "0.8.2" qualifier_attr = "0.2.2" rand = "0.8.5" rustix = { version = "1.1.4" } @@ -46,9 +47,12 @@ solana-instruction-error = "2.3.0" solana-program-error = "3.0.1" solana-pubkey = "4.2.0" solana-sdk-ids = "3.1.0" +solana-short-vec = "3.2.1" solana-sysvar = "4.0.0" solana-transaction-error = "3.2.0" +[patch.crates-io] +agave-transaction-view = { path = "solana/transaction-view" } [workspace.lints.rust] missing_docs = "deny" diff --git a/solana/transaction-view/Cargo.toml b/solana/transaction-view/Cargo.toml index 68e3c496..cf632939 100644 --- a/solana/transaction-view/Cargo.toml +++ b/solana/transaction-view/Cargo.toml @@ -1,13 +1,14 @@ [package] -name = "agave-transaction-view" +authors = { workspace = true } description = "Zero-copy parser and sanitizer for serialized Solana transactions" documentation = "https://docs.rs/agave-transaction-view" -version = { workspace = true } -authors = { workspace = true } -repository = { workspace = true } +edition = "2024" homepage = { workspace = true } license = { workspace = true } -edition = "2024" +name = "agave-transaction-view" +readme = "README.md" +repository = { workspace = true } +version = "4.1.1" [features] agave-unstable-api = [] @@ -41,9 +42,9 @@ solana-transaction = { workspace = true, features = ["serde", "wincode"] } wincode = { workspace = true } [[bench]] -name = "bytes" harness = false +name = "bytes" [[bench]] -name = "transaction_view" harness = false +name = "transaction_view" diff --git a/solana/transaction-view/README.md b/solana/transaction-view/README.md new file mode 100644 index 00000000..b7b4cc40 --- /dev/null +++ b/solana/transaction-view/README.md @@ -0,0 +1,55 @@ +# `agave-transaction-view` + +This Agave fork parses and sanitizes serialized transactions without fully +deserializing them. Workspace `[patch.crates-io]` entries force the dependency +graph to use this copy. + +The view owns or borrows the original transaction bytes through +`TransactionData` and caches only framing metadata. Accessors and iterators then +read signatures, account keys, instructions, configuration, and address-table +metadata directly from the validated byte layout. + +## Supported formats + +- Legacy and v0 use the standard Solana wire layouts. +- V1 uses the Agave V1 layout with instruction headers, contiguous payloads, + transaction configuration, and trailing signatures. +- `Magicblock` is the Engine-private version `127`. It uses the V1 layout and a + distinct version prefix; it is not a client-facing Solana transaction version. + +For V1 and Magicblock transactions, `message_data()` covers the version byte +through the instruction payloads and excludes the trailing signatures. Engine +construction must sign exactly that range after writing the final version +prefix. + +## Limits and parsing invariants + +Legacy, v0, and V1 transactions may be at most `u16::MAX` bytes, inclusive. +Magicblock transactions may be at most 16 MiB and may use an instruction trace +length of 255. Other structural limits, including the standard signature and +account-index limits, remain enforced by sanitization. + +Compact-u16 values are parsed in their complete canonical one-, two-, or +three-byte form. Absolute offsets and transaction lengths are stored as `u32`. +Fallible parsing validates additions, multiplications, ranges, and conversion to +that representation before any unchecked iterator or typed-slice access. Code +using a sanitized view may rely on those validated frame boundaries. + +## Address lookup tables + +Address lookup tables are unsupported. A transaction containing any lookup +table entry fails sanitization with `TransactionViewError::AddressLookupMismatch`. +A v0 transaction with an empty lookup list remains valid and requires no loaded +addresses. + +## Maintenance constraints + +- Preserve standard Legacy and v0 wire compatibility for client-produced + transactions. +- Keep V1 and Magicblock framing synchronized; only the version, size, account, + and instruction-trace policies intentionally differ. +- Keep the Magicblock prefix, signed message range, and Engine transaction + composer synchronized. +- Treat the sanitizer as the authoritative boundary for rejecting address + lookup tables. +- Validate new frame offsets before exposing them through unchecked accessors. diff --git a/solana/transaction-view/benches/bytes.rs b/solana/transaction-view/benches/bytes.rs index a64e85da..713f6f1a 100644 --- a/solana/transaction-view/benches/bytes.rs +++ b/solana/transaction-view/benches/bytes.rs @@ -15,9 +15,8 @@ fn setup() -> Vec<(u16, usize, Vec)> { for value in 0..PACKET_DATA_SIZE as u16 { let short_u16 = ShortU16(value); let mut buffer = vec![0u8; 16]; - let serialized_len = options - .serialized_size(&short_u16) - .expect("Failed to get serialized size"); + let serialized_len = + options.serialized_size(&short_u16).expect("Failed to get serialized size"); serialize_into(&mut buffer[..], &short_u16).expect("Serialization failed"); values.push((value, serialized_len as usize, buffer)); } diff --git a/solana/transaction-view/benches/transaction_view.rs b/solana/transaction-view/benches/transaction_view.rs index 262c5ee8..6a94dc3e 100644 --- a/solana/transaction-view/benches/transaction_view.rs +++ b/solana/transaction-view/benches/transaction_view.rs @@ -95,11 +95,7 @@ fn simple_transfers() -> Vec { let keypair = Keypair::new(); VersionedTransaction::try_new( VersionedMessage::Legacy(Message::new_with_blockhash( - &[system_instruction::transfer( - &keypair.pubkey(), - &Pubkey::new_unique(), - 1, - )], + &[system_instruction::transfer(&keypair.pubkey(), &Pubkey::new_unique(), 1)], Some(&keypair.pubkey()), &Hash::default(), )), diff --git a/solana/transaction-view/src/bytes.rs b/solana/transaction-view/src/bytes.rs index ece04b89..6a3eac49 100644 --- a/solana/transaction-view/src/bytes.rs +++ b/solana/transaction-view/src/bytes.rs @@ -24,12 +24,9 @@ pub fn check_remaining(bytes: &[u8], offset: usize, num_bytes: usize) -> Result< pub fn read_byte(bytes: &[u8], offset: &mut usize) -> Result { // Implicitly checks that the offset is within bounds, no need // to call `check_remaining` explicitly here. - let value = bytes - .get(*offset) - .copied() - .ok_or(TransactionViewError::ParseError); - *offset = offset.wrapping_add(1); - value + let value = bytes.get(*offset).copied().ok_or(TransactionViewError::ParseError)?; + *offset = offset.checked_add(1).ok_or(TransactionViewError::ParseError)?; + Ok(value) } /// Read a byte and advance the offset without any bounds checks. @@ -65,9 +62,8 @@ pub fn read_compressed_u16(bytes: &[u8], offset: &mut usize) -> Result { for i in 0..3 { // Implicitly checks that the offset is within bounds, no need // to call check_remaining explicitly here. - let byte = *bytes - .get(offset.wrapping_add(i)) - .ok_or(TransactionViewError::ParseError)?; + let index = offset.checked_add(i).ok_or(TransactionViewError::ParseError)?; + let byte = *bytes.get(index).ok_or(TransactionViewError::ParseError)?; // non-minimal encoding or overflow if (i > 0 && byte == 0) || (i == 2 && byte > 3) { return Err(TransactionViewError::ParseError); @@ -81,46 +77,7 @@ pub fn read_compressed_u16(bytes: &[u8], offset: &mut usize) -> Result { } // if we reach here, it means that all 3 bytes were used - *offset = offset.wrapping_add(3); - Ok(result) -} - -/// Domain-specific optimization for reading a compressed u16. -/// -/// The compressed u16's are only used for array-lengths in our transaction -/// format. The transaction packet has a maximum size of 1232 bytes. -/// This means that the maximum array length within a **valid** transaction is -/// 1232. This has a minimally encoded length of 2 bytes. -/// Although the encoding scheme allows for more, any arrays with this length -/// would be too large to fit in a packet. This function optimizes for this -/// case, and reads a maximum of 2 bytes. -/// If the buffer is too short or the encoding is invalid, return Err. -/// `offset` is updated to point to the byte after the compressed u16. -/// -/// * `bytes` - Slice of bytes to read from. -/// * `offset` - Current offset into `bytes`. -#[inline(always)] -pub fn optimized_read_compressed_u16(bytes: &[u8], offset: &mut usize) -> Result { - let mut result = 0u16; - - // First byte - let byte1 = *bytes.get(*offset).ok_or(TransactionViewError::ParseError)?; - result |= (byte1 & 0x7F) as u16; - if byte1 & 0x80 == 0 { - *offset = offset.wrapping_add(1); - return Ok(result); - } - - // Second byte - let byte2 = *bytes - .get(offset.wrapping_add(1)) - .ok_or(TransactionViewError::ParseError)?; - if byte2 == 0 || byte2 & 0x80 != 0 { - return Err(TransactionViewError::ParseError); // non-minimal encoding or overflow - } - result |= ((byte2 & 0x7F) as u16) << 7; - *offset = offset.wrapping_add(2); - + *offset = offset.checked_add(3).ok_or(TransactionViewError::ParseError)?; Ok(result) } @@ -305,9 +262,8 @@ mod tests { serialize_into(&mut buffer[..], &short_u16).expect("Serialization failed"); // Use bincode's size calculation to determine the length of the serialized data - let serialized_len = options - .serialized_size(&short_u16) - .expect("Failed to get serialized size"); + let serialized_len = + options.serialized_size(&short_u16).expect("Failed to get serialized size"); // Reset offset offset = 0; @@ -343,55 +299,6 @@ mod tests { assert!(read_compressed_u16(&[0x81, 0x80, 0x00], &mut 0).is_err()); } - #[test] - fn test_optimized_read_compressed_u16() { - let mut buffer = [0u8; 1024]; - let options = DefaultOptions::new().with_fixint_encoding(); // Ensure fixed-int encoding - - // Test all possible u16 values under the packet length - for value in 0..=PACKET_DATA_SIZE as u16 { - let mut offset; - let short_u16 = ShortU16(value); - - // Serialize the value into the buffer - serialize_into(&mut buffer[..], &short_u16).expect("Serialization failed"); - - // Use bincode's size calculation to determine the length of the serialized data - let serialized_len = options - .serialized_size(&short_u16) - .expect("Failed to get serialized size"); - - // Reset offset - offset = 0; - - // Read the value back using unchecked_read_u16_compressed - let read_value = optimized_read_compressed_u16(&buffer, &mut offset); - - // Assert that the read value matches the original value - assert_eq!(read_value, Ok(value), "Value mismatch for: {value}"); - - // Assert that the offset matches the serialized length - assert_eq!( - offset, serialized_len as usize, - "Offset mismatch for: {value}" - ); - } - - // Test bounds. - // All 0s => 0 - assert_eq!(Ok(0), optimized_read_compressed_u16(&[0; 3], &mut 0)); - // Overflow - assert!(optimized_read_compressed_u16(&[0xFF, 0xFF, 0x04], &mut 0).is_err()); - assert!(optimized_read_compressed_u16(&[0xFF, 0x80], &mut 0).is_err()); - - // overflow errors - assert!(optimized_read_compressed_u16(&[u8::MAX; 1], &mut 0).is_err()); - assert!(optimized_read_compressed_u16(&[u8::MAX; 2], &mut 0).is_err()); - - // Minimal encoding checks - assert!(optimized_read_compressed_u16(&[0x81, 0x00], &mut 0).is_err()); - } - #[test] fn test_advance_offset_for_array() { #[repr(C)] diff --git a/solana/transaction-view/src/instructions_frame.rs b/solana/transaction-view/src/instructions_frame.rs index 721de149..8b9989c5 100644 --- a/solana/transaction-view/src/instructions_frame.rs +++ b/solana/transaction-view/src/instructions_frame.rs @@ -176,29 +176,23 @@ impl InstructionsFrame { #[inline(always)] pub(crate) fn num_instructions(&self) -> u16 { match self { - Self::LegacyAndV0 { - num_instructions, .. - } => *num_instructions, - Self::V1 { - num_instructions, .. - } => *num_instructions, + Self::LegacyAndV0 { num_instructions, .. } => *num_instructions, + Self::V1 { num_instructions, .. } => *num_instructions, } } #[inline(always)] pub(crate) fn iter<'a>(&'a self, bytes: &'a [u8]) -> InstructionsIterator<'a> { match self { - Self::LegacyAndV0 { - num_instructions, - offset, - frames, - } => InstructionsIterator::LegacyAndV0 { - bytes, - offset: *offset as usize, - index: 0, - num_instructions: *num_instructions, - frames, - }, + Self::LegacyAndV0 { num_instructions, offset, frames } => { + InstructionsIterator::LegacyAndV0 { + bytes, + offset: *offset as usize, + index: 0, + num_instructions: *num_instructions, + frames, + } + } Self::V1 { num_instructions, headers_offset, @@ -352,11 +346,7 @@ unsafe fn for_legacy_and_v0<'a>( // - Offset and length checks have been done in the initial parsing. let data = unsafe { unchecked_read_slice_data::(bytes, offset, data_len) }; - SVMInstruction { - program_id_index, - accounts, - data, - } + SVMInstruction { program_id_index, accounts, data } } /// Builds SMVInstruction from v1 pre-validated frame metadata. @@ -403,26 +393,18 @@ unsafe fn for_v1<'a>( // - Offset and length checks have been done in the initial parsing. let data = unsafe { unchecked_read_slice_data::(bytes, payloads_offset, data_len) }; - SVMInstruction { - program_id_index, - accounts, - data, - } + SVMInstruction { program_id_index, accounts, data } } impl ExactSizeIterator for InstructionsIterator<'_> { fn len(&self) -> usize { match self { - Self::LegacyAndV0 { - num_instructions, - index, - .. - } => usize::from(num_instructions.wrapping_sub(*index)), - Self::V1 { - num_instructions, - index, - .. - } => usize::from(num_instructions.wrapping_sub(*index)), + Self::LegacyAndV0 { num_instructions, index, .. } => { + usize::from(num_instructions.wrapping_sub(*index)) + } + Self::V1 { num_instructions, index, .. } => { + usize::from(num_instructions.wrapping_sub(*index)) + } } } } @@ -564,9 +546,9 @@ mod tests { ..solana_message::v1::Message::default() }; - let serialized = solana_message::v1::serialize(&message); + let serialized = message.serialize(); - let mut offset = 41; // instruction headers starts at offset 41 for no config, 0 addresses, per spec + let mut offset = 42; // instruction headers start after the V1 prefix for no config, 0 addresses let instructions_frame = InstructionsFrame::try_new_for_v1(&serialized, &mut offset, 2).unwrap(); @@ -624,11 +606,7 @@ mod tests { assert_eq!(offset, bytes.len()); match frame { - InstructionsFrame::LegacyAndV0 { - num_instructions, - offset, - frames, - } => { + InstructionsFrame::LegacyAndV0 { num_instructions, offset, frames } => { assert_eq!(num_instructions, 1); assert_eq!(offset, 1); assert_eq!(frames.len(), 1); @@ -661,11 +639,7 @@ mod tests { assert_eq!(offset, bytes.len()); match frame { - InstructionsFrame::LegacyAndV0 { - num_instructions, - offset, - frames, - } => { + InstructionsFrame::LegacyAndV0 { num_instructions, offset, frames } => { assert_eq!(num_instructions, 1); assert_eq!(offset, 1); assert_eq!(frames.len(), 1); @@ -832,9 +806,7 @@ mod tests { let bytes = vec![1, 1, 0xff, 0xff]; let mut offset = 0; assert_eq!( - InstructionsFrame::try_new_for_v1(&bytes, &mut offset, 1) - .err() - .unwrap(), + InstructionsFrame::try_new_for_v1(&bytes, &mut offset, 1).err().unwrap(), TransactionViewError::ParseError ); } @@ -848,11 +820,7 @@ mod tests { assert_eq!(offset, 1); match frame { - InstructionsFrame::LegacyAndV0 { - num_instructions, - offset, - frames, - } => { + InstructionsFrame::LegacyAndV0 { num_instructions, offset, frames } => { assert_eq!(num_instructions, 0); assert_eq!(offset, 1); assert!(frames.is_empty()); diff --git a/solana/transaction-view/src/resolved_transaction_view.rs b/solana/transaction-view/src/resolved_transaction_view.rs index b16202a5..260f5ef7 100644 --- a/solana/transaction-view/src/resolved_transaction_view.rs +++ b/solana/transaction-view/src/resolved_transaction_view.rs @@ -225,9 +225,7 @@ impl SVMMessage for ResolvedTransactionView { let Ok(index) = u8::try_from(key_index) else { return false; }; - self.view - .instructions_iter() - .any(|ix| ix.program_id_index == index) + self.view.instructions_iter().any(|ix| ix.program_id_index == index) } } @@ -243,9 +241,7 @@ impl SVMTransaction for ResolvedTransactionView { impl Debug for ResolvedTransactionView { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - f.debug_struct("ResolvedTransactionView") - .field("view", &self.view) - .finish() + f.debug_struct("ResolvedTransactionView").field("view", &self.view).finish() } } diff --git a/solana/transaction-view/src/sanitize.rs b/solana/transaction-view/src/sanitize.rs index ecae7bae..46ca368a 100644 --- a/solana/transaction-view/src/sanitize.rs +++ b/solana/transaction-view/src/sanitize.rs @@ -66,9 +66,7 @@ fn sanitize_message_header(view: &UnsanitizedTransactionView view - .num_static_account_keys() - .wrapping_sub(view.num_required_signatures()) + > view.num_static_account_keys().wrapping_sub(view.num_required_signatures()) { return Err(TransactionViewError::SanitizeError); } @@ -80,9 +78,8 @@ fn sanitize_message_header(view: &UnsanitizedTransactionView) -> Result<()> { #[allow(clippy::collapsible_if)] - if let Some(requested_heap_bytes) = view - .transaction_config() - .and_then(|config| config.requested_heap_size()) + if let Some(requested_heap_bytes) = + view.transaction_config().and_then(|config| config.requested_heap_size()) { if !(MIN_HEAP_FRAME_BYTES..=MAX_HEAP_FRAME_BYTES).contains(&requested_heap_bytes) || !requested_heap_bytes.is_multiple_of(1024) @@ -659,11 +656,7 @@ mod tests { num_readonly_signed_accounts: 0, num_readonly_unsigned_accounts: 1, }; - let account_keys = vec![ - Pubkey::new_unique(), - Pubkey::new_unique(), - Pubkey::new_unique(), - ]; + let account_keys = vec![Pubkey::new_unique(), Pubkey::new_unique(), Pubkey::new_unique()]; let valid_instructions = vec![ CompiledInstruction { program_id_index: 1, @@ -765,9 +758,7 @@ mod tests { // Invalid account index. { let mut instructions = valid_instructions.clone(); - instructions[instruction_index] - .accounts - .push(account_keys.len() as u8); + instructions[instruction_index].accounts.push(account_keys.len() as u8); let transaction = create_legacy_transaction( num_signatures, header, @@ -788,9 +779,7 @@ mod tests { atls[0].writable_indexes.len() + atls[0].readonly_indexes.len(); let total_accounts = (account_keys.len() + num_lookup_accounts) as u8; let mut instructions = valid_instructions.clone(); - instructions[instruction_index] - .accounts - .push(total_accounts); + instructions[instruction_index].accounts.push(total_accounts); let transaction = create_v0_transaction( num_signatures, header, @@ -809,12 +798,8 @@ mod tests { // SIMD-0160, too many instructions are invalid { - let too_many_instructions: Vec<_> = valid_instructions - .iter() - .cycle() - .take(65) - .cloned() - .collect(); + let too_many_instructions: Vec<_> = + valid_instructions.iter().cycle().take(65).cloned().collect(); let transaction = create_legacy_transaction( num_signatures, header, diff --git a/solana/transaction-view/src/transaction_frame.rs b/solana/transaction-view/src/transaction_frame.rs index 7b49b9e0..219c3568 100644 --- a/solana/transaction-view/src/transaction_frame.rs +++ b/solana/transaction-view/src/transaction_frame.rs @@ -341,10 +341,7 @@ impl TransactionFrame { let account_bytes = &bytes[start..end]; unsafe { core::slice::from_raw_parts( - bytes - .as_ptr() - .add(usize::from(self.static_account_keys.offset)) - as *const Pubkey, + account_bytes.as_ptr() as *const Pubkey, usize::from(self.static_account_keys.num_static_accounts), ) } @@ -365,11 +362,9 @@ impl TransactionFrame { // is not initialized properly. // - Aliasing rules are respected because the lifetime of the returned // reference is the same as the input/source `bytes`. - unsafe { - &*(bytes - .as_ptr() - .add(usize::from(self.recent_blockhash_offset)) as *const Hash) - } + let start = self.recent_blockhash_offset as usize; + let hash_bytes = &bytes[start..start + size_of::()]; + unsafe { &*(hash_bytes.as_ptr() as *const Hash) } } /// Return an iterator over the instructions in the transaction. @@ -457,10 +452,7 @@ mod tests { ); assert_eq!( frame.address_table_lookup.num_address_table_lookups, - tx.message - .address_table_lookups() - .map(|x| x.len() as u8) - .unwrap_or(0) + tx.message.address_table_lookups().map(|x| x.len() as u8).unwrap_or(0) ); } @@ -485,11 +477,7 @@ mod tests { VersionedTransaction { signatures: vec![Signature::default()], // 1 signature to be valid. message: VersionedMessage::Legacy(Message::new( - &[system_instruction::transfer( - &payer, - &Pubkey::new_unique(), - 1, - )], + &[system_instruction::transfer(&payer, &Pubkey::new_unique(), 1)], Some(&payer), )), } @@ -502,11 +490,7 @@ mod tests { message: VersionedMessage::V0( v0::Message::try_compile( &payer, - &[system_instruction::transfer( - &payer, - &Pubkey::new_unique(), - 1, - )], + &[system_instruction::transfer(&payer, &Pubkey::new_unique(), 1)], &[], Hash::default(), ) diff --git a/solana/transaction-view/src/transaction_view.rs b/solana/transaction-view/src/transaction_view.rs index 58f236e5..7496fdfb 100644 --- a/solana/transaction-view/src/transaction_view.rs +++ b/solana/transaction-view/src/transaction_view.rs @@ -164,12 +164,10 @@ impl TransactionView { #[inline] pub fn transaction_config(&self) -> Option> { let transaction_config_frame = self.frame.transaction_config_frame(); - transaction_config_frame - .is_present() - .then_some(TransactionConfigView { - transaction_config_frame, - bytes: self.data(), - }) + transaction_config_frame.is_present().then_some(TransactionConfigView { + transaction_config_frame, + bytes: self.data(), + }) } /// Return the full serialized transaction data. @@ -213,8 +211,7 @@ impl TransactionView { /// Return the number of unsigned static account keys. #[inline] pub(crate) fn num_static_unsigned_static_accounts(&self) -> u8 { - self.num_static_account_keys() - .wrapping_sub(self.num_required_signatures()) + self.num_static_account_keys().wrapping_sub(self.num_required_signatures()) } /// Return the number of writable unsigned static accounts. @@ -410,10 +407,7 @@ mod tests { ); assert_eq!( view.num_address_table_lookups(), - tx.message - .address_table_lookups() - .map(|x| x.len() as u8) - .unwrap_or(0) + tx.message.address_table_lookups().map(|x| x.len() as u8).unwrap_or(0) ); assert!(view.transaction_config().is_none()); From cc0c72ddd1dd6aa0c5a3be68cc9c58f84223fe21 Mon Sep 17 00:00:00 2001 From: Babur Makhmudov Date: Fri, 7 Aug 2026 11:49:32 +0400 Subject: [PATCH 2/4] fix: address transaction-view review feedback --- Cargo.toml | 15 +++++++++++++-- solana/transaction-view/README.md | 5 +++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 88bce4bd..1fc6c7d9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,18 +37,29 @@ wincode = "0.5.1" zstd = { version = "0.13.3", default-features = false } agave-feature-set = { version = "3.1.14", features = ["agave-unstable-api"] } -agave-transaction-view = { version = "3.1.13", features = ["agave-unstable-api"] } +agave-transaction-view = { version = "4.1.1", features = ["agave-unstable-api"] } solana-account-info = "3.1.1" solana-clock = "3.1.0" solana-compute-budget-instruction = "=4.1.1" solana-cpi = "3.1.0" solana-hash = "4.3.0" +solana-instruction = "3.4.0" solana-instruction-error = "2.3.0" +solana-keypair = "3.1.2" +solana-message = "4.1.1" +solana-packet = "4.1.0" +solana-program-runtime = { version = "=4.1.1", features = ["agave-unstable-api"] } solana-program-error = "3.0.1" solana-pubkey = "4.2.0" solana-sdk-ids = "3.1.0" -solana-short-vec = "3.2.1" +solana-short-vec = "=3.2.2" +solana-signature = "=3.4.1" +solana-signer = "3.0.1" +solana-svm-transaction = "4.1.1" +solana-system-interface = { version = "3.2", features = ["alloc", "bincode", "serde", "wincode"] } solana-sysvar = "4.0.0" +solana-transaction = "4.1.1" +solana-transaction-context = "4.1.1" solana-transaction-error = "3.2.0" [patch.crates-io] diff --git a/solana/transaction-view/README.md b/solana/transaction-view/README.md index b7b4cc40..f8ca07fb 100644 --- a/solana/transaction-view/README.md +++ b/solana/transaction-view/README.md @@ -26,8 +26,9 @@ prefix. Legacy, v0, and V1 transactions may be at most `u16::MAX` bytes, inclusive. Magicblock transactions may be at most 16 MiB and may use an instruction trace -length of 255. Other structural limits, including the standard signature and -account-index limits, remain enforced by sanitization. +length of 255. Legacy and v0 framing requires between 1 and 12 signatures; V1 +and Magicblock enforce the signature limit during sanitization. Other structural +limits, including account-index limits, are also enforced by sanitization. Compact-u16 values are parsed in their complete canonical one-, two-, or three-byte form. Absolute offsets and transaction lengths are stored as `u32`. From cae027920605e15a4d98321ebd7da907ca1979f4 Mon Sep 17 00:00:00 2001 From: Babur Makhmudov Date: Tue, 11 Aug 2026 10:37:08 +0400 Subject: [PATCH 3/4] fix: lock compatible Solana dependencies --- Cargo.lock | 2090 ++++++++++++++--- Cargo.toml | 12 +- .../src/instructions_frame.rs | 2 +- 3 files changed, 1800 insertions(+), 304 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2acc2061..d2f1c634 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,67 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "agave-transaction-view" +version = "4.1.1" +dependencies = [ + "agave-transaction-view", + "bincode", + "criterion", + "solana-hash", + "solana-instruction", + "solana-keypair", + "solana-message", + "solana-packet", + "solana-program-runtime", + "solana-pubkey", + "solana-sdk-ids", + "solana-short-vec", + "solana-signature", + "solana-signer", + "solana-svm-transaction", + "solana-system-interface", + "solana-transaction", + "solana-transaction-context", + "wincode", +] + +[[package]] +name = "aho-corasick" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloca" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7d05ea6aea7e9e64d25b9156ba2fee3fdd659e34e41063cd2fc7cd020d7f4" +dependencies = [ + "cc", +] + +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "ascii" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" + [[package]] name = "autocfg" version = "1.5.1" @@ -14,6 +75,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64ct" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" + [[package]] name = "bincode" version = "1.3.3" @@ -32,6 +99,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + [[package]] name = "borsh" version = "1.8.0" @@ -65,6 +141,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + [[package]] name = "bv" version = "0.11.1" @@ -92,12 +174,34 @@ dependencies = [ "syn 3.0.3", ] +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "bytes" version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "cc" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d262e149917187838d5b42777c8253bcb64500067342904e7d429499a6f277e" +dependencies = [ + "find-msvc-tools", + "shlex", +] + [[package]] name = "cfg-if" version = "1.0.4" @@ -111,324 +215,1276 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] -name = "darling" -version = "0.23.0" +name = "ciborium" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" dependencies = [ - "darling_core", - "darling_macro", + "ciborium-io", + "ciborium-ll", + "serde", ] [[package]] -name = "darling_core" -version = "0.23.0" +name = "ciborium-io" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" -dependencies = [ - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.119", -] +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" [[package]] -name = "darling_macro" -version = "0.23.0" +name = "ciborium-ll" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" dependencies = [ - "darling_core", - "quote", - "syn 2.0.119", + "ciborium-io", + "half", ] [[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "feature-probe" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" - -[[package]] -name = "five8" -version = "1.0.0" +name = "clap" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f76610e969fa1784327ded240f1e28a3fd9520c9cec93b636fcf62dd37f772" +checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" dependencies = [ - "five8_core", + "clap_builder", ] [[package]] -name = "five8_const" -version = "1.0.0" +name = "clap_builder" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a0f1728185f277989ca573a402716ae0beaaea3f76a8ff87ef9dd8fb19436c5" +checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" dependencies = [ - "five8_core", + "anstyle", + "clap_lex", ] [[package]] -name = "five8_core" -version = "1.0.0" +name = "clap_lex" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "059c31d7d36c43fe39d89e55711858b4da8be7eb6dabac23c7289b1a19489406" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] -name = "hashbrown" -version = "0.17.1" +name = "combine" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" +dependencies = [ + "ascii", + "byteorder", + "either", + "memchr", + "unreachable", +] [[package]] -name = "ident_case" -version = "1.0.1" +name = "const-oid" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] -name = "indexmap" -version = "2.14.0" +name = "cpufeatures" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ - "equivalent", - "hashbrown", + "libc", ] [[package]] -name = "lazy_static" -version = "1.5.0" +name = "criterion" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "950046b2aa2492f9a536f5f4f9a3de7b9e2476e575e05bd6c333371add4d98f3" +dependencies = [ + "alloca", + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot", + "itertools 0.13.0", + "num-traits", + "oorandom", + "page_size", + "plotters", + "rayon", + "regex", + "serde", + "serde_json", + "tinytemplate", + "walkdir", +] [[package]] -name = "libc" -version = "0.2.189" +name = "criterion-plot" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" +checksum = "d8d80a2f4f5b554395e47b5d8305bc3d27813bacb73493eb1001e8f76dae29ea" +dependencies = [ + "cast", + "itertools 0.13.0", +] [[package]] -name = "lock_api" -version = "0.4.14" +name = "crossbeam-deque" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" dependencies = [ - "scopeguard", + "crossbeam-epoch", + "crossbeam-utils", ] [[package]] -name = "log" -version = "0.4.33" +name = "crossbeam-epoch" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" +dependencies = [ + "crossbeam-utils", +] [[package]] -name = "memchr" -version = "2.8.3" +name = "crossbeam-utils" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" [[package]] -name = "num-traits" -version = "0.2.19" +name = "crunchy" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] -name = "once_cell" -version = "1.21.4" +name = "crypto-common" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] [[package]] -name = "parking_lot" -version = "0.12.5" +name = "curve25519-dalek" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ - "lock_api", - "parking_lot_core", + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest", + "fiat-crypto", + "rand_core 0.6.4", + "rustc_version", + "subtle", + "zeroize", ] [[package]] -name = "parking_lot_core" -version = "0.9.12" +name = "curve25519-dalek-derive" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link", + "proc-macro2", + "quote", + "syn 2.0.119", ] [[package]] -name = "pastey" -version = "0.2.3" +name = "darling" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core", + "darling_macro", +] [[package]] -name = "proc-macro-crate" -version = "3.5.0" +name = "darling_core" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" dependencies = [ - "toml_edit", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.119", ] [[package]] -name = "proc-macro2" -version = "1.0.107" +name = "darling_macro" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ - "unicode-ident", + "darling_core", + "quote", + "syn 2.0.119", ] [[package]] -name = "quote" -version = "1.0.47" +name = "der" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ - "proc-macro2", + "const-oid", + "zeroize", ] [[package]] -name = "redox_syscall" -version = "0.5.18" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "bitflags", + "block-buffer", + "crypto-common", + "subtle", ] [[package]] -name = "scopeguard" -version = "1.2.0" +name = "eager" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "abe71d579d1812060163dff96056261deb5bf6729b100fa2e36a68b9649ba3d3" [[package]] -name = "serde" -version = "1.0.229" +name = "ed25519" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "serde_core", - "serde_derive", + "pkcs8", + "signature", ] [[package]] -name = "serde_bytes" -version = "0.11.19" +name = "ed25519-dalek" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", "serde", - "serde_core", + "sha2", + "subtle", + "zeroize", ] [[package]] -name = "serde_core" -version = "1.0.229" +name = "either" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" + +[[package]] +name = "enum-iterator" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4549325971814bda7a44061bf3fe7e487d447cba01e4220a4b454d630d7a016" dependencies = [ - "serde_derive", + "enum-iterator-derive", ] [[package]] -name = "serde_derive" -version = "1.0.229" +name = "enum-iterator-derive" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +checksum = "685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 2.0.119", ] [[package]] -name = "smallvec" -version = "1.15.2" +name = "equivalent" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] -name = "solana-account" -version = "4.3.1" -dependencies = [ - "bincode", - "bitflags", - "serde", - "serde_bytes", - "solana-account", - "solana-account-info", - "solana-clock", - "solana-instruction-error", - "solana-pubkey", - "solana-sdk-ids", - "solana-sysvar", - "thiserror", - "wincode 0.5.5", -] - +name = "feature-probe" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "find-msvc-tools" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b73573e6edcd2af0cdf47bd6cb58f0b3839491263c314eaad1ccf24430e1de" + +[[package]] +name = "five8" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23f76610e969fa1784327ded240f1e28a3fd9520c9cec93b636fcf62dd37f772" +dependencies = [ + "five8_core", +] + +[[package]] +name = "five8_const" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a0f1728185f277989ca573a402716ae0beaaea3f76a8ff87ef9dd8fb19436c5" +dependencies = [ + "five8_core", +] + +[[package]] +name = "five8_core" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "059c31d7d36c43fe39d89e55711858b4da8be7eb6dabac23c7289b1a19489406" + +[[package]] +name = "futures-core" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" + +[[package]] +name = "futures-task" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" + +[[package]] +name = "futures-util" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "cfg-if", + "crunchy", + "zerocopy", +] + +[[package]] +name = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "js-sys" +version = "0.3.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "num" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "oorandom" +version = "11.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" + +[[package]] +name = "page_size" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d5b2194ed13191c1999ae0704b7839fb18384fa22e49b57eeaa97d79ce40da" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "pastey" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4" + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest", +] + +[[package]] +name = "percentage" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd23b938276f14057220b707937bcb42fa76dda7560e57a2da30cb52d557937" +dependencies = [ + "num", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "plotters" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" + +[[package]] +name = "plotters-svg" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rayon" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "rustc-demangle" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b74b56ffa8bb2830709a538c2cbcae9aa062db0d2a42563bfb09bdaae44020eb" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-big-array" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_bytes" +version = "0.11.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2-const-stable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f179d4e11094a893b82fff208f74d448a7512f99f5a0acbd5c679b705f83ed9" + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" + +[[package]] +name = "solana-account" +version = "4.3.1" +dependencies = [ + "bincode", + "bitflags", + "serde", + "serde_bytes", + "solana-account 4.3.1", + "solana-account-info", + "solana-clock", + "solana-instruction-error", + "solana-pubkey", + "solana-sdk-ids", + "solana-sysvar", + "thiserror", + "wincode", +] + +[[package]] +name = "solana-account" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26788ba0d7eb5b250edda3e1d393739bafd5daf94882f2261d14f5ab0d6a25e0" +dependencies = [ + "bincode", + "serde", + "serde_bytes", + "serde_derive", + "solana-account-info", + "solana-clock", + "solana-instruction-error", + "solana-pubkey", + "solana-sdk-ids", + "solana-sysvar", +] + +[[package]] +name = "solana-account-info" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9cf16495d9eb53e3d04e72366a33bb1c20c24e78c171d8b8f5978357b63ae95" +dependencies = [ + "solana-address", + "solana-program-error", + "solana-program-memory", +] + +[[package]] +name = "solana-address" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39c93e262f671bf402e1040e4a7e40b05d81da5956c7681948c975a0997517bb" +dependencies = [ + "borsh", + "curve25519-dalek", + "five8", + "five8_const", + "serde", + "serde_derive", + "sha2-const-stable", + "solana-atomic-u64", + "solana-define-syscall 5.2.0", + "solana-program-error", + "solana-sanitize", + "solana-sha256-hasher", + "wincode", +] + +[[package]] +name = "solana-atomic-u64" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "085db4906d89324cef2a30840d59eaecf3d4231c560ec7c9f6614a93c652f501" +dependencies = [ + "parking_lot", +] + +[[package]] +name = "solana-clock" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0acdace90d96e2c9e70d681465b4fe888b6bcf27c354ae9774e9f8a3b72923d" +dependencies = [ + "serde", + "serde_derive", + "solana-get-sysvar", + "solana-sdk-ids", + "solana-sdk-macro", + "solana-sysvar-id", +] + +[[package]] +name = "solana-cpi" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dea26709d867aada85d0d3617db0944215c8bb28d3745b912de7db13a23280c" +dependencies = [ + "solana-account-info", + "solana-define-syscall 4.0.1", + "solana-instruction", + "solana-program-error", + "solana-pubkey", + "solana-stable-layout", +] + +[[package]] +name = "solana-define-syscall" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57e5b1c0bc1d4a4d10c88a4100499d954c09d3fecfae4912c1a074dff68b1738" + +[[package]] +name = "solana-define-syscall" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf8209ece2bd9f1450e672858ffc0e5c8c786ff6916d2a862b126dd0128f380f" + +[[package]] +name = "solana-epoch-rewards" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf7eb4986b0b1d6f562b21f75a836f1a6df6e00c275efcef50aab5c144dc59e" +dependencies = [ + "serde", + "serde_derive", + "solana-get-sysvar", + "solana-hash", + "solana-sdk-ids", + "solana-sdk-macro", + "solana-sysvar-id", +] + +[[package]] +name = "solana-epoch-schedule" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8116e6ffa6002237d5ab5edcbda17f9ba66b6742c45a89c9fb40a94dbacd4c1d" +dependencies = [ + "serde", + "serde_derive", + "solana-get-sysvar", + "solana-program-error", + "solana-sdk-ids", + "solana-sdk-macro", + "solana-sysvar-id", +] + [[package]] -name = "solana-account-info" -version = "3.1.1" +name = "solana-fee-calculator" +version = "3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9cf16495d9eb53e3d04e72366a33bb1c20c24e78c171d8b8f5978357b63ae95" +checksum = "ef67f01cc6a0c72e99a08d0d484683f995de4c80e9568728fa77d1537f9b7e09" +dependencies = [ + "log", + "serde", + "serde_derive", +] + +[[package]] +name = "solana-fee-structure" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2abdb1223eea8ec64136f39cb1ffcf257e00f915c957c35c0dd9e3f4e700b0" + +[[package]] +name = "solana-get-sysvar" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef3bc859fc036ed490146793557386cbfae614ebba4adc704c37d94350824ed4" dependencies = [ "solana-address", + "solana-define-syscall 5.2.0", "solana-program-error", - "solana-program-memory", ] [[package]] -name = "solana-address" -version = "2.7.0" +name = "solana-hash" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01332a01c0a3098404d55a724c8d9a92aed4a50fe40a7dd0c7a51e29274c14de" +checksum = "fe51db00ac3aa9f950d1e6201a126acfa26e6d81bc4a183ba64ec02effcad883" dependencies = [ - "borsh", + "bytemuck", + "bytemuck_derive", "five8", - "five8_const", "serde", "serde_derive", - "solana-atomic-u64", + "solana-sanitize", + "wincode", +] + +[[package]] +name = "solana-instruction" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ebb0ffd19263051bc3f683fcc086134b8ff23af894dcb63f7563c7137b42f1" +dependencies = [ + "bincode", + "serde", + "serde_derive", "solana-define-syscall 5.2.0", + "solana-instruction-error", + "solana-pubkey", + "wincode", +] + +[[package]] +name = "solana-instruction-error" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b7d34343838343a3755b7dfb1e438d94c6db2263b519cfe3c2257af932b6e93" +dependencies = [ + "num-traits", + "serde", + "serde_derive", "solana-program-error", - "solana-sanitize", - "wincode 0.6.1", ] [[package]] -name = "solana-atomic-u64" +name = "solana-instructions-sysvar" version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "085db4906d89324cef2a30840d59eaecf3d4231c560ec7c9f6614a93c652f501" +checksum = "9e0732294560e88ecdb2bbc656e67383e9f88c78ec09469cef172f0d28cd1bcd" dependencies = [ - "parking_lot", + "bitflags", + "solana-account-info", + "solana-instruction", + "solana-instruction-error", + "solana-program-error", + "solana-sanitize", + "solana-sdk-ids", + "solana-serialize-utils", + "solana-sysvar-id", ] [[package]] -name = "solana-clock" -version = "3.2.0" +name = "solana-keypair" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "263d614c12aa267a3278703175fd6440552ca61bc960b5a02a4482720c53438b" +dependencies = [ + "ed25519-dalek", + "five8", + "five8_core", + "rand 0.9.5", + "solana-address", + "solana-seed-phrase", + "solana-signature", + "solana-signer", +] + +[[package]] +name = "solana-last-restart-slot" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7708bdb262fd9c257c3a56d4289297b10a3e821b8cba3f7cf42b49c40201ab9" +checksum = "c22474b83d3c7c318e1c3a725784fc2d1d03b728e36369e58ce48769a61ed85e" dependencies = [ "serde", "serde_derive", @@ -439,241 +1495,431 @@ dependencies = [ ] [[package]] -name = "solana-define-syscall" -version = "4.0.1" +name = "solana-loader-v3-interface" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57e5b1c0bc1d4a4d10c88a4100499d954c09d3fecfae4912c1a074dff68b1738" +checksum = "68029ab11d9c891d4ce23ada75745e40f983c5674af366f447b672569634231b" +dependencies = [ + "solana-instruction", + "solana-pubkey", + "solana-sdk-ids", +] [[package]] -name = "solana-define-syscall" -version = "5.2.0" +name = "solana-message" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf8209ece2bd9f1450e672858ffc0e5c8c786ff6916d2a862b126dd0128f380f" +checksum = "a634d1db65a393d4e87ec49ef97c8dfb12201e2ba9e5faf87ff34e632f29e509" +dependencies = [ + "lazy_static", + "serde", + "serde_derive", + "solana-address", + "solana-hash", + "solana-instruction", + "solana-sanitize", + "solana-sdk-ids", + "solana-short-vec", + "solana-transaction-error", + "wincode", +] [[package]] -name = "solana-epoch-rewards" -version = "3.2.0" +name = "solana-msg" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726b7cbbc6be6f1c6f29146ac824343b9415133eee8cce156452ad1db93f8008" +dependencies = [ + "solana-define-syscall 5.2.0", +] + +[[package]] +name = "solana-packet" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2a582d7863548f047f49aa3745c076cfa9e1364baa080ef0c1210f0e4ebda" +dependencies = [ + "bitflags", + "solana-pubkey", +] + +[[package]] +name = "solana-precompile-error" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cafcd950de74c6c39d55dc8ca108bbb007799842ab370ef26cf45a34453c31e1" +dependencies = [ + "num-traits", +] + +[[package]] +name = "solana-program-entrypoint" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84c9b0a1ff494e05f503a08b3d51150b73aa639544631e510279d6375f290997" +dependencies = [ + "solana-account-info", + "solana-define-syscall 4.0.1", + "solana-program-error", + "solana-pubkey", +] + +[[package]] +name = "solana-program-error" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f04fa578707b3612b095f0c8e19b66a1233f7c42ca8082fcb3b745afcc0add6" + +[[package]] +name = "solana-program-memory" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4068648649653c2c50546e9a7fb761791b5ab0cda054c771bb5808d3a4b9eb52" +dependencies = [ + "solana-define-syscall 4.0.1", +] + +[[package]] +name = "solana-program-runtime" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0788d74ee15778deecaa15ed1a1e37727ba954f86cbc35225450a1f2b5012969" +checksum = "f0adc57a87fb47da184a3d626560cb0001943201142dc1639ac4a46a17e1b68d" dependencies = [ + "base64", + "bincode", + "cfg-if", + "itertools 0.14.0", + "log", + "percentage", + "rand 0.9.5", "serde", - "serde_derive", - "solana-get-sysvar", + "solana-account 4.3.2", + "solana-account-info", + "solana-clock", + "solana-epoch-rewards", + "solana-epoch-schedule", + "solana-fee-structure", "solana-hash", + "solana-instruction", + "solana-last-restart-slot", + "solana-loader-v3-interface", + "solana-program-entrypoint", + "solana-pubkey", + "solana-rent", + "solana-sbpf", "solana-sdk-ids", - "solana-sdk-macro", + "solana-slot-hashes", + "solana-stable-layout", + "solana-stake-interface", + "solana-svm-callback", + "solana-svm-feature-set", + "solana-svm-log-collector", + "solana-svm-measure", + "solana-svm-timings", + "solana-svm-transaction", + "solana-svm-type-overrides", + "solana-system-interface", + "solana-sysvar", "solana-sysvar-id", + "solana-transaction-context", + "thiserror", ] [[package]] -name = "solana-epoch-schedule" -version = "3.3.0" +name = "solana-pubkey" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7db719574990de7e8b0f55a8593ac92a5ccb42c8ce67b3e4bf05b139d5d9ee71" +dependencies = [ + "solana-address", +] + +[[package]] +name = "solana-rent" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1633cfd10cde127f2caf8f12021b4f8e9a425e7e4eea4326e428c422376d6fd" +checksum = "39f0d780bf8e8a1fe8b5b5fce1acad6b209485b86dec246e7523d5e4a8b7c7fc" dependencies = [ "serde", "serde_derive", "solana-get-sysvar", - "solana-program-error", "solana-sdk-ids", "solana-sdk-macro", "solana-sysvar-id", ] [[package]] -name = "solana-fee-calculator" -version = "3.3.0" +name = "solana-sanitize" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf09694a0fc14e5ffb18f9b7b7c0f15ecb6eac5b5610bf76a1853459d19daf9" + +[[package]] +name = "solana-sbpf" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4bf4f4afb4704212ef1d994ee65bef7293441721639dfd16f0e60996f37be51" +checksum = "7f84c593fa3d4131045b606dec5acf9d8eac73791bc786ca9911057aec8f43ec" dependencies = [ + "byteorder", + "combine", + "hash32", + "libc", "log", - "serde", - "serde_derive", + "rand 0.8.7", + "rustc-demangle", + "thiserror", + "winapi", ] [[package]] -name = "solana-get-sysvar" -version = "1.0.0" +name = "solana-sdk-ids" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef3bc859fc036ed490146793557386cbfae614ebba4adc704c37d94350824ed4" +checksum = "def234c1956ff616d46c9dd953f251fa7096ddbaa6d52b165218de97882b7280" dependencies = [ "solana-address", - "solana-define-syscall 5.2.0", - "solana-program-error", ] [[package]] -name = "solana-hash" -version = "4.6.0" +name = "solana-sdk-macro" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0df9b01495ed31100aca97a7f5862d5e19ab1636d60d1a9f02391408dd9dec84" +checksum = "8765316242300c48242d84a41614cb3388229ec353ba464f6fe62a733e41806f" dependencies = [ - "bytemuck", - "bytemuck_derive", + "bs58", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "solana-seed-phrase" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc905b200a95f2ea9146e43f2a7181e3aeb55de6bc12afb36462d00a3c7310de" +dependencies = [ + "hmac", + "pbkdf2", + "sha2", +] + +[[package]] +name = "solana-serialize-utils" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "761357b0853c9623bf12c1d2314b3d6160a85b087b84c45224fb85766d22616b" +dependencies = [ + "solana-instruction-error", + "solana-pubkey", + "solana-sanitize", +] + +[[package]] +name = "solana-sha256-hasher" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db7dc3011ea4c0334aaaa7e7128cb390ecf546b28d412e9bf2064680f57f588f" +dependencies = [ + "sha2", + "solana-define-syscall 4.0.1", + "solana-hash", +] + +[[package]] +name = "solana-short-vec" +version = "3.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d8250a4495aad49ad20556a607da53bdcb20de78da10b65afbf918b7f1de647" +dependencies = [ + "serde_core", + "wincode", +] + +[[package]] +name = "solana-signature" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0364c7577c3c82a693ce28a1febc8d1b5d1b0a175fdc2114ae6186b69effe1e" +dependencies = [ + "ed25519-dalek", "five8", "serde", + "serde-big-array", "serde_derive", + "solana-sanitize", + "wincode", ] [[package]] -name = "solana-instruction" -version = "3.5.0" +name = "solana-signer" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d70cf6ece1070a66d25e68274f338f29664794669c175223940a298645ef3495" +checksum = "520bd6021163ee517f4bdc7ae03ded904f97e11320001ba0b3355f45eb14f558" dependencies = [ - "solana-define-syscall 5.2.0", - "solana-instruction-error", "solana-pubkey", + "solana-signature", + "solana-transaction-error", ] [[package]] -name = "solana-instruction-error" -version = "2.5.0" +name = "solana-slot-hashes" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8e7db78c122d02189619490b1fef04a2a042c389662920617c0e6381fdf8fdd" +checksum = "5c7ce2b4b8911bf2db3de7b6266e67bfc21a6a9f8c566fb096d9782ca2ad16ee" dependencies = [ - "num-traits", - "solana-program-error", + "serde", + "serde_derive", + "solana-get-sysvar", + "solana-hash", + "solana-sdk-ids", + "solana-sysvar-id", ] [[package]] -name = "solana-last-restart-slot" -version = "3.2.0" +name = "solana-slot-history" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5099e736c3c06c451b307a60637d69eb65b3144143ebeed899e2fd1134f4fc35" +checksum = "40427c04d3e808493cb5e3d1a97cef84d7c15cb6f89b15c5684d0d4027105600" dependencies = [ + "bv", "serde", "serde_derive", "solana-get-sysvar", "solana-sdk-ids", - "solana-sdk-macro", "solana-sysvar-id", ] [[package]] -name = "solana-program-entrypoint" -version = "3.1.1" +name = "solana-stable-layout" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c9b0a1ff494e05f503a08b3d51150b73aa639544631e510279d6375f290997" +checksum = "c9f6a291ba063a37780af29e7db14bdd3dc447584d8ba5b3fc4b88e2bbc982fa" dependencies = [ - "solana-account-info", - "solana-define-syscall 4.0.1", - "solana-program-error", + "solana-instruction", "solana-pubkey", ] [[package]] -name = "solana-program-error" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f04fa578707b3612b095f0c8e19b66a1233f7c42ca8082fcb3b745afcc0add6" - -[[package]] -name = "solana-program-memory" -version = "3.1.0" +name = "solana-stake-history" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4068648649653c2c50546e9a7fb761791b5ab0cda054c771bb5808d3a4b9eb52" +checksum = "c736a6aa0e53b9d264d90b06589fc0996f49f882f3e71842ed754fc57ffc1a43" dependencies = [ - "solana-define-syscall 4.0.1", + "serde", + "serde_derive", + "solana-clock", + "solana-get-sysvar", + "solana-sdk-ids", + "solana-sysvar-id", ] [[package]] -name = "solana-pubkey" -version = "4.3.0" +name = "solana-stake-interface" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f71b7a414de2ced1071f015834e9be581592d013432adbd06d02e4af11eba9" +checksum = "f49eb5c77484214c3484921e2cdda79d185373118b5458c1b2df0f1a04c3bc30" dependencies = [ - "solana-address", + "num-traits", + "serde", + "serde_derive", + "solana-clock", + "solana-cpi", + "solana-instruction", + "solana-program-error", + "solana-pubkey", + "solana-system-interface", + "solana-sysvar", + "solana-sysvar-id", ] [[package]] -name = "solana-rent" -version = "4.4.0" +name = "solana-svm-callback" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc016b348926395ba01f8288cdf5da25fc30f5a0806028b32d5e5b3147b10bf9" +checksum = "3170a3cfc032f3efca975154dee904ecefea5ae11fbd50787c062886196d32c1" dependencies = [ - "serde", - "serde_derive", - "solana-get-sysvar", - "solana-sdk-ids", - "solana-sdk-macro", - "solana-sysvar-id", + "solana-account 4.3.2", + "solana-clock", + "solana-precompile-error", + "solana-pubkey", ] [[package]] -name = "solana-sanitize" -version = "3.0.1" +name = "solana-svm-feature-set" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf09694a0fc14e5ffb18f9b7b7c0f15ecb6eac5b5610bf76a1853459d19daf9" +checksum = "9c3d427bb7cd5182365e7e89d73fcfcb54565d15445ad2d228921811c3836099" [[package]] -name = "solana-sdk-ids" -version = "3.1.0" +name = "solana-svm-log-collector" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "def234c1956ff616d46c9dd953f251fa7096ddbaa6d52b165218de97882b7280" +checksum = "afdf3074910afe016266bf73606724543b6829b5656221c8060ebcfcc844b39a" dependencies = [ - "solana-address", + "log", ] [[package]] -name = "solana-sdk-macro" -version = "3.0.1" +name = "solana-svm-measure" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8765316242300c48242d84a41614cb3388229ec353ba464f6fe62a733e41806f" +checksum = "d4ecaaadf4ddaabdba865c7f9aade0c51ac7c393c786f8b4e9590127f5ee9d62" + +[[package]] +name = "solana-svm-timings" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b179027c8bf618df4a7f02f937ddef54770f8f5584195c94a03437ee6dc7c7f3" dependencies = [ - "bs58", - "proc-macro2", - "quote", - "syn 2.0.119", + "eager", + "enum-iterator", + "solana-pubkey", ] [[package]] -name = "solana-slot-hashes" -version = "3.2.0" +name = "solana-svm-transaction" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "007d6bc909599eea325c9d09f7ff16ef6166c134876ff47a6a122d693d058dad" +checksum = "8fa27dd1eb7ce4d339cf9dfc1dfb70866488e4e1436fb05728aea7af0185191a" dependencies = [ - "serde", - "serde_derive", - "solana-get-sysvar", "solana-hash", + "solana-message", + "solana-pubkey", "solana-sdk-ids", - "solana-sysvar-id", + "solana-signature", + "solana-transaction", ] [[package]] -name = "solana-slot-history" -version = "3.2.0" +name = "solana-svm-type-overrides" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4560fde841a6f2001aedc33b74fe99840ee3d56a71fe9b98ee332303b8597900" +checksum = "2e0ca52c449480ab3a1ef614ae10576d6ccc33730a0f4d8b4a69f38e8decb622" dependencies = [ - "bv", - "serde", - "serde_derive", - "solana-get-sysvar", - "solana-sdk-ids", - "solana-sysvar-id", + "rand 0.9.5", ] [[package]] -name = "solana-stake-history" -version = "1.1.0" +name = "solana-system-interface" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c814b4e2570f8c343eb1d4f968ff981bdf518afc3643d070d8e5a28158e85a4b" +checksum = "55b54965bf0b76fa8e2b35376583efddd4d916618cfe595bf48c7d7b55a9e628" dependencies = [ + "num-traits", "serde", "serde_derive", - "solana-clock", - "solana-get-sysvar", - "solana-sdk-ids", - "solana-sysvar-id", + "solana-address", + "solana-instruction", + "solana-msg", + "solana-program-error", + "wincode", ] [[package]] name = "solana-sysvar" -version = "4.2.0" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0214d668b0aab7a64b49e43b7947307985fca4e03d3ef880cd8ee43f52f13a34" +checksum = "ada7045bbfdd802af08fbc9c7e2b56ddabb20599d22e4c3840fcef5e7afb8324" dependencies = [ "base64", "bincode", @@ -713,12 +1959,79 @@ dependencies = [ "solana-sdk-ids", ] +[[package]] +name = "solana-transaction" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a98253cefd62dea714b67926d3d918c3b9f7d66993f1f2322ac7549ea991dc3e" +dependencies = [ + "serde", + "serde_derive", + "solana-address", + "solana-hash", + "solana-instruction", + "solana-instruction-error", + "solana-message", + "solana-sanitize", + "solana-sdk-ids", + "solana-short-vec", + "solana-signature", + "solana-signer", + "solana-transaction-error", + "wincode", +] + +[[package]] +name = "solana-transaction-context" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168e409c531b6e5b4a4bcf4a0286795acb80e6c6330c21fe6ad5d7e6918a7245" +dependencies = [ + "bincode", + "serde", + "solana-account 4.3.2", + "solana-instruction", + "solana-instructions-sysvar", + "solana-pubkey", + "solana-rent", + "solana-sbpf", + "solana-sdk-ids", +] + +[[package]] +name = "solana-transaction-error" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a949797bc1ac31836d0070e791083028a8c2e0d493fa4cf51c0bed7a04c65c22" +dependencies = [ + "serde", + "serde_derive", + "solana-instruction-error", + "solana-sanitize", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "2.0.119" @@ -743,24 +2056,34 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.20" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.20" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" dependencies = [ "proc-macro2", "quote", "syn 3.0.3", ] +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "tinyvec" version = "1.12.0" @@ -806,6 +2129,12 @@ dependencies = [ "winnow", ] +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + [[package]] name = "unicode-ident" version = "1.0.24" @@ -813,22 +2142,142 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] -name = "wincode" -version = "0.5.5" +name = "unreachable" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d967db7705dc29120bb6e8ce5b5a2e27734ed5976d1c904e95bd238d1c3c5a" +checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" dependencies = [ - "pastey", + "void", +] + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +dependencies = [ + "bumpalo", "proc-macro2", "quote", - "thiserror", + "syn 2.0.119", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys", ] +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + [[package]] name = "wincode" -version = "0.6.1" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfc6339f1ba427bf7ad7c42403b28e524832ba2ddb5eef1bb2cc3b85db6b7b75" +checksum = "66d967db7705dc29120bb6e8ce5b5a2e27734ed5976d1c904e95bd238d1c3c5a" dependencies = [ "pastey", "proc-macro2", @@ -839,9 +2288,9 @@ dependencies = [ [[package]] name = "wincode-derive" -version = "0.5.1" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d582d9fc9d813264407a9e16bfa16846ccf15ef032f9bbcd700741bdc00255" +checksum = "15ab90b719560d0fda79c74550ad1c948d17b118765942838055ebaf34d67071" dependencies = [ "darling", "proc-macro2", @@ -855,6 +2304,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + [[package]] name = "winnow" version = "1.0.4" @@ -863,3 +2321,41 @@ checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" dependencies = [ "memchr", ] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "zerocopy" +version = "0.8.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zeroize" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/Cargo.toml b/Cargo.toml index 1fc6c7d9..e4e62d95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,24 +43,24 @@ solana-clock = "3.1.0" solana-compute-budget-instruction = "=4.1.1" solana-cpi = "3.1.0" solana-hash = "4.3.0" -solana-instruction = "3.4.0" -solana-instruction-error = "2.3.0" +solana-instruction = "=3.4.0" +solana-instruction-error = "=2.4.0" solana-keypair = "3.1.2" solana-message = "4.1.1" -solana-packet = "4.1.0" +solana-packet = "=4.2.0" solana-program-runtime = { version = "=4.1.1", features = ["agave-unstable-api"] } solana-program-error = "3.0.1" -solana-pubkey = "4.2.0" +solana-pubkey = "=4.2.0" solana-sdk-ids = "3.1.0" solana-short-vec = "=3.2.2" solana-signature = "=3.4.1" solana-signer = "3.0.1" solana-svm-transaction = "4.1.1" -solana-system-interface = { version = "3.2", features = ["alloc", "bincode", "serde", "wincode"] } +solana-system-interface = { version = "=3.2.0", features = ["alloc", "bincode", "serde", "wincode"] } solana-sysvar = "4.0.0" solana-transaction = "4.1.1" solana-transaction-context = "4.1.1" -solana-transaction-error = "3.2.0" +solana-transaction-error = "=3.3.1" [patch.crates-io] agave-transaction-view = { path = "solana/transaction-view" } diff --git a/solana/transaction-view/src/instructions_frame.rs b/solana/transaction-view/src/instructions_frame.rs index 8b9989c5..c1bbe8d2 100644 --- a/solana/transaction-view/src/instructions_frame.rs +++ b/solana/transaction-view/src/instructions_frame.rs @@ -546,7 +546,7 @@ mod tests { ..solana_message::v1::Message::default() }; - let serialized = message.serialize(); + let serialized = solana_message::v1::serialize(&message); let mut offset = 42; // instruction headers start after the V1 prefix for no config, 0 addresses let instructions_frame = From 7b6cfcd81e171b4a359fcb0f2c1d3ba3ec674292 Mon Sep 17 00:00:00 2001 From: Babur Makhmudov Date: Tue, 11 Aug 2026 16:06:49 +0400 Subject: [PATCH 4/4] fix: serialize V1 instruction-frame fixture --- solana/transaction-view/src/instructions_frame.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solana/transaction-view/src/instructions_frame.rs b/solana/transaction-view/src/instructions_frame.rs index c1bbe8d2..dafe5ea6 100644 --- a/solana/transaction-view/src/instructions_frame.rs +++ b/solana/transaction-view/src/instructions_frame.rs @@ -546,7 +546,7 @@ mod tests { ..solana_message::v1::Message::default() }; - let serialized = solana_message::v1::serialize(&message); + let serialized = solana_message::VersionedMessage::V1(message).serialize(); let mut offset = 42; // instruction headers start after the V1 prefix for no config, 0 addresses let instructions_frame =