0.4.7-pre.002
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
<!-- file: docs/validation/V0_4_7_PRE_002_METAPLEX_COVERAGE_AND_FACT_OWNERSHIP.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# `0.4.7-pre.002` — couverture Metaplex et propriété des faits
|
||||
|
||||
## Résultat
|
||||
|
||||
Le contrat couvre les 58 discriminants `0..57` sans trou ni statut ambigu. La source des comptes et signers est l’IDL Metaplex archivée `V1_14_0`; la constructibilité courante est confrontée à l’inventaire `mpl-token-metadata 5.1.1`.
|
||||
|
||||
### Classification fermée
|
||||
|
||||
- `decode_only_bridge_boundary` : 1 instruction(s) ;
|
||||
- `decode_only_obsolete` : 7 instruction(s) ;
|
||||
- `decode_only_replaced` : 9 instruction(s) ;
|
||||
- `executable_current` : 41 instruction(s) ;
|
||||
|
||||
Les opérations `executable_current` doivent toutes posséder un intent et un builder à la fin de `pre.006`. Les statuts decode-only ne peuvent être utilisés que pour une frontière Bubblegum, une opération obsolète ou une opération remplacée par une variante canonique.
|
||||
|
||||
## Contrat par instruction
|
||||
|
||||
| Disc. | Instruction | Statut | Exécution | Cible | Signers IDL |
|
||||
|------:|-------------------------------------------------------------|-------------------------------|------------------------------------|-----------|---------------------------------------------------------------------------------------------------------|
|
||||
| 0 | `CreateMetadataAccount` | `decode_only_replaced` | `forbidden_replaced` | `—` | mintAuthority, payer |
|
||||
| 1 | `UpdateMetadataAccount` | `decode_only_replaced` | `forbidden_replaced` | `—` | updateAuthority |
|
||||
| 2 | `DeprecatedCreateMasterEdition` | `decode_only_obsolete` | `forbidden_obsolete` | `—` | updateAuthority, printingMintAuthority, mintAuthority, payer, oneTimePrintingAuthorizationMintAuthority |
|
||||
| 3 | `DeprecatedMintNewEditionFromMasterEditionViaPrintingToken` | `decode_only_obsolete` | `forbidden_obsolete` | `—` | mintAuthority, burnAuthority, payer |
|
||||
| 4 | `UpdatePrimarySaleHappenedViaToken` | `executable_current` | `required` | `pre.004` | owner |
|
||||
| 5 | `DeprecatedSetReservationList` | `decode_only_obsolete` | `forbidden_obsolete` | `—` | resource |
|
||||
| 6 | `DeprecatedCreateReservationList` | `decode_only_obsolete` | `forbidden_obsolete` | `—` | payer, updateAuthority |
|
||||
| 7 | `SignMetadata` | `executable_current` | `required` | `pre.004` | creator |
|
||||
| 8 | `DeprecatedMintPrintingTokensViaToken` | `decode_only_obsolete` | `forbidden_obsolete` | `—` | burnAuthority |
|
||||
| 9 | `DeprecatedMintPrintingTokens` | `decode_only_obsolete` | `forbidden_obsolete` | `—` | updateAuthority |
|
||||
| 10 | `CreateMasterEdition` | `decode_only_replaced` | `forbidden_replaced` | `—` | updateAuthority, mintAuthority, payer |
|
||||
| 11 | `MintNewEditionFromMasterEditionViaToken` | `executable_current` | `required` | `pre.006` | newMintAuthority, payer, tokenAccountOwner |
|
||||
| 12 | `ConvertMasterEditionV1ToV2` | `decode_only_replaced` | `forbidden_replaced` | `—` | aucun |
|
||||
| 13 | `MintNewEditionFromMasterEditionViaVaultProxy` | `decode_only_obsolete` | `forbidden_obsolete` | `—` | newMintAuthority, payer, vaultAuthority |
|
||||
| 14 | `PuffMetadata` | `executable_current` | `required` | `pre.003` | aucun |
|
||||
| 15 | `UpdateMetadataAccountV2` | `executable_current` | `required` | `pre.003` | updateAuthority |
|
||||
| 16 | `CreateMetadataAccountV2` | `decode_only_replaced` | `forbidden_replaced` | `—` | mintAuthority, payer |
|
||||
| 17 | `CreateMasterEditionV3` | `executable_current` | `required` | `pre.006` | updateAuthority, mintAuthority, payer |
|
||||
| 18 | `VerifyCollection` | `executable_current` | `required` | `pre.004` | collectionAuthority, payer |
|
||||
| 19 | `Utilize` | `executable_current` | `required` | `pre.006` | useAuthority |
|
||||
| 20 | `ApproveUseAuthority` | `executable_current` | `required` | `pre.006` | owner, payer |
|
||||
| 21 | `RevokeUseAuthority` | `executable_current` | `required` | `pre.006` | owner |
|
||||
| 22 | `UnverifyCollection` | `executable_current` | `required` | `pre.004` | collectionAuthority |
|
||||
| 23 | `ApproveCollectionAuthority` | `executable_current` | `required` | `pre.004` | updateAuthority, payer |
|
||||
| 24 | `RevokeCollectionAuthority` | `executable_current` | `required` | `pre.004` | revokeAuthority |
|
||||
| 25 | `SetAndVerifyCollection` | `executable_current` | `required` | `pre.004` | collectionAuthority, payer |
|
||||
| 26 | `FreezeDelegatedAccount` | `decode_only_replaced` | `forbidden_replaced` | `—` | delegate |
|
||||
| 27 | `ThawDelegatedAccount` | `decode_only_replaced` | `forbidden_replaced` | `—` | delegate |
|
||||
| 28 | `RemoveCreatorVerification` | `executable_current` | `required` | `pre.004` | creator |
|
||||
| 29 | `BurnNft` | `decode_only_replaced` | `forbidden_replaced` | `—` | owner |
|
||||
| 30 | `VerifySizedCollectionItem` | `executable_current` | `required` | `pre.004` | collectionAuthority, payer |
|
||||
| 31 | `UnverifySizedCollectionItem` | `executable_current` | `required` | `pre.004` | collectionAuthority, payer |
|
||||
| 32 | `SetAndVerifySizedCollectionItem` | `executable_current` | `required` | `pre.004` | collectionAuthority, payer |
|
||||
| 33 | `CreateMetadataAccountV3` | `executable_current` | `required` | `pre.003` | mintAuthority, payer |
|
||||
| 34 | `SetCollectionSize` | `executable_current` | `required` | `pre.004` | collectionAuthority |
|
||||
| 35 | `SetTokenStandard` | `executable_current` | `required` | `pre.003` | updateAuthority |
|
||||
| 36 | `BubblegumSetCollectionSize` | `decode_only_bridge_boundary` | `forbidden_cross_program_boundary` | `—` | collectionAuthority, bubblegumSigner |
|
||||
| 37 | `BurnEditionNft` | `decode_only_replaced` | `forbidden_replaced` | `—` | owner |
|
||||
| 38 | `CreateEscrowAccount` | `executable_current` | `required` | `pre.006` | payer, authority |
|
||||
| 39 | `CloseEscrowAccount` | `executable_current` | `required` | `pre.006` | payer |
|
||||
| 40 | `TransferOutOfEscrow` | `executable_current` | `required` | `pre.006` | payer, authority |
|
||||
| 41 | `Burn` | `executable_current` | `required` | `pre.005` | authority |
|
||||
| 42 | `Create` | `executable_current` | `required` | `pre.003` | authority, payer |
|
||||
| 43 | `Mint` | `executable_current` | `required` | `pre.006` | authority, payer |
|
||||
| 44 | `Delegate` | `executable_current` | `required` | `pre.005` | authority, payer |
|
||||
| 45 | `Revoke` | `executable_current` | `required` | `pre.005` | authority, payer |
|
||||
| 46 | `Lock` | `executable_current` | `required` | `pre.005` | authority, payer |
|
||||
| 47 | `Unlock` | `executable_current` | `required` | `pre.005` | authority, payer |
|
||||
| 48 | `Migrate` | `executable_current` | `required` | `pre.006` | payer, authority |
|
||||
| 49 | `Transfer` | `executable_current` | `required` | `pre.005` | authority, payer |
|
||||
| 50 | `Update` | `executable_current` | `required` | `pre.003` | authority, payer |
|
||||
| 51 | `Use` | `executable_current` | `required` | `pre.006` | authority, payer |
|
||||
| 52 | `Verify` | `executable_current` | `required` | `pre.004` | authority |
|
||||
| 53 | `Unverify` | `executable_current` | `required` | `pre.004` | authority |
|
||||
| 54 | `Collect` | `executable_current` | `required` | `pre.006` | authority |
|
||||
| 55 | `Print` | `executable_current` | `required` | `pre.006` | editionMintAuthority, payer |
|
||||
| 56 | `Resize` | `executable_current` | `required` | `pre.006` | authority |
|
||||
| 57 | `CloseAccounts` | `executable_current` | `required` | `pre.005` | authority |
|
||||
|
||||
Les listes positionnelles complètes des comptes, leurs flags writable/signer, les préflights et les postconditions sont conservés sous `instruction_execution_contract` dans la matrice JSON active.
|
||||
|
||||
## Propriété unique des faits
|
||||
|
||||
| Fait | Propriétaire | Source autoritative |
|
||||
|--------------------------------------|-------------------|---------------------------------------------------|
|
||||
| `metadata.name` | `metadata` | `MetadataV1.name` |
|
||||
| `metadata.symbol` | `metadata` | `MetadataV1.symbol` |
|
||||
| `metadata.uri` | `metadata` | `MetadataV1.uri` |
|
||||
| `metadata.seller_fee_basis_points` | `metadata` | `MetadataV1.seller_fee_basis_points` |
|
||||
| `metadata.creators` | `metadata` | `MetadataV1.data.creators` |
|
||||
| `metadata.collection` | `metadata` | `MetadataV1.collection` |
|
||||
| `metadata.uses` | `metadata` | `MetadataV1.uses` |
|
||||
| `metadata.token_standard` | `metadata` | `MetadataV1.token_standard` |
|
||||
| `metadata.is_mutable` | `metadata` | `MetadataV1.is_mutable` |
|
||||
| `metadata.programmable_config` | `metadata` | `MetadataV1.programmable_config` |
|
||||
| `admin.update_authority` | `admin` | `MetadataV1.update_authority` |
|
||||
| `admin.collection_authority` | `admin` | `CollectionAuthorityRecord` |
|
||||
| `admin.use_authority` | `admin` | `UseAuthorityRecord` |
|
||||
| `admin.delegate` | `admin` | `MetadataDelegate/HolderDelegate/TokenRecord` |
|
||||
| `lifecycle.primary_sale_happened` | `lifecycle` | `MetadataV1.primary_sale_happened` |
|
||||
| `lifecycle.edition` | `lifecycle` | `Edition/MasterEdition` |
|
||||
| `lifecycle.edition_marker` | `lifecycle` | `EditionMarker/EditionMarkerV2` |
|
||||
| `lifecycle.programmable_token_state` | `lifecycle` | `TokenRecord.state` |
|
||||
| `lifecycle.locked_transfer` | `lifecycle` | `TokenRecord.locked_transfer` |
|
||||
| `lifecycle.token_owned_escrow` | `lifecycle` | `TokenOwnedEscrow` |
|
||||
| `lifecycle.historical_reservation` | `lifecycle` | `ReservationListV1/V2` |
|
||||
| `risk.royalty_configuration` | `risk_compliance` | `seller_fee_basis_points fact reference` |
|
||||
| `risk.unverified_creators` | `risk_compliance` | `creators verification fact reference` |
|
||||
| `risk.mutable_metadata` | `risk_compliance` | `is_mutable fact reference` |
|
||||
| `risk.rule_set` | `risk_compliance` | `programmable_config rule_set fact reference` |
|
||||
| `risk.sensitive_delegation` | `risk_compliance` | `delegate records and TokenRecord fact reference` |
|
||||
|
||||
Les observations d’instruction décrivent uniquement les mutations. Les snapshots de comptes possédés restent autoritatifs pour l’état final et ne doivent jamais être dupliqués par une projection concurrente.
|
||||
|
||||
## Non-fusion Token-2022
|
||||
|
||||
- domaine Metaplex : `metaplex_token_metadata` ;
|
||||
- domaine Token-2022 : `spl_token_2022_embedded_metadata` ;
|
||||
- aucune identité, URI ou autorité n’est fusionnée implicitement entre les deux domaines ;
|
||||
- une corrélation ultérieure doit conserver les deux provenances et signaler les conflits.
|
||||
|
||||
## Validation disponible dans cet environnement
|
||||
|
||||
- parsing JSON : effectué ;
|
||||
- inventaire `0..57` : effectué ;
|
||||
- unicité des faits : effectuée ;
|
||||
- tests Cargo : non exécutés, car `cargo` est absent de l’environnement de préparation.
|
||||
Reference in New Issue
Block a user