0.5.1-pre.004
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: ks-pipeline-demo-scenarios/USAGE.md -->
|
||||
<!-- version: 27 -->
|
||||
<!-- version: 28 -->
|
||||
|
||||
# Utilisation de ks-pipeline-demo-scenarios
|
||||
|
||||
@@ -107,13 +107,13 @@ La campagne `0.4.8-pre.012` prépare un mint Token-2022 frais, initialise son `M
|
||||
Le test opt-in est le chemin opérateur recommandé :
|
||||
|
||||
```bash
|
||||
KB_DEVNET_TOKEN_2022_METADATA_CAMPAIGN_TEST=1 \
|
||||
KB_DEVNET_TOKEN_2022_METADATA_OPERATOR_CONFIRMED=1 \
|
||||
KB_POSTGRES_TEST_URL='postgresql://…' \
|
||||
KS_DEVNET_TOKEN_2022_METADATA_CAMPAIGN_TEST=1 \
|
||||
KS_DEVNET_TOKEN_2022_METADATA_OPERATOR_CONFIRMED=1 \
|
||||
KS_SECRET_POSTGRES_TEST_URL='postgresql://…' \
|
||||
cargo test -p ks-pipeline-demo-scenarios optional_devnet_token_2022_metadata_campaign_from_env -- --nocapture
|
||||
```
|
||||
|
||||
`KB_DEVNET_PROFILE` peut sélectionner explicitement le profil Devnet et `KB_DEVNET_CONFIG_PATH` peut remplacer `config/example.config.json`. Le profil doit utiliser un wallet persistant, autoriser les soumissions Devnet et respecter les plafonds de dépense et de frais.
|
||||
`KS_DEVNET_PROFILE` peut sélectionner explicitement le profil Devnet et `KS_DEVNET_CONFIG_PATH` peut remplacer `config/example.config.json`. Le profil doit utiliser un wallet persistant, autoriser les soumissions Devnet et respecter les plafonds de dépense et de frais.
|
||||
|
||||
La sortie `TOKEN_2022_METADATA_FIXTURE` conserve le mint et la signature de préparation. Chaque ligne `TOKEN_2022_METADATA_STEP` conserve l’opération, la signature, le slot, la postcondition, le nombre de matérialisations et, pour `Emit`, la taille du `returnData`. La campagne de référence de `pre.012` a été exécutée avec succès et ses preuves sont conservées dans `SPL_TOKEN_2022_METADATA_DEVNET_VALIDATION_MATRIX.json` et dans le rapport `docs/validation/V0_4_8_METADATA_VALIDATION_REPORT.md` ; le rapport détaillé `pre.012` est archivé sous `olddocs/archivekbot3/docs/validation/`. Une nouvelle exécution produit de nouvelles transactions et ne remplace ces preuves qu’après validation explicite.
|
||||
|
||||
@@ -299,22 +299,22 @@ La matrice ne transforme jamais une implémentation disponible en validation ré
|
||||
Le runner Devnet commun accepte toute variante non dépréciée de `ExMetaplexTokenMetadataOperation`. Le test opt-in peut être lancé avec :
|
||||
|
||||
```bash
|
||||
KB_DEVNET_METAPLEX_EXECUTION_TEST=1 \
|
||||
KB_DEVNET_METAPLEX_OPERATION_JSON='{"operation":"..."}' \
|
||||
KS_DEVNET_METAPLEX_EXECUTION_TEST=1 \
|
||||
KS_DEVNET_METAPLEX_OPERATION_JSON='{"operation":"..."}' \
|
||||
cargo test -p ks-pipeline-demo-scenarios optional_devnet_current_operation_from_env -- --nocapture
|
||||
```
|
||||
|
||||
Variables optionnelles :
|
||||
|
||||
- `KB_DEVNET_WALLET_DIR` pour sélectionner le répertoire du wallet persistant ;
|
||||
- `KB_POSTGRES_TEST_URL` est obligatoire pour le test opt-in afin de permettre l’hydratation canonique, l’extraction Core, le replay et la vérification d’idempotence après une soumission ;
|
||||
- `KB_DEVNET_METAPLEX_PREFLIGHT_READS_JSON` pour fournir les lectures stateful avant simulation ;
|
||||
- `KB_DEVNET_METAPLEX_POSTCONDITION_READS_JSON` pour fournir les lectures après confirmation ;
|
||||
- `KB_DEVNET_METAPLEX_MATERIALIZE_AFTER_CONFIRMATION=1` pour rendre obligatoire la preuve de matérialisation et produire les snapshots stateful demandés ;
|
||||
- `KB_DEVNET_METAPLEX_SUBMIT=1` pour autoriser la soumission ;
|
||||
- `KB_DEVNET_METAPLEX_OPERATOR_CONFIRMED=1` pour confirmer explicitement la soumission.
|
||||
- `KS_DEVNET_WALLET_DIR` pour sélectionner le répertoire du wallet persistant ;
|
||||
- `KS_SECRET_POSTGRES_TEST_URL` est obligatoire pour le test opt-in afin de permettre l’hydratation canonique, l’extraction Core, le replay et la vérification d’idempotence après une soumission ;
|
||||
- `KS_DEVNET_METAPLEX_PREFLIGHT_READS_JSON` pour fournir les lectures stateful avant simulation ;
|
||||
- `KS_DEVNET_METAPLEX_POSTCONDITION_READS_JSON` pour fournir les lectures après confirmation ;
|
||||
- `KS_DEVNET_METAPLEX_MATERIALIZE_AFTER_CONFIRMATION=1` pour rendre obligatoire la preuve de matérialisation et produire les snapshots stateful demandés ;
|
||||
- `KS_DEVNET_METAPLEX_SUBMIT=1` pour autoriser la soumission ;
|
||||
- `KS_DEVNET_METAPLEX_OPERATOR_CONFIRMED=1` pour confirmer explicitement la soumission.
|
||||
|
||||
La soumission reste impossible si `KB_DEVNET_METAPLEX_SUBMIT` et `KB_DEVNET_METAPLEX_OPERATOR_CONFIRMED` ne sont pas activées ensemble. Après confirmation, le runner hydrate la transaction canonique, exécute l’extraction Core, rejoue le décodeur Metaplex avec ses matérialiseurs puis effectue une seconde passe qui doit être idempotente. Les opérations dépréciées sont rejetées avant tout appel RPC.
|
||||
La soumission reste impossible si `KS_DEVNET_METAPLEX_SUBMIT` et `KS_DEVNET_METAPLEX_OPERATOR_CONFIRMED` ne sont pas activées ensemble. Après confirmation, le runner hydrate la transaction canonique, exécute l’extraction Core, rejoue le décodeur Metaplex avec ses matérialiseurs puis effectue une seconde passe qui doit être idempotente. Les opérations dépréciées sont rejetées avant tout appel RPC.
|
||||
|
||||
## Préparer une campagne Metaplex courante
|
||||
|
||||
@@ -354,7 +354,7 @@ fn creator_verify_request(
|
||||
|
||||
`devnet_metaplex_creator_unverify_request` fournit le parcours inverse. Les deux requêtes restent en simulation-only par défaut.
|
||||
|
||||
Le test générique accepte toujours `KB_DEVNET_METAPLEX_OPERATION_JSON`, mais rejette explicitement le placeholder documentaire `...`. Les opérations plus complexes recevront des préparateurs de fixtures dédiés au lieu d’exiger de longs JSON écrits à la main.
|
||||
Le test générique accepte toujours `KS_DEVNET_METAPLEX_OPERATION_JSON`, mais rejette explicitement le placeholder documentaire `...`. Les opérations plus complexes recevront des préparateurs de fixtures dédiés au lieu d’exiger de longs JSON écrits à la main.
|
||||
|
||||
## Préparer `Create` puis `Mint` avec un ATA canonique
|
||||
|
||||
@@ -374,13 +374,13 @@ Le token record pNFT est uniquement dérivé pendant la préparation. Sa créati
|
||||
|
||||
La campagne est volontairement exécutée **une famille à la fois**. Elle prépare une fixture fraîche, soumet `Create`, vérifie que la supply et l’ATA restent à zéro, puis soumet `Mint` et exige la transition exacte vers `mint_amount_raw`. Pour NFT, collection et pNFT, la validation SPL exige après `Create` que les mint/freeze authorities aient été transférées au PDA Master Edition ; pour SFT et fungible, elles restent sur l’opérateur. Après `Mint`, NFT/SFT/fungible/collection exigent un ATA `Initialized` (`state=1`), alors que pNFT exige un ATA `Frozen` (`state=2`) et un Token Record Metaplex présent. Toutes les lectures Metaplex postcondition sont automatiquement bornées au slot de confirmation.
|
||||
|
||||
Le test opt-in utilise `nft` par défaut. Les valeurs acceptées par `KB_DEVNET_METAPLEX_CREATE_MINT_FAMILY` sont `nft`, `sft`, `fungible`, `collection`, `programmable_nft` et l’alias `pnft`.
|
||||
Le test opt-in utilise `nft` par défaut. Les valeurs acceptées par `KS_DEVNET_METAPLEX_CREATE_MINT_FAMILY` sont `nft`, `sft`, `fungible`, `collection`, `programmable_nft` et l’alias `pnft`.
|
||||
|
||||
```bash
|
||||
KB_DEVNET_METAPLEX_CREATE_MINT_CAMPAIGN_TEST=1 \
|
||||
KB_DEVNET_METAPLEX_OPERATOR_CONFIRMED=1 \
|
||||
KB_DEVNET_METAPLEX_CREATE_MINT_FAMILY=nft \
|
||||
KB_POSTGRES_TEST_URL='postgresql://…' \
|
||||
KS_DEVNET_METAPLEX_CREATE_MINT_CAMPAIGN_TEST=1 \
|
||||
KS_DEVNET_METAPLEX_OPERATOR_CONFIRMED=1 \
|
||||
KS_DEVNET_METAPLEX_CREATE_MINT_FAMILY=nft \
|
||||
KS_SECRET_POSTGRES_TEST_URL='postgresql://…' \
|
||||
cargo test -p ks-pipeline-demo-scenarios \
|
||||
optional_devnet_metaplex_create_mint_campaign_from_env \
|
||||
-- --nocapture
|
||||
@@ -403,9 +403,9 @@ La preuve stateful exige simultanément :
|
||||
Le parcours ne soumet pas `SetCollectionSize` : cette opération est obsolète et ne doit pas fabriquer artificiellement la postcondition de taille.
|
||||
|
||||
```bash
|
||||
KB_DEVNET_METAPLEX_COLLECTION_VERIFY_CAMPAIGN_TEST=1 \
|
||||
KB_DEVNET_METAPLEX_OPERATOR_CONFIRMED=1 \
|
||||
KB_POSTGRES_TEST_URL='postgres://solana:solana@localhost:5432/solana_test' \
|
||||
KS_DEVNET_METAPLEX_COLLECTION_VERIFY_CAMPAIGN_TEST=1 \
|
||||
KS_DEVNET_METAPLEX_OPERATOR_CONFIRMED=1 \
|
||||
KS_SECRET_POSTGRES_TEST_URL='postgres://solana:solana@localhost:5432/solana_test' \
|
||||
cargo test -p ks-pipeline-demo-scenarios \
|
||||
optional_devnet_metaplex_collection_verify_campaign_from_env \
|
||||
-- --nocapture
|
||||
@@ -426,9 +426,9 @@ Une exécution réussie imprime `METAPLEX_COLLECTION_VERIFY_FIXTURE`, deux ligne
|
||||
Le runner exige que le Token Record source passe `Unlocked/Staking -> Locked/Staking -> Unlocked/Staking -> delegate cleared -> Unlocked/Transfer`. Après le transfert, l’ATA source doit contenir `0` et rester `Initialized`, tandis que l’ATA destination doit contenir `1` et rester `Frozen`; le Token Record destination doit être `Unlocked` sans delegate. Ce contrat suit le handler courant, qui thaw la source avant transfert puis freeze uniquement la destination. Les wallets temporaires ne remplacent jamais le wallet persistant du profil comme fee payer ; seul le delegate explicitement déclaré est ajouté aux signataires des étapes qui l’exigent.
|
||||
|
||||
```bash
|
||||
KB_DEVNET_METAPLEX_PNFT_LIFECYCLE_CAMPAIGN_TEST=1 \
|
||||
KB_DEVNET_METAPLEX_OPERATOR_CONFIRMED=1 \
|
||||
KB_POSTGRES_TEST_URL='postgres://solana:solana@localhost:5432/solana_test' \
|
||||
KS_DEVNET_METAPLEX_PNFT_LIFECYCLE_CAMPAIGN_TEST=1 \
|
||||
KS_DEVNET_METAPLEX_OPERATOR_CONFIRMED=1 \
|
||||
KS_SECRET_POSTGRES_TEST_URL='postgres://solana:solana@localhost:5432/solana_test' \
|
||||
cargo test -p ks-pipeline-demo-scenarios \
|
||||
optional_devnet_metaplex_pnft_lifecycle_campaign_from_env \
|
||||
-- --nocapture
|
||||
@@ -441,9 +441,9 @@ Une exécution qualifiante doit terminer `ok` et produire `METAPLEX_PNFT_LIFECYC
|
||||
La campagne escrow prépare un NFT classique parent et un token fungible attribut, puis exécute un cycle `TokenOwner` strictement contrôlé. Elle crée le PDA escrow, crée son ATA SPL classique pour le mint attribut, y dépose exactement une unité brute, transfère cette unité vers l’ATA de l’opérateur puis ferme le compte escrow.
|
||||
|
||||
```bash
|
||||
KB_DEVNET_METAPLEX_ESCROW_CAMPAIGN_TEST=1 \
|
||||
KB_DEVNET_METAPLEX_OPERATOR_CONFIRMED=1 \
|
||||
KB_POSTGRES_TEST_URL='postgres://solana:solana@localhost:5432/solana_test' \
|
||||
KS_DEVNET_METAPLEX_ESCROW_CAMPAIGN_TEST=1 \
|
||||
KS_DEVNET_METAPLEX_OPERATOR_CONFIRMED=1 \
|
||||
KS_SECRET_POSTGRES_TEST_URL='postgres://solana:solana@localhost:5432/solana_test' \
|
||||
cargo test -p ks-pipeline-demo-scenarios \
|
||||
optional_devnet_metaplex_escrow_campaign_from_env \
|
||||
-- --nocapture
|
||||
@@ -456,9 +456,9 @@ Une exécution qualifiante doit produire `METAPLEX_ESCROW_FIXTURE`, deux lignes
|
||||
La campagne `maintenance_campaign` ferme les opérations courantes qui ne relèvent pas des parcours précédents. Elle crée un NFT classique frais, soumet réellement `Update` avec la transition bornée `primary_sale_happened: false -> true`, puis traite les surfaces non qualifiables positivement avec des probes **simulation-only**. Une simulation négative n'autorise jamais une soumission.
|
||||
|
||||
```bash
|
||||
KB_DEVNET_METAPLEX_MAINTENANCE_CAMPAIGN_TEST=1 \
|
||||
KB_DEVNET_METAPLEX_OPERATOR_CONFIRMED=1 \
|
||||
KB_POSTGRES_TEST_URL='postgres://solana:solana@localhost:5432/solana_test' \
|
||||
KS_DEVNET_METAPLEX_MAINTENANCE_CAMPAIGN_TEST=1 \
|
||||
KS_DEVNET_METAPLEX_OPERATOR_CONFIRMED=1 \
|
||||
KS_SECRET_POSTGRES_TEST_URL='postgres://solana:solana@localhost:5432/solana_test' \
|
||||
cargo test -p ks-pipeline-demo-scenarios \
|
||||
optional_devnet_metaplex_maintenance_campaign_from_env \
|
||||
-- --nocapture
|
||||
@@ -484,9 +484,9 @@ Les cinq familles NFT, SFT, fungible, collection et pNFT sont confirmées. `Crea
|
||||
La surface courante `Use` est classée `unavailable` sur Devnet : la simulation exacte du discriminant 51 retourne `InvalidInstructionData` et aucune transaction n'est soumise. Le test opt-in reste utile comme contrôle de non-régression du runtime :
|
||||
|
||||
```bash
|
||||
KB_DEVNET_METAPLEX_USE_PROBE_TEST=1 \
|
||||
KB_DEVNET_METAPLEX_OPERATOR_CONFIRMED=1 \
|
||||
KB_POSTGRES_TEST_URL='postgres://solana:solana@localhost:5432/solana_test' \
|
||||
KS_DEVNET_METAPLEX_USE_PROBE_TEST=1 \
|
||||
KS_DEVNET_METAPLEX_OPERATOR_CONFIRMED=1 \
|
||||
KS_SECRET_POSTGRES_TEST_URL='postgres://solana:solana@localhost:5432/solana_test' \
|
||||
cargo test -p ks-pipeline-demo-scenarios \
|
||||
optional_devnet_metaplex_use_probe_from_env \
|
||||
-- --nocapture
|
||||
|
||||
Reference in New Issue
Block a user