v0.1.0-pre.043

This commit is contained in:
2026-07-25 16:45:59 +02:00
parent 942fa7fef0
commit e2a349c739
14 changed files with 320 additions and 261 deletions

View File

@@ -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",

View File

@@ -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

View File

@@ -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";

View File

@@ -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;

View File

@@ -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<kb_lib::ExApiExecutionConfirmationResult>,
/// Stateful account relationships observed after confirmation.
pub post_state_validation:
std::option::Option<crate::SplAssociatedTokenAccountPostExecutionReport>,
std::option::Option<kb_pipeline::SplAssociatedTokenAccountPostExecutionReport>,
/// Canonical hydration result for the exact signature.
pub backfill: std::option::Option<crate::BackfillSummary>,
pub backfill: std::option::Option<kb_pipeline::BackfillSummary>,
/// Core extraction result for the exact signature.
pub core_extraction: std::option::Option<crate::CoreExtractionSummary>,
pub core_extraction: std::option::Option<kb_pipeline::CoreExtractionSummary>,
/// First Token decode and materialization replay.
pub decode_replay: std::option::Option<crate::DecodeReplaySummary>,
pub decode_replay: std::option::Option<kb_pipeline::DecodeReplaySummary>,
/// Second replay proving idempotence for the same decoder version and input.
pub idempotence_replay: std::option::Option<crate::DecodeReplaySummary>,
pub idempotence_replay: std::option::Option<kb_pipeline::DecodeReplaySummary>,
/// Exact materialized rows produced for the submitted Token transaction.
pub materializations: std::vec::Vec<kb_store::MaterializedEventQueryRow>,
/// 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<crate::SplAssociatedTokenAccountPostExecutionReport> {
) -> kb_core::Result<kb_pipeline::SplAssociatedTokenAccountPostExecutionReport> {
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<S, O>(
decoders: &[std::sync::Arc<dyn kb_lib::DcApiInstructionDecoder>],
materializers: &[std::sync::Arc<dyn kb_lib::MtApiEventMaterializer>],
observer: &O,
) -> kb_core::Result<crate::DecodeReplaySummary>
) -> kb_core::Result<kb_pipeline::DecodeReplaySummary>
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<S, O>(
post_validation_max_retries: u32,
observer: &O,
signature: &kb_lib::MdSignature,
) -> kb_core::Result<crate::BackfillSummary>
) -> kb_core::Result<kb_pipeline::BackfillSummary>
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 {

View File

@@ -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<kb_lib::ExApiExecutionConfirmationResult>,
/// Canonical hydration result after an observed transaction reached a terminal status.
pub backfill: std::option::Option<crate::BackfillSummary>,
pub backfill: std::option::Option<kb_pipeline::BackfillSummary>,
/// Core extraction result for the exact signature.
pub core_extraction: std::option::Option<crate::CoreExtractionSummary>,
pub core_extraction: std::option::Option<kb_pipeline::CoreExtractionSummary>,
/// Contextual decode result for the exact signature.
pub decode_replay: std::option::Option<crate::DecodeReplaySummary>,
pub decode_replay: std::option::Option<kb_pipeline::DecodeReplaySummary>,
/// Aggregated post-execution validation diagnostic.
pub post_execution: std::option::Option<kb_lib::ExApiPostExecutionDiagnostic>,
}
@@ -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<S, O>(
request: &crate::DevnetSystemTransferRequest,
observer: &O,
signature: &kb_lib::MdSignature,
) -> kb_core::Result<crate::BackfillSummary>
) -> kb_core::Result<kb_pipeline::BackfillSummary>
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

View File

@@ -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<kb_lib::ExApiExecutionConfirmationResult>,
/// Canonical hydration result for the exact signature.
pub backfill: std::option::Option<crate::BackfillSummary>,
pub backfill: std::option::Option<kb_pipeline::BackfillSummary>,
/// Core extraction result for the exact signature.
pub core_extraction: std::option::Option<crate::CoreExtractionSummary>,
pub core_extraction: std::option::Option<kb_pipeline::CoreExtractionSummary>,
/// First Memo decode and materialization replay.
pub decode_replay: std::option::Option<crate::DecodeReplaySummary>,
pub decode_replay: std::option::Option<kb_pipeline::DecodeReplaySummary>,
/// Second replay proving that the same decoder version and input are idempotent.
pub idempotence_replay: std::option::Option<crate::DecodeReplaySummary>,
pub idempotence_replay: std::option::Option<kb_pipeline::DecodeReplaySummary>,
/// Exact persisted transaction annotation rows for the submitted signature.
pub annotations: std::vec::Vec<kb_store::MaterializedEventQueryRow>,
/// 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<S, O>(
request: &crate::DevnetMemoExecutionRequest,
observer: &O,
signature: &kb_lib::MdSignature,
) -> kb_core::Result<crate::BackfillSummary>
) -> kb_core::Result<kb_pipeline::BackfillSummary>
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<S, O>(
decoders: &[std::sync::Arc<dyn kb_lib::DcApiInstructionDecoder>],
materializers: &[std::sync::Arc<dyn kb_lib::MtApiEventMaterializer>],
observer: &O,
) -> kb_core::Result<crate::DecodeReplaySummary>
) -> kb_core::Result<kb_pipeline::DecodeReplaySummary>
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

View File

@@ -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<kb_lib::ExApiExecutionConfirmationResult>,
/// Canonical hydration result for the exact signature.
pub backfill: std::option::Option<crate::BackfillSummary>,
pub backfill: std::option::Option<kb_pipeline::BackfillSummary>,
/// Core extraction result for the exact signature.
pub core_extraction: std::option::Option<crate::CoreExtractionSummary>,
pub core_extraction: std::option::Option<kb_pipeline::CoreExtractionSummary>,
/// First Token decode and materialization replay.
pub decode_replay: std::option::Option<crate::DecodeReplaySummary>,
pub decode_replay: std::option::Option<kb_pipeline::DecodeReplaySummary>,
/// Second replay proving idempotence for the same decoder version and input.
pub idempotence_replay: std::option::Option<crate::DecodeReplaySummary>,
pub idempotence_replay: std::option::Option<kb_pipeline::DecodeReplaySummary>,
/// Exact materialized rows produced for the submitted Token transaction.
pub materializations: std::vec::Vec<kb_store::MaterializedEventQueryRow>,
/// 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<crate::Token2022PreflightRequest> {
) -> kb_core::Result<kb_pipeline::Token2022PreflightRequest> {
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<u8>,
) -> 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<kb_lib::MdPubkey>,
) -> 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(),
};
}

View File

@@ -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.

View File

@@ -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.

View File

@@ -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<kb_lib::ExApiExecutionConfirmationResult>,
/// Canonical hydration result for the exact signature.
pub backfill: std::option::Option<crate::BackfillSummary>,
pub backfill: std::option::Option<kb_pipeline::BackfillSummary>,
/// Core extraction result for the exact signature.
pub core_extraction: std::option::Option<crate::CoreExtractionSummary>,
pub core_extraction: std::option::Option<kb_pipeline::CoreExtractionSummary>,
/// First Token decode and materialization replay.
pub decode_replay: std::option::Option<crate::DecodeReplaySummary>,
pub decode_replay: std::option::Option<kb_pipeline::DecodeReplaySummary>,
/// Second replay proving idempotence for the same decoder version and input.
pub idempotence_replay: std::option::Option<crate::DecodeReplaySummary>,
pub idempotence_replay: std::option::Option<kb_pipeline::DecodeReplaySummary>,
/// Exact materialized rows produced for the submitted Token transaction.
pub materializations: std::vec::Vec<kb_store::MaterializedEventQueryRow>,
/// 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<S, O>(
post_validation_max_retries: u32,
observer: &O,
signature: &kb_lib::MdSignature,
) -> kb_core::Result<crate::BackfillSummary>
) -> kb_core::Result<kb_pipeline::BackfillSummary>
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<S, O>(
decoders: &[std::sync::Arc<dyn kb_lib::DcApiInstructionDecoder>],
materializers: &[std::sync::Arc<dyn kb_lib::MtApiEventMaterializer>],
observer: &O,
) -> kb_core::Result<crate::DecodeReplaySummary>
) -> kb_core::Result<kb_pipeline::DecodeReplaySummary>
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;

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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;