Files
2026-09-07 18:58:48 +02:00

6.6 KiB

Delta 0.3.10-pre.006 — Transaction V1 + parité Yellowstone transaction/block

Base requise

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 :

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

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 :

RawSolanaMessageVersion
RawSolanaMessageHeader
RawSolanaCompiledInstruction
RawSolanaAddressTableLookup
RawSolanaTransactionConfig
RawSolanaTransactionMessage
RawSolanaTransactionWire

et deux serializers :

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 :

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 :

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 :

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 :

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 :

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 :

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 :

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 :

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

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

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é

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

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