v0.4.8-pre.011
This commit is contained in:
@@ -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 d’exé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 d’instruction, sans faux snapshot |
|
||||
|
||||
Les cinq opérations sont présentes dans les intents, les builders et les capacités de l’exécuteur. `UpdateAuthority` encode l’autorité nullable avec le type officiel. `Emit` accepte la forme complète sans plage ou une plage explicite d’au 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 d’autorité 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 d’administration ;
|
||||
- aucun fait n’est dupliqué entre le matérialiseur metadata spécialisé et le matérialiseur d’administration.
|
||||
|
||||
## 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 l’archive. 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 qu’ils 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 n’est ajoutée par cette phase.
|
||||
Reference in New Issue
Block a user