v0.1.0-pre.011-fix-01

This commit is contained in:
2026-07-24 15:06:27 +02:00
parent 42e8a203ec
commit 60660ca555
161 changed files with 10665 additions and 977 deletions

View File

@@ -1,5 +1,5 @@
// file: kb-lib/src/materializer/admin.rs
// version: 3
// version: 4
//! `admin` materializer family.
@@ -13,7 +13,7 @@ pub(crate) use self::constants::MT_ADMIN_TRACING_TARGET;
/// Stable native and SPL administration materializer.
pub use self::core::MtAdminMaterializer;
/// Materializes exact Token-2022 administration account snapshots.
pub use self::core::materialize_token2022_admin_state_snapshots;
/// Materializes one exact SPL ElGamal registry account snapshot.
pub use self::core::materializer_admin_materialize_elgamal_registry_state_snapshot;
/// Materializes exact Token-2022 administration account snapshots.
pub use self::core::materializer_admin_materialize_token2022_state_snapshots;

View File

@@ -1,5 +1,5 @@
// file: kb-lib/src/materializer/admin/core.rs
// version: 15
// version: 16
//! Stable administrative projections derived from exact committed observations.
@@ -905,7 +905,7 @@ mod tests {
}
/// Materialize authoritative Token-2022 administrative extension snapshots.
pub fn materialize_token2022_admin_state_snapshots(
pub fn materializer_admin_materialize_token2022_state_snapshots(
account_key: &str,
slot: u64,
state: &crate::DcToken2022State,
@@ -1012,8 +1012,10 @@ mod token2022_admin_state_tests {
#[test]
fn admin_snapshots_are_owned_once_filtered_and_idempotent() {
let state = mint_state();
let first = crate::materialize_token2022_admin_state_snapshots("mint111", 44, &state);
let second = crate::materialize_token2022_admin_state_snapshots("mint111", 44, &state);
let first =
crate::materializer_admin_materialize_token2022_state_snapshots("mint111", 44, &state);
let second =
crate::materializer_admin_materialize_token2022_state_snapshots("mint111", 44, &state);
assert_eq!(first, second);
assert_eq!(first.as_ref().map(std::vec::Vec::len), std::result::Result::Ok(2));
assert_eq!(
@@ -1033,7 +1035,10 @@ mod token2022_admin_state_tests {
#[test]
fn admin_snapshots_reject_empty_identity_and_wrong_state_kind() {
let state = mint_state();
assert!(crate::materialize_token2022_admin_state_snapshots("", 44, &state).is_err());
assert!(
crate::materializer_admin_materialize_token2022_state_snapshots("", 44, &state)
.is_err()
);
let account_state = crate::DcToken2022State {
kind: crate::DcToken2022StateKind::Account,
base_fields: serde_json::json!({}),
@@ -1042,8 +1047,12 @@ mod token2022_admin_state_tests {
extensions: state.extensions[..1].to_vec(),
};
assert!(
crate::materialize_token2022_admin_state_snapshots("account111", 44, &account_state,)
.is_err()
crate::materializer_admin_materialize_token2022_state_snapshots(
"account111",
44,
&account_state,
)
.is_err()
);
}
}

View File

@@ -1,5 +1,5 @@
// file: kb-lib/src/materializer/fees.rs
// version: 2
// version: 3
//! `fees` materializer family.
@@ -8,4 +8,4 @@ mod core;
/// Fee materializer for committed Token-2022 fee observations.
pub use self::core::MtFeesMaterializer;
/// Materializes authoritative Token-2022 fee extension snapshots.
pub use self::core::materialize_token2022_fee_state_snapshots;
pub use self::core::materializer_fees_materialize_token2022_state_snapshots;

View File

@@ -1,5 +1,5 @@
// file: kb-lib/src/materializer/fees/core.rs
// version: 2
// version: 3
//! Stable fee projections derived from exact committed Token-2022 observations.
@@ -151,7 +151,7 @@ fn contains(entries: &[&str], entry_code: &str) -> bool {
}
/// Materialize authoritative Token-2022 fee extension snapshots without decrypting confidential values.
pub fn materialize_token2022_fee_state_snapshots(
pub fn materializer_fees_materialize_token2022_state_snapshots(
account_key: &str,
slot: u64,
state: &crate::DcToken2022State,
@@ -371,8 +371,10 @@ mod tests {
value_fields: serde_json::json!({"withheldAmount":"7"}),
}],
};
let first = crate::materialize_token2022_fee_state_snapshots("mint111", 42, &mint);
let second = crate::materialize_token2022_fee_state_snapshots("mint111", 42, &mint);
let first =
crate::materializer_fees_materialize_token2022_state_snapshots("mint111", 42, &mint);
let second =
crate::materializer_fees_materialize_token2022_state_snapshots("mint111", 42, &mint);
assert!(first.is_ok());
assert_eq!(first, second);
let outputs = match first {
@@ -399,7 +401,11 @@ mod tests {
value_fields: serde_json::json!({"withheldAmount":"ciphertext"}),
}],
};
let result = crate::materialize_token2022_fee_state_snapshots("account111", 43, &account);
let result = crate::materializer_fees_materialize_token2022_state_snapshots(
"account111",
43,
&account,
);
assert!(result.is_ok());
let outputs = match result {
std::result::Result::Ok(outputs) => outputs,
@@ -425,8 +431,16 @@ mod tests {
}],
};
assert!(
crate::materialize_token2022_fee_state_snapshots("account111", 44, &wrong,).is_err()
crate::materializer_fees_materialize_token2022_state_snapshots(
"account111",
44,
&wrong,
)
.is_err()
);
assert!(
crate::materializer_fees_materialize_token2022_state_snapshots("", 44, &wrong,)
.is_err()
);
assert!(crate::materialize_token2022_fee_state_snapshots("", 44, &wrong,).is_err());
}
}

View File

@@ -1,5 +1,5 @@
// file: kb-lib/src/materializer/metadata.rs
// version: 2
// version: 3
//! `metadata` materializer family.
@@ -8,8 +8,8 @@ mod core;
/// Token-2022 and Metaplex metadata snapshot materializer.
pub use self::core::MtMetadataMaterializer;
/// Materializes one canonical non-Metadata Metaplex account snapshot.
pub use self::core::materialize_metaplex_account_snapshot;
pub use self::core::materializer_metadata_materialize_metaplex_account_snapshot;
/// Materializes one canonical Metaplex Metadata account snapshot.
pub use self::core::materialize_metaplex_metadata_snapshot;
pub use self::core::materializer_metadata_materialize_metaplex_metadata_snapshot;
/// Materializes Token-2022 embedded metadata and group snapshots.
pub use self::core::materialize_token2022_metadata_snapshot;
pub use self::core::materializer_metadata_materialize_token2022_snapshot;

View File

@@ -1,5 +1,5 @@
// file: kb-lib/src/materializer/metadata/core.rs
// version: 2
// version: 3
//! Stable Token-2022 and Metaplex metadata snapshot materializer.
@@ -35,7 +35,7 @@ impl crate::MtMaterializer for crate::MtMetadataMaterializer {
}
/// Materialize embedded Token-2022 metadata, group, and group-member extensions.
pub fn materialize_token2022_metadata_snapshot(
pub fn materializer_metadata_materialize_token2022_snapshot(
account_key: &str,
slot: u64,
state: &crate::DcToken2022State,
@@ -97,7 +97,7 @@ pub fn materialize_token2022_metadata_snapshot(
///
/// Account snapshots are authoritative for current state. Instruction observations may describe
/// mutations, but must not emit a second competing metadata-state projection.
pub fn materialize_metaplex_metadata_snapshot(
pub fn materializer_metadata_materialize_metaplex_metadata_snapshot(
snapshot: &crate::DcMetadataMtmCanonicalMetadataAccountSnapshot,
) -> std::result::Result<crate::MtApiMaterializedOutput, String> {
if !snapshot.provenance.committed {
@@ -205,8 +205,10 @@ mod tests_metaplex_metadata_state {
#[test]
fn account_snapshot_is_one_stable_authoritative_metadata_projection() {
let first = crate::materialize_metaplex_metadata_snapshot(&snapshot(true));
let second = crate::materialize_metaplex_metadata_snapshot(&snapshot(true));
let first =
crate::materializer_metadata_materialize_metaplex_metadata_snapshot(&snapshot(true));
let second =
crate::materializer_metadata_materialize_metaplex_metadata_snapshot(&snapshot(true));
assert_eq!(first, second);
assert_eq!(
first.as_ref().map(|value| return value.output_key.as_str()),
@@ -235,7 +237,10 @@ mod tests_metaplex_metadata_state {
#[test]
fn uncommitted_or_non_metadata_state_is_rejected() {
assert!(crate::materialize_metaplex_metadata_snapshot(&snapshot(false)).is_err());
assert!(
crate::materializer_metadata_materialize_metaplex_metadata_snapshot(&snapshot(false))
.is_err()
);
let mut wrong = snapshot(true);
wrong.state = crate::DcMetadataMtmCanonicalMetadataAccountState::EditionMarker(
crate::DcMetadataMtmEditionMarkerAccountSnapshot {
@@ -252,7 +257,9 @@ mod tests_metaplex_metadata_state {
payload_json: serde_json::json!({}),
},
);
assert!(crate::materialize_metaplex_metadata_snapshot(&wrong).is_err());
assert!(
crate::materializer_metadata_materialize_metaplex_metadata_snapshot(&wrong).is_err()
);
}
}
@@ -260,7 +267,7 @@ mod tests_metaplex_metadata_state {
///
/// Every account address maps to one stable state key. Historical layouts remain materializable
/// with an explicit historical lifecycle, while execution policy remains independently disabled.
pub fn materialize_metaplex_account_snapshot(
pub fn materializer_metadata_materialize_metaplex_account_snapshot(
snapshot: &crate::DcMetadataMtmCanonicalMetadataAccountSnapshot,
) -> std::result::Result<crate::MtApiMaterializedOutput, String> {
if !snapshot.provenance.committed {
@@ -404,8 +411,9 @@ mod tests_metaplex_account_state {
},
provenance(),
);
let first = crate::materialize_metaplex_account_snapshot(&edition);
let second = crate::materialize_metaplex_account_snapshot(&reservation);
let first = crate::materializer_metadata_materialize_metaplex_account_snapshot(&edition);
let second =
crate::materializer_metadata_materialize_metaplex_account_snapshot(&reservation);
assert_eq!(
first.as_ref().map(|value| return value.payload_json["lifecycle"].clone()),
std::result::Result::Ok(serde_json::json!("historical"))
@@ -439,7 +447,7 @@ mod tests_metaplex_account_state {
},
provenance(),
);
let output = crate::materialize_metaplex_account_snapshot(&token);
let output = crate::materializer_metadata_materialize_metaplex_account_snapshot(&token);
assert_eq!(
output.as_ref().map(|value| return value.payload_json["factOwner"].clone()),
std::result::Result::Ok(serde_json::json!("kb_materializer_lifecycle"))
@@ -469,9 +477,11 @@ mod tests_metaplex_account_state {
provenance(),
);
marker.provenance.committed = false;
assert!(crate::materialize_metaplex_account_snapshot(&marker).is_err());
assert!(
crate::materialize_metaplex_account_snapshot(
crate::materializer_metadata_materialize_metaplex_account_snapshot(&marker).is_err()
);
assert!(
crate::materializer_metadata_materialize_metaplex_account_snapshot(
&super::tests_metaplex_metadata_state::snapshot(true)
)
.is_err()
@@ -509,7 +519,8 @@ mod tests_token2022_state {
},
],
};
let outputs = crate::materialize_token2022_metadata_snapshot("mint111", 9, &state);
let outputs =
crate::materializer_metadata_materialize_token2022_snapshot("mint111", 9, &state);
assert_eq!(outputs.as_ref().map(|values| return values.len()), std::result::Result::Ok(3));
assert_eq!(
outputs
@@ -545,11 +556,15 @@ mod tests_token2022_state {
value_fields: serde_json::json!({}),
}],
};
let first = crate::materialize_token2022_metadata_snapshot("mint111", 9, &state);
let second = crate::materialize_token2022_metadata_snapshot("mint111", 9, &state);
let first =
crate::materializer_metadata_materialize_token2022_snapshot("mint111", 9, &state);
let second =
crate::materializer_metadata_materialize_token2022_snapshot("mint111", 9, &state);
assert_eq!(first, second);
assert_eq!(first.as_ref().map(|values| return values.len()), std::result::Result::Ok(0));
assert!(crate::materialize_token2022_metadata_snapshot("", 9, &state).is_err());
assert!(
crate::materializer_metadata_materialize_token2022_snapshot("", 9, &state).is_err()
);
let account_state = crate::DcToken2022State {
kind: crate::DcToken2022StateKind::Account,
base_fields: serde_json::json!({}),
@@ -558,8 +573,12 @@ mod tests_token2022_state {
extensions: std::vec::Vec::new(),
};
assert!(
crate::materialize_token2022_metadata_snapshot("account111", 9, &account_state)
.is_err()
crate::materializer_metadata_materialize_token2022_snapshot(
"account111",
9,
&account_state
)
.is_err()
);
}
}

View File

@@ -1,5 +1,5 @@
// file: kb-lib/src/materializer/token.rs
// version: 2
// version: 3
//! `token` materializer family.
@@ -17,4 +17,4 @@ pub(crate) use self::constants::MT_TOKEN_ACCOUNTS_TRACING_TARGET;
/// Stable Token, ATA and Token-2022 account materializer.
pub use self::accounts::MtTokenAccountsMaterializer;
/// Materializes one bounded Token-2022 account state snapshot.
pub use self::accounts::materialize_token2022_state_snapshot;
pub use self::accounts::materializer_token_materialize_token2022_state_snapshot;

View File

@@ -1,5 +1,5 @@
// file: kb-lib/src/materializer/token/accounts.rs
// version: 2
// version: 3
//! Stable committed SPL Token mutation and ATA lifecycle projections.
@@ -395,7 +395,7 @@ fn account_key_for_role(accounts: &serde_json::Value, role: &str) -> serde_json:
}
/// Materialize one already parsed Token-2022 account snapshot without inferring hidden state.
pub fn materialize_token2022_state_snapshot(
pub fn materializer_token_materialize_token2022_state_snapshot(
account_key: &str,
slot: u64,
state: &crate::DcToken2022State,
@@ -801,7 +801,9 @@ mod tests {
},
],
};
let output = match crate::materialize_token2022_state_snapshot("mint111", 99, &state) {
let output = match crate::materializer_token_materialize_token2022_state_snapshot(
"mint111", 99, &state,
) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => panic!("snapshot failed: {error}"),
};
@@ -823,9 +825,13 @@ mod tests {
account_type: std::option::Option::None,
extensions: std::vec::Vec::new(),
};
let first = crate::materialize_token2022_state_snapshot("account111", 7, &state);
let second = crate::materialize_token2022_state_snapshot("account111", 7, &state);
let first =
crate::materializer_token_materialize_token2022_state_snapshot("account111", 7, &state);
let second =
crate::materializer_token_materialize_token2022_state_snapshot("account111", 7, &state);
assert_eq!(first, second);
assert!(crate::materialize_token2022_state_snapshot("", 7, &state).is_err());
assert!(
crate::materializer_token_materialize_token2022_state_snapshot("", 7, &state).is_err()
);
}
}

View File

@@ -1,5 +1,5 @@
// file: kb-lib/src/materializer/transaction/annotations.rs
// version: 2
// version: 3
//! Exact committed SPL Memo transaction annotation projection.
@@ -601,10 +601,7 @@ mod tests {
std::result::Result::Err(error) => panic!("memo matrix is invalid JSON: {error}"),
};
assert_eq!(matrix["matrixVersion"], 4);
assert_eq!(
matrix["materializationContract"]["crate"],
"kb_materializer_transaction_annotations"
);
assert_eq!(matrix["materializationContract"]["crate"], "kb-lib");
assert_eq!(
matrix["materializationContract"]["transactionPolicy"],
"SuccessfulCommittedOnly"