# Delta `0.3.10-pre.006` — Transaction V1 + parité Yellowstone transaction/block ## Base requise ```text livraison : 0.3.10-pre.005-fix.002 workspace.package.version = 0.3.10-pre.5.fix.2 ``` Le gate opérateur communiqué le 2026-09-06 ferme cette baseline : audits statiques propres, `cargo check --workspace` PASS, Clippy strict PASS, common RAW PASS, 387 tests Transport avec suites publiques/release/doctests PASS, et suite Backfill complète PASS, y compris hardening et les deux canaris WS/Helius. ## Objectif Fermer avant le Worker concret : ```text Transaction V1 / SIMD-0385 dans la common source-neutral Yellowstone Transaction -> transaction wire exact Yellowstone Block -> même transaction wire + block_time qualification RAW-direct vs hydration ``` Aucun adapter productif `Transport DTO -> common` n'est ajouté. `TR-C2` reste Worker-owned et `pre.007` reste le premier point où la crate Worker concrète peut apparaître. ## Version ```text workspace.package.version = 0.3.10-pre.6 Cargo.toml header = 499 workspace members = 20 ``` ## Common wire Legacy/V0/V1 `ksp-raw-transaction-lib` ajoute un modèle source-neutral : ```text RawSolanaMessageVersion RawSolanaMessageHeader RawSolanaCompiledInstruction RawSolanaAddressTableLookup RawSolanaTransactionConfig RawSolanaTransactionMessage RawSolanaTransactionWire ``` et deux serializers : ```text serialize_solana_transaction_wire serialize_solana_transaction_wire_base64 ``` Legacy et V0 conservent le layout signatures-first existant. V1 suit SIMD-0385 : `0x81`, header, config mask, lifetime, compteurs, adresses, valeurs config, headers/payloads d'instructions et signatures terminales. Les gardes V1 verrouillent notamment : ```text transaction <= 4096 bytes 1..=12 signatures <= 64 adresses <= 64 instructions num_readonly_signed < num_required_signatures indexes programme/comptes bornés aucune Address Lookup Table aucune adresse dupliquée config présente, y compris vide aucun trailing byte après les signatures ``` Les goldens couvrent Legacy, V0, V1 configuration complète et V1 configuration vide. ## Extraction de signature V1 `extract_raw_transaction_signature_from_binary_base64` distingue désormais : ```text premier octet == 0x81 -> parser V1 et signatures terminales sinon -> parser short-vector signatures-first Legacy/V0 ``` Le parser V1 parcourt structurellement mask/config, adresses, headers, payloads et signatures et exige la fin exacte du wire. ## Parité Yellowstone `crates/ksp-job-backfill-lib/tests/yellowstone_raw_parity.rs` monte un serveur Geyser local déterministe, ouvre le vrai `YellowstoneGrpcChannel::open_standard_subscribe` puis reçoit : ```text SubscribeUpdateTransaction V1 SubscribeUpdateBlock V1 portant la même transaction ``` La projection vers `RawSolanaTransactionWire` est strictement test-only. Le canari exige le même wire V1 exact pour les deux updates et vérifie slot, transaction index et `block_time` côté Block. ## Qualification RAW Le gate ferme volontairement une qualification partielle : ```text Yellowstone transaction wire = direct/fiable Yellowstone Transaction RAW = hydration HTTP obligatoire : block_time absent Yellowstone Block RAW complet= hydration HTTP obligatoire : meta JSON byte-identical non prouvée ``` Aucun champ manquant n'est inventé et aucune projection protobuf -> JSON ad hoc n'est introduite pour forcer un hash RAW identique. ## Dependency firewall Le Backfill ajoute uniquement en dev : ```text tonic = { workspace = true, features = ["codegen", "server"] } yellowstone-grpc-proto = { workspace = true, features = ["tonic"] } ``` `dependency_boundary.rs` verrouille leur absence des dépendances production et `hardening.rs` recalibre le set dev exact. Les dépendances normales restent inchangées. Il n'existe toujours aucun edge productif : ```text ksp-onchain-transport-lib -> ksp-raw-transaction-lib ksp-raw-transaction-lib -> ksp-onchain-transport-lib ``` ## Fraîcheur externe revalidée Revalidation le 2026-09-07 : ```text SIMD-0385 : Transaction V1, status Review, version byte 129, signatures terminales, sans ALT Solana Transaction V1 examples : capacité Yellowstone avec Message.config ; activation cluster encore feature-gated/pre-release ``` Sources : ```text https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0385-transaction-v1.md https://github.com/solana-foundation/transaction-v1-examples https://github.com/rpcpool/yellowstone-grpc/blob/master/yellowstone-grpc-proto/proto/solana-storage.proto ``` KSP implémente la capacité de lecture/canonicalisation V1 sans déclarer son activation sur Mainnet ou un autre cluster. ## Fichiers ajoutés ```text crates/ksp-job-backfill-lib/tests/yellowstone_raw_parity.rs crates/ksp-raw-transaction-lib/src/wire.rs crates/ksp-raw-transaction-lib/unit_tests/wire.rs deltas/0.3.10/pre.006.md ``` ## Fichiers modifiés ```text Cargo.toml crates/ksp-job-backfill-lib/Cargo.toml crates/ksp-job-backfill-lib/tests/dependency_boundary.rs crates/ksp-job-backfill-lib/tests/hardening.rs crates/ksp-raw-transaction-lib/src/lib.rs crates/ksp-raw-transaction-lib/src/signature.rs crates/ksp-raw-transaction-lib/tests/dependency_boundary.rs crates/ksp-raw-transaction-lib/tests/public_api.rs crates/ksp-raw-transaction-lib/tests/release_completeness.rs crates/ksp-raw-transaction-lib/unit_tests/signature.rs docs/architecture/011-RAW_TRANSACTION_ACQUISITION.md docs/plans/031-V0_3_10_RAW_TRANSACTION_INGEST_PLAN.md docs/validation/027-V0_3_10_RAW_TRANSACTION_INGEST.md ``` ## Fichiers supprimés Aucun. ## Gate opérateur demandé ```bash cargo fmt --all 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-raw-transaction-lib cargo test -p ksp-onchain-transport-lib cargo test -p ksp-job-backfill-lib cargo tree -p ksp-job-backfill-lib --edges normal cargo tree -p ksp-job-backfill-lib --edges dev cargo tree -p ksp-job-backfill-lib -e features ``` Les arbres Cargo sont requis car `pre.006` ajoute deux dev-dependencies test-only. ## Décisions prises ```text common sérialise Legacy/V0/V1 sans dépendre de Transport V1 est reconnu par 0x81 et possède des signatures terminales Yellowstone Transaction/Block conservent un transaction wire V1 exact sur canari Yellowstone RAW complet reste hydraté par HTTP tant que TR-C4 meta/block_time complet n'est pas prouvé aucun RAW v2 automatique aucun Worker concret avant pre.007 TR-C2 reste Worker-owned ```