v0.1.0-pre.056
This commit is contained in:
@@ -1,58 +1,74 @@
|
||||
<!-- file: docs/DELTA_WORKFLOW.md -->
|
||||
<!-- version: 1 -->
|
||||
<!-- version: 3 -->
|
||||
|
||||
# Workflow delta
|
||||
# Workflow de livraison delta
|
||||
|
||||
Après le squelette initial, les livraisons doivent être faites sous forme de zip delta.
|
||||
Les règles normatives de livraison sont définies dans [`../RULES_GENERAL.md`](../RULES_GENERAL.md). Ce document décrit leur application pratique.
|
||||
|
||||
## Nommage des zips
|
||||
## Nommage
|
||||
|
||||
Un delta qui touche la racine du workspace ou plusieurs modules doit utiliser :
|
||||
Delta multi-module ou racine :
|
||||
|
||||
```text
|
||||
khadhroony-bot2_vX.Y.Z-pre.abc.zip
|
||||
khadhroony-bot3_vX.Y.Z-pre.abc-delta.zip
|
||||
```
|
||||
|
||||
Un delta qui ne touche qu'un seul module Rust doit utiliser :
|
||||
Delta limité à un package :
|
||||
|
||||
```text
|
||||
kb_modulename_vX.Y.Z-pre.abc.zip
|
||||
kb-modulename_vX.Y.Z-pre.abc-delta.zip
|
||||
```
|
||||
|
||||
Exemples :
|
||||
Correctif d’une prerelease déjà livrée :
|
||||
|
||||
```text
|
||||
khadhroony-bot2_v0.1.0-pre.001.zip
|
||||
kb_logging_v0.1.0-pre.002.zip
|
||||
khadhroony-bot3_vX.Y.Z-pre.abc-delta-fix-001.zip
|
||||
```
|
||||
|
||||
## Fichier `delta.md`
|
||||
La numérotation des correctifs recommence à `fix-001` pour chaque nouvelle prerelease.
|
||||
|
||||
Chaque zip delta doit contenir un fichier `delta.md` non versionné à la racine du zip.
|
||||
## Contenu
|
||||
|
||||
`delta.md` doit indiquer :
|
||||
Chaque archive contient uniquement :
|
||||
|
||||
- les fichiers ajoutés ;
|
||||
- les fichiers modifiés ;
|
||||
- un `delta.md` non versionné à la racine.
|
||||
|
||||
Elle exclut :
|
||||
|
||||
- les fichiers inchangés ;
|
||||
- `Cargo.lock` ;
|
||||
- `package-lock.json` ;
|
||||
- `node_modules/`, `target/`, `dist/` et les autres sorties de build ;
|
||||
- `gen/`, les bindings TS-RS générés et tout autre code régénérable ;
|
||||
- les logs, caches, PID, bases et données locales ;
|
||||
- les fichiers `.env` réels et toute configuration contenant des secrets ;
|
||||
- les fichiers d’IDE ou propres à la machine ;
|
||||
- les empreintes SHA256 ;
|
||||
- les fichiers supprimés, qui doivent être indiqués comme suppressions manuelles.
|
||||
|
||||
`.env.example`, `.gitignore` et les autres fichiers source explicitement maintenus peuvent être livrés. `delta.md` est généré spécialement pour le ZIP et reste obligatoire même si les documents `delta*.md` sont ignorés dans le dépôt.
|
||||
|
||||
## Contrat de `delta.md`
|
||||
|
||||
`delta.md` indique obligatoirement :
|
||||
|
||||
- la base requise ;
|
||||
- les correctifs antérieurs requis ;
|
||||
- les fichiers ajoutés ;
|
||||
- les fichiers modifiés ;
|
||||
- les fichiers à supprimer manuellement ;
|
||||
- les validations exécutées ;
|
||||
- les validations non exécutées ;
|
||||
- les remarques de compatibilité ou d'application du delta.
|
||||
- les remarques d’application et de compatibilité.
|
||||
|
||||
## Contenu d'un delta
|
||||
## Application
|
||||
|
||||
Un delta contient uniquement :
|
||||
1. Partir de la base indiquée.
|
||||
2. Appliquer les deltas et correctifs antérieurs dans l’ordre indiqué.
|
||||
3. Extraire l’archive à la racine du workspace.
|
||||
4. Effectuer les suppressions manuelles listées dans `delta.md`.
|
||||
5. Lancer les validations demandées.
|
||||
|
||||
- les fichiers ajoutés ;
|
||||
- les fichiers modifiés ;
|
||||
- `delta.md`.
|
||||
|
||||
Il ne doit pas contenir de fichiers inchangés.
|
||||
|
||||
## Règles
|
||||
|
||||
- Ne pas renvoyer un zip complet sauf demande explicite.
|
||||
- Ne pas modifier `CHANGELOG.md` avant validation d'une version.
|
||||
- Placer les évolutions prévues dans `ROADMAP.md`.
|
||||
- Garder `README.md` descriptif.
|
||||
- Documenter les suppressions dans `delta.md`, car un zip ne supprime pas les anciens fichiers à l'extraction.
|
||||
Une archive déjà livrée ne doit jamais être remplacée silencieusement sous le même nom.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,155 +0,0 @@
|
||||
{
|
||||
"file": "docs/NATIVE_SOLANA_DECODER_MATRIX.json",
|
||||
"version": 1,
|
||||
"release": "0.4.2-pre.023",
|
||||
"surface_count": 18,
|
||||
"coverage_entry_count": 121,
|
||||
"registry_contract": "Exact equality with kb_program_ids::native_program_ids and SolanaCoreDecoder::surfaces",
|
||||
"completeness_contract": "Each surface has exact declared coverage count plus a dedicated official-enum or audited-wire completeness test",
|
||||
"surfaces": [
|
||||
{
|
||||
"surface_code": "solana_native_address_lookup_table",
|
||||
"program_id": "AddressLookupTab1e1111111111111111111111111",
|
||||
"runtime_status": "current",
|
||||
"expected_coverage_entries": 5,
|
||||
"source_contract": "solana-address-lookup-table-interface@3.1.x official instruction enum",
|
||||
"completeness_test": "address_lookup_table::tests::coverage_uses_official_encoder_discriminants"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_bpf_loader_deprecated",
|
||||
"program_id": "BPFLoader1111111111111111111111111111111111",
|
||||
"runtime_status": "historical",
|
||||
"expected_coverage_entries": 2,
|
||||
"source_contract": "solana-loader-v2-interface@3.0.0 immutable write/finalize layout",
|
||||
"completeness_test": "loaders::tests::coverage_declares_every_loader_entry"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_bpf_loader",
|
||||
"program_id": "BPFLoader2111111111111111111111111111111111",
|
||||
"runtime_status": "historical",
|
||||
"expected_coverage_entries": 2,
|
||||
"source_contract": "solana-loader-v2-interface@3.0.0 immutable write/finalize layout",
|
||||
"completeness_test": "loaders::tests::coverage_declares_every_loader_entry"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_bpf_loader_upgradeable",
|
||||
"program_id": "BPFLoaderUpgradeab1e11111111111111111111111",
|
||||
"runtime_status": "current_with_historical_variants",
|
||||
"expected_coverage_entries": 8,
|
||||
"source_contract": "solana-loader-v3-interface@8.0.1 with wincode exact wire layout",
|
||||
"completeness_test": "loaders::tests::coverage_declares_every_loader_entry"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_compute_budget",
|
||||
"program_id": "ComputeBudget111111111111111111111111111111",
|
||||
"runtime_status": "current_with_historical_variants",
|
||||
"expected_coverage_entries": 6,
|
||||
"source_contract": "solana-compute-budget-interface@3.0.0 plus historical RequestUnitsDeprecated",
|
||||
"completeness_test": "compute_budget::tests::coverage_declares_current_and_historical_entries"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_config",
|
||||
"program_id": "Config1111111111111111111111111111111111111",
|
||||
"runtime_status": "current",
|
||||
"expected_coverage_entries": 1,
|
||||
"source_contract": "solana-config-interface@2.0.0 generic bounded store contract",
|
||||
"completeness_test": "config::tests::coverage_declares_one_generic_store_surface"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_ed25519",
|
||||
"program_id": "Ed25519SigVerify111111111111111111111111111",
|
||||
"runtime_status": "current",
|
||||
"expected_coverage_entries": 1,
|
||||
"source_contract": "Agave Ed25519 precompile exact offset-table layout",
|
||||
"completeness_test": "precompiles::tests::coverage_declares_exactly_three_signature_precompile_surfaces"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_feature",
|
||||
"program_id": "Feature111111111111111111111111111111111111",
|
||||
"runtime_status": "current",
|
||||
"expected_coverage_entries": 1,
|
||||
"source_contract": "solana-feature-gate-interface revoke-pending-activation instruction contract",
|
||||
"completeness_test": "feature::tests::coverage_declares_the_single_official_instruction"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_loader_v4",
|
||||
"program_id": "LoaderV411111111111111111111111111111111111",
|
||||
"runtime_status": "current",
|
||||
"expected_coverage_entries": 7,
|
||||
"source_contract": "solana-loader-v4-interface@3.1.0 official instruction enum",
|
||||
"completeness_test": "loaders::tests::coverage_declares_every_loader_entry"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_loader",
|
||||
"program_id": "NativeLoader1111111111111111111111111111111",
|
||||
"runtime_status": "runtime_dispatch",
|
||||
"expected_coverage_entries": 1,
|
||||
"source_contract": "Agave native-loader runtime direct-invocation behavior",
|
||||
"completeness_test": "loaders::tests::coverage_declares_every_loader_entry"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_secp256k1",
|
||||
"program_id": "KeccakSecp256k11111111111111111111111111111",
|
||||
"runtime_status": "current",
|
||||
"expected_coverage_entries": 1,
|
||||
"source_contract": "Agave secp256k1 precompile exact offset-table layout",
|
||||
"completeness_test": "precompiles::tests::coverage_declares_exactly_three_signature_precompile_surfaces"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_secp256r1",
|
||||
"program_id": "Secp256r1SigVerify1111111111111111111111111",
|
||||
"runtime_status": "current",
|
||||
"expected_coverage_entries": 1,
|
||||
"source_contract": "Agave secp256r1 precompile exact offset-table layout",
|
||||
"completeness_test": "precompiles::tests::coverage_declares_exactly_three_signature_precompile_surfaces"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_slashing",
|
||||
"program_id": "S1ashing11111111111111111111111111111111111",
|
||||
"runtime_status": "current",
|
||||
"expected_coverage_entries": 2,
|
||||
"source_contract": "SIMD-0204 and Agave Slashing builtin instruction contract",
|
||||
"completeness_test": "slashing::tests::coverage_declares_exactly_two_official_instructions"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_stake",
|
||||
"program_id": "Stake11111111111111111111111111111111111111",
|
||||
"runtime_status": "current",
|
||||
"expected_coverage_entries": 18,
|
||||
"source_contract": "solana-stake-interface@4.3.x official StakeInstruction variants",
|
||||
"completeness_test": "stake::tests::coverage_declares_every_official_stake_instruction"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_system",
|
||||
"program_id": "11111111111111111111111111111111",
|
||||
"runtime_status": "current",
|
||||
"expected_coverage_entries": 14,
|
||||
"source_contract": "solana-system-interface@3.2.x official SystemInstruction variants",
|
||||
"completeness_test": "system::tests::coverage_declares_all_current_system_variants"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_vote",
|
||||
"program_id": "Vote111111111111111111111111111111111111111",
|
||||
"runtime_status": "current",
|
||||
"expected_coverage_entries": 20,
|
||||
"source_contract": "solana-vote-interface@6.0.x official VoteInstruction variants",
|
||||
"completeness_test": "vote::tests::coverage_declares_every_official_vote_instruction"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_zk_elgamal_proof",
|
||||
"program_id": "ZkE1Gama1Proof11111111111111111111111111111",
|
||||
"runtime_status": "current",
|
||||
"expected_coverage_entries": 13,
|
||||
"source_contract": "solana-zk-elgamal-proof-interface official ProofInstruction variants",
|
||||
"completeness_test": "zk_elgamal::tests::coverage_declares_all_thirteen_official_instructions"
|
||||
},
|
||||
{
|
||||
"surface_code": "solana_native_zk_token_proof",
|
||||
"program_id": "ZkTokenProof1111111111111111111111111111111",
|
||||
"runtime_status": "historical_with_current_noop",
|
||||
"expected_coverage_entries": 18,
|
||||
"source_contract": "audited historical ZK Token Proof wire table plus current runtime no-op behavior",
|
||||
"completeness_test": "zk_token_proof::tests::coverage_declares_seventeen_historical_entries_and_current_noop_fallback"
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,430 +0,0 @@
|
||||
{
|
||||
"file": "docs/SOLANA_STANDARD_RPC_MATRIX.json",
|
||||
"version": 3,
|
||||
"release": "0.4.2-pre.025",
|
||||
"canonical_reference": "https://solana.com/docs/rpc",
|
||||
"http_method_count": 52,
|
||||
"http_typed_adapter_count": 52,
|
||||
"http_raw_json_count": 0,
|
||||
"ws_subscription_pair_count": 9,
|
||||
"ws_method_count": 18,
|
||||
"ws_unstable_subscription_count": 3,
|
||||
"http_methods": [
|
||||
{
|
||||
"method": "getAccountInfo",
|
||||
"category": "accounts",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "dedicated execution/acquisition adapter plus HttpClient/HttpEndpointPool"
|
||||
},
|
||||
{
|
||||
"method": "getBalance",
|
||||
"category": "accounts",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "dedicated execution/acquisition adapter plus HttpClient/HttpEndpointPool"
|
||||
},
|
||||
{
|
||||
"method": "getLargestAccounts",
|
||||
"category": "accounts",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getMinimumBalanceForRentExemption",
|
||||
"category": "accounts",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "dedicated execution/acquisition adapter plus HttpClient/HttpEndpointPool"
|
||||
},
|
||||
{
|
||||
"method": "getMultipleAccounts",
|
||||
"category": "accounts",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getProgramAccounts",
|
||||
"category": "accounts",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getTokenAccountBalance",
|
||||
"category": "tokens",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getTokenAccountsByDelegate",
|
||||
"category": "tokens",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getTokenAccountsByOwner",
|
||||
"category": "tokens",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getTokenLargestAccounts",
|
||||
"category": "tokens",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getTokenSupply",
|
||||
"category": "tokens",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getFeeForMessage",
|
||||
"category": "transactions",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "dedicated execution/acquisition adapter plus HttpClient/HttpEndpointPool"
|
||||
},
|
||||
{
|
||||
"method": "getLatestBlockhash",
|
||||
"category": "transactions",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "dedicated execution/acquisition adapter plus HttpClient/HttpEndpointPool"
|
||||
},
|
||||
{
|
||||
"method": "getRecentPrioritizationFees",
|
||||
"category": "transactions",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getSignaturesForAddress",
|
||||
"category": "transactions",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "dedicated execution/acquisition adapter plus HttpClient/HttpEndpointPool"
|
||||
},
|
||||
{
|
||||
"method": "getSignatureStatuses",
|
||||
"category": "transactions",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "dedicated execution/acquisition adapter plus HttpClient/HttpEndpointPool"
|
||||
},
|
||||
{
|
||||
"method": "getTransaction",
|
||||
"category": "transactions",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "dedicated execution/acquisition adapter plus HttpClient/HttpEndpointPool"
|
||||
},
|
||||
{
|
||||
"method": "getTransactionCount",
|
||||
"category": "transactions",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "isBlockhashValid",
|
||||
"category": "transactions",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "requestAirdrop",
|
||||
"category": "transactions",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "dedicated execution/acquisition adapter plus HttpClient/HttpEndpointPool"
|
||||
},
|
||||
{
|
||||
"method": "sendTransaction",
|
||||
"category": "transactions",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "dedicated execution/acquisition adapter plus HttpClient/HttpEndpointPool"
|
||||
},
|
||||
{
|
||||
"method": "simulateTransaction",
|
||||
"category": "transactions",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "dedicated execution/acquisition adapter plus HttpClient/HttpEndpointPool"
|
||||
},
|
||||
{
|
||||
"method": "getBlock",
|
||||
"category": "blocks",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getBlockCommitment",
|
||||
"category": "blocks",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getBlockHeight",
|
||||
"category": "blocks",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "dedicated execution/acquisition adapter plus HttpClient/HttpEndpointPool"
|
||||
},
|
||||
{
|
||||
"method": "getBlockProduction",
|
||||
"category": "blocks",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getBlocks",
|
||||
"category": "blocks",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getBlocksWithLimit",
|
||||
"category": "blocks",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getBlockTime",
|
||||
"category": "blocks",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getFirstAvailableBlock",
|
||||
"category": "blocks",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getRecentPerformanceSamples",
|
||||
"category": "blocks",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "minimumLedgerSlot",
|
||||
"category": "blocks",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getClusterNodes",
|
||||
"category": "cluster",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getEpochInfo",
|
||||
"category": "cluster",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "dedicated execution/acquisition adapter plus HttpClient/HttpEndpointPool"
|
||||
},
|
||||
{
|
||||
"method": "getEpochSchedule",
|
||||
"category": "cluster",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getGenesisHash",
|
||||
"category": "cluster",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "dedicated execution/acquisition adapter plus HttpClient/HttpEndpointPool"
|
||||
},
|
||||
{
|
||||
"method": "getHealth",
|
||||
"category": "cluster",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getHighestSnapshotSlot",
|
||||
"category": "cluster",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getIdentity",
|
||||
"category": "cluster",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getLeaderSchedule",
|
||||
"category": "cluster",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getMaxRetransmitSlot",
|
||||
"category": "cluster",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getMaxShredInsertSlot",
|
||||
"category": "cluster",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getSlot",
|
||||
"category": "cluster",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getSlotLeader",
|
||||
"category": "cluster",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getSlotLeaders",
|
||||
"category": "cluster",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getVersion",
|
||||
"category": "cluster",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getVoteAccounts",
|
||||
"category": "cluster",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getInflationGovernor",
|
||||
"category": "economics",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getInflationRate",
|
||||
"category": "economics",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getInflationReward",
|
||||
"category": "economics",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getStakeMinimumDelegation",
|
||||
"category": "economics",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
},
|
||||
{
|
||||
"method": "getSupply",
|
||||
"category": "economics",
|
||||
"contract": "typed_adapter",
|
||||
"implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport"
|
||||
}
|
||||
],
|
||||
"ws_subscriptions": [
|
||||
{
|
||||
"subscribe_method": "accountSubscribe",
|
||||
"unsubscribe_method": "accountUnsubscribe",
|
||||
"notification_method": "accountNotification",
|
||||
"stability": "stable",
|
||||
"request_contract": "typed_adapter",
|
||||
"persistent_runtime": true,
|
||||
"library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription",
|
||||
"notification_contract": "typed_adapter",
|
||||
"explicit_capability_required": false
|
||||
},
|
||||
{
|
||||
"subscribe_method": "blockSubscribe",
|
||||
"unsubscribe_method": "blockUnsubscribe",
|
||||
"notification_method": "blockNotification",
|
||||
"stability": "unstable",
|
||||
"request_contract": "typed_adapter",
|
||||
"persistent_runtime": true,
|
||||
"library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription",
|
||||
"notification_contract": "typed_adapter",
|
||||
"explicit_capability_required": true
|
||||
},
|
||||
{
|
||||
"subscribe_method": "logsSubscribe",
|
||||
"unsubscribe_method": "logsUnsubscribe",
|
||||
"notification_method": "logsNotification",
|
||||
"stability": "stable",
|
||||
"request_contract": "typed_adapter",
|
||||
"persistent_runtime": true,
|
||||
"library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription",
|
||||
"notification_contract": "typed_adapter",
|
||||
"explicit_capability_required": false
|
||||
},
|
||||
{
|
||||
"subscribe_method": "programSubscribe",
|
||||
"unsubscribe_method": "programUnsubscribe",
|
||||
"notification_method": "programNotification",
|
||||
"stability": "stable",
|
||||
"request_contract": "typed_adapter",
|
||||
"persistent_runtime": true,
|
||||
"library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription",
|
||||
"notification_contract": "typed_adapter",
|
||||
"explicit_capability_required": false
|
||||
},
|
||||
{
|
||||
"subscribe_method": "rootSubscribe",
|
||||
"unsubscribe_method": "rootUnsubscribe",
|
||||
"notification_method": "rootNotification",
|
||||
"stability": "stable",
|
||||
"request_contract": "typed_adapter",
|
||||
"persistent_runtime": true,
|
||||
"library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription",
|
||||
"notification_contract": "typed_adapter",
|
||||
"explicit_capability_required": false
|
||||
},
|
||||
{
|
||||
"subscribe_method": "signatureSubscribe",
|
||||
"unsubscribe_method": "signatureUnsubscribe",
|
||||
"notification_method": "signatureNotification",
|
||||
"stability": "stable",
|
||||
"request_contract": "typed_adapter",
|
||||
"persistent_runtime": true,
|
||||
"library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription",
|
||||
"notification_contract": "typed_adapter",
|
||||
"explicit_capability_required": false
|
||||
},
|
||||
{
|
||||
"subscribe_method": "slotSubscribe",
|
||||
"unsubscribe_method": "slotUnsubscribe",
|
||||
"notification_method": "slotNotification",
|
||||
"stability": "stable",
|
||||
"request_contract": "typed_adapter",
|
||||
"persistent_runtime": true,
|
||||
"library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription",
|
||||
"notification_contract": "typed_adapter",
|
||||
"explicit_capability_required": false
|
||||
},
|
||||
{
|
||||
"subscribe_method": "slotsUpdatesSubscribe",
|
||||
"unsubscribe_method": "slotsUpdatesUnsubscribe",
|
||||
"notification_method": "slotsUpdatesNotification",
|
||||
"stability": "unstable",
|
||||
"request_contract": "typed_adapter",
|
||||
"persistent_runtime": true,
|
||||
"library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription",
|
||||
"notification_contract": "typed_adapter",
|
||||
"explicit_capability_required": true
|
||||
},
|
||||
{
|
||||
"subscribe_method": "voteSubscribe",
|
||||
"unsubscribe_method": "voteUnsubscribe",
|
||||
"notification_method": "voteNotification",
|
||||
"stability": "unstable",
|
||||
"request_contract": "typed_adapter",
|
||||
"persistent_runtime": true,
|
||||
"library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription",
|
||||
"notification_contract": "typed_adapter",
|
||||
"explicit_capability_required": true
|
||||
}
|
||||
],
|
||||
"ws_typed_request_count": 9,
|
||||
"ws_typed_notification_count": 9,
|
||||
"ws_persistent_runtime_count": 9
|
||||
}
|
||||
@@ -1,217 +0,0 @@
|
||||
{
|
||||
"file": "docs/SPL_ASSOCIATED_TOKEN_ACCOUNT_MATRIX.json",
|
||||
"version": 11,
|
||||
"schemaVersion": 1,
|
||||
"bot3Migration": {
|
||||
"target": "kb-lib.decoder.spl.associated_token_account",
|
||||
"status": "decoder_operator_validated_materializers_ported",
|
||||
"prerelease": "0.1.0-pre.007",
|
||||
"preservedDifferentialTests": 10,
|
||||
"materializerPorted": true,
|
||||
"publicMaterializers": [
|
||||
"kb_lib::TokenAccountsMaterializer",
|
||||
"kb_lib::RiskMaterializer"
|
||||
],
|
||||
"executorPorted": false,
|
||||
"pipelinePorted": false
|
||||
},
|
||||
"programId": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
|
||||
"systemProgramId": "11111111111111111111111111111111",
|
||||
"supportedTokenPrograms": [
|
||||
{"code": "spl_token", "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "scope": "classic_token_account_lifecycle_only"},
|
||||
{"code": "spl_token2022", "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", "scope": "ata_lifecycle_only_without_general_token2022_instruction_or_extension_decode"}
|
||||
],
|
||||
"interface": {
|
||||
"workspaceConstraint": "^2.0",
|
||||
"resolvedVersion": "2.0.0",
|
||||
"resolutionEvidence": "docs_rs_latest_published_version_and_official_interface_tag",
|
||||
"workspaceCargoResolutionStatus": "confirmed_by_operator_cargo_tree_2026-07-16",
|
||||
"features": ["borsh"],
|
||||
"bincodeEnabled": false,
|
||||
"officialTag": "interface@v2.0.0",
|
||||
"releaseCommit": "250da0e21a9853a7afddba85658ed8a9119c71c9",
|
||||
"releaseDate": "2025-08-08",
|
||||
"instructionSource": "https://github.com/solana-program/associated-token-account/blob/interface@v2.0.0/interface/src/instruction.rs",
|
||||
"addressSource": "https://github.com/solana-program/associated-token-account/blob/interface@v2.0.0/interface/src/address.rs",
|
||||
"publishedDocumentation": "https://docs.rs/spl-associated-token-account-interface/2.0.0/spl_associated_token_account_interface/"
|
||||
},
|
||||
"processor": {
|
||||
"auditedRelease": "program@v8.0.0",
|
||||
"releaseCommit": "0b867b5",
|
||||
"releaseDate": "2025-10-29",
|
||||
"source": "https://github.com/solana-program/associated-token-account/blob/program@v8.0.0/program/src/processor.rs",
|
||||
"deploymentBinaryEquality": {"localnet": "not_tested", "devnet": "not_proven", "mainnet": "not_proven"},
|
||||
"note": "Interface publication, processor source, cluster deployment and successful execution are tracked independently."
|
||||
},
|
||||
"wire": {
|
||||
"format": "Borsh enum with unit variants encoded as one u8 ordinal",
|
||||
"strictSuffixPolicy": "reject",
|
||||
"legacyEmptyCreate": {"decodeSupport": true, "builderEmits": false, "encodingHex": "", "status": "historical_runtime_and_transaction_parser_compatibility_to_be_reconfirmed_by_cluster_corpus"},
|
||||
"unknownOrTruncatedPolicy": "bounded diagnostic without lifecycle projection"
|
||||
},
|
||||
"pdaDerivation": {
|
||||
"programId": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
|
||||
"seedOrder": ["wallet_address_bytes[32]", "token_program_id_bytes[32]", "mint_address_bytes[32]"],
|
||||
"algorithm": "Pubkey::find_program_address",
|
||||
"validationPolicy": "preserve observed address and report exact match or mismatch; never replace an observed account silently",
|
||||
"differentialVectors": [
|
||||
{"wallet": "11111111111111111111111111111111", "mint": "So11111111111111111111111111111111111111112", "tokenProgramId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "expectedAta": "aqxoAhCwpy3oB1BpNw9hL1HdLYLgPpbPjzxDrrQj3Fs", "expectedBump": 254, "evidence": "PublicKey.findProgramAddressSync with the canonical official seed order"},
|
||||
{"wallet": "11111111111111111111111111111111", "mint": "So11111111111111111111111111111111111111112", "tokenProgramId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", "expectedAta": "2sZUUBGq1i6aE47ZoxCaCW89jmYm2EXLPPmNMgMDXHMS", "expectedBump": 250, "evidence": "PublicKey.findProgramAddressSync with the canonical official seed order"}
|
||||
]
|
||||
},
|
||||
"limits": {"exactVariantCount": 3, "createRequiredAccountCount": 6, "recoverNestedRequiredAccountCount": 7, "maximumDiagnosticBytes": 256, "extraAccounts": "preserved_and_reported; never assigned an invented role"},
|
||||
"executionPreflight": {
|
||||
"clusters": ["localnet", "devnet"],
|
||||
"programIds": ["associated_token_program", "selected_token_program", "system_program_for_creation"],
|
||||
"stateChecks": ["mint_exists_initialized_and_owned_by_selected_token_program", "canonical_pda_derivation", "strict_create_absence", "idempotent_absence_or_existing_account_compatibility", "recover_nested_three_account_relationships", "required_signers_available", "payer_balance_covers_rent_plus_fee_ceiling"],
|
||||
"token2022Boundary": "base Mint and Token Account prefixes are validated while suffix extensions remain opaque; simulation determines extension-dependent runtime acceptance and exact account size",
|
||||
"simulation": "required_before_signing_or_sending",
|
||||
"defaultMode": "dry_run"
|
||||
},
|
||||
"surfaceEquality": {"matrixVariantCount": 3, "officialInterfaceVariantCount": 3, "compiledDecoderCoverageStatus": "three_exact_compiled_instruction_declarations_operator_validated", "compiledExecutorCapabilityStatus": "three_exact_current_capabilities_operator_validated", "requiredFinalInvariant": "matrix == official interface enum == decoder coverage == executor capability declarations"},
|
||||
"instructions": [
|
||||
{
|
||||
"name": "create",
|
||||
"discriminant": 0,
|
||||
"canonicalEncodingHex": "00",
|
||||
"acceptedDecodeEncodingsHex": ["", "00"],
|
||||
"status": "current_with_legacy_empty_wire_compatibility",
|
||||
"accounts": [
|
||||
{"position": 0, "role": "funding_account", "signer": true, "writable": true, "expectedProgram": "system_account"},
|
||||
{"position": 1, "role": "associated_token_account", "signer": false, "writable": true, "expectedProgram": "derived_pda_before_creation_or_supported_token_program_after_creation"},
|
||||
{"position": 2, "role": "wallet_owner", "signer": false, "writable": false, "expectedProgram": "unconstrained_wallet_address"},
|
||||
{"position": 3, "role": "mint", "signer": false, "writable": false, "expectedProgram": "account_owned_by_token_program_at_runtime"},
|
||||
{"position": 4, "role": "system_program", "signer": false, "writable": false, "expectedAddress": "11111111111111111111111111111111"},
|
||||
{"position": 5, "role": "token_program", "signer": false, "writable": false, "allowedAddresses": ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"]}
|
||||
],
|
||||
"addressRules": ["associated_token_account = PDA(wallet_owner, token_program, mint)", "observed associated_token_account is retained on mismatch"],
|
||||
"tokenProgramDifferences": {"classic": "create and initialize a classic token account", "token2022": "size is obtained from the Token-2022 mint and immutable-owner initialization is performed before account initialization; extensions themselves remain out of decoder scope"},
|
||||
"runtimeRules": ["fails if the associated account already exists", "funding account pays rent and creation cost", "mint and created account must be coherent with the selected token program"],
|
||||
"event": "spl_associated_token_account.create",
|
||||
"authorizedProjections": ["token_accounts:ata_created"],
|
||||
"forbiddenProjections": ["token_balance_snapshot", "duplicate_spl_token_initialize_account_cpi", "token2022_extension_fact"],
|
||||
"officialBuilder": {"available": true, "function": "create_associated_token_account", "canonicalWireOnly": true},
|
||||
"executorSupport": {"status": "supported", "operationCode": "spl_associated_token_account.create", "builder": "create_associated_token_account", "simulation": "required", "defaultMode": "dry_run"},
|
||||
"proofs": {"synthetic": ["canonical_00", "legacy_empty", "classic_token_program", "token2022_program", "wrong_ata", "missing_account", "extra_account", "duplicate_account", "wrong_flags", "unknown_suffix", "outer", "inner_cpi", "committed", "failed_intent"], "localnet": "not_tested", "devnet": "not_tested", "mainnetSignatures": []}
|
||||
},
|
||||
{
|
||||
"name": "create_idempotent",
|
||||
"discriminant": 1,
|
||||
"canonicalEncodingHex": "01",
|
||||
"acceptedDecodeEncodingsHex": ["01"],
|
||||
"status": "current",
|
||||
"accounts": [
|
||||
{"position": 0, "role": "funding_account", "signer": true, "writable": true, "expectedProgram": "system_account"},
|
||||
{"position": 1, "role": "associated_token_account", "signer": false, "writable": true, "expectedProgram": "derived_pda_or_supported_token_program"},
|
||||
{"position": 2, "role": "wallet_owner", "signer": false, "writable": false},
|
||||
{"position": 3, "role": "mint", "signer": false, "writable": false},
|
||||
{"position": 4, "role": "system_program", "signer": false, "writable": false, "expectedAddress": "11111111111111111111111111111111"},
|
||||
{"position": 5, "role": "token_program", "signer": false, "writable": false, "allowedAddresses": ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"]}
|
||||
],
|
||||
"addressRules": ["associated_token_account = PDA(wallet_owner, token_program, mint)", "existing account must retain the selected token program, wallet owner and mint"],
|
||||
"tokenProgramDifferences": {"classic": "existing classic account is accepted only when owner and mint match", "token2022": "existing Token-2022 account is accepted only when owner and mint match; no extension semantics are inferred"},
|
||||
"runtimeRules": ["creates when absent", "succeeds without recreating when an initialized compatible ATA already exists", "fails when an existing account has a different wallet owner, mint or account owner program"],
|
||||
"event": "spl_associated_token_account.create_idempotent",
|
||||
"authorizedProjections": ["token_accounts:ata_created_or_reused_idempotently"],
|
||||
"forbiddenProjections": ["token_balance_snapshot", "duplicate_spl_token_initialize_account_cpi", "token2022_extension_fact"],
|
||||
"officialBuilder": {"available": true, "function": "create_associated_token_account_idempotent", "canonicalWireOnly": true},
|
||||
"executorSupport": {"status": "supported", "operationCode": "spl_associated_token_account.create_idempotent", "builder": "create_associated_token_account_idempotent", "simulation": "required", "defaultMode": "dry_run"},
|
||||
"proofs": {"synthetic": ["canonical_01", "absent_account", "compatible_existing_account", "conflicting_existing_owner", "conflicting_existing_mint", "conflicting_existing_program", "classic_token_program", "token2022_program", "wrong_ata", "wrong_flags", "unexpected_suffix", "outer", "inner_cpi", "committed", "failed_intent"], "localnet": "not_tested", "devnet": ["5Vw4QFpMa8oJ8MsLrvDg4RFzxqUh27mTFRFzzwJFoA4uAry8rZQc6GP92aidzWugn3CeZ5NYNxDp7tZ6bh8XyN1P", "2H9VfhDySdXMteazm2P3s2fTttJBQzMJinQtKqsLtkjDg7zbFFgiWG81UxRQF4va3bbR2pUV4QGo2qErisR8CPbP", "3wWTkx45LoDR3UaU8VUfsWxwHuLFyJyhrnDrmijCa7pXPdmJKz3rQ1LdyDvb78dvNRiKqw5ee7HuZ6Gjj1Gpfv6q", "bMMjoHcwbaTvLXerdQ4kbGXGb7wydiTyvSEwwmoKKLQcRWWBzqGUMYHZztonNnER1iWZ7yKp9p3neeMhypX4QAJ", "4RZKA3KwEbSqgU8UnemTgvd3fBgJmoSK2nmaaTNP8nJGTVh6DrFwrHVZYCBvLFvhvzUdi9p1KRFe4hHqYt7JbVSG"], "mainnetSignatures": ["2F9RvuCkevfJN7ju252hAWoCE58wagCXCWHQF9Wsdtsxvp3HcuNJQFCwU7zGqe3z3b8pv3vPp4xY5EH7KLcaHQCY"], "realCorpusStatus": "controlled classic and Token-2022 CreateIdempotent creation then compatible-existing reuse confirmed, materialized once per signature and replayed idempotently; search-discovered Token-2022 outer transaction remains additional corpus"}
|
||||
},
|
||||
{
|
||||
"name": "recover_nested",
|
||||
"discriminant": 2,
|
||||
"canonicalEncodingHex": "02",
|
||||
"acceptedDecodeEncodingsHex": ["02"],
|
||||
"status": "current_recovery_operation",
|
||||
"accounts": [
|
||||
{"position": 0, "role": "nested_associated_token_account", "signer": false, "writable": true},
|
||||
{"position": 1, "role": "nested_mint", "signer": false, "writable": false},
|
||||
{"position": 2, "role": "wallet_nested_mint_associated_token_account", "signer": false, "writable": true},
|
||||
{"position": 3, "role": "owner_associated_token_account", "signer": false, "writable": false},
|
||||
{"position": 4, "role": "owner_mint", "signer": false, "writable": false},
|
||||
{"position": 5, "role": "wallet_owner", "signer": true, "writable": true},
|
||||
{"position": 6, "role": "token_program", "signer": false, "writable": false, "allowedAddresses": ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"]}
|
||||
],
|
||||
"addressRules": ["owner_associated_token_account = PDA(wallet_owner, token_program, owner_mint)", "nested_associated_token_account = PDA(owner_associated_token_account, token_program, nested_mint)", "wallet_nested_mint_associated_token_account = PDA(wallet_owner, token_program, nested_mint)"],
|
||||
"tokenProgramDifferences": {"classic": "transfer the complete nested balance and close the nested classic token account", "token2022": "same ATA address relationships through Token-2022 CPIs; extension-specific transfer or close restrictions can prevent recovery and are not decoded as ATA facts"},
|
||||
"runtimeRules": ["all three derived addresses must match their observed accounts", "owner and nested token accounts must be initialized and coherent with their respective mints", "wallet owner must sign", "complete nested token balance is moved to the wallet destination ATA", "nested account is closed and its lamports are returned to the wallet"],
|
||||
"event": "spl_associated_token_account.recover_nested",
|
||||
"authorizedProjections": ["token_accounts:nested_ata_recovered", "risk:nested_ata_anti_pattern_recovered"],
|
||||
"forbiddenProjections": ["duplicate_spl_token_transfer_cpi", "duplicate_spl_token_close_account_cpi", "token_balance_snapshot", "token2022_extension_fact"],
|
||||
"officialBuilder": {"available": true, "function": "recover_nested", "canonicalWireOnly": true},
|
||||
"executorSupport": {"status": "supported", "operationCode": "spl_associated_token_account.recover_nested", "builder": "recover_nested", "simulation": "required", "defaultMode": "dry_run"},
|
||||
"proofs": {"synthetic": ["canonical_02", "classic_token_program", "token2022_program", "valid_three_pda_relationships", "wrong_nested_ata", "wrong_destination_ata", "wrong_owner_ata", "owner_and_nested_mints_not_inverted", "missing_account", "extra_account", "duplicate_account", "wrong_flags", "unexpected_suffix", "outer", "inner_cpi", "committed", "failed_intent"], "localnet": "not_tested", "devnet": ["37LG6GdMRp5ECG8qf1RSYxmriJk75UtCwqwzXZWpArebkKo6BQvGhYEnbDh2A6KWiUaHK28Zy1gGGZ5zihvrHskM"], "mainnetSignatures": [], "realCorpusStatus": "controlled classic RecoverNested confirmed with positive raw balance transfer, nested ATA closure, owner and destination post-validation, two distinct ATA lifecycle and risk projections, and idempotent second replay", "controlledDevnetFixture": {"walletOwner": "DwuAapPLg6pEJ4QhmxvPg8rzkavmYdg5FW4dfEMcg8B2", "ownerMint": "So11111111111111111111111111111111111111112", "ownerAssociatedTokenAccount": "3tdXq1W7vEbbkxQmT1r2fc349uYti98zpwLKhp7FFbF5", "nestedMint": "3fd5CqP1w4Y1xeMoAe3apA7Jf5SbL3vboxv7ihyXhC9A", "nestedAssociatedTokenAccount": "AAyvGeKpq6i3kxMcScJLcN2u5iyAsspr731LhgXygti5", "walletNestedMintAssociatedTokenAccount": "69TP2QoSx2inueFAEb6npjumH5o3wGJQDSwwAJLLfyWp", "rawAmountTransferred": "1000000000", "nestedAccountClosed": true, "destinationUiBalanceAfter": "1", "materializedOutputCount": 2}}
|
||||
}
|
||||
],
|
||||
"offlineCorpus": {
|
||||
"status": "implemented_and_operator_validated_in_decoder_unit_tests",
|
||||
"wire": ["create_00", "legacy_empty_create", "create_idempotent_01", "recover_nested_02", "unknown_tag", "rejected_suffix"],
|
||||
"tokenPrograms": ["spl_token_classic", "token2022"],
|
||||
"locations": ["outer", "inner_cpi"],
|
||||
"transactionOutcomes": ["committed", "failed_uncommitted_intent"],
|
||||
"accountShapes": ["canonical", "missing", "extra", "duplicate", "wrong_flags", "wrong_derived_address", "unsupported_token_program", "wrong_system_program"],
|
||||
"derivation": ["create_single_pda", "recover_nested_three_independent_pda_relationships", "official_helper_differential_vectors"],
|
||||
"limits": "diagnostic count and payload prefix are bounded; no arbitrary payload or account repair"
|
||||
},
|
||||
"materializationContract": {
|
||||
"committedOnly": true,
|
||||
"idempotenceIdentity": "signature + instruction_path + program_id + normalized_operation + ata",
|
||||
"projectionOwners": [
|
||||
{
|
||||
"crate": "kb-lib",
|
||||
"component": "materializer.token.accounts",
|
||||
"facts": [
|
||||
"ata_created",
|
||||
"ata_created_or_reused_idempotently",
|
||||
"nested_ata_recovered"
|
||||
],
|
||||
"justification": "ATA creation and recovery are stable token-account lifecycle facts; this crate already owns instruction-level token-account mutations."
|
||||
},
|
||||
{
|
||||
"crate": "kb-lib",
|
||||
"component": "materializer.risk",
|
||||
"facts": [
|
||||
"nested_ata_anti_pattern_recovered"
|
||||
],
|
||||
"justification": "A committed RecoverNested proves the distinct stable risk fact that a nested ATA anti-pattern existed and was recovered; no score or speculative severity is added."
|
||||
}
|
||||
],
|
||||
"explicitNoProjection": [
|
||||
{
|
||||
"crate": "kb-lib",
|
||||
"component": "materializer.lifecycle",
|
||||
"reason": "Native program lifecycle remains owned here; duplicating ATA lifecycle would overlap the token-account materializer."
|
||||
},
|
||||
{
|
||||
"crate": "kb-lib",
|
||||
"component": "materializer.admin",
|
||||
"reason": "ATA instructions do not change a mint authority, freeze authority, close authority or multisig configuration."
|
||||
},
|
||||
{
|
||||
"crate": "kb-lib",
|
||||
"component": "materializer.fees",
|
||||
"reason": "ATA wire does not prove an exact rent or network-fee amount; core balance changes and execution validation retain those facts."
|
||||
}
|
||||
],
|
||||
"implementationStatus": "pre_004 executor and stateful preflight operator validated; pre_005 classic and Token-2022 CreateIdempotent Devnet orchestration plus Tauri validated; pre_006 classic RecoverNested Devnet orchestration validated",
|
||||
"idempotentOutcomeLimit": "CreateIdempotent parent proves successful ensure semantics but cannot distinguish created from reused without sibling CPI correlation; the projection preserves created_or_reused and invents neither boolean.",
|
||||
"parentChildOwnership": "ATA parent owns only associated-address lifecycle and the distinct nested-ATA risk fact; SPL Token or Token-2022 CPI observations own token initialize, transfer and close mutations.",
|
||||
"noSnapshotClaim": true,
|
||||
"databaseMigrationStatus": "not_justified"
|
||||
},
|
||||
"executionContract": {"simulationRequired": true, "dryRunDefault": true, "clusterPolicyOwnedByCommonLayers": true, "rentAndFeeCeilingRequired": true, "signerDeduplicationDoesNotChangeMetaOrder": true, "confirmedStateReadRetryBound": 20, "canonicalHydrationRpcRetryBoundPerAttempt": 2, "postValidation": {"create": "ATA exists, is owned by selected token program, and contains expected wallet owner and mint", "createIdempotent": "same invariant whether the ATA was created or reused", "recoverNested": "owner ATA and destination remain coherent, nested ATA is absent, and no balance value is invented by ATA projection"}},
|
||||
"deploymentAudit": {
|
||||
"localnet": {"status": "not_tested", "evidence": []},
|
||||
"devnet": {"status": "classic and Token-2022 CreateIdempotent creation and compatible-existing reuse confirmed; classic RecoverNested positive-balance recovery confirmed", "evidence": ["5Vw4QFpMa8oJ8MsLrvDg4RFzxqUh27mTFRFzzwJFoA4uAry8rZQc6GP92aidzWugn3CeZ5NYNxDp7tZ6bh8XyN1P", "2H9VfhDySdXMteazm2P3s2fTttJBQzMJinQtKqsLtkjDg7zbFFgiWG81UxRQF4va3bbR2pUV4QGo2qErisR8CPbP", "3wWTkx45LoDR3UaU8VUfsWxwHuLFyJyhrnDrmijCa7pXPdmJKz3rQ1LdyDvb78dvNRiKqw5ee7HuZ6Gjj1Gpfv6q", "bMMjoHcwbaTvLXerdQ4kbGXGb7wydiTyvSEwwmoKKLQcRWWBzqGUMYHZztonNnER1iWZ7yKp9p3neeMhypX4QAJ", "4RZKA3KwEbSqgU8UnemTgvd3fBgJmoSK2nmaaTNP8nJGTVh6DrFwrHVZYCBvLFvhvzUdi9p1KRFe4hHqYt7JbVSG", "37LG6GdMRp5ECG8qf1RSYxmriJk75UtCwqwzXZWpArebkKo6BQvGhYEnbDh2A6KWiUaHK28Zy1gGGZ5zihvrHskM"], "controlledToken2022Fixture": {"mint": "3DxKAUfCZkR9oRfMXeRNpiVL464eKbTieymBrVhsoKTE", "mintOwner": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", "mintBaseLength": 82, "walletOwner": "DwuAapPLg6pEJ4QhmxvPg8rzkavmYdg5FW4dfEMcg8B2", "associatedTokenAccount": "6WfCJPt7GZQyMJAUS1AMHJrD7Vid8e9xUEQVgi5Q9C9Y", "accountLength": 170, "accountExtension": "immutable_owner", "creationSlot": 476702448, "existingReuseSlot": 476703343}},
|
||||
"mainnet": {"status": "search_discovered_token2022_create_idempotent_not_yet_replayed", "evidence": ["2F9RvuCkevfJN7ju252hAWoCE58wagCXCWHQF9Wsdtsxvp3HcuNJQFCwU7zGqe3z3b8pv3vPp4xY5EH7KLcaHQCY"]},
|
||||
"rateLimitRecovery": "preserve confirmed signatures and resume bounded hydration; never recreate accounts blindly after HTTP 429"
|
||||
},
|
||||
"nonClaims": [
|
||||
"No general Token-2022 instruction or extension decoding is implemented in 0.4.5.",
|
||||
"No Token balance or final account snapshot is reconstructed from ATA instructions.",
|
||||
"No cluster binary equality is inferred from interface publication.",
|
||||
"The controlled Token-2022 proof covers ATA lifecycle only and does not claim general Token-2022 instruction or extension decoding.",
|
||||
"No dedicated SQL table is justified by this audit tranche."
|
||||
]
|
||||
}
|
||||
@@ -1,121 +0,0 @@
|
||||
{
|
||||
"file": "docs/SPL_ELGAMAL_REGISTRY_MATRIX.json",
|
||||
"version": "0.1.0-pre.008",
|
||||
"programId": "regVYJW7tcT8zipN5YiBvHsvR5jXW1uLFxaHSbugABg",
|
||||
"interface": {
|
||||
"crate": "spl-elgamal-registry-interface",
|
||||
"resolvedVersion": "0.2.1",
|
||||
"auditedCommitPrefix": "e18f9c6"
|
||||
},
|
||||
"technicalBoundaries": {
|
||||
"token2022ProgramId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
|
||||
"zkElgamalProofProgramId": "ZkE1Gama1Proof11111111111111111111111111111",
|
||||
"registryDecodesProofInstructions": false,
|
||||
"token2022DecoderOwnsRegistryInstructions": false
|
||||
},
|
||||
"pda": {
|
||||
"seedUtf8": "elgamal-registry",
|
||||
"ownerAddressIsSeed": true,
|
||||
"programIdIsDerivationProgram": true
|
||||
},
|
||||
"instructions": [
|
||||
{
|
||||
"name": "create_registry",
|
||||
"tag": 0,
|
||||
"wire": {
|
||||
"exactLengthBytes": 2,
|
||||
"fields": [
|
||||
{
|
||||
"name": "tag",
|
||||
"type": "u8",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "proofInstructionOffset",
|
||||
"type": "i8"
|
||||
}
|
||||
]
|
||||
},
|
||||
"accounts": [
|
||||
{
|
||||
"position": 0,
|
||||
"role": "registry_account",
|
||||
"writable": true,
|
||||
"signer": false
|
||||
},
|
||||
{
|
||||
"position": 1,
|
||||
"role": "wallet_owner",
|
||||
"writable": false,
|
||||
"signer": true
|
||||
},
|
||||
{
|
||||
"position": 2,
|
||||
"role": "system_program",
|
||||
"writable": false,
|
||||
"signer": false
|
||||
},
|
||||
{
|
||||
"position": 3,
|
||||
"role": "instructions_sysvar_or_proof_context",
|
||||
"writable": false,
|
||||
"signer": false
|
||||
}
|
||||
],
|
||||
"builder": "create_registry",
|
||||
"status": "current"
|
||||
},
|
||||
{
|
||||
"name": "update_registry",
|
||||
"tag": 1,
|
||||
"wire": {
|
||||
"exactLengthBytes": 2,
|
||||
"fields": [
|
||||
{
|
||||
"name": "tag",
|
||||
"type": "u8",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"name": "proofInstructionOffset",
|
||||
"type": "i8"
|
||||
}
|
||||
]
|
||||
},
|
||||
"accounts": [
|
||||
{
|
||||
"position": 0,
|
||||
"role": "registry_account",
|
||||
"writable": true,
|
||||
"signer": false
|
||||
},
|
||||
{
|
||||
"position": 1,
|
||||
"role": "instructions_sysvar_or_proof_context",
|
||||
"writable": false,
|
||||
"signer": false
|
||||
},
|
||||
{
|
||||
"position": 2,
|
||||
"role": "registry_owner",
|
||||
"writable": false,
|
||||
"signer": true
|
||||
}
|
||||
],
|
||||
"builder": "update_registry",
|
||||
"status": "current"
|
||||
}
|
||||
],
|
||||
"proofLocationSemantics": {
|
||||
"offsetZero": "context_state_account",
|
||||
"offsetNonZero": "relative_zk_proof_instruction",
|
||||
"publishedInlineBuilderOffset": 1
|
||||
},
|
||||
"decoder": {
|
||||
"component": "kb-lib.decoder.spl.elgamal_registry",
|
||||
"coverageEqualityRequired": true,
|
||||
"unknownTagPolicy": "failed",
|
||||
"trailingBytesPolicy": "failed",
|
||||
"failedTransactionCommitted": false
|
||||
}
|
||||
}
|
||||
@@ -1,275 +0,0 @@
|
||||
{
|
||||
"file": "docs/SPL_MEMO_MATRIX.json",
|
||||
"version": 11,
|
||||
"matrixVersion": 4,
|
||||
"scope": "SPL Memo v1, v3 et v4",
|
||||
"bot3Migration": {
|
||||
"decoderModule": "kb-lib/src/decoder/spl/memo",
|
||||
"publicDecoder": "kb_lib::DcSplMemoDecoder",
|
||||
"decoderStatus": "ported_in_0.1.0-pre.005",
|
||||
"publicMaterializer": "kb_lib::MtTransactionAnnotationMaterializer",
|
||||
"materializerStatus": "ported_in_0.1.0-pre.011",
|
||||
"executorStatus": "pending_later_tranche"
|
||||
},
|
||||
"interface": {
|
||||
"crate": "spl-memo-interface",
|
||||
"requestedVersion": "^2.1",
|
||||
"auditedPublishedVersion": "2.1.0",
|
||||
"lockfilePresentInInputArchive": false,
|
||||
"builder": "spl_memo_interface::instruction::build_memo",
|
||||
"builderAcceptsExplicitProgramId": true,
|
||||
"wire": "octets exacts du message, sans préfixe ni discriminator",
|
||||
"accountMetas": "ordre fourni, readonly, signer=true"
|
||||
},
|
||||
"generations": [
|
||||
{
|
||||
"generation": "v1",
|
||||
"programId": "Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo",
|
||||
"surfaceCode": "spl_memo_v1",
|
||||
"status": "historique immuable",
|
||||
"instructionData": "octets UTF-8 bruts",
|
||||
"emptyPayload": "accepte",
|
||||
"accounts": "acceptes mais ignores par le runtime v1",
|
||||
"signerRequirement": "aucune",
|
||||
"accountOrder": "sans effet runtime mais conserve par le decodeur",
|
||||
"duplicateAccounts": "sans effet runtime mais conserves par le decodeur",
|
||||
"runtimeLogs": [],
|
||||
"utf8Failure": "InvalidInstructionData",
|
||||
"builderOfficial": "builder generique 2.1.0 avec program ID v1 explicite",
|
||||
"currentInvocation": {
|
||||
"mainnet": "transactions reelles observees et rejouees; aucun envoi execute dans cette tranche",
|
||||
"devnet": "non verifie",
|
||||
"localnet": "binaire historique non embarque"
|
||||
},
|
||||
"realCorpusSignatures": [
|
||||
"imGSCgR83S3tFPTcZPqWLWRcL1piFX1vkYMRVsRdJeBM4p7viDb4V6Hq2x51ovTmbMgGBMdn8kyeNiAg9Ph6MfE",
|
||||
"65J2cmiZAB5h7B3kyzhponNZQzMCbbxVn1A8cydvKKq1FYxYLEarG7ydjuuxFatXCG7Foju21XMUdRkT96jYBS3C"
|
||||
]
|
||||
},
|
||||
{
|
||||
"generation": "v3",
|
||||
"programId": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",
|
||||
"surfaceCode": "spl_memo_v3",
|
||||
"status": "historique encore largement observe",
|
||||
"instructionData": "octets UTF-8 bruts",
|
||||
"emptyPayload": "accepte",
|
||||
"accounts": "zero ou plusieurs; chaque compte fourni doit etre signer",
|
||||
"signerRequirement": "tous les comptes fournis",
|
||||
"accountOrder": "ordre de parcours et de logs conserve",
|
||||
"duplicateAccounts": "parcourus et journalises dans leur ordre; aucun rejet dedie",
|
||||
"runtimeLogs": [
|
||||
"Signed by <pubkey> pour chaque compte signer",
|
||||
"Invalid UTF-8, from byte <offset> en cas d'erreur",
|
||||
"Memo (len <octets>): <texte> en cas de succes"
|
||||
],
|
||||
"utf8Failure": "InvalidInstructionData",
|
||||
"missingSignerFailure": "MissingRequiredSignature avant validation UTF-8",
|
||||
"builderOfficial": "builder generique 2.1.0 avec program ID v3 explicite",
|
||||
"currentInvocation": {
|
||||
"mainnet": "transactions reelles observees et rejouees; aucun envoi execute dans cette tranche",
|
||||
"devnet": "non verifie",
|
||||
"localnet": "possible avec binaire officiel, non execute"
|
||||
},
|
||||
"realCorpusSignatures": [
|
||||
"2DkiJJVAyJ1aJHn2ff8JhKA5C8wbakw76LZvgxmcQ1qtHNDprGvA6TntXXK5FSAeRMZyrDt8ujAkGMgBVcEhjsmT",
|
||||
"3G18ZUSP29Aw12NwnAYRYgix87fa559nMzaBa3LSkCQZjJ5AYEjSDnQHLbgU3QZax2efmeJHdxu1LamSCxCJzg37"
|
||||
]
|
||||
},
|
||||
{
|
||||
"generation": "v4",
|
||||
"programId": "Memo4c2pN8afCj432Lb7RMVKi9PbQnnW7ewFFaV3oAH",
|
||||
"surfaceCode": "spl_memo_v4",
|
||||
"status": "generation courante publiee avec implementation Pinocchio",
|
||||
"instructionData": "octets UTF-8 bruts",
|
||||
"emptyPayload": "accepte",
|
||||
"accounts": "zero ou plusieurs; chaque compte fourni doit etre signer",
|
||||
"signerRequirement": "tous les comptes fournis",
|
||||
"accountOrder": "ordre de parcours et de logs conserve",
|
||||
"duplicateAccounts": "aucun rejet dedie prouve; ordre et doublons conserves",
|
||||
"runtimeLogs": [
|
||||
"signataires puis diagnostic UTF-8 ou memo selon l'implementation officielle"
|
||||
],
|
||||
"utf8Failure": "InvalidInstructionData",
|
||||
"missingSignerFailure": "MissingRequiredSignature avant validation UTF-8",
|
||||
"builderOfficial": "builder generique 2.1.0 avec program ID v4 explicite",
|
||||
"currentInvocation": {
|
||||
"mainnet": "transactions reelles observees et rejouees; aucun envoi execute dans cette tranche",
|
||||
"devnet": "simulation et trois executions v4 confirmees avec post-validation complete le 2026-07-15",
|
||||
"localnet": "binaire officiel disponible, non execute"
|
||||
},
|
||||
"realCorpusSignatures": [
|
||||
"2vgR56q2NR6ehu1uNnpt3te3RqhX2sXryXi4SpBHKUyVaeERr1HLYSLvDFRzd3eDeNejjLX9hVZJZ5GvtsTtBr1c",
|
||||
"53aHhj6rt77hCkadHedpWS7GstdER5XqQrHDutZ7gAQrDvAxcDcktrUtwxZcCbTV2FnLzELqfwoJgvabjdLPWkQ5",
|
||||
"3NxmPdF9W3GBiD8qF2VzvUhEDrTM48EEkaosTtzVceRhQc4sGEojDFppBsXYgqK9GCrCUo4wzAWciprsqZEmRyee",
|
||||
"2njzDJUBar6TTPPcuwEDdkiW8kVLUsZXfdvUQNP7TC6La44E4kZtLFfdJ1Q8nPNJbKa9Vuby4TtiuLX2rQQTa65C"
|
||||
]
|
||||
}
|
||||
],
|
||||
"decoderContract": {
|
||||
"maximumRetainedPayloadBytes": 4096,
|
||||
"diagnosticHexPrefixBytes": 32,
|
||||
"completeTextRetainedWhenUtf8Valid": true,
|
||||
"failedTransactionRuntimeValidation": "not_proven_transaction_failed",
|
||||
"failedTransactionCommitted": false,
|
||||
"unknownProgramProducesObservation": false
|
||||
},
|
||||
"materializationContract": {
|
||||
"crate": "kb-lib",
|
||||
"component": "materializer.transaction.annotations",
|
||||
"processorName": "transaction_annotations",
|
||||
"materializedFamily": "transaction_annotation",
|
||||
"acceptedEntries": ["add_memo", "memo_intent", "invalid_memo_attempt"],
|
||||
"projectedEntry": "add_memo",
|
||||
"transactionPolicy": "SuccessfulCommittedOnly",
|
||||
"failedOrUncommittedOutput": false,
|
||||
"store": "kb_sol_mat_events",
|
||||
"newMigrationRequired": false,
|
||||
"idempotence": "ledger processor/version/input hash plus deterministic output key",
|
||||
"readModel": {
|
||||
"contract": "DecodePipelineStore.list_materialized_events",
|
||||
"demo": "demo_decode_replay transaction annotation journal",
|
||||
"boundedMaximumRows": 500,
|
||||
"filters": ["processor exact", "family exact", "partial signature"],
|
||||
"visualization": "table journal, not OHLC"
|
||||
},
|
||||
"decodedOnlyFields": [
|
||||
"complete accounts and writable flags",
|
||||
"payload hex diagnostic prefix",
|
||||
"UTF-8 error offset",
|
||||
"transaction error",
|
||||
"decoder proof"
|
||||
]
|
||||
},
|
||||
"executorContract": {
|
||||
"crate": "kb_executor_spl_memo",
|
||||
"operationCode": "spl_memo.add_memo",
|
||||
"typedIntent": "SplMemoExecutionIntent",
|
||||
"officialBuilder": "spl_memo_interface::instruction::build_memo",
|
||||
"supportedGenerations": ["v4"],
|
||||
"decodeOnlyGenerations": ["v1", "v3"],
|
||||
"maximumMessageBytes": 566,
|
||||
"maximumSignerOccurrences": 32,
|
||||
"preserveSignerOrderAndDuplicates": true,
|
||||
"inventWritableAccounts": false,
|
||||
"requestedSpendLamports": 0,
|
||||
"simulationRequired": true,
|
||||
"dryRunDefault": true,
|
||||
"allClustersConstructible": true,
|
||||
"historicalGenerationSendEnabled": false,
|
||||
"mainnetSendGovernedByCommonPolicy": true,
|
||||
"clusterAvailabilityProvenBySimulation": true,
|
||||
"demoCluster": "devnet",
|
||||
"demoGeneration": "v4",
|
||||
"postExecutionValidation": [
|
||||
"canonical_insert",
|
||||
"core_extraction",
|
||||
"memo_decode_replay",
|
||||
"transaction_annotation_materialization"
|
||||
]
|
||||
},
|
||||
"requiredCorpusCases": [
|
||||
"empty_payload",
|
||||
"ascii",
|
||||
"unicode_multibyte",
|
||||
"near_practical_transaction_limit",
|
||||
"invalid_utf8",
|
||||
"zero_signer",
|
||||
"one_signer",
|
||||
"multiple_signers",
|
||||
"non_signer_account",
|
||||
"duplicate_accounts",
|
||||
"additional_writable_account",
|
||||
"outer_instruction",
|
||||
"inner_instruction",
|
||||
"successful_transaction",
|
||||
"failed_transaction",
|
||||
"malformed_base64",
|
||||
"payload_over_decoder_limit"
|
||||
],
|
||||
"mainnetReplayValidation": {
|
||||
"date": "2026-07-14",
|
||||
"acquisition": {
|
||||
"programCampaigns": 3,
|
||||
"canonicalTransactionsInserted": 300,
|
||||
"missingTransactions": 0
|
||||
},
|
||||
"coreExtraction": {
|
||||
"selected": 300,
|
||||
"extracted": 300,
|
||||
"failed": 0
|
||||
},
|
||||
"generations": [
|
||||
{
|
||||
"generation": "v1",
|
||||
"decodedInstructions": 102,
|
||||
"materializedAnnotations": 69,
|
||||
"refusedUncommittedIntents": 33
|
||||
},
|
||||
{
|
||||
"generation": "v3",
|
||||
"decodedInstructions": 439,
|
||||
"materializedAnnotations": 422,
|
||||
"refusedUncommittedIntents": 17,
|
||||
"secondNonForcedReplaySelected": 0
|
||||
},
|
||||
{
|
||||
"generation": "v4",
|
||||
"decodedInstructions": 100,
|
||||
"materializedAnnotations": 100,
|
||||
"refusedUncommittedIntents": 0
|
||||
}
|
||||
],
|
||||
"decodeFailures": 0,
|
||||
"unmatchedInstructions": 0,
|
||||
"operationalErrorLogEntries": 0
|
||||
},
|
||||
"devnetExecutionValidation": {
|
||||
"date": "2026-07-15",
|
||||
"generation": "v4",
|
||||
"programId": "Memo4c2pN8afCj432Lb7RMVKi9PbQnnW7ewFFaV3oAH",
|
||||
"simulationOnlyValidated": true,
|
||||
"submittedTransactions": 3,
|
||||
"confirmedTransactions": 3,
|
||||
"canonicalTransactionsInserted": 3,
|
||||
"coreTransactionsExtracted": 3,
|
||||
"decodedInstructions": 3,
|
||||
"materializedAnnotations": 3,
|
||||
"annotationPayloadLengthBytes": 34,
|
||||
"secondReplaySkipped": 3,
|
||||
"secondReplayNewMaterializedOutputs": 0,
|
||||
"decodeFailures": 0,
|
||||
"materializationRefusals": 0,
|
||||
"signatures": [
|
||||
"53aHhj6rt77hCkadHedpWS7GstdER5XqQrHDutZ7gAQrDvAxcDcktrUtwxZcCbTV2FnLzELqfwoJgvabjdLPWkQ5",
|
||||
"3NxmPdF9W3GBiD8qF2VzvUhEDrTM48EEkaosTtzVceRhQc4sGEojDFppBsXYgqK9GCrCUo4wzAWciprsqZEmRyee",
|
||||
"2njzDJUBar6TTPPcuwEDdkiW8kVLUsZXfdvUQNP7TC6La44E4kZtLFfdJ1Q8nPNJbKa9Vuby4TtiuLX2rQQTa65C"
|
||||
]
|
||||
},
|
||||
"sources": [
|
||||
{
|
||||
"kind": "official_interface_source",
|
||||
"url": "https://docs.rs/spl-memo-interface/2.1.0/src/spl_memo_interface/instruction.rs.html"
|
||||
},
|
||||
{
|
||||
"kind": "official_interface_ids",
|
||||
"url": "https://docs.rs/spl-memo-interface/2.1.0/src/spl_memo_interface/lib.rs.html"
|
||||
},
|
||||
{
|
||||
"kind": "official_v1_historical_source",
|
||||
"url": "https://github.com/solana-program/memo/commit/479839141a99b7d0c3a35bc648c0fa1e4704ea3e"
|
||||
},
|
||||
{
|
||||
"kind": "official_v3_published_source",
|
||||
"url": "https://docs.rs/spl-memo/3.0.0/src/spl_memo/processor.rs.html"
|
||||
},
|
||||
{
|
||||
"kind": "official_current_source",
|
||||
"url": "https://github.com/solana-program/memo/blob/main/program/src/processor.rs"
|
||||
}
|
||||
],
|
||||
"documentedLimitations": [
|
||||
"v1 et v3 restent decodees depuis un corpus Mainnet reel et leur wire officiel reste audite, mais l'executeur les classe decode-only et ne construit que v4",
|
||||
"l'invocabilite Localnet depend du deploiement explicite du binaire de generation demande",
|
||||
"les differences de cout v3/v4 ne sont pas transformees en garantie statique; chaque plan reste soumis a la simulation et au plafond de frais"
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,146 +0,0 @@
|
||||
{
|
||||
"matrixVersion": 2,
|
||||
"milestone": "0.4.6",
|
||||
"status": "partially_confirmed",
|
||||
"statusVocabulary": [
|
||||
"not_run",
|
||||
"simulated",
|
||||
"submitted",
|
||||
"confirmed",
|
||||
"unavailable",
|
||||
"failed"
|
||||
],
|
||||
"scenarios": [
|
||||
{
|
||||
"id": "offline_full_regression",
|
||||
"environment": "offline",
|
||||
"status": "confirmed",
|
||||
"requiredEvidence": [
|
||||
"test_suite",
|
||||
"clippy"
|
||||
],
|
||||
"evidence": [
|
||||
{
|
||||
"kind": "test_suite",
|
||||
"value": "kb_pipeline 120/120"
|
||||
},
|
||||
{
|
||||
"kind": "test_suite",
|
||||
"value": "kb_executor_spl_token_2022 44/44"
|
||||
},
|
||||
{
|
||||
"kind": "test_suite",
|
||||
"value": "kb_executor_spl_elgamal_registry 6/6"
|
||||
},
|
||||
{
|
||||
"kind": "clippy",
|
||||
"value": "cargo clippy --all-targets clean"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "token2022_public_devnet",
|
||||
"environment": "devnet",
|
||||
"status": "not_run",
|
||||
"requiredEvidence": [
|
||||
"simulation",
|
||||
"signature",
|
||||
"canonical_hydration",
|
||||
"core_extraction",
|
||||
"decode_replay",
|
||||
"materialization",
|
||||
"second_replay"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "elgamal_registry_devnet",
|
||||
"environment": "devnet",
|
||||
"status": "not_run",
|
||||
"requiredEvidence": [
|
||||
"simulation",
|
||||
"signature",
|
||||
"canonical_hydration",
|
||||
"core_extraction",
|
||||
"decode_replay",
|
||||
"materialization",
|
||||
"second_replay"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "confidential_transfer_localnet_or_devnet",
|
||||
"environment": "localnet_or_devnet",
|
||||
"status": "not_run",
|
||||
"requiredEvidence": [
|
||||
"simulation",
|
||||
"proof_mode",
|
||||
"signature",
|
||||
"canonical_hydration",
|
||||
"core_extraction",
|
||||
"decode_replay",
|
||||
"materialization",
|
||||
"second_replay"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "confidential_mint_burn_localnet_or_devnet",
|
||||
"environment": "localnet_or_devnet",
|
||||
"status": "not_run",
|
||||
"requiredEvidence": [
|
||||
"simulation",
|
||||
"proof_mode",
|
||||
"signature",
|
||||
"canonical_hydration",
|
||||
"core_extraction",
|
||||
"decode_replay",
|
||||
"materialization",
|
||||
"second_replay"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "permissioned_confidential_burn_localnet_or_devnet",
|
||||
"environment": "localnet_or_devnet",
|
||||
"status": "not_run",
|
||||
"requiredEvidence": [
|
||||
"simulation",
|
||||
"proof_mode",
|
||||
"signature",
|
||||
"canonical_hydration",
|
||||
"core_extraction",
|
||||
"decode_replay",
|
||||
"materialization",
|
||||
"second_replay"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mainnet_observation_corpus",
|
||||
"environment": "mainnet_observation",
|
||||
"status": "not_run",
|
||||
"requiredEvidence": [
|
||||
"signatures",
|
||||
"outer_cpi",
|
||||
"success_failure"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "postgres_double_replay",
|
||||
"environment": "postgres",
|
||||
"status": "not_run",
|
||||
"requiredEvidence": [
|
||||
"postgres_tests",
|
||||
"first_replay",
|
||||
"second_replay",
|
||||
"no_duplicates"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "tauri_smoke",
|
||||
"environment": "tauri",
|
||||
"status": "not_run",
|
||||
"requiredEvidence": [
|
||||
"startup",
|
||||
"routes",
|
||||
"journal"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
39
docs/TEST_FIXTURE_CLASSIFICATION.md
Normal file
39
docs/TEST_FIXTURE_CLASSIFICATION.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Classification des fixtures de test
|
||||
|
||||
## Objet
|
||||
|
||||
Ce document inventorie les données structurées actuellement stockées sous `docs/` alors qu'elles sont consommées par le code ou les tests. Le répertoire `docs/` reste réservé à la documentation destinée à une lecture humaine.
|
||||
|
||||
## Destination retenue
|
||||
|
||||
Les matrices partagées doivent être déplacées sous :
|
||||
|
||||
```text
|
||||
test-fixtures/contract-matrices/
|
||||
```
|
||||
|
||||
Le déplacement sera effectué dans une tranche fonctionnelle atomique avec la mise à jour de tous les chemins `include_str!`, des références documentaires et des tests concernés.
|
||||
|
||||
## Inventaire
|
||||
|
||||
| Fichier actuel | Consommateurs Rust détectés | Classification cible |
|
||||
|---|---:|---|
|
||||
| `docs/METAPLEX_TOKEN_METADATA_MATRIX.json` | 2 | fixture contractuelle partagée |
|
||||
| `docs/NATIVE_SOLANA_DECODER_MATRIX.json` | 1 | fixture contractuelle partagée |
|
||||
| `docs/NATIVE_SOLANA_EXECUTION_MATRIX.json` | 1 | fixture contractuelle partagée |
|
||||
| `docs/SOLANA_STANDARD_RPC_MATRIX.json` | 1 | fixture contractuelle partagée |
|
||||
| `docs/SPL_ASSOCIATED_TOKEN_ACCOUNT_MATRIX.json` | 4 | fixture contractuelle partagée |
|
||||
| `docs/SPL_ELGAMAL_REGISTRY_MATRIX.json` | 0 | usage à confirmer avant déplacement |
|
||||
| `docs/SPL_MEMO_MATRIX.json` | 3 | fixture contractuelle partagée |
|
||||
| `docs/SPL_TOKEN2022_MATRIX.json` | 2 | fixture contractuelle partagée |
|
||||
| `docs/SPL_TOKEN2022_VALIDATION_MATRIX.json` | 1 | fixture contractuelle partagée |
|
||||
| `docs/SPL_TOKEN_MATRIX.json` | 2 | fixture contractuelle partagée |
|
||||
|
||||
## Contraintes de migration
|
||||
|
||||
- Ne pas déplacer un fichier sans mettre à jour tous ses consommateurs dans le même delta.
|
||||
- Ne pas laisser une copie durable sous `docs/`.
|
||||
- Conserver les noms actuels sauf justification explicite.
|
||||
- Ajouter les suppressions sous forme de commandes `rm -- ...` dans `delta.md`.
|
||||
- Exécuter les tests de chaque crate consommatrice après le déplacement.
|
||||
- Les helpers d'audit restent en lecture seule et signalent uniquement les emplacements suspects.
|
||||
Reference in New Issue
Block a user