From e2a349c73911fb7c9d1883aabdbb5512008e17b6 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Sat, 25 Jul 2026 16:45:59 +0200 Subject: [PATCH] v0.1.0-pre.043 --- Cargo.toml | 3 +- kb-pipeline-demo-scenarios/Cargo.toml | 28 ++++ kb-pipeline-demo-scenarios/src/constants.rs | 7 + kb-pipeline-demo-scenarios/src/lib.rs | 130 ++++++++++++++++++ .../src/solana_ata_execution.rs | 64 ++++----- .../src/solana_execution.rs | 52 +++---- .../src/solana_memo_execution.rs | 42 +++--- .../src/solana_token2022_devnet_execution.rs | 49 +++---- .../src/solana_token2022_devnet_scenarios.rs | 4 +- .../src/solana_token2022_validation.rs | 4 +- .../src/solana_token_execution.rs | 54 ++++---- .../src/solana_token_lifecycle.rs | 22 +-- kb-pipeline/Cargo.toml | 3 +- kb-pipeline/src/lib.rs | 119 +--------------- 14 files changed, 320 insertions(+), 261 deletions(-) create mode 100644 kb-pipeline-demo-scenarios/Cargo.toml create mode 100644 kb-pipeline-demo-scenarios/src/constants.rs create mode 100644 kb-pipeline-demo-scenarios/src/lib.rs rename {kb-pipeline => kb-pipeline-demo-scenarios}/src/solana_ata_execution.rs (95%) rename {kb-pipeline => kb-pipeline-demo-scenarios}/src/solana_execution.rs (97%) rename {kb-pipeline => kb-pipeline-demo-scenarios}/src/solana_memo_execution.rs (96%) rename {kb-pipeline => kb-pipeline-demo-scenarios}/src/solana_token2022_devnet_execution.rs (95%) rename {kb-pipeline => kb-pipeline-demo-scenarios}/src/solana_token2022_devnet_scenarios.rs (98%) rename {kb-pipeline => kb-pipeline-demo-scenarios}/src/solana_token2022_validation.rs (99%) rename {kb-pipeline => kb-pipeline-demo-scenarios}/src/solana_token_execution.rs (96%) rename {kb-pipeline => kb-pipeline-demo-scenarios}/src/solana_token_lifecycle.rs (98%) diff --git a/Cargo.toml b/Cargo.toml index b79e81f..5fb36d1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ # file: Cargo.toml -# version: 3 +# version: 4 [workspace] resolver = "3" @@ -10,6 +10,7 @@ members = [ "kb-logging", "kb-program-ids", "kb-pipeline", + "kb-pipeline-demo-scenarios", "kb-onchain-transport", "kb-store", "kb-wallet", diff --git a/kb-pipeline-demo-scenarios/Cargo.toml b/kb-pipeline-demo-scenarios/Cargo.toml new file mode 100644 index 0000000..0a95dea --- /dev/null +++ b/kb-pipeline-demo-scenarios/Cargo.toml @@ -0,0 +1,28 @@ +# file: kb-pipeline-demo-scenarios/Cargo.toml +# version: 1 + +[package] +name = "kb-pipeline-demo-scenarios" +version.workspace = true +edition.workspace = true +license.workspace = true +publish.workspace = true + +[dependencies] +chrono.workspace = true +kb-core = { path = "../kb-core" } +kb-config = { path = "../kb-config" } +kb-lib = { path = "../kb-lib" } +kb-onchain-transport = { path = "../kb-onchain-transport" } +kb-pipeline = { path = "../kb-pipeline" } +kb-program-ids = { path = "../kb-program-ids" } +kb-store = { path = "../kb-store" } +kb-wallet = { path = "../kb-wallet" } +serde.workspace = true +serde_json.workspace = true +tokio.workspace = true +tracing.workspace = true +uuid.workspace = true + +[lints] +workspace = true diff --git a/kb-pipeline-demo-scenarios/src/constants.rs b/kb-pipeline-demo-scenarios/src/constants.rs new file mode 100644 index 0000000..d08406c --- /dev/null +++ b/kb-pipeline-demo-scenarios/src/constants.rs @@ -0,0 +1,7 @@ +// file: kb-pipeline-demo-scenarios/src/constants.rs +// version: 1 + +//! Demo scenario constants. + +/// Canonical tracing target for demo pipeline scenarios. +pub(crate) const TRACING_TARGET: &str = "kb-pipeline-demo-scenarios"; diff --git a/kb-pipeline-demo-scenarios/src/lib.rs b/kb-pipeline-demo-scenarios/src/lib.rs new file mode 100644 index 0000000..7ee30ab --- /dev/null +++ b/kb-pipeline-demo-scenarios/src/lib.rs @@ -0,0 +1,130 @@ +// file: kb-pipeline-demo-scenarios/src/lib.rs +// version: 1 + +#![forbid(unsafe_code)] +#![deny(unreachable_pub)] +#![warn(missing_docs)] + +//! Reusable demonstration and Devnet validation scenarios built on `kb-pipeline`. + +mod constants; +mod solana_ata_execution; +mod solana_execution; +mod solana_memo_execution; +mod solana_token2022_devnet_execution; +mod solana_token2022_devnet_scenarios; +mod solana_token2022_validation; +mod solana_token_execution; +mod solana_token_lifecycle; + +/// Complete request for one Devnet Associated Token Account execution. +pub use self::solana_ata_execution::DevnetSplAssociatedTokenAccountExecutionRequest; +/// Complete result of one Devnet Associated Token Account execution. +pub use self::solana_ata_execution::DevnetSplAssociatedTokenAccountExecutionSummary; +/// Executes one Devnet Associated Token Account simulation or authorized submission. +pub use self::solana_ata_execution::execute_devnet_spl_associated_token_account; +/// Simulates one Devnet Associated Token Account operation after stateful preflight. +pub use self::solana_ata_execution::simulate_devnet_spl_associated_token_account; +/// Complete request for one bounded System Program transfer on Devnet. +pub use self::solana_execution::DevnetSystemTransferRequest; +/// Summary returned by one bounded System Program transfer execution. +pub use self::solana_execution::DevnetSystemTransferSummary; +/// No-op observer suitable for CLI tools and opt-in integration tests. +pub use self::solana_execution::NoopSolanaExecutionObserver; +/// Observer notified during Solana execution orchestration. +pub use self::solana_execution::SolanaExecutionObserver; +/// Progress event emitted by Solana execution orchestration. +pub use self::solana_execution::SolanaExecutionProgressEvent; +/// Severity of one Solana execution progress event. +pub use self::solana_execution::SolanaExecutionProgressLevel; +/// Emits one execution progress event for specialized pipeline orchestrators. +pub(crate) use self::solana_execution::emit; +/// Rejects one execution stage when the observer reports cancellation. +pub(crate) use self::solana_execution::ensure_not_cancelled; +/// Executes one bounded System Program transfer on Devnet. +pub use self::solana_execution::execute_devnet_system_transfer; +/// Loads the persistent wallet configured by one execution profile. +pub(crate) use self::solana_execution::load_profile_wallet; +/// Formats one failed simulation without discarding runtime diagnostics. +pub(crate) use self::solana_execution::simulation_failure_message; +/// Formats safety violations for one denied execution plan. +pub(crate) use self::solana_execution::violation_message; +/// Complete request for one SPL Memo v4 Devnet execution. +pub use self::solana_memo_execution::DevnetMemoExecutionRequest; +/// Complete result of one SPL Memo v4 Devnet execution and post-validation. +pub use self::solana_memo_execution::DevnetMemoExecutionSummary; +/// Executes one SPL Memo v4 Devnet simulation or explicitly authorized submission. +pub use self::solana_memo_execution::execute_devnet_memo; +/// Complete request for one Devnet classic SPL Token execution. +pub use self::solana_token_execution::DevnetSplTokenExecutionRequest; +/// Complete result of one Devnet classic SPL Token execution. +pub use self::solana_token_execution::DevnetSplTokenExecutionSummary; +/// Canonical hydration availability helper shared by Token lifecycle orchestration. +pub(crate) use self::solana_token_execution::canonical_available; +/// Decode completion helper shared by Token lifecycle orchestration. +pub(crate) use self::solana_token_execution::decode_completed; +/// Executes one Devnet classic SPL Token simulation or authorized submission. +pub use self::solana_token_execution::execute_devnet_spl_token; +/// Canonical signature hydration helper shared by Token lifecycle orchestration. +pub(crate) use self::solana_token_execution::hydrate_signature; +/// Targeted program replay helper shared by Token lifecycle orchestration. +pub(crate) use self::solana_token_execution::replay_program; +/// Simulates one Devnet classic SPL Token operation after stateful preflight. +pub use self::solana_token_execution::simulate_devnet_spl_token; +/// Complete request to prepare raw accounts for one Devnet SPL Token lifecycle. +pub use self::solana_token_lifecycle::DevnetSplTokenLifecyclePreparationRequest; +/// One prepared raw account step. +pub use self::solana_token_lifecycle::DevnetSplTokenLifecyclePreparationStep; +/// Summary of raw-account preparation for one lifecycle. +pub use self::solana_token_lifecycle::DevnetSplTokenLifecyclePreparationSummary; +/// Complete request for one controlled Devnet SPL Token lifecycle. +pub use self::solana_token_lifecycle::DevnetSplTokenLifecycleRequest; +/// Summary of one lifecycle operation step. +pub use self::solana_token_lifecycle::DevnetSplTokenLifecycleStepSummary; +/// Complete controlled lifecycle summary. +pub use self::solana_token_lifecycle::DevnetSplTokenLifecycleSummary; +/// Executes one controlled Devnet SPL Token lifecycle. +pub use self::solana_token_lifecycle::execute_devnet_spl_token_lifecycle; +/// Prepares raw accounts for one controlled Devnet SPL Token lifecycle. +pub use self::solana_token_lifecycle::prepare_devnet_spl_token_lifecycle_accounts; +/// Complete request for one Devnet Token-2022 execution. +pub use self::solana_token2022_devnet_execution::DevnetSplToken2022ExecutionRequest; +/// Complete result of one Devnet Token-2022 execution. +pub use self::solana_token2022_devnet_execution::DevnetSplToken2022ExecutionSummary; +/// Executes one Devnet Token-2022 simulation or authorized submission. +pub use self::solana_token2022_devnet_execution::execute_devnet_spl_token2022; +/// Simulates one Devnet Token-2022 operation after stateful preflight. +pub use self::solana_token2022_devnet_execution::simulate_devnet_spl_token2022; +/// Stable category of one independent Devnet validation scenario. +pub use self::solana_token2022_devnet_scenarios::DevnetSplValidationFamily; +/// Current implementation status of one Devnet validation scenario. +pub use self::solana_token2022_devnet_scenarios::DevnetSplValidationImplementationStatus; +/// One independent Devnet validation scenario exposed to applications. +pub use self::solana_token2022_devnet_scenarios::DevnetSplValidationScenario; +/// Returns the complete ordered Devnet scenario inventory. +pub use self::solana_token2022_devnet_scenarios::devnet_spl_validation_scenarios; +/// Maximum number of evidence records accepted in one validation report. +pub use self::solana_token2022_validation::MAX_TOKEN2022_VALIDATION_EVIDENCE; +/// Required validation environment for one Token-2022 scenario. +pub use self::solana_token2022_validation::Token2022ValidationEnvironment; +/// One bounded proof attached to a Token-2022 validation scenario. +pub use self::solana_token2022_validation::Token2022ValidationEvidence; +/// Machine-readable Token-2022 validation matrix. +pub use self::solana_token2022_validation::Token2022ValidationMatrix; +/// One scenario declared by the canonical validation matrix. +pub use self::solana_token2022_validation::Token2022ValidationMatrixScenario; +/// Complete bounded Token-2022 validation report. +pub use self::solana_token2022_validation::Token2022ValidationReport; +/// One declared Token-2022 validation scenario and its observed evidence. +pub use self::solana_token2022_validation::Token2022ValidationScenario; +/// Exact status of one Token-2022 validation scenario. +pub use self::solana_token2022_validation::Token2022ValidationStatus; +/// Loads and validates the canonical Token-2022 validation matrix. +pub use self::solana_token2022_validation::load_token2022_validation_matrix; +/// Validates one Token-2022 validation matrix. +pub use self::solana_token2022_validation::validate_token2022_validation_matrix; +/// Validates one bounded Token-2022 milestone report. +pub use self::solana_token2022_validation::validate_token2022_validation_report; + +/// Canonical tracing target for demo pipeline scenarios. +pub(crate) use self::constants::TRACING_TARGET; diff --git a/kb-pipeline/src/solana_ata_execution.rs b/kb-pipeline-demo-scenarios/src/solana_ata_execution.rs similarity index 95% rename from kb-pipeline/src/solana_ata_execution.rs rename to kb-pipeline-demo-scenarios/src/solana_ata_execution.rs index e455545..5e0837e 100644 --- a/kb-pipeline/src/solana_ata_execution.rs +++ b/kb-pipeline-demo-scenarios/src/solana_ata_execution.rs @@ -1,5 +1,5 @@ -// file: kb-pipeline/src/solana_ata_execution.rs -// version: 5 +// file: kb-pipeline-demo-scenarios/src/solana_ata_execution.rs +// version: 6 //! Devnet ATA execution with stateful and canonical post-validation. @@ -77,7 +77,7 @@ pub struct DevnetSplAssociatedTokenAccountExecutionSummary { /// Wallet balance observed before planning. pub balance_lamports: u64, /// Stateful readiness report produced before plan simulation. - pub stateful_readiness: crate::SplAssociatedTokenAccountStatefulReadinessReport, + pub stateful_readiness: kb_pipeline::SplAssociatedTokenAccountStatefulReadinessReport, /// Exact prepared Token plan. pub plan: kb_lib::ExApiPreparedExecutionPlan, /// Recent blockhash used by the exact transaction. @@ -92,15 +92,15 @@ pub struct DevnetSplAssociatedTokenAccountExecutionSummary { pub confirmation: std::option::Option, /// Stateful account relationships observed after confirmation. pub post_state_validation: - std::option::Option, + std::option::Option, /// Canonical hydration result for the exact signature. - pub backfill: std::option::Option, + pub backfill: std::option::Option, /// Core extraction result for the exact signature. - pub core_extraction: std::option::Option, + pub core_extraction: std::option::Option, /// First Token decode and materialization replay. - pub decode_replay: std::option::Option, + pub decode_replay: std::option::Option, /// Second replay proving idempotence for the same decoder version and input. - pub idempotence_replay: std::option::Option, + pub idempotence_replay: std::option::Option, /// Exact materialized rows produced for the submitted Token transaction. pub materializations: std::vec::Vec, /// Aggregated post-execution validation diagnostic. @@ -294,7 +294,7 @@ where }, }; let post_state_ready = - post_state.status == crate::SplAssociatedTokenAccountStatefulReadinessStatus::Ready; + post_state.status == kb_pipeline::SplAssociatedTokenAccountStatefulReadinessStatus::Ready; summary.post_state_validation = std::option::Option::Some(post_state); if !post_state_ready { diagnostic.diagnostics.push("confirmed SPL Associated Token Account execution did not satisfy final account relationships".to_string()); @@ -328,10 +328,10 @@ where summary.post_execution = std::option::Option::Some(diagnostic); return std::result::Result::Ok(summary); } - let extraction = match crate::execute_core_extraction( + let extraction = match kb_pipeline::execute_core_extraction( store, - &crate::CoreExtractionRequest { - source: crate::CoreExtractionSource::Signatures(std::vec![signature.0.clone()]), + &kb_pipeline::CoreExtractionRequest { + source: kb_pipeline::CoreExtractionSource::Signatures(std::vec![signature.0.clone()]), limit: 1, max_concurrent_extractions: 1, force_replay: request.force_post_validation_replay, @@ -527,9 +527,9 @@ where std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), }; - let readiness = match crate::inspect_spl_associated_token_account_stateful_readiness( + let readiness = match kb_pipeline::inspect_spl_associated_token_account_stateful_readiness( http_pool, - &crate::SplAssociatedTokenAccountStatefulReadinessRequest { + &kb_pipeline::SplAssociatedTokenAccountStatefulReadinessRequest { query_role: request.query_role.clone(), cluster: kb_lib::ExApiExecutionCluster::Devnet, intent, @@ -541,7 +541,7 @@ where std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), }; - if readiness.status != crate::SplAssociatedTokenAccountStatefulReadinessStatus::Ready { + if readiness.status != kb_pipeline::SplAssociatedTokenAccountStatefulReadinessStatus::Ready { return std::result::Result::Err(kb_core::Error::new( "execution_spl_associated_token_account_stateful_blocked", failed_readiness_message(&readiness), @@ -762,7 +762,7 @@ fn build_intent( } fn failed_readiness_message( - readiness: &crate::SplAssociatedTokenAccountStatefulReadinessReport, + readiness: &kb_pipeline::SplAssociatedTokenAccountStatefulReadinessReport, ) -> std::string::String { let failures = readiness .checks @@ -793,10 +793,10 @@ async fn validate_post_state_with_retries( query_role: &str, maximum_retries: u32, operation: &kb_lib::ExSplAssociatedTokenAccountOperation, -) -> kb_core::Result { +) -> kb_core::Result { let mut retry = 0_u32; loop { - let result = crate::inspect_spl_associated_token_account_post_execution( + let result = kb_pipeline::inspect_spl_associated_token_account_post_execution( http_pool, query_role, kb_lib::ExApiExecutionCluster::Devnet, @@ -806,7 +806,7 @@ async fn validate_post_state_with_retries( match result { std::result::Result::Ok(report) if report.status - == crate::SplAssociatedTokenAccountStatefulReadinessStatus::Ready + == kb_pipeline::SplAssociatedTokenAccountStatefulReadinessStatus::Ready || retry >= maximum_retries => { return std::result::Result::Ok(report); @@ -834,7 +834,7 @@ async fn replay_program( decoders: &[std::sync::Arc], materializers: &[std::sync::Arc], observer: &O, -) -> kb_core::Result +) -> kb_core::Result where S: kb_store::DecodePipelineStore + Sync, O: crate::SolanaExecutionObserver, @@ -860,13 +860,13 @@ where std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), }; - return crate::execute_decode_replay( + return kb_pipeline::execute_decode_replay( store, - &crate::DecodeReplayRequest { - campaign_id: crate::new_decode_campaign_id(), + &kb_pipeline::DecodeReplayRequest { + campaign_id: kb_pipeline::new_decode_campaign_id(), selection, decoder_names: std::vec::Vec::new(), - dispatch_policy: crate::DecodeDispatchPolicy::HighestPriority, + dispatch_policy: kb_pipeline::DecodeDispatchPolicy::HighestPriority, max_concurrent_inputs: 1, force_replay: if include_materialized_state { false @@ -883,7 +883,7 @@ where .await; } -fn decode_completed(summary: &crate::DecodeReplaySummary) -> bool { +fn decode_completed(summary: &kb_pipeline::DecodeReplaySummary) -> bool { return summary.failed_inputs == 0 && summary.unmatched == 0 && !summary.cancelled @@ -904,20 +904,22 @@ async fn hydrate_signature( post_validation_max_retries: u32, observer: &O, signature: &kb_lib::MdSignature, -) -> kb_core::Result +) -> kb_core::Result where S: kb_store::RawTransactionStore + Sync, O: crate::SolanaExecutionObserver, { let mut retry = 0_u32; loop { - let result = match crate::execute_http_backfill( + let result = match kb_pipeline::execute_http_backfill( http_pool, store, - &crate::BackfillRequest { + &kb_pipeline::BackfillRequest { role: query_role.to_string(), commitment: "confirmed".to_string(), - source: crate::BackfillSource::ExplicitSignatures(std::vec![signature.0.clone()]), + source: kb_pipeline::BackfillSource::ExplicitSignatures(std::vec![ + signature.0.clone() + ]), page_size: 1, max_pages: 1, max_concurrent_requests: 1, @@ -945,7 +947,7 @@ where } } -fn canonical_available(summary: &crate::BackfillSummary) -> bool { +fn canonical_available(summary: &kb_pipeline::BackfillSummary) -> bool { return summary.failed == 0 && summary.missing == 0 && summary.candidates_completed == 1 @@ -1156,7 +1158,7 @@ mod tests { .unwrap_or_else(|error| panic!("Devnet ATA execution failed: {error}")); assert_eq!( summary.stateful_readiness.status, - crate::SplAssociatedTokenAccountStatefulReadinessStatus::Ready + kb_pipeline::SplAssociatedTokenAccountStatefulReadinessStatus::Ready ); assert!(summary.simulation.success, "{:?}", summary.simulation.error); if submit { diff --git a/kb-pipeline/src/solana_execution.rs b/kb-pipeline-demo-scenarios/src/solana_execution.rs similarity index 97% rename from kb-pipeline/src/solana_execution.rs rename to kb-pipeline-demo-scenarios/src/solana_execution.rs index 1236d75..c06377b 100644 --- a/kb-pipeline/src/solana_execution.rs +++ b/kb-pipeline-demo-scenarios/src/solana_execution.rs @@ -1,5 +1,5 @@ -// file: kb-pipeline/src/solana_execution.rs -// version: 6 +// file: kb-pipeline-demo-scenarios/src/solana_execution.rs +// version: 7 //! Devnet Solana execution orchestration with canonical post-validation. @@ -62,7 +62,10 @@ impl crate::SolanaExecutionProgressEvent { /// Composite observer used by execution, backfill, extraction and decode replay. pub trait SolanaExecutionObserver: - crate::BackfillObserver + crate::CoreExtractionObserver + crate::DecodeReplayObserver + Sync + kb_pipeline::BackfillObserver + + kb_pipeline::CoreExtractionObserver + + kb_pipeline::DecodeReplayObserver + + Sync { /// Receives one execution-specific progress event. fn on_execution_progress(&self, event: &crate::SolanaExecutionProgressEvent); @@ -74,8 +77,8 @@ pub trait SolanaExecutionObserver: #[derive(Clone, Copy, Debug, Default)] pub struct NoopSolanaExecutionObserver; -impl crate::BackfillObserver for crate::NoopSolanaExecutionObserver { - fn on_progress(&self, _event: &crate::BackfillProgressEvent) { +impl kb_pipeline::BackfillObserver for crate::NoopSolanaExecutionObserver { + fn on_progress(&self, _event: &kb_pipeline::BackfillProgressEvent) { return; } @@ -84,8 +87,8 @@ impl crate::BackfillObserver for crate::NoopSolanaExecutionObserver { } } -impl crate::CoreExtractionObserver for crate::NoopSolanaExecutionObserver { - fn on_progress(&self, _event: &crate::CoreExtractionProgressEvent) { +impl kb_pipeline::CoreExtractionObserver for crate::NoopSolanaExecutionObserver { + fn on_progress(&self, _event: &kb_pipeline::CoreExtractionProgressEvent) { return; } @@ -94,8 +97,8 @@ impl crate::CoreExtractionObserver for crate::NoopSolanaExecutionObserver { } } -impl crate::DecodeReplayObserver for crate::NoopSolanaExecutionObserver { - fn on_progress(&self, _event: &crate::DecodeReplayProgressEvent) { +impl kb_pipeline::DecodeReplayObserver for crate::NoopSolanaExecutionObserver { + fn on_progress(&self, _event: &kb_pipeline::DecodeReplayProgressEvent) { return; } @@ -236,11 +239,11 @@ pub struct DevnetSystemTransferSummary { /// Confirmation result when the transaction was submitted. pub confirmation: std::option::Option, /// Canonical hydration result after an observed transaction reached a terminal status. - pub backfill: std::option::Option, + pub backfill: std::option::Option, /// Core extraction result for the exact signature. - pub core_extraction: std::option::Option, + pub core_extraction: std::option::Option, /// Contextual decode result for the exact signature. - pub decode_replay: std::option::Option, + pub decode_replay: std::option::Option, /// Aggregated post-execution validation diagnostic. pub post_execution: std::option::Option, } @@ -676,14 +679,14 @@ where summary.post_execution = std::option::Option::Some(post_execution); return std::result::Result::Ok(summary); } - let extraction_request = crate::CoreExtractionRequest { - source: crate::CoreExtractionSource::Signatures(std::vec![signature.0.clone()]), + let extraction_request = kb_pipeline::CoreExtractionRequest { + source: kb_pipeline::CoreExtractionSource::Signatures(std::vec![signature.0.clone()]), limit: 1, max_concurrent_extractions: 1, force_replay: request.force_post_validation_replay, }; let extraction = - match crate::execute_core_extraction(store, &extraction_request, observer).await { + match kb_pipeline::execute_core_extraction(store, &extraction_request, observer).await { std::result::Result::Ok(value) => value, std::result::Result::Err(error) => { post_execution @@ -735,17 +738,17 @@ where return std::result::Result::Ok(summary); }, }; - let decode_request = crate::DecodeReplayRequest { - campaign_id: crate::new_decode_campaign_id(), + let decode_request = kb_pipeline::DecodeReplayRequest { + campaign_id: kb_pipeline::new_decode_campaign_id(), selection, decoder_names: std::vec::Vec::new(), - dispatch_policy: crate::DecodeDispatchPolicy::HighestPriority, + dispatch_policy: kb_pipeline::DecodeDispatchPolicy::HighestPriority, max_concurrent_inputs: 1, force_replay: request.force_post_validation_replay, force_replay_all_matching: false, materialize_after_decode: request.materialize_after_decode, }; - let decode = match crate::execute_decode_replay( + let decode = match kb_pipeline::execute_decode_replay( store, &decode_request, decoders, @@ -831,24 +834,25 @@ async fn execute_post_validation_backfill( request: &crate::DevnetSystemTransferRequest, observer: &O, signature: &kb_lib::MdSignature, -) -> kb_core::Result +) -> kb_core::Result where S: kb_store::RawTransactionStore + Sync, O: crate::SolanaExecutionObserver, { let mut retry_index = 0_u32; loop { - let backfill_request = crate::BackfillRequest { + let backfill_request = kb_pipeline::BackfillRequest { role: request.query_role.clone(), commitment: "confirmed".to_string(), - source: crate::BackfillSource::ExplicitSignatures(std::vec![signature.0.clone()]), + source: kb_pipeline::BackfillSource::ExplicitSignatures(std::vec![signature.0.clone()]), page_size: 1, max_pages: 1, max_concurrent_requests: 1, max_retries: 0, }; let backfill = - match crate::execute_http_backfill(http_pool, store, &backfill_request, observer).await + match kb_pipeline::execute_http_backfill(http_pool, store, &backfill_request, observer) + .await { std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), @@ -875,7 +879,7 @@ where } } -fn canonical_backfill_available(summary: &crate::BackfillSummary) -> bool { +fn canonical_backfill_available(summary: &kb_pipeline::BackfillSummary) -> bool { return summary.failed == 0 && summary.missing == 0 && summary.candidates_completed == 1 diff --git a/kb-pipeline/src/solana_memo_execution.rs b/kb-pipeline-demo-scenarios/src/solana_memo_execution.rs similarity index 96% rename from kb-pipeline/src/solana_memo_execution.rs rename to kb-pipeline-demo-scenarios/src/solana_memo_execution.rs index 5ab7e4a..a37c2ca 100644 --- a/kb-pipeline/src/solana_memo_execution.rs +++ b/kb-pipeline-demo-scenarios/src/solana_memo_execution.rs @@ -1,5 +1,5 @@ -// file: kb-pipeline/src/solana_memo_execution.rs -// version: 1 +// file: kb-pipeline-demo-scenarios/src/solana_memo_execution.rs +// version: 2 //! Devnet SPL Memo v4 execution with canonical post-validation. @@ -99,13 +99,13 @@ pub struct DevnetMemoExecutionSummary { /// Confirmation result when submitted. pub confirmation: std::option::Option, /// Canonical hydration result for the exact signature. - pub backfill: std::option::Option, + pub backfill: std::option::Option, /// Core extraction result for the exact signature. - pub core_extraction: std::option::Option, + pub core_extraction: std::option::Option, /// First Memo decode and materialization replay. - pub decode_replay: std::option::Option, + pub decode_replay: std::option::Option, /// Second replay proving that the same decoder version and input are idempotent. - pub idempotence_replay: std::option::Option, + pub idempotence_replay: std::option::Option, /// Exact persisted transaction annotation rows for the submitted signature. pub annotations: std::vec::Vec, /// Aggregated post-execution validation diagnostic. @@ -415,10 +415,10 @@ where summary.post_execution = std::option::Option::Some(diagnostic); return std::result::Result::Ok(summary); } - let extraction = match crate::execute_core_extraction( + let extraction = match kb_pipeline::execute_core_extraction( store, - &crate::CoreExtractionRequest { - source: crate::CoreExtractionSource::Signatures(std::vec![signature.0.clone()]), + &kb_pipeline::CoreExtractionRequest { + source: kb_pipeline::CoreExtractionSource::Signatures(std::vec![signature.0.clone()]), limit: 1, max_concurrent_extractions: 1, force_replay: request.force_post_validation_replay, @@ -621,20 +621,22 @@ async fn hydrate_signature( request: &crate::DevnetMemoExecutionRequest, observer: &O, signature: &kb_lib::MdSignature, -) -> kb_core::Result +) -> kb_core::Result where S: kb_store::RawTransactionStore + Sync, O: crate::SolanaExecutionObserver, { let mut retry = 0_u32; loop { - let result = match crate::execute_http_backfill( + let result = match kb_pipeline::execute_http_backfill( http_pool, store, - &crate::BackfillRequest { + &kb_pipeline::BackfillRequest { role: request.query_role.clone(), commitment: "confirmed".to_string(), - source: crate::BackfillSource::ExplicitSignatures(std::vec![signature.0.clone()]), + source: kb_pipeline::BackfillSource::ExplicitSignatures(std::vec![ + signature.0.clone() + ]), page_size: 1, max_pages: 1, max_concurrent_requests: 1, @@ -662,7 +664,7 @@ where } } -fn canonical_available(summary: &crate::BackfillSummary) -> bool { +fn canonical_available(summary: &kb_pipeline::BackfillSummary) -> bool { return summary.failed == 0 && summary.missing == 0 && summary.candidates_completed == 1 @@ -683,7 +685,7 @@ async fn replay_memo( decoders: &[std::sync::Arc], materializers: &[std::sync::Arc], observer: &O, -) -> kb_core::Result +) -> kb_core::Result where S: kb_store::DecodePipelineStore + Sync, O: crate::SolanaExecutionObserver, @@ -709,13 +711,13 @@ where std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), }; - return crate::execute_decode_replay( + return kb_pipeline::execute_decode_replay( store, - &crate::DecodeReplayRequest { - campaign_id: crate::new_decode_campaign_id(), + &kb_pipeline::DecodeReplayRequest { + campaign_id: kb_pipeline::new_decode_campaign_id(), selection, decoder_names: std::vec::Vec::new(), - dispatch_policy: crate::DecodeDispatchPolicy::HighestPriority, + dispatch_policy: kb_pipeline::DecodeDispatchPolicy::HighestPriority, max_concurrent_inputs: 1, force_replay: if include_materialized_state { false @@ -732,7 +734,7 @@ where .await; } -fn decode_completed(summary: &crate::DecodeReplaySummary) -> bool { +fn decode_completed(summary: &kb_pipeline::DecodeReplaySummary) -> bool { return summary.failed_inputs == 0 && summary.unmatched == 0 && !summary.cancelled diff --git a/kb-pipeline/src/solana_token2022_devnet_execution.rs b/kb-pipeline-demo-scenarios/src/solana_token2022_devnet_execution.rs similarity index 95% rename from kb-pipeline/src/solana_token2022_devnet_execution.rs rename to kb-pipeline-demo-scenarios/src/solana_token2022_devnet_execution.rs index 1ff6787..d253186 100644 --- a/kb-pipeline/src/solana_token2022_devnet_execution.rs +++ b/kb-pipeline-demo-scenarios/src/solana_token2022_devnet_execution.rs @@ -1,5 +1,5 @@ -// file: kb-pipeline/src/solana_token2022_devnet_execution.rs -// version: 1 +// file: kb-pipeline-demo-scenarios/src/solana_token2022_devnet_execution.rs +// version: 2 //! Devnet Token-2022 execution with stateful and canonical post-validation. @@ -77,7 +77,7 @@ pub struct DevnetSplToken2022ExecutionSummary { /// Wallet balance observed before planning. pub balance_lamports: u64, /// Stateful readiness report produced before plan simulation. - pub stateful_preflight: crate::Token2022PreflightReport, + pub stateful_preflight: kb_pipeline::Token2022PreflightReport, /// Exact prepared Token plan. pub plan: kb_lib::ExApiPreparedExecutionPlan, /// Recent blockhash used by the exact transaction. @@ -91,13 +91,13 @@ pub struct DevnetSplToken2022ExecutionSummary { /// Confirmation result when submitted. pub confirmation: std::option::Option, /// Canonical hydration result for the exact signature. - pub backfill: std::option::Option, + pub backfill: std::option::Option, /// Core extraction result for the exact signature. - pub core_extraction: std::option::Option, + pub core_extraction: std::option::Option, /// First Token decode and materialization replay. - pub decode_replay: std::option::Option, + pub decode_replay: std::option::Option, /// Second replay proving idempotence for the same decoder version and input. - pub idempotence_replay: std::option::Option, + pub idempotence_replay: std::option::Option, /// Exact materialized rows produced for the submitted Token transaction. pub materializations: std::vec::Vec, /// Aggregated post-execution validation diagnostic. @@ -297,10 +297,10 @@ where summary.post_execution = std::option::Option::Some(diagnostic); return std::result::Result::Ok(summary); } - let extraction = match crate::execute_core_extraction( + let extraction = match kb_pipeline::execute_core_extraction( store, - &crate::CoreExtractionRequest { - source: crate::CoreExtractionSource::Signatures(std::vec![signature.0.clone()]), + &kb_pipeline::CoreExtractionRequest { + source: kb_pipeline::CoreExtractionSource::Signatures(std::vec![signature.0.clone()]), limit: 1, max_concurrent_extractions: 1, force_replay: request.force_post_validation_replay, @@ -462,10 +462,11 @@ where std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), }; - let readiness = match crate::inspect_token2022_preflight(http_pool, &preflight_request).await { - std::result::Result::Ok(value) => value, - std::result::Result::Err(error) => return std::result::Result::Err(error), - }; + let readiness = + match kb_pipeline::inspect_token2022_preflight(http_pool, &preflight_request).await { + std::result::Result::Ok(value) => value, + std::result::Result::Err(error) => return std::result::Result::Err(error), + }; let wallet = match crate::load_profile_wallet(profile, workspace_root).await { std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), @@ -617,7 +618,7 @@ where fn preflight_request( request: &crate::DevnetSplToken2022ExecutionRequest, -) -> kb_core::Result { +) -> kb_core::Result { let operation = match &request.operation { kb_lib::ExSplToken2022Operation::Instruction { value } => value.as_ref(), kb_lib::ExSplToken2022Operation::Batch { instructions: _ } => { @@ -756,11 +757,11 @@ fn preflight_request( )); }, } - return std::result::Result::Ok(crate::Token2022PreflightRequest { + return std::result::Result::Ok(kb_pipeline::Token2022PreflightRequest { query_role: request.query_role.clone(), min_context_slot: std::option::Option::None, - max_accounts: crate::MAX_TOKEN2022_PREFLIGHT_ACCOUNTS, - max_total_data_bytes: crate::MAX_TOKEN2022_PREFLIGHT_TOTAL_BYTES, + max_accounts: kb_pipeline::MAX_TOKEN2022_PREFLIGHT_ACCOUNTS, + max_total_data_bytes: kb_pipeline::MAX_TOKEN2022_PREFLIGHT_TOTAL_BYTES, requirements, elgamal_registry: std::option::Option::None, }); @@ -780,8 +781,8 @@ fn mint_requirement( role: &str, mint: &kb_lib::MdPubkey, decimals: std::option::Option, -) -> crate::Token2022PreflightRequirement { - return crate::Token2022PreflightRequirement { +) -> kb_pipeline::Token2022PreflightRequirement { + return kb_pipeline::Token2022PreflightRequirement { role: role.to_string(), account: mint.clone(), kind: kb_lib::DcToken2022StateKind::Mint, @@ -790,7 +791,7 @@ fn mint_requirement( expected_owner: std::option::Option::None, expected_decimals: decimals, required_extensions: std::vec::Vec::new(), - context: crate::Token2022StatefulContext::default(), + context: kb_pipeline::Token2022StatefulContext::default(), }; } @@ -799,8 +800,8 @@ fn account_requirement( account: &kb_lib::MdPubkey, mint: &kb_lib::MdPubkey, owner: std::option::Option, -) -> crate::Token2022PreflightRequirement { - return crate::Token2022PreflightRequirement { +) -> kb_pipeline::Token2022PreflightRequirement { + return kb_pipeline::Token2022PreflightRequirement { role: role.to_string(), account: account.clone(), kind: kb_lib::DcToken2022StateKind::Account, @@ -809,7 +810,7 @@ fn account_requirement( expected_owner: owner, expected_decimals: std::option::Option::None, required_extensions: std::vec::Vec::new(), - context: crate::Token2022StatefulContext::default(), + context: kb_pipeline::Token2022StatefulContext::default(), }; } diff --git a/kb-pipeline/src/solana_token2022_devnet_scenarios.rs b/kb-pipeline-demo-scenarios/src/solana_token2022_devnet_scenarios.rs similarity index 98% rename from kb-pipeline/src/solana_token2022_devnet_scenarios.rs rename to kb-pipeline-demo-scenarios/src/solana_token2022_devnet_scenarios.rs index a0a805e..724767a 100644 --- a/kb-pipeline/src/solana_token2022_devnet_scenarios.rs +++ b/kb-pipeline-demo-scenarios/src/solana_token2022_devnet_scenarios.rs @@ -1,5 +1,5 @@ -// file: kb-pipeline/src/solana_token2022_devnet_scenarios.rs -// version: 4 +// file: kb-pipeline-demo-scenarios/src/solana_token2022_devnet_scenarios.rs +// version: 5 //! Stable Devnet validation scenarios required to close milestone 0.4.6. diff --git a/kb-pipeline/src/solana_token2022_validation.rs b/kb-pipeline-demo-scenarios/src/solana_token2022_validation.rs similarity index 99% rename from kb-pipeline/src/solana_token2022_validation.rs rename to kb-pipeline-demo-scenarios/src/solana_token2022_validation.rs index c92872a..b55270c 100644 --- a/kb-pipeline/src/solana_token2022_validation.rs +++ b/kb-pipeline-demo-scenarios/src/solana_token2022_validation.rs @@ -1,5 +1,5 @@ -// file: kb-pipeline/src/solana_token2022_validation.rs -// version: 4 +// file: kb-pipeline-demo-scenarios/src/solana_token2022_validation.rs +// version: 5 //! Machine-readable validation evidence contract for the Token-2022 milestone. diff --git a/kb-pipeline/src/solana_token_execution.rs b/kb-pipeline-demo-scenarios/src/solana_token_execution.rs similarity index 96% rename from kb-pipeline/src/solana_token_execution.rs rename to kb-pipeline-demo-scenarios/src/solana_token_execution.rs index ed1bec5..1abf8ff 100644 --- a/kb-pipeline/src/solana_token_execution.rs +++ b/kb-pipeline-demo-scenarios/src/solana_token_execution.rs @@ -1,5 +1,5 @@ -// file: kb-pipeline/src/solana_token_execution.rs -// version: 5 +// file: kb-pipeline-demo-scenarios/src/solana_token_execution.rs +// version: 6 //! Devnet classic SPL Token execution with stateful and canonical post-validation. @@ -77,7 +77,7 @@ pub struct DevnetSplTokenExecutionSummary { /// Wallet balance observed before planning. pub balance_lamports: u64, /// Stateful readiness report produced before plan simulation. - pub stateful_readiness: crate::SplTokenStatefulReadinessReport, + pub stateful_readiness: kb_pipeline::SplTokenStatefulReadinessReport, /// Exact prepared Token plan. pub plan: kb_lib::ExApiPreparedExecutionPlan, /// Recent blockhash used by the exact transaction. @@ -91,13 +91,13 @@ pub struct DevnetSplTokenExecutionSummary { /// Confirmation result when submitted. pub confirmation: std::option::Option, /// Canonical hydration result for the exact signature. - pub backfill: std::option::Option, + pub backfill: std::option::Option, /// Core extraction result for the exact signature. - pub core_extraction: std::option::Option, + pub core_extraction: std::option::Option, /// First Token decode and materialization replay. - pub decode_replay: std::option::Option, + pub decode_replay: std::option::Option, /// Second replay proving idempotence for the same decoder version and input. - pub idempotence_replay: std::option::Option, + pub idempotence_replay: std::option::Option, /// Exact materialized rows produced for the submitted Token transaction. pub materializations: std::vec::Vec, /// Aggregated post-execution validation diagnostic. @@ -297,10 +297,10 @@ where summary.post_execution = std::option::Option::Some(diagnostic); return std::result::Result::Ok(summary); } - let extraction = match crate::execute_core_extraction( + let extraction = match kb_pipeline::execute_core_extraction( store, - &crate::CoreExtractionRequest { - source: crate::CoreExtractionSource::Signatures(std::vec![signature.0.clone()]), + &kb_pipeline::CoreExtractionRequest { + source: kb_pipeline::CoreExtractionSource::Signatures(std::vec![signature.0.clone()]), limit: 1, max_concurrent_extractions: 1, force_replay: request.force_post_validation_replay, @@ -458,9 +458,9 @@ where ), )); } - let readiness = match crate::inspect_spl_token_stateful_readiness( + let readiness = match kb_pipeline::inspect_spl_token_stateful_readiness( http_pool, - &crate::SplTokenStatefulReadinessRequest { + &kb_pipeline::SplTokenStatefulReadinessRequest { query_role: request.query_role.clone(), cluster: kb_lib::ExApiExecutionCluster::Devnet, operation: request.operation.clone(), @@ -471,7 +471,7 @@ where std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), }; - if readiness.status != crate::SplTokenStatefulReadinessStatus::Ready { + if readiness.status != kb_pipeline::SplTokenStatefulReadinessStatus::Ready { return std::result::Result::Err(kb_core::Error::new( "execution_spl_token_stateful_blocked", failed_readiness_message(&readiness), @@ -800,7 +800,7 @@ fn single_requires_materialization(operation: &kb_lib::ExSplClassicTokenSingleOp } fn failed_readiness_message( - readiness: &crate::SplTokenStatefulReadinessReport, + readiness: &kb_pipeline::SplTokenStatefulReadinessReport, ) -> std::string::String { let failures = readiness .checks @@ -840,20 +840,22 @@ pub(crate) async fn hydrate_signature( post_validation_max_retries: u32, observer: &O, signature: &kb_lib::MdSignature, -) -> kb_core::Result +) -> kb_core::Result where S: kb_store::RawTransactionStore + Sync, O: crate::SolanaExecutionObserver, { let mut retry = 0_u32; loop { - let result = match crate::execute_http_backfill( + let result = match kb_pipeline::execute_http_backfill( http_pool, store, - &crate::BackfillRequest { + &kb_pipeline::BackfillRequest { role: query_role.to_string(), commitment: "confirmed".to_string(), - source: crate::BackfillSource::ExplicitSignatures(std::vec![signature.0.clone()]), + source: kb_pipeline::BackfillSource::ExplicitSignatures(std::vec![ + signature.0.clone() + ]), page_size: 1, max_pages: 1, max_concurrent_requests: 1, @@ -881,7 +883,7 @@ where } } -pub(crate) fn canonical_available(summary: &crate::BackfillSummary) -> bool { +pub(crate) fn canonical_available(summary: &kb_pipeline::BackfillSummary) -> bool { return summary.failed == 0 && summary.missing == 0 && summary.candidates_completed == 1 @@ -903,7 +905,7 @@ pub(crate) async fn replay_program( decoders: &[std::sync::Arc], materializers: &[std::sync::Arc], observer: &O, -) -> kb_core::Result +) -> kb_core::Result where S: kb_store::DecodePipelineStore + Sync, O: crate::SolanaExecutionObserver, @@ -929,13 +931,13 @@ where std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), }; - return crate::execute_decode_replay( + return kb_pipeline::execute_decode_replay( store, - &crate::DecodeReplayRequest { - campaign_id: crate::new_decode_campaign_id(), + &kb_pipeline::DecodeReplayRequest { + campaign_id: kb_pipeline::new_decode_campaign_id(), selection, decoder_names: std::vec::Vec::new(), - dispatch_policy: crate::DecodeDispatchPolicy::HighestPriority, + dispatch_policy: kb_pipeline::DecodeDispatchPolicy::HighestPriority, max_concurrent_inputs: 1, force_replay: if include_materialized_state { false @@ -952,7 +954,7 @@ where .await; } -pub(crate) fn decode_completed(summary: &crate::DecodeReplaySummary) -> bool { +pub(crate) fn decode_completed(summary: &kb_pipeline::DecodeReplaySummary) -> bool { return summary.failed_inputs == 0 && summary.unmatched == 0 && !summary.cancelled @@ -1133,7 +1135,7 @@ mod tests { }; assert_eq!( summary.stateful_readiness.status, - crate::SplTokenStatefulReadinessStatus::Ready + kb_pipeline::SplTokenStatefulReadinessStatus::Ready ); assert!(summary.simulation.success, "{:#?}", summary.simulation); return; diff --git a/kb-pipeline/src/solana_token_lifecycle.rs b/kb-pipeline-demo-scenarios/src/solana_token_lifecycle.rs similarity index 98% rename from kb-pipeline/src/solana_token_lifecycle.rs rename to kb-pipeline-demo-scenarios/src/solana_token_lifecycle.rs index 0809b58..a5287fa 100644 --- a/kb-pipeline/src/solana_token_lifecycle.rs +++ b/kb-pipeline-demo-scenarios/src/solana_token_lifecycle.rs @@ -1,5 +1,5 @@ -// file: kb-pipeline/src/solana_token_lifecycle.rs -// version: 4 +// file: kb-pipeline-demo-scenarios/src/solana_token_lifecycle.rs +// version: 5 //! Controlled Devnet lifecycle for freshly prepared classic SPL Token accounts. @@ -616,10 +616,10 @@ where "confirmed lifecycle predecessor is unavailable for canonical recovery", )); } - let extraction = match crate::execute_core_extraction( + let extraction = match kb_pipeline::execute_core_extraction( store, - &crate::CoreExtractionRequest { - source: crate::CoreExtractionSource::Signatures(std::vec![signature.0.clone()]), + &kb_pipeline::CoreExtractionRequest { + source: kb_pipeline::CoreExtractionSource::Signatures(std::vec![signature.0.clone()]), limit: 1, max_concurrent_extractions: 1, force_replay: false, @@ -1308,8 +1308,8 @@ fn incomplete_step(index: usize, operation_code: &str, stage: &str) -> kb_core:: mod tests { struct LifecycleTestObserver; - impl crate::BackfillObserver for LifecycleTestObserver { - fn on_progress(&self, _event: &crate::BackfillProgressEvent) { + impl kb_pipeline::BackfillObserver for LifecycleTestObserver { + fn on_progress(&self, _event: &kb_pipeline::BackfillProgressEvent) { return; } @@ -1318,8 +1318,8 @@ mod tests { } } - impl crate::CoreExtractionObserver for LifecycleTestObserver { - fn on_progress(&self, _event: &crate::CoreExtractionProgressEvent) { + impl kb_pipeline::CoreExtractionObserver for LifecycleTestObserver { + fn on_progress(&self, _event: &kb_pipeline::CoreExtractionProgressEvent) { return; } @@ -1328,8 +1328,8 @@ mod tests { } } - impl crate::DecodeReplayObserver for LifecycleTestObserver { - fn on_progress(&self, _event: &crate::DecodeReplayProgressEvent) { + impl kb_pipeline::DecodeReplayObserver for LifecycleTestObserver { + fn on_progress(&self, _event: &kb_pipeline::DecodeReplayProgressEvent) { return; } diff --git a/kb-pipeline/Cargo.toml b/kb-pipeline/Cargo.toml index 1dae74b..3b54456 100644 --- a/kb-pipeline/Cargo.toml +++ b/kb-pipeline/Cargo.toml @@ -1,5 +1,5 @@ # file: kb-pipeline/Cargo.toml -# version: 12 +# version: 13 [package] name = "kb-pipeline" @@ -19,7 +19,6 @@ kb-lib = { path = "../kb-lib" } kb-onchain-transport = { path = "../kb-onchain-transport" } kb-program-ids = { path = "../kb-program-ids" } kb-store = { path = "../kb-store" } -kb-wallet = { path = "../kb-wallet" } serde.workspace = true serde_json.workspace = true solana-address-lookup-table-interface.workspace = true diff --git a/kb-pipeline/src/lib.rs b/kb-pipeline/src/lib.rs index 21b6254..193b035 100644 --- a/kb-pipeline/src/lib.rs +++ b/kb-pipeline/src/lib.rs @@ -1,5 +1,5 @@ // file: kb-pipeline/src/lib.rs -// version: 15 +// version: 16 #![forbid(unsafe_code)] #![deny(unreachable_pub)] @@ -12,36 +12,17 @@ mod constants; mod core_extraction; mod decode_replay; mod plan; -mod solana_ata_execution; mod solana_ata_stateful; mod solana_elgamal_registry_stateful; -mod solana_execution; -mod solana_memo_execution; mod solana_stateful; mod solana_token2022_correlation; mod solana_token2022_crypto_preflight; -mod solana_token2022_devnet_execution; -mod solana_token2022_devnet_scenarios; mod solana_token2022_execution_orchestration; mod solana_token2022_preflight; mod solana_token2022_proof_orchestration; mod solana_token2022_stateful; -mod solana_token2022_validation; -mod solana_token_execution; -mod solana_token_lifecycle; mod solana_token_stateful; -/// Emits one execution progress event for specialized pipeline orchestrators. -pub(crate) use self::solana_execution::emit; -/// Rejects one execution stage when the observer reports cancellation. -pub(crate) use self::solana_execution::ensure_not_cancelled; -/// Loads the persistent wallet configured by one execution profile. -pub(crate) use self::solana_execution::load_profile_wallet; -/// Formats one failed simulation without discarding runtime diagnostics. -pub(crate) use self::solana_execution::simulation_failure_message; -/// Formats safety violations for one denied execution plan. -pub(crate) use self::solana_execution::violation_message; - /// Address category used by one targeted backfill campaign. pub use self::backfill::BackfillAddressKind; /// Chronological direction relative to one anchor signature. @@ -110,14 +91,6 @@ pub use self::decode_replay::new_decode_campaign_id; pub use self::plan::PipelineStage; /// Replay selection scope. pub use self::plan::ReplayScope; -/// Complete request for one Devnet Associated Token Account execution. -pub use self::solana_ata_execution::DevnetSplAssociatedTokenAccountExecutionRequest; -/// Complete result of one Devnet Associated Token Account execution. -pub use self::solana_ata_execution::DevnetSplAssociatedTokenAccountExecutionSummary; -/// Executes one Devnet Associated Token Account simulation or authorized submission. -pub use self::solana_ata_execution::execute_devnet_spl_associated_token_account; -/// Simulates one Devnet Associated Token Account operation after stateful preflight. -pub use self::solana_ata_execution::simulate_devnet_spl_associated_token_account; /// Stateful invariants observed after one confirmed Associated Token Account execution. pub use self::solana_ata_stateful::SplAssociatedTokenAccountPostExecutionReport; /// One machine-readable Associated Token Account stateful check. @@ -148,26 +121,6 @@ pub use self::solana_elgamal_registry_stateful::materialize_elgamal_registry_acc pub use self::solana_elgamal_registry_stateful::materialize_elgamal_registry_stateful_snapshot; /// Migrated read_elgamal_registry_stateful_snapshot contract. pub use self::solana_elgamal_registry_stateful::read_elgamal_registry_stateful_snapshot; -/// Complete request for one bounded System Program transfer on Devnet. -pub use self::solana_execution::DevnetSystemTransferRequest; -/// Summary returned by one bounded System Program transfer execution. -pub use self::solana_execution::DevnetSystemTransferSummary; -/// No-op observer suitable for CLI tools and opt-in integration tests. -pub use self::solana_execution::NoopSolanaExecutionObserver; -/// Observer notified during Solana execution orchestration. -pub use self::solana_execution::SolanaExecutionObserver; -/// Progress event emitted by Solana execution orchestration. -pub use self::solana_execution::SolanaExecutionProgressEvent; -/// Severity of one Solana execution progress event. -pub use self::solana_execution::SolanaExecutionProgressLevel; -/// Executes one bounded System Program transfer on Devnet. -pub use self::solana_execution::execute_devnet_system_transfer; -/// Complete request for one SPL Memo v4 Devnet execution. -pub use self::solana_memo_execution::DevnetMemoExecutionRequest; -/// Complete result of one SPL Memo v4 Devnet execution and post-validation. -pub use self::solana_memo_execution::DevnetMemoExecutionSummary; -/// Executes one SPL Memo v4 Devnet simulation or explicitly authorized submission. -pub use self::solana_memo_execution::execute_devnet_memo; /// One machine-readable native Solana stateful readiness check. pub use self::solana_stateful::SolanaCoreStatefulCheck; /// One contextual fact measured during native Solana stateful readiness. @@ -180,38 +133,6 @@ pub use self::solana_stateful::SolanaCoreStatefulReadinessRequest; pub use self::solana_stateful::SolanaCoreStatefulReadinessStatus; /// Inspects state required before simulating one native Solana operation. pub use self::solana_stateful::inspect_solana_core_stateful_readiness; -/// Complete request for one Devnet classic SPL Token execution. -pub use self::solana_token_execution::DevnetSplTokenExecutionRequest; -/// Complete result of one Devnet classic SPL Token execution. -pub use self::solana_token_execution::DevnetSplTokenExecutionSummary; -/// Canonical hydration availability helper shared by Token lifecycle orchestration. -pub(crate) use self::solana_token_execution::canonical_available; -/// Decode completion helper shared by Token lifecycle orchestration. -pub(crate) use self::solana_token_execution::decode_completed; -/// Executes one Devnet classic SPL Token simulation or authorized submission. -pub use self::solana_token_execution::execute_devnet_spl_token; -/// Canonical signature hydration helper shared by Token lifecycle orchestration. -pub(crate) use self::solana_token_execution::hydrate_signature; -/// Targeted program replay helper shared by Token lifecycle orchestration. -pub(crate) use self::solana_token_execution::replay_program; -/// Simulates one Devnet classic SPL Token operation after stateful preflight. -pub use self::solana_token_execution::simulate_devnet_spl_token; -/// Complete request to prepare raw accounts for one Devnet SPL Token lifecycle. -pub use self::solana_token_lifecycle::DevnetSplTokenLifecyclePreparationRequest; -/// One prepared raw account step. -pub use self::solana_token_lifecycle::DevnetSplTokenLifecyclePreparationStep; -/// Summary of raw-account preparation for one lifecycle. -pub use self::solana_token_lifecycle::DevnetSplTokenLifecyclePreparationSummary; -/// Complete request for one controlled Devnet SPL Token lifecycle. -pub use self::solana_token_lifecycle::DevnetSplTokenLifecycleRequest; -/// Summary of one lifecycle operation step. -pub use self::solana_token_lifecycle::DevnetSplTokenLifecycleStepSummary; -/// Complete controlled lifecycle summary. -pub use self::solana_token_lifecycle::DevnetSplTokenLifecycleSummary; -/// Executes one controlled Devnet SPL Token lifecycle. -pub use self::solana_token_lifecycle::execute_devnet_spl_token_lifecycle; -/// Prepares raw accounts for one controlled Devnet SPL Token lifecycle. -pub use self::solana_token_lifecycle::prepare_devnet_spl_token_lifecycle_accounts; /// One machine-readable classic SPL Token stateful check. pub use self::solana_token_stateful::SplTokenStatefulCheck; /// One contextual classic SPL Token stateful fact. @@ -244,22 +165,6 @@ pub use self::solana_token2022_crypto_preflight::Token2022ProofContextRequiremen pub use self::solana_token2022_crypto_preflight::ZK_PROOF_CONTEXT_META_BYTES; /// Inspects bounded Token-2022 cryptographic proof contexts. pub use self::solana_token2022_crypto_preflight::inspect_token2022_cryptographic_preflight; -/// Complete request for one Devnet Token-2022 execution. -pub use self::solana_token2022_devnet_execution::DevnetSplToken2022ExecutionRequest; -/// Complete result of one Devnet Token-2022 execution. -pub use self::solana_token2022_devnet_execution::DevnetSplToken2022ExecutionSummary; -/// Executes one Devnet Token-2022 simulation or authorized submission. -pub use self::solana_token2022_devnet_execution::execute_devnet_spl_token2022; -/// Simulates one Devnet Token-2022 operation after stateful preflight. -pub use self::solana_token2022_devnet_execution::simulate_devnet_spl_token2022; -/// Stable category of one independent Devnet validation scenario. -pub use self::solana_token2022_devnet_scenarios::DevnetSplValidationFamily; -/// Current implementation status of one Devnet validation scenario. -pub use self::solana_token2022_devnet_scenarios::DevnetSplValidationImplementationStatus; -/// One independent Devnet validation scenario exposed to applications. -pub use self::solana_token2022_devnet_scenarios::DevnetSplValidationScenario; -/// Returns the complete ordered Devnet scenario inventory. -pub use self::solana_token2022_devnet_scenarios::devnet_spl_validation_scenarios; /// Maximum number of distinct signers accepted by one Token-2022 execution envelope. pub use self::solana_token2022_execution_orchestration::MAX_TOKEN2022_EXECUTION_SIGNERS; /// One explicit stateful postcondition retained after Token-2022 execution. @@ -316,28 +221,6 @@ pub use self::solana_token2022_stateful::materialize_token2022_account_info_resu pub use self::solana_token2022_stateful::materialize_token2022_stateful_snapshot; /// Migrated read_token2022_stateful_snapshot contract. pub use self::solana_token2022_stateful::read_token2022_stateful_snapshot; -/// Maximum number of evidence records accepted in one validation report. -pub use self::solana_token2022_validation::MAX_TOKEN2022_VALIDATION_EVIDENCE; -/// Required validation environment for one Token-2022 scenario. -pub use self::solana_token2022_validation::Token2022ValidationEnvironment; -/// One bounded proof attached to a Token-2022 validation scenario. -pub use self::solana_token2022_validation::Token2022ValidationEvidence; -/// Machine-readable Token-2022 validation matrix. -pub use self::solana_token2022_validation::Token2022ValidationMatrix; -/// One scenario declared by the canonical validation matrix. -pub use self::solana_token2022_validation::Token2022ValidationMatrixScenario; -/// Complete bounded Token-2022 validation report. -pub use self::solana_token2022_validation::Token2022ValidationReport; -/// One declared Token-2022 validation scenario and its observed evidence. -pub use self::solana_token2022_validation::Token2022ValidationScenario; -/// Exact status of one Token-2022 validation scenario. -pub use self::solana_token2022_validation::Token2022ValidationStatus; -/// Loads and validates the canonical Token-2022 validation matrix. -pub use self::solana_token2022_validation::load_token2022_validation_matrix; -/// Validates one Token-2022 validation matrix. -pub use self::solana_token2022_validation::validate_token2022_validation_matrix; -/// Validates one bounded Token-2022 milestone report. -pub use self::solana_token2022_validation::validate_token2022_validation_report; /// Canonical tracing target for pipeline orchestration. pub(crate) use self::constants::TRACING_TARGET;