v0.3.13-pre.004

This commit is contained in:
2026-09-10 14:25:30 +02:00
parent 31c0a83e51
commit 28e4da3879
13 changed files with 1303 additions and 33 deletions

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/runtime_resources.rs
// version: 14
// version: 15
fn grpc_endpoint(cluster: &str) -> std::option::Option<ksp_onchain_transport_lib::YellowstoneGrpcEndpointSettings> {
return grpc_endpoint_with_identity(cluster, "yellowstone-fixture", "fixture-provider");
@@ -83,6 +83,22 @@ fn ws_endpoint(
));
}
fn standard_block_source(
cluster: &str,
endpoint_name: &str,
filter: ksp_onchain_transport_lib::SolanaBlockSubscribeFilter,
commitment: ksp_onchain_transport_lib::SolanaCommitment,
) -> std::option::Option<crate::RawTransactionIngestStandardBlockSource> {
let endpoint = match ws_endpoint(cluster, endpoint_name, "fixture-ws-provider", ksp_onchain_transport_lib::WsProtocolKind::SolanaStandard) {
std::option::Option::Some(value) => value,
std::option::Option::None => return std::option::Option::None,
};
return match crate::RawTransactionIngestStandardBlockSource::new(endpoint, filter, commitment) {
std::result::Result::Ok(value) => std::option::Option::Some(value),
std::result::Result::Err(_) => std::option::Option::None,
};
}
fn standard_logs_source(
cluster: &str,
endpoint_name: &str,
@@ -1839,6 +1855,218 @@ fn v0_3_13_pre_003_runtime_resources_reject_duplicate_standard_logs_identity() {
return;
}
#[test]
fn v0_3_13_pre_004_standard_block_source_validates_protocol_commitment_and_identity() {
let source = match standard_block_source(
"devnet",
"standard-block-a",
ksp_onchain_transport_lib::SolanaBlockSubscribeFilter::All,
ksp_onchain_transport_lib::SolanaCommitment::Confirmed,
) {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let same = match standard_block_source(
"devnet",
"standard-block-a",
ksp_onchain_transport_lib::SolanaBlockSubscribeFilter::All,
ksp_onchain_transport_lib::SolanaCommitment::Confirmed,
) {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let pubkey = ksp_core_lib::Pubkey::new_from_array([7_u8; 32]);
let filtered = match standard_block_source(
"devnet",
"standard-block-a",
ksp_onchain_transport_lib::SolanaBlockSubscribeFilter::MentionsAccountOrProgram(pubkey),
ksp_onchain_transport_lib::SolanaCommitment::Confirmed,
) {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
assert_eq!(source.source_key, same.source_key);
assert_ne!(source.source_key, filtered.source_key);
let debug = std::format!("{filtered:?}");
assert!(debug.contains("mentions_account_or_program"));
assert!(!debug.contains("WS-SECRET-CANARY"));
assert!(!debug.contains(&pubkey.to_string()));
let invalid_endpoint = match ws_endpoint("devnet", "invalid-block", "fixture-ws-provider", ksp_onchain_transport_lib::WsProtocolKind::HeliusLaserStream) {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
assert!(
crate::RawTransactionIngestStandardBlockSource::new(
invalid_endpoint,
ksp_onchain_transport_lib::SolanaBlockSubscribeFilter::All,
ksp_onchain_transport_lib::SolanaCommitment::Confirmed,
)
.is_err()
);
let processed_endpoint = match ws_endpoint("devnet", "processed-block", "fixture-ws-provider", ksp_onchain_transport_lib::WsProtocolKind::SolanaStandard) {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
assert!(
crate::RawTransactionIngestStandardBlockSource::new(
processed_endpoint,
ksp_onchain_transport_lib::SolanaBlockSubscribeFilter::All,
ksp_onchain_transport_lib::SolanaCommitment::Processed,
)
.is_err()
);
return;
}
#[test]
fn v0_3_13_pre_004_standard_block_qualifies_legacy_v0_v1_and_rejects_ambiguous_or_future_versions() {
for version in [
ksp_onchain_transport_lib::SolanaTransactionVersion::Legacy,
ksp_onchain_transport_lib::SolanaTransactionVersion::Number(0),
ksp_onchain_transport_lib::SolanaTransactionVersion::Number(1),
] {
let qualified = super::qualify_standard_block_version(&ksp_onchain_transport_lib::SolanaWireField::Value(version));
assert!(qualified.is_ok());
}
assert!(
super::qualify_standard_block_version(&ksp_onchain_transport_lib::SolanaWireField::Value(ksp_onchain_transport_lib::SolanaTransactionVersion::Number(
2
),))
.is_err()
);
assert!(super::qualify_standard_block_version(&ksp_onchain_transport_lib::SolanaWireField::Omitted).is_err());
assert!(super::qualify_standard_block_version(&ksp_onchain_transport_lib::SolanaWireField::Null).is_err());
return;
}
#[test]
fn v0_3_13_pre_004_legacy_v0_v1_block_materials_are_direct_common_raw_with_exact_version_and_index() {
let legacy_message = ksp_raw_transaction_lib::RawSolanaTransactionMessage::new(
ksp_raw_transaction_lib::RawSolanaMessageVersion::Legacy,
ksp_raw_transaction_lib::RawSolanaMessageHeader::new(1, 0, 1),
vec![[0x21_u8; 32], [0x22_u8; 32]],
[0x31_u8; 32],
vec![ksp_raw_transaction_lib::RawSolanaCompiledInstruction::new(1, vec![0], vec![0xaa, 0xbb])],
vec![],
std::option::Option::None,
);
let v0_message = ksp_raw_transaction_lib::RawSolanaTransactionMessage::new(
ksp_raw_transaction_lib::RawSolanaMessageVersion::V0,
ksp_raw_transaction_lib::RawSolanaMessageHeader::new(1, 0, 0),
vec![[0x23_u8; 32]],
[0x32_u8; 32],
vec![ksp_raw_transaction_lib::RawSolanaCompiledInstruction::new(0, vec![1], vec![0xcc])],
vec![ksp_raw_transaction_lib::RawSolanaAddressTableLookup::new([0x24_u8; 32], vec![0], vec![])],
std::option::Option::None,
);
let v1_message = ksp_raw_transaction_lib::RawSolanaTransactionMessage::new(
ksp_raw_transaction_lib::RawSolanaMessageVersion::V1,
ksp_raw_transaction_lib::RawSolanaMessageHeader::new(1, 0, 1),
vec![[0x41_u8; 32], [0x42_u8; 32]],
[0x51_u8; 32],
vec![ksp_raw_transaction_lib::RawSolanaCompiledInstruction::new(1, vec![0], vec![1, 2, 3])],
vec![],
std::option::Option::Some(ksp_raw_transaction_lib::RawSolanaTransactionConfig::new(
std::option::Option::Some(7),
std::option::Option::Some(8),
std::option::Option::Some(9),
std::option::Option::Some(32_768),
)),
);
let fixtures = [
(
ksp_raw_transaction_lib::RawSolanaTransactionWire::new(vec![[0x11_u8; 64]], legacy_message),
ksp_onchain_transport_lib::SolanaTransactionVersion::Legacy,
[0x11_u8; 64],
"\"version\":\"legacy\"",
1_usize,
),
(
ksp_raw_transaction_lib::RawSolanaTransactionWire::new(vec![[0x12_u8; 64]], v0_message),
ksp_onchain_transport_lib::SolanaTransactionVersion::Number(0),
[0x12_u8; 64],
"\"version\":0",
2_usize,
),
(
ksp_raw_transaction_lib::RawSolanaTransactionWire::new(vec![[0xaa_u8; 64]], v1_message),
ksp_onchain_transport_lib::SolanaTransactionVersion::Number(1),
[0xaa_u8; 64],
"\"version\":1",
3_usize,
),
];
let network = match ksp_store_lib::RawNetworkId::new("devnet") {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
for (wire, version, expected_signature, expected_version, position) in fixtures {
let encoded = match ksp_raw_transaction_lib::serialize_solana_transaction_wire_base64(&wire) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
let material = super::build_standard_block_material(
&network,
430_000_123,
std::option::Option::Some(1_787_072_400),
encoded.as_str(),
&ksp_onchain_transport_lib::SolanaWireField::Value(serde_json::json!({"err":null,"fee":5000})),
&ksp_onchain_transport_lib::SolanaWireField::Value(version),
position,
);
let material = match material {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
let raw = match ksp_raw_transaction_lib::canonicalize_raw_transaction(material) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
assert_eq!(raw.reference().signature().as_bytes(), &expected_signature);
assert_eq!(raw.slot(), 430_000_123);
assert_eq!(raw.block_time().map(|value| return value.unix_millis()), std::option::Option::Some(1_787_072_400_000));
let payload = match std::str::from_utf8(raw.payload().bytes()) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
assert!(payload.contains(expected_version));
assert!(payload.contains(&std::format!("\"transactionIndex\":{position}")));
assert!(payload.contains(encoded.as_str()));
}
return;
}
#[test]
fn v0_3_13_pre_004_runtime_resources_reject_duplicate_standard_block_identity() {
let first = match standard_block_source(
"devnet",
"standard-block-duplicate",
ksp_onchain_transport_lib::SolanaBlockSubscribeFilter::All,
ksp_onchain_transport_lib::SolanaCommitment::Finalized,
) {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let duplicate = match standard_block_source(
"devnet",
"standard-block-duplicate",
ksp_onchain_transport_lib::SolanaBlockSubscribeFilter::All,
ksp_onchain_transport_lib::SolanaCommitment::Finalized,
) {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let mut resources = crate::RawTransactionIngestRuntimeResources::from_standard_block_source(first);
let result = resources.try_push_standard_block_source(duplicate);
let error = match result {
std::result::Result::Ok(()) => return,
std::result::Result::Err(value) => value,
};
assert!(error.context().iter().any(|context| return context.value() == "runtime_resources.duplicate_source_identity"));
assert_eq!(resources.source_count(), 1);
return;
}
#[test]
fn pre_007_processing_frontier_never_advances_through_pending_work() {
let mut frontier = super::RawTransactionIngestProcessingFrontier::new();