v0.4.8-pre.004
This commit is contained in:
@@ -1,8 +1,19 @@
|
||||
<!-- file: kb-lib/CHANGELOG.md -->
|
||||
<!-- version: 17 -->
|
||||
<!-- version: 19 -->
|
||||
|
||||
# CHANGELOG — kb-lib
|
||||
|
||||
## 0.4.8-pre.004 — comptes Solana Program Metadata
|
||||
|
||||
- ajoute les décodeurs publics bornés des comptes `Buffer` et `Metadata` ainsi que leur sélection par discriminateur ;
|
||||
- valide le propriétaire `ProgM6…`, la borne Solana de 10 MiB et les headers fixes de 96 octets ;
|
||||
- valide les PDA metadata canonical et non-canonical sans inventer de PDA stable pour les Buffers à autorité mutable ou alloués par keypair ;
|
||||
- décode les sources `Direct`, `Url` et `External` sans lecture off-chain ni lecture implicite du compte référencé ;
|
||||
- distingue `data_length` de la capacité allouée restante, compatible avec l’instruction `Extend` ;
|
||||
- ajoute une matrice contractuelle machine-readable, les tests de bornes, de données malformées et de façade publique ;
|
||||
- applique le retour explicite requis par Clippy dans le test de longueur wire du modèle externe.
|
||||
- corrige l’ombre portée de `metadata_program` dans trois tests de comptes afin d’éviter l’inférence récursive `Option<_>` signalée par `E0275`.
|
||||
|
||||
## 0.4.8-pre.003 — modèles Solana Program Metadata
|
||||
|
||||
- ajoute les constantes publiques des layouts fixes `Buffer`, `Metadata`, seed et référence externe ;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: kb-lib/README.md -->
|
||||
<!-- version: 20 -->
|
||||
<!-- version: 21 -->
|
||||
|
||||
# kb-lib
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
## Périmètre
|
||||
|
||||
La crate couvre actuellement Solana Core, SPL Memo, SPL Token classique, SPL Associated Token Account, Token-2022, le registre SPL ElGamal et Metaplex Token Metadata. Elle expose également les modèles wire bornés de Solana Program Metadata ; son décodeur reste réservé tant que les comptes et instructions ne sont pas implémentés.
|
||||
La crate couvre actuellement Solana Core, SPL Memo, SPL Token classique, SPL Associated Token Account, Token-2022, le registre SPL ElGamal et Metaplex Token Metadata. Elle expose également les modèles wire bornés et les décodeurs de comptes `Buffer` et `Metadata` de Solana Program Metadata ; le décodeur d’instructions reste réservé jusqu’à la phase suivante.
|
||||
|
||||
Pour Solana Program Metadata, la surface publique fondatrice comprend :
|
||||
|
||||
@@ -15,7 +15,9 @@ Pour Solana Program Metadata, la surface publique fondatrice comprend :
|
||||
- les enums fermées de discriminateur, encodage, compression, format et source ;
|
||||
- le seed brut de 16 octets avec helpers UTF-8 bornés ;
|
||||
- les données directes, URL et références vers un autre compte sans résolution off-chain ;
|
||||
- les cinq erreurs custom officielles et les erreurs de conversion fail-closed.
|
||||
- les cinq erreurs custom officielles et les erreurs de conversion fail-closed ;
|
||||
- les snapshots bornés `Buffer` et `Metadata`, avec validation du propriétaire, des PDA metadata, des longueurs logiques et des trois sources de données ;
|
||||
- une politique explicite où les octets situés après `data_length` sont conservés comme capacité allouée et jamais assimilés au contenu logique.
|
||||
|
||||
Pour Metaplex Token Metadata, elle fournit :
|
||||
|
||||
@@ -48,7 +50,7 @@ Pour Metaplex Token Metadata, elle fournit :
|
||||
- contrats `MtApi*` et matérialisateurs concrets ;
|
||||
- contrats `ExApi*`, politiques de sécurité et exécuteurs `Ex*Executor` ;
|
||||
- `ExMetadataMetaplexTokenMetadataExecutor`, `ExMetaplexTokenMetadataExecutionIntent` et `ExMetaplexTokenMetadataOperation` ;
|
||||
- modèles `DcMetadataSpm*` et constantes `DC_METADATA_SPM_*` pour le contrat Solana Program Metadata ;
|
||||
- modèles `DcMetadataSpm*`, constantes `DC_METADATA_SPM_*` et fonctions `decoder_metadata_solana_program_metadata_decode_*_account` pour le contrat Solana Program Metadata ;
|
||||
- modèles canoniques `Md*` réexportés par la façade.
|
||||
|
||||
Les exemples d’appel et invariants sont documentés dans [USAGE.md](USAGE.md).
|
||||
@@ -63,7 +65,7 @@ Les exemples d’appel et invariants sont documentés dans [USAGE.md](USAGE.md).
|
||||
|
||||
La surface fonctionnelle Metaplex de la crate est achevée. Les campagnes Devnet restantes relèvent de `kb-pipeline-demo-scenarios` et de `kb-app-demo-desktop`, non d’un manque de builder dans `kb-lib`.
|
||||
|
||||
Pour Solana Program Metadata, seuls les modèles wire sont actuellement actifs. Le décodeur de protocole reste volontairement réservé jusqu’à l’implémentation bornée des comptes et instructions.
|
||||
Pour Solana Program Metadata, les modèles wire et les décodeurs bornés de comptes sont actifs. `Buffer` accepte tout reliquat comme données allouées sans inventer de PDA stable après changement d’autorité ; `Metadata` valide la dérivation canonical ou non-canonical et distingue le contenu logique de la capacité ajoutée par `Extend`. Le décodeur de protocole reste volontairement réservé jusqu’à l’implémentation des neuf instructions.
|
||||
|
||||
Le registre ElGamal n’est pas déclaré validé réellement sur réseau.
|
||||
|
||||
@@ -73,3 +75,4 @@ Le registre ElGamal n’est pas déclaré validé réellement sur réseau.
|
||||
- [Travaux restant à réaliser](TODO.md)
|
||||
- [Historique des changements](CHANGELOG.md)
|
||||
- [Matrice contractuelle Metaplex](../test-fixtures/contract-matrices/METAPLEX_TOKEN_METADATA_MATRIX.json)
|
||||
- [Matrice des comptes Solana Program Metadata](../test-fixtures/contract-matrices/SOLANA_PROGRAM_METADATA_ACCOUNT_MATRIX.json)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: kb-lib/USAGE.md -->
|
||||
<!-- version: 9 -->
|
||||
<!-- version: 10 -->
|
||||
|
||||
# Utilisation de kb-lib
|
||||
|
||||
@@ -82,7 +82,7 @@ println!("parsed registry state: {registry:#?}");
|
||||
|
||||
Les parseurs vérifient les bornes et formats qu’ils annoncent. Ils ne reconstruisent pas un état historique depuis un RPC courant.
|
||||
|
||||
## Modèles Solana Program Metadata
|
||||
## Modèles et comptes Solana Program Metadata
|
||||
|
||||
Les modèles `DcMetadataSpm*` représentent uniquement le contrat on-chain du programme `ProgM6JCCvbYkfKqJYHePx4xxSUSqJp7rh8Lyv7nk7S`. Ils ne téléchargent jamais les URL et ne lisent pas automatiquement les comptes référencés par `External`.
|
||||
|
||||
@@ -108,7 +108,37 @@ assert_eq!(wire_bytes.len(), kb_lib::DC_METADATA_SPM_EXTERNAL_DATA_BYTES);
|
||||
|
||||
Le champ `length` externe suit le contrat zeroable : la valeur wire `0` devient `None` et signifie que la référence porte sur tout le compte à partir de `offset`. Les contenus `Direct` et `Url` doivent être non vides, et toute longueur doit rester représentable par le `u32` du header.
|
||||
|
||||
Le décodeur de protocole `DcMetadataSolanaProgramMetadataDecoder` est encore réservé. Les modèles servent déjà de contrat public stable aux futurs décodeurs de comptes, décodeurs d’instructions, matérialisateurs et builders.
|
||||
Les trois fonctions publiques de comptes vérifient le propriétaire `ProgM6…`, la borne maximale de données et les layouts fixes :
|
||||
|
||||
- `decoder_metadata_solana_program_metadata_decode_account` sélectionne `Buffer` ou `Metadata` depuis le discriminateur ;
|
||||
- `decoder_metadata_solana_program_metadata_decode_buffer_account` conserve tous les octets alloués après le header, sans prétendre qu’un Buffer garde un PDA vérifiable après une modification d’autorité ;
|
||||
- `decoder_metadata_solana_program_metadata_decode_metadata_account` valide le PDA canonical ou non-canonical, `data_length`, les enums fermées et les contraintes propres à `Direct`, `Url` et `External`.
|
||||
|
||||
```rust
|
||||
let snapshot = match kb_lib::decoder_metadata_solana_program_metadata_decode_account(
|
||||
metadata_account.as_str(),
|
||||
account_owner.as_str(),
|
||||
&account_data,
|
||||
) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error.to_string()),
|
||||
};
|
||||
|
||||
match snapshot {
|
||||
kb_lib::DcMetadataSpmAccountSnapshot::Buffer(value) => {
|
||||
println!("buffer bytes={}", value.allocated_data_bytes);
|
||||
},
|
||||
kb_lib::DcMetadataSpmAccountSnapshot::Metadata(value) => {
|
||||
println!("metadata program={}", value.program);
|
||||
println!("logical bytes={}", value.data_length);
|
||||
println!("reserved capacity={}", value.trailing_capacity_bytes);
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Une URL est seulement décodée comme chaîne UTF-8 on-chain. Aucune requête HTTP, IPFS ou Arweave n’est effectuée. Une référence `External` est seulement décodée en adresse, offset et longueur zeroable ; le compte référencé n’est pas lu.
|
||||
|
||||
Le décodeur de protocole `DcMetadataSolanaProgramMetadataDecoder` reste réservé aux instructions. Les comptes constituent désormais un contrat public stable pour les futurs matérialisateurs, builders et parcours stateful.
|
||||
|
||||
## Comptes Metaplex Token Metadata
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: kb-lib/src/decoder.rs
|
||||
// version: 13
|
||||
// version: 14
|
||||
|
||||
//! Consolidated decoder modules.
|
||||
|
||||
@@ -336,6 +336,8 @@ pub(crate) use self::metadata::DC_METADATA_MTM_VERIFY_SIZED_COLLECTION_ITEM_DISC
|
||||
pub use self::metadata::DC_METADATA_SPM_BUFFER_HEADER_BYTES;
|
||||
/// Exact byte length of one external-account data reference.
|
||||
pub use self::metadata::DC_METADATA_SPM_EXTERNAL_DATA_BYTES;
|
||||
/// Maximum Solana account-data length accepted by bounded account decoders.
|
||||
pub use self::metadata::DC_METADATA_SPM_MAX_ACCOUNT_BYTES;
|
||||
/// Exact fixed byte length of one Metadata account header.
|
||||
pub use self::metadata::DC_METADATA_SPM_METADATA_HEADER_BYTES;
|
||||
/// Exact byte length of one Solana Program Metadata seed.
|
||||
@@ -388,12 +390,18 @@ pub use self::metadata::DcMetadataMtmTokenOwnedEscrowAccountSnapshot;
|
||||
pub use self::metadata::DcMetadataMtmTokenOwnedEscrowAuthorityKind;
|
||||
/// Canonical bounded projection of one programmable Token Record account.
|
||||
pub use self::metadata::DcMetadataMtmTokenRecordAccountSnapshot;
|
||||
/// Reserved `kb-lib.decoder.metadata.solana_program_metadata` decoder.
|
||||
/// Solana Program Metadata instruction decoder; account decoders are active.
|
||||
pub use self::metadata::DcMetadataSolanaProgramMetadataDecoder;
|
||||
/// Reserved `kb-lib.decoder.metadata.spl_name_service` decoder.
|
||||
pub use self::metadata::DcMetadataSplNameServiceDecoder;
|
||||
/// Error returned while decoding a Solana Program Metadata account.
|
||||
pub use self::metadata::DcMetadataSpmAccountDecodeError;
|
||||
/// Solana Program Metadata account discriminator.
|
||||
pub use self::metadata::DcMetadataSpmAccountDiscriminator;
|
||||
/// Supported bounded Solana Program Metadata account projection.
|
||||
pub use self::metadata::DcMetadataSpmAccountSnapshot;
|
||||
/// Bounded projection of one Solana Program Metadata Buffer account.
|
||||
pub use self::metadata::DcMetadataSpmBufferAccountSnapshot;
|
||||
/// Compression declared for Solana Program Metadata content.
|
||||
pub use self::metadata::DcMetadataSpmCompression;
|
||||
/// Typed Solana Program Metadata content without off-chain resolution.
|
||||
@@ -406,6 +414,8 @@ pub use self::metadata::DcMetadataSpmEncoding;
|
||||
pub use self::metadata::DcMetadataSpmExternalData;
|
||||
/// Format declared for Solana Program Metadata content.
|
||||
pub use self::metadata::DcMetadataSpmFormat;
|
||||
/// Bounded projection of one initialized Solana Program Metadata account.
|
||||
pub use self::metadata::DcMetadataSpmMetadataAccountSnapshot;
|
||||
/// Bounded Solana Program Metadata model conversion error.
|
||||
pub use self::metadata::DcMetadataSpmModelError;
|
||||
/// Official Solana Program Metadata custom error.
|
||||
@@ -440,6 +450,12 @@ pub use self::metadata::decoder_metadata_metaplex_token_metadata_decode_use_auth
|
||||
pub(crate) use self::metadata::decoder_metadata_metaplex_token_metadata_entry_for_discriminator;
|
||||
/// Crate-root access to `payload_discriminator` from `instruction`.
|
||||
pub(crate) use self::metadata::decoder_metadata_metaplex_token_metadata_payload_discriminator;
|
||||
/// Decodes one supported Solana Program Metadata account by its discriminator.
|
||||
pub use self::metadata::decoder_metadata_solana_program_metadata_decode_account;
|
||||
/// Decodes one Solana Program Metadata Buffer account.
|
||||
pub use self::metadata::decoder_metadata_solana_program_metadata_decode_buffer_account;
|
||||
/// Decodes one initialized Solana Program Metadata account.
|
||||
pub use self::metadata::decoder_metadata_solana_program_metadata_decode_metadata_account;
|
||||
/// Reserved `kb-lib.decoder.nft.metaplex_bubblegum` decoder.
|
||||
pub use self::nft::DcNftMetaplexBubblegumDecoder;
|
||||
/// Reserved `kb-lib.decoder.nft.tensor_cnft` decoder.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: kb-lib/src/decoder/metadata.rs
|
||||
// version: 8
|
||||
// version: 9
|
||||
|
||||
//! `metadata` decoder family.
|
||||
|
||||
@@ -81,14 +81,22 @@ pub use self::metaplex_token_metadata::decoder_metadata_metaplex_token_metadata_
|
||||
pub use self::solana_program_metadata::DC_METADATA_SPM_BUFFER_HEADER_BYTES;
|
||||
/// Exact byte length of one external-account data reference.
|
||||
pub use self::solana_program_metadata::DC_METADATA_SPM_EXTERNAL_DATA_BYTES;
|
||||
/// Maximum Solana account-data length accepted by bounded account decoders.
|
||||
pub use self::solana_program_metadata::DC_METADATA_SPM_MAX_ACCOUNT_BYTES;
|
||||
/// Exact fixed byte length of one Metadata account header.
|
||||
pub use self::solana_program_metadata::DC_METADATA_SPM_METADATA_HEADER_BYTES;
|
||||
/// Exact byte length of one Solana Program Metadata seed.
|
||||
pub use self::solana_program_metadata::DC_METADATA_SPM_SEED_BYTES;
|
||||
/// Reserved `kb-lib.decoder.metadata.solana_program_metadata` decoder.
|
||||
/// Solana Program Metadata instruction decoder; account decoders are active.
|
||||
pub use self::solana_program_metadata::DcMetadataSolanaProgramMetadataDecoder;
|
||||
/// Error returned while decoding a Solana Program Metadata account.
|
||||
pub use self::solana_program_metadata::DcMetadataSpmAccountDecodeError;
|
||||
/// Solana Program Metadata account discriminator.
|
||||
pub use self::solana_program_metadata::DcMetadataSpmAccountDiscriminator;
|
||||
/// Supported bounded Solana Program Metadata account projection.
|
||||
pub use self::solana_program_metadata::DcMetadataSpmAccountSnapshot;
|
||||
/// Bounded projection of one Solana Program Metadata Buffer account.
|
||||
pub use self::solana_program_metadata::DcMetadataSpmBufferAccountSnapshot;
|
||||
/// Compression declared for Solana Program Metadata content.
|
||||
pub use self::solana_program_metadata::DcMetadataSpmCompression;
|
||||
/// Typed Solana Program Metadata content without off-chain resolution.
|
||||
@@ -101,12 +109,20 @@ pub use self::solana_program_metadata::DcMetadataSpmEncoding;
|
||||
pub use self::solana_program_metadata::DcMetadataSpmExternalData;
|
||||
/// Format declared for Solana Program Metadata content.
|
||||
pub use self::solana_program_metadata::DcMetadataSpmFormat;
|
||||
/// Bounded projection of one initialized Solana Program Metadata account.
|
||||
pub use self::solana_program_metadata::DcMetadataSpmMetadataAccountSnapshot;
|
||||
/// Bounded Solana Program Metadata model conversion error.
|
||||
pub use self::solana_program_metadata::DcMetadataSpmModelError;
|
||||
/// Official Solana Program Metadata custom error.
|
||||
pub use self::solana_program_metadata::DcMetadataSpmProgramError;
|
||||
/// Exact fixed-size Solana Program Metadata seed.
|
||||
pub use self::solana_program_metadata::DcMetadataSpmSeed;
|
||||
/// Decodes one supported Solana Program Metadata account by its discriminator.
|
||||
pub use self::solana_program_metadata::decoder_metadata_solana_program_metadata_decode_account;
|
||||
/// Decodes one Solana Program Metadata Buffer account.
|
||||
pub use self::solana_program_metadata::decoder_metadata_solana_program_metadata_decode_buffer_account;
|
||||
/// Decodes one initialized Solana Program Metadata account.
|
||||
pub use self::solana_program_metadata::decoder_metadata_solana_program_metadata_decode_metadata_account;
|
||||
/// Reserved `kb-lib.decoder.metadata.spl_name_service` decoder.
|
||||
pub use self::spl_name_service::DcMetadataSplNameServiceDecoder;
|
||||
|
||||
|
||||
@@ -1,15 +1,32 @@
|
||||
// file: kb-lib/src/decoder/metadata/solana_program_metadata.rs
|
||||
// version: 2
|
||||
// version: 3
|
||||
|
||||
//! Public Solana Program Metadata models and reserved protocol decoder.
|
||||
//! Public Solana Program Metadata models, account decoders and reserved instruction decoder.
|
||||
|
||||
mod account;
|
||||
mod constants;
|
||||
mod model;
|
||||
|
||||
/// Error returned while decoding a Solana Program Metadata account.
|
||||
pub use self::account::DcMetadataSpmAccountDecodeError;
|
||||
/// Supported bounded Solana Program Metadata account projection.
|
||||
pub use self::account::DcMetadataSpmAccountSnapshot;
|
||||
/// Bounded projection of one Solana Program Metadata Buffer account.
|
||||
pub use self::account::DcMetadataSpmBufferAccountSnapshot;
|
||||
/// Bounded projection of one initialized Solana Program Metadata account.
|
||||
pub use self::account::DcMetadataSpmMetadataAccountSnapshot;
|
||||
/// Decodes one supported Solana Program Metadata account by its discriminator.
|
||||
pub use self::account::decoder_metadata_solana_program_metadata_decode_account;
|
||||
/// Decodes one Solana Program Metadata Buffer account.
|
||||
pub use self::account::decoder_metadata_solana_program_metadata_decode_buffer_account;
|
||||
/// Decodes one initialized Solana Program Metadata account.
|
||||
pub use self::account::decoder_metadata_solana_program_metadata_decode_metadata_account;
|
||||
/// Exact fixed byte length of one Buffer account header.
|
||||
pub use self::constants::DC_METADATA_SPM_BUFFER_HEADER_BYTES;
|
||||
/// Exact byte length of one external-account data reference.
|
||||
pub use self::constants::DC_METADATA_SPM_EXTERNAL_DATA_BYTES;
|
||||
/// Maximum Solana account-data length accepted by bounded account decoders.
|
||||
pub use self::constants::DC_METADATA_SPM_MAX_ACCOUNT_BYTES;
|
||||
/// Exact fixed byte length of one Metadata account header.
|
||||
pub use self::constants::DC_METADATA_SPM_METADATA_HEADER_BYTES;
|
||||
/// Exact byte length of one Solana Program Metadata seed.
|
||||
@@ -35,7 +52,7 @@ pub use self::model::DcMetadataSpmProgramError;
|
||||
/// Exact fixed-size metadata seed.
|
||||
pub use self::model::DcMetadataSpmSeed;
|
||||
|
||||
/// Reserved decoder for the `metadata_solana_program_metadata` program surface.
|
||||
/// Decoder reserved for Solana Program Metadata instructions; account decoding is exposed separately.
|
||||
#[derive(Clone, Debug, Default)]
|
||||
pub struct DcMetadataSolanaProgramMetadataDecoder;
|
||||
|
||||
|
||||
1121
kb-lib/src/decoder/metadata/solana_program_metadata/account.rs
Normal file
1121
kb-lib/src/decoder/metadata/solana_program_metadata/account.rs
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
// file: kb-lib/src/decoder/metadata/solana_program_metadata/constants.rs
|
||||
// version: 1
|
||||
// version: 2
|
||||
|
||||
//! Bounded Solana Program Metadata wire constants.
|
||||
|
||||
@@ -11,3 +11,5 @@ pub const DC_METADATA_SPM_BUFFER_HEADER_BYTES: usize = 96;
|
||||
pub const DC_METADATA_SPM_METADATA_HEADER_BYTES: usize = 96;
|
||||
/// Exact byte length of one external-account data reference.
|
||||
pub const DC_METADATA_SPM_EXTERNAL_DATA_BYTES: usize = 40;
|
||||
/// Maximum Solana account-data length accepted by bounded account decoders.
|
||||
pub const DC_METADATA_SPM_MAX_ACCOUNT_BYTES: usize = 10_485_760;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: kb-lib/src/decoder/metadata/solana_program_metadata/model.rs
|
||||
// version: 1
|
||||
// version: 2
|
||||
|
||||
//! Public bounded models for the Solana Program Metadata wire contract.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: kb-lib/src/lib.rs
|
||||
// version: 30
|
||||
// version: 31
|
||||
|
||||
//! Consolidated decoder, executor, materializer and shared model library.
|
||||
#![warn(missing_docs)]
|
||||
@@ -19,6 +19,8 @@ pub use self::decoder::DC_METADATA_MTM_METADATA_ACCOUNT_LAYOUT_AUDIT;
|
||||
pub use self::decoder::DC_METADATA_SPM_BUFFER_HEADER_BYTES;
|
||||
/// Exposes the exact byte length of one external-account data reference.
|
||||
pub use self::decoder::DC_METADATA_SPM_EXTERNAL_DATA_BYTES;
|
||||
/// Exposes the maximum account-data length accepted by bounded account decoders.
|
||||
pub use self::decoder::DC_METADATA_SPM_MAX_ACCOUNT_BYTES;
|
||||
/// Exposes the exact fixed byte length of one Metadata account header.
|
||||
pub use self::decoder::DC_METADATA_SPM_METADATA_HEADER_BYTES;
|
||||
/// Exposes the exact byte length of one Solana Program Metadata seed.
|
||||
@@ -230,12 +232,18 @@ pub use self::decoder::DcMetadataMtmTokenOwnedEscrowAccountSnapshot;
|
||||
pub use self::decoder::DcMetadataMtmTokenOwnedEscrowAuthorityKind;
|
||||
/// Canonical bounded projection of one programmable Token Record account.
|
||||
pub use self::decoder::DcMetadataMtmTokenRecordAccountSnapshot;
|
||||
/// Exposes the reserved `DcMetadataSolanaProgramMetadataDecoder` implementation.
|
||||
/// Exposes the Solana Program Metadata instruction decoder while account decoders are active.
|
||||
pub use self::decoder::DcMetadataSolanaProgramMetadataDecoder;
|
||||
/// Reserved `kb-lib.decoder.metadata.spl_name_service` decoder.
|
||||
pub use self::decoder::DcMetadataSplNameServiceDecoder;
|
||||
/// Error returned while decoding a Solana Program Metadata account.
|
||||
pub use self::decoder::DcMetadataSpmAccountDecodeError;
|
||||
/// Solana Program Metadata account discriminator.
|
||||
pub use self::decoder::DcMetadataSpmAccountDiscriminator;
|
||||
/// Supported bounded Solana Program Metadata account projection.
|
||||
pub use self::decoder::DcMetadataSpmAccountSnapshot;
|
||||
/// Bounded projection of one Solana Program Metadata Buffer account.
|
||||
pub use self::decoder::DcMetadataSpmBufferAccountSnapshot;
|
||||
/// Compression declared for Solana Program Metadata content.
|
||||
pub use self::decoder::DcMetadataSpmCompression;
|
||||
/// Typed Solana Program Metadata content without off-chain resolution.
|
||||
@@ -248,6 +256,8 @@ pub use self::decoder::DcMetadataSpmEncoding;
|
||||
pub use self::decoder::DcMetadataSpmExternalData;
|
||||
/// Format declared for Solana Program Metadata content.
|
||||
pub use self::decoder::DcMetadataSpmFormat;
|
||||
/// Bounded projection of one initialized Solana Program Metadata account.
|
||||
pub use self::decoder::DcMetadataSpmMetadataAccountSnapshot;
|
||||
/// Bounded Solana Program Metadata model conversion error.
|
||||
pub use self::decoder::DcMetadataSpmModelError;
|
||||
/// Official Solana Program Metadata custom error.
|
||||
@@ -382,6 +392,12 @@ pub use self::decoder::decoder_metadata_metaplex_token_metadata_decode_token_own
|
||||
pub use self::decoder::decoder_metadata_metaplex_token_metadata_decode_token_record_account;
|
||||
/// Decodes one Use Authority Record account.
|
||||
pub use self::decoder::decoder_metadata_metaplex_token_metadata_decode_use_authority_record_account;
|
||||
/// Decodes one supported Solana Program Metadata account by its discriminator.
|
||||
pub use self::decoder::decoder_metadata_solana_program_metadata_decode_account;
|
||||
/// Decodes one Solana Program Metadata Buffer account.
|
||||
pub use self::decoder::decoder_metadata_solana_program_metadata_decode_buffer_account;
|
||||
/// Decodes one initialized Solana Program Metadata account.
|
||||
pub use self::decoder::decoder_metadata_solana_program_metadata_decode_metadata_account;
|
||||
/// Parses one exact SPL ElGamal registry account.
|
||||
pub use self::decoder::decoder_spl_elgamal_registry_parse_elgamal_registry_state;
|
||||
/// Parses one Token-2022 Mint, Account, or Multisig state.
|
||||
|
||||
35
kb-lib/tests/external_solana_program_metadata_account_api.rs
Normal file
35
kb-lib/tests/external_solana_program_metadata_account_api.rs
Normal file
@@ -0,0 +1,35 @@
|
||||
// file: kb-lib/tests/external_solana_program_metadata_account_api.rs
|
||||
// version: 1
|
||||
|
||||
//! Downstream-style compilation contract for Solana Program Metadata account decoders.
|
||||
|
||||
#[test]
|
||||
fn external_consumers_decode_accounts_only_through_crate_root_exports() {
|
||||
let account = solana_pubkey::Pubkey::new_from_array([17_u8; 32]);
|
||||
let program = solana_pubkey::Pubkey::new_from_array([18_u8; 32]);
|
||||
let authority = solana_pubkey::Pubkey::new_from_array([19_u8; 32]);
|
||||
let seed = kb_lib::DcMetadataSpmSeed::from_bytes([20_u8; 16]);
|
||||
let mut data = vec![0_u8; kb_lib::DC_METADATA_SPM_BUFFER_HEADER_BYTES];
|
||||
data[0] = kb_lib::DcMetadataSpmAccountDiscriminator::Buffer.wire_value();
|
||||
data[1..33].copy_from_slice(&program.to_bytes());
|
||||
data[33..65].copy_from_slice(&authority.to_bytes());
|
||||
data[65] = 1;
|
||||
data[66..82].copy_from_slice(seed.as_bytes());
|
||||
data.extend_from_slice(&[21_u8, 22_u8]);
|
||||
let result = kb_lib::decoder_metadata_solana_program_metadata_decode_account(
|
||||
account.to_string().as_str(),
|
||||
kb_program_ids::METADATA_SOLANA_PROGRAM_METADATA_PROGRAM_ID,
|
||||
&data,
|
||||
);
|
||||
assert!(result.is_ok());
|
||||
if let std::result::Result::Ok(kb_lib::DcMetadataSpmAccountSnapshot::Buffer(snapshot)) = result
|
||||
{
|
||||
assert_eq!(snapshot.account, account.to_string());
|
||||
assert_eq!(snapshot.program, std::option::Option::Some(program.to_string()));
|
||||
assert_eq!(snapshot.authority, std::option::Option::Some(authority.to_string()));
|
||||
assert_eq!(snapshot.data, vec![21_u8, 22_u8]);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
assert_eq!(kb_lib::DC_METADATA_SPM_MAX_ACCOUNT_BYTES, 10_485_760);
|
||||
}
|
||||
Reference in New Issue
Block a user