v0.3.13-pre.004
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user