v0.3.13-pre.004-fix.001
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
# file: Cargo.toml
|
# file: Cargo.toml
|
||||||
# version: 546
|
# version: 547
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
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"]
|
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]
|
[workspace.package]
|
||||||
version = "0.3.13-pre.4"
|
version = "0.3.13-pre.4.fix.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// file: crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs
|
// file: crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs
|
||||||
// version: 15
|
// version: 16
|
||||||
|
|
||||||
use sha2::Digest; // rust-rules: trait-import
|
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 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(
|
fn build_standard_block_material(
|
||||||
network: &ksp_store_lib::RawNetworkId,
|
|
||||||
slot: u64,
|
|
||||||
block_time: std::option::Option<i64>,
|
|
||||||
transaction_data: &str,
|
|
||||||
meta: &ksp_onchain_transport_lib::SolanaWireField<serde_json::Value>,
|
|
||||||
version: &ksp_onchain_transport_lib::SolanaWireField<ksp_onchain_transport_lib::SolanaTransactionVersion>,
|
version: &ksp_onchain_transport_lib::SolanaWireField<ksp_onchain_transport_lib::SolanaTransactionVersion>,
|
||||||
position: usize,
|
position: usize,
|
||||||
|
build_material: impl std::ops::FnOnce(
|
||||||
|
ksp_raw_transaction_lib::RawTransactionWireField<ksp_raw_transaction_lib::RawTransactionVersion>,
|
||||||
|
ksp_raw_transaction_lib::RawTransactionWireField<u32>,
|
||||||
|
) -> ksp_core_lib::Result<ksp_raw_transaction_lib::RawTransactionMaterial>,
|
||||||
) -> ksp_core_lib::Result<ksp_raw_transaction_lib::RawTransactionMaterial> {
|
) -> ksp_core_lib::Result<ksp_raw_transaction_lib::RawTransactionMaterial> {
|
||||||
let version = qualify_standard_block_version(version);
|
let version = qualify_standard_block_version(version);
|
||||||
let version = match version {
|
let version = match version {
|
||||||
@@ -1588,19 +1601,7 @@ fn build_standard_block_material(
|
|||||||
std::result::Result::Ok(value) => value,
|
std::result::Result::Ok(value) => value,
|
||||||
std::result::Result::Err(_) => return std::result::Result::Err(crate::runtime_error("source.standard_block_transaction_index_invalid")),
|
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(
|
return build_material(version, ksp_raw_transaction_lib::RawTransactionWireField::Value(transaction_index));
|
||||||
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")),
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn qualify_standard_block_version(
|
fn qualify_standard_block_version(
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// file: crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs
|
// 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<ksp_onchain_transport_lib::YellowstoneGrpcEndpointSettings> {
|
fn grpc_endpoint(cluster: &str) -> std::option::Option<ksp_onchain_transport_lib::YellowstoneGrpcEndpointSettings> {
|
||||||
return grpc_endpoint_with_identity(cluster, "yellowstone-fixture", "fixture-provider");
|
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,
|
std::result::Result::Err(_) => return,
|
||||||
};
|
};
|
||||||
let material = super::build_standard_block_material(
|
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),
|
&ksp_onchain_transport_lib::SolanaWireField::Value(version),
|
||||||
position,
|
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 {
|
let material = match material {
|
||||||
std::result::Result::Ok(value) => value,
|
std::result::Result::Ok(value) => value,
|
||||||
|
|||||||
94
deltas/0.3.13/pre.004-fix.001.md
Normal file
94
deltas/0.3.13/pre.004-fix.001.md
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
<!-- file: deltas/0.3.13/pre.004-fix.001.md -->
|
||||||
|
<!-- version: 1 -->
|
||||||
|
|
||||||
|
# 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
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user