diff --git a/Cargo.toml b/Cargo.toml index 865615d..892bce2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 546 +# version: 547 [workspace] resolver = "3" members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-desk", "crates/ksp-app-solprices-desk", "crates/ksp-app-store-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-interface-lib", "crates/ksp-job-api", "crates/ksp-job-backfill-lib", "crates/ksp-logging-lib", "crates/ksp-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-program-api", "crates/ksp-raw-transaction-lib", "crates/ksp-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib", "crates/ksp-worker-api", "crates/ksp-worker-raw-transaction-ingest-lib"] [workspace.package] -version = "0.3.13-pre.4" +version = "0.3.13-pre.4.fix.1" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs b/crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs index afb2178..da896a7 100644 --- a/crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs +++ b/crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs @@ -1,5 +1,5 @@ // file: crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs -// version: 15 +// version: 16 use sha2::Digest; // rust-rules: trait-import @@ -1567,17 +1567,30 @@ fn build_standard_block_material_from_transaction( return std::result::Result::Err(crate::runtime_error("source.standard_block_transaction_encoding_invalid")); }, }; - return build_standard_block_material(network, slot, block_time, transaction_data, transaction.meta(), transaction.version(), position); + return build_standard_block_material(transaction.version(), position, |version, transaction_index| { + let material = ksp_raw_transaction_lib::RawTransactionMaterial::binary_base64_with_embedded_signature( + network.clone(), + slot, + block_time, + transaction_data, + map_hydration_wire_field(transaction.meta(), |value| return value.clone()), + version, + transaction_index, + ); + return match material { + std::result::Result::Ok(value) => std::result::Result::Ok(value), + std::result::Result::Err(_) => std::result::Result::Err(crate::runtime_error("source.standard_block_transaction_signature_invalid")), + }; + }); } fn build_standard_block_material( - network: &ksp_store_lib::RawNetworkId, - slot: u64, - block_time: std::option::Option, - transaction_data: &str, - meta: &ksp_onchain_transport_lib::SolanaWireField, version: &ksp_onchain_transport_lib::SolanaWireField, position: usize, + build_material: impl std::ops::FnOnce( + ksp_raw_transaction_lib::RawTransactionWireField, + ksp_raw_transaction_lib::RawTransactionWireField, + ) -> ksp_core_lib::Result, ) -> ksp_core_lib::Result { let version = qualify_standard_block_version(version); let version = match version { @@ -1588,19 +1601,7 @@ fn build_standard_block_material( std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return std::result::Result::Err(crate::runtime_error("source.standard_block_transaction_index_invalid")), }; - let material = ksp_raw_transaction_lib::RawTransactionMaterial::binary_base64_with_embedded_signature( - network.clone(), - slot, - block_time, - transaction_data, - map_hydration_wire_field(meta, |value| return value.clone()), - version, - ksp_raw_transaction_lib::RawTransactionWireField::Value(transaction_index), - ); - return match material { - std::result::Result::Ok(value) => std::result::Result::Ok(value), - std::result::Result::Err(_) => std::result::Result::Err(crate::runtime_error("source.standard_block_transaction_signature_invalid")), - }; + return build_material(version, ksp_raw_transaction_lib::RawTransactionWireField::Value(transaction_index)); } fn qualify_standard_block_version( diff --git a/crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs b/crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs index 50eee94..6e72d03 100644 --- a/crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs +++ b/crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs @@ -1,5 +1,5 @@ // file: crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs -// version: 15 +// version: 16 fn grpc_endpoint(cluster: &str) -> std::option::Option { return grpc_endpoint_with_identity(cluster, "yellowstone-fixture", "fixture-provider"); @@ -2006,13 +2006,19 @@ fn v0_3_13_pre_004_legacy_v0_v1_block_materials_are_direct_common_raw_with_exact std::result::Result::Err(_) => return, }; let material = super::build_standard_block_material( - &network, - 430_000_123, - std::option::Option::Some(1_787_072_400), - encoded.as_str(), - &ksp_onchain_transport_lib::SolanaWireField::Value(serde_json::json!({"err":null,"fee":5000})), &ksp_onchain_transport_lib::SolanaWireField::Value(version), position, + |qualified_version, transaction_index| { + return ksp_raw_transaction_lib::RawTransactionMaterial::binary_base64_with_embedded_signature( + network.clone(), + 430_000_123, + std::option::Option::Some(1_787_072_400), + encoded.as_str(), + ksp_raw_transaction_lib::RawTransactionWireField::Null, + qualified_version, + transaction_index, + ); + }, ); let material = match material { std::result::Result::Ok(value) => value, diff --git a/deltas/0.3.13/pre.004-fix.001.md b/deltas/0.3.13/pre.004-fix.001.md new file mode 100644 index 0000000..089ffc9 --- /dev/null +++ b/deltas/0.3.13/pre.004-fix.001.md @@ -0,0 +1,94 @@ + + + +# Delta 0.3.13-pre.004-fix.001 — retrait de la dépendance serde_json accidentelle + +## Base requise + +```text +livraison précédente : 0.3.13-pre.004 +Cargo base : 0.3.13-pre.4 +delta base : deltas/0.3.13/pre.004.md +archive delta base : ksp-general-0.3.13-pre.004.zip +``` + +Le gate opérateur de `pre.004` a révélé deux erreurs de compilation liées au même défaut : le Worker nommait directement `serde_json::Value` dans `runtime_resources.rs` alors que `serde_json` n'est pas une dépendance du crate, et le test de qualification Standard Block utilisait directement `serde_json::json!`. + +## Objectif du fix + +Supprimer cette dépendance accidentelle sans ajouter `serde_json` au manifeste du Worker et sans modifier le comportement productif de Standard Block. + +Le chemin production conserve exactement le `meta` décodé par `ksp-onchain-transport-lib`, mais son type concret reste inféré depuis `SolanaBlockTransaction::meta()` et n'est plus nommé par le Worker. + +Le helper de qualification reçoit désormais seulement la version, la position et une closure de construction du matériau. La closure production capture le `meta` opaque et le clone vers le Common RAW. La fixture Legacy/V0/V1 utilise un `RawTransactionWireField::Null`, car elle vérifie la signature embarquée, le slot, le `blockTime`, la version et le `transactionIndex`, pas le contenu de `meta`. + +## Version + +```text +livraison : 0.3.13-pre.004-fix.001 +workspace.package.version : 0.3.13-pre.4.fix.1 +archive : ksp-general-0.3.13-pre.004-fix.001.zip +``` + +`Cargo.toml` passe de la version de fichier `546` à `547`. + +## Fichiers modifiés + +```text +Cargo.toml +crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs +crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs +``` + +Les deux fichiers Rust passent de la version de fichier `15` à `16`. + +## Fichiers ajoutés + +```text +deltas/0.3.13/pre.004-fix.001.md +``` + +## Fichiers supprimés + +```text +aucun +``` + +## Non-claims + +Ce fix n'ajoute aucune dépendance, ne modifie aucune API publique et ne change ni la qualification Legacy/V0/V1, ni l'admission RAW, ni la frontier, ni le comportement réseau de `blockSubscribe`. + +## Validation dans l'environnement d'assemblage + +Le toolchain Rust/Cargo/Rustfmt n'est pas disponible dans l'environnement d'assemblage. Les commandes Cargo post-fix restent donc `NON EXÉCUTÉ LOCAL`. Les audits statiques KSP et le contrôle exhaustif du delta sont exécutés avant packaging. + +## Gate opérateur requis avant pre.005 + +```bash +cargo fmt --all +cargo fmt --all -- --check +python3 scripts/audit_rust_workspace_rules.py +python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas +cargo check --workspace +cargo clippy --workspace --all-targets --all-features -- -D warnings +cargo test -p ksp-worker-raw-transaction-ingest-lib +``` + +## Résultats statiques finaux de l'assemblage + +```text +General Rust rule audit: clean +Rust export completeness audit: 0 candidate(s) +KSP workspace Rust rule audit: clean +Markdown table audit: clean (340 tables, 836 files) +``` + +Contrôle exhaustif du delta : + +```text +3 fichiers existants modifiés +1 fichier ajouté +0 fichier supprimé +aucune dépendance ajoutée +aucune référence directe serde_json dans les deux fichiers Rust corrigés +```