v0.4.8-pre.011

This commit is contained in:
2026-08-07 07:14:49 +02:00
parent 3167297283
commit dcc1d382d9
38 changed files with 1358 additions and 129 deletions

View File

@@ -0,0 +1,62 @@
<!-- file: docs/audits/V0_4_8_PRE_011_TOKEN_2022_METADATA_COMPLETENESS_AUDIT.md -->
<!-- version: 7 -->
# Audit `0.4.8-pre.011` — complétude Token-2022 Token Metadata
## Portée
Cette prerelease ferme les écarts dexécution synthétique des cinq instructions `spl-token-metadata-interface` implémentées par Token-2022. Elle ne crée aucun Program ID metadata autonome et ne lance aucune campagne Devnet, réservée à `pre.012`.
## Résultat fonctionnel
| Instruction | Wire | Intent | Builder | Retour/stateful | Matérialisation |
|-------------------|-----:|-------:|--------:|------------------------:|---------------------------------------:|
| `Initialize` | oui | oui | oui | snapshot TLV | instruction + snapshot |
| `UpdateField` | oui | oui | oui | snapshot TLV | instruction + snapshot |
| `RemoveKey` | oui | oui | oui | snapshot TLV | instruction + snapshot |
| `UpdateAuthority` | oui | oui | oui | postcondition authority | instruction + snapshot |
| `Emit` | oui | oui | oui | `returnData` borné | fait dinstruction, sans faux snapshot |
Les cinq opérations sont présentes dans les intents, les builders et les capacités de lexécuteur. `UpdateAuthority` encode lautorité nullable avec le type officiel. `Emit` accepte la forme complète sans plage ou une plage explicite dau plus 1 024 octets, refuse `start > end`, les plages trop grandes et `start` sans `end`, puis conserve le `returnData` JSON-RPC sans dépendre des logs.
Un retour complet est décodé avec consommation exacte du format `TokenMetadata`. Un retour partiel conserve seulement les octets et ne prétend pas représenter un état complet. La postcondition dautorité lit le snapshot TLV autoritatif et couvre une nouvelle autorité ou sa suppression.
## Ownership des matérialisateurs
- `MtMetadataToken2022Materializer` possède les neuf faits instructionnels Token Metadata et Token Group ;
- les snapshots `TokenMetadata`, `TokenGroup` et `TokenGroupMember` restent distincts sous `metadata/token_2022/` ;
- `InitializeMetadataPointer` et `UpdateMetadataPointer` restent possédés par le matérialiseur dadministration ;
- aucun fait nest dupliqué entre le matérialiseur metadata spécialisé et le matérialiseur dadministration.
## Correctifs de la livraison
- `pre.011-fix-001` active `serde-json-impl` pour le derive TS-RS de `serde_json::Value` et refuse la plage `Emit` ouverte avec `start` sans `end` ;
- `pre.011-fix-002` remplace le variant inexistant `ExApiExecutionBlockhashKind::Recent` par le variant canonique `Latest` dans la fixture `kb-pipeline` ;
- `pre.011-fix-003` est remplacé et ne doit pas être appliqué comme base finale ;
- `pre.011-fix-004` rattache `update_token_metadata_authority` et `emit_token_metadata` à la famille `token_metadata` par un helper testé directement ;
- `pre.011-fix-005` clôt les documents et ajoute les régressions directes couvrant `new_authority = None`, `Emit` sans plage et la plage maximale exactement égale à 1 024 octets.
- `pre.011-fix-006` corrige uniquement les deux assertions de `operation_code` introduites par `fix-005` : les plans utilisent la hiérarchie canonique `spl.token_2022.*`, pas les noms courts des opérations.
## Validation locale observée le 6 août 2026
Avant `fix-005`, létat fonctionnel final de `fix-004` a réussi :
```text
cargo fmt --all réussi
cargo clippy --all-targets réussi
cargo check --workspace réussi
python3 scripts/audit_rust_workspace_rules.py propre
cargo test -p kb-lib 693 unitaires + 8 intégration, 0 échec
cargo test -p kb-onchain-transport 118 tests, 0 échec
cargo test -p kb-pipeline 105 unitaires + 1 API externe, 0 échec
cargo test -p kb-pipeline-demo-scenarios 62 + 1 CLI + 1 API externe, 0 échec
cargo test --workspace 1 285 tests, 0 échec, doc-tests propres
```
Le `cargo clean` préalable a supprimé les artefacts obsolètes qui empêchaient Cargo de reconstruire le fichier `executor.rs` extrait depuis larchive. La recompilation complète a ensuite exécuté le test direct `token_metadata_operations_share_matrix_family` et le test général de parité de matrice avec succès.
`fix-005` ne modifie aucun code de production et ajoute deux tests unitaires. La première reprise locale a confirmé que tout le workspace compilait, passait Clippy et les audits, mais ces deux nouveaux tests échouaient uniquement parce quils attendaient les noms courts `update_token_metadata_authority` et `emit_token_metadata` au lieu des codes canoniques `spl.token_2022.update_token_metadata_authority` et `spl.token_2022.emit_token_metadata`. `fix-006` corrige ces deux assertions sans modifier le comportement de production. Le nombre attendu de tests unitaires `kb-lib` reste 695.
## Frontières maintenues
Les fixtures, soumissions Devnet, confirmations et preuves réseau restent dans `pre.012`. Le sous-panneau desktop Token-2022 reste dans `pre.013`. Aucune résolution off-chain nest ajoutée par cette phase.