This commit is contained in:
2026-07-23 16:37:12 +02:00
parent 99c345f2f2
commit 0da75c1311
2159 changed files with 230833 additions and 0 deletions

266
docs/SPL_MEMO_MATRIX.json Normal file
View File

@@ -0,0 +1,266 @@
{
"file": "docs/SPL_MEMO_MATRIX.json",
"version": 8,
"matrixVersion": 4,
"scope": "SPL Memo v1, v3 et v4",
"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_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"
]
}