v0.3.10-pre.006
This commit is contained in:
206
deltas/0.3.10/pre.006.md
Normal file
206
deltas/0.3.10/pre.006.md
Normal file
@@ -0,0 +1,206 @@
|
||||
<!-- file: deltas/0.3.10/pre.006.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user