v0.3.1-pre.003

This commit is contained in:
2026-08-29 07:51:09 +02:00
parent 11e4cde77f
commit ecc5607fd4
13 changed files with 1274 additions and 34 deletions

View File

@@ -0,0 +1,197 @@
// file: crates/ksp-store-api/unit_tests/model/raw_primitives.rs
// version: 1
fn code(value: &str) -> std::option::Option<crate::RawProvenanceCode> {
return match crate::RawProvenanceCode::new(value.to_owned()) {
std::result::Result::Ok(value) => std::option::Option::Some(value),
std::result::Result::Err(_) => std::option::Option::None,
};
}
fn timestamp(unix_millis: u64) -> std::option::Option<crate::RawTimestamp> {
return match crate::RawTimestamp::from_unix_millis(unix_millis) {
std::result::Result::Ok(value) => std::option::Option::Some(value),
std::result::Result::Err(_) => std::option::Option::None,
};
}
#[test]
fn raw_codes_are_bounded_nonempty_and_reject_url_like_or_control_values() {
let network = crate::RawNetworkId::new("mainnet-beta".to_owned());
assert!(network.is_ok());
let format = crate::RawFormatId::new("ksp.solana.raw_transaction".to_owned());
assert!(format.is_ok());
let maximum = "a".repeat(crate::MAX_RAW_CODE_BYTES);
assert!(crate::RawProvenanceCode::new(maximum).is_ok());
assert!(crate::RawProvenanceCode::new(std::string::String::new()).is_err());
assert!(crate::RawProvenanceCode::new("bad value".to_owned()).is_err());
assert!(crate::RawProvenanceCode::new("https://secret.example".to_owned()).is_err());
assert!(crate::RawProvenanceCode::new("bad\nvalue".to_owned()).is_err());
assert!(crate::RawProvenanceCode::new("a".repeat(crate::MAX_RAW_CODE_BYTES + 1)).is_err());
return;
}
#[test]
fn raw_timestamp_accepts_documented_maximum_and_rejects_larger_values() {
let maximum = crate::RawTimestamp::from_unix_millis(crate::MAX_RAW_UNIX_MILLIS);
assert!(maximum.is_ok());
let too_large = crate::RawTimestamp::from_unix_millis(crate::MAX_RAW_UNIX_MILLIS + 1);
assert!(too_large.is_err());
return;
}
#[test]
fn raw_payload_is_nonempty_versioned_bounded_and_debug_omits_bytes() {
let format_result = crate::RawFormatId::new("ksp.solana.raw_transaction".to_owned());
assert!(format_result.is_ok());
let format = match format_result {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
let sentinel = b"RAW_PAYLOAD_SENTINEL_NEVER_RENDER".to_vec().into_boxed_slice();
let payload_result = crate::RawPayload::try_new(format, 1, sentinel, crate::RawContentHash::new([7_u8; 32]));
assert!(payload_result.is_ok());
let payload = match payload_result {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
assert_eq!(payload.bytes(), b"RAW_PAYLOAD_SENTINEL_NEVER_RENDER");
assert_eq!(payload.byte_len(), b"RAW_PAYLOAD_SENTINEL_NEVER_RENDER".len());
assert_eq!(payload.format_version(), 1);
let debug = format!("{payload:?}");
assert!(!debug.contains("RAW_PAYLOAD_SENTINEL_NEVER_RENDER"));
assert!(debug.contains("len"));
let empty_format = match crate::RawFormatId::new("ksp.solana.raw_transaction".to_owned()) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
assert!(crate::RawPayload::try_new(empty_format, 1, std::vec::Vec::new().into_boxed_slice(), crate::RawContentHash::new([0_u8; 32])).is_err());
let zero_version_format = match crate::RawFormatId::new("ksp.solana.raw_transaction".to_owned()) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
assert!(crate::RawPayload::try_new(zero_version_format, 0, vec![1_u8].into_boxed_slice(), crate::RawContentHash::new([0_u8; 32])).is_err());
let oversized_format = match crate::RawFormatId::new("ksp.solana.raw_transaction".to_owned()) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
let oversized = vec![0_u8; crate::MAX_RAW_PAYLOAD_BYTES + 1].into_boxed_slice();
let error = crate::RawPayload::try_new(oversized_format, 1, oversized, crate::RawContentHash::new([0_u8; 32]));
assert!(error.is_err());
return;
}
#[test]
fn acquisition_provenance_preserves_safe_metadata_and_validates_time_and_size() {
let received_at = match timestamp(2_000) {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let observed_at = match timestamp(1_000) {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let provider = match code("publicnode") {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let protocol = match code("yellowstone_grpc") {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let method = match code("transactions") {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let endpoint = match code("main") {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let commitment = match code("confirmed") {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let session = match code("session_1") {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let filter = match code("all_transactions") {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let provenance = crate::RawAcquisitionProvenance::new(provider, protocol, method, crate::RawAcquisitionOrigin::Live, received_at)
.with_endpoint_id(endpoint)
.with_commitment(commitment)
.with_capture_session_id(session)
.with_filter_id(filter)
.with_source_payload_hash(crate::RawContentHash::new([3_u8; 32]));
let provenance_result = provenance.try_with_observed_at(observed_at);
assert!(provenance_result.is_ok());
let provenance = match provenance_result {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
let provenance_result = provenance.try_with_source_payload_size_bytes(4_096);
assert!(provenance_result.is_ok());
let provenance = match provenance_result {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
assert_eq!(provenance.provider().as_str(), "publicnode");
assert_eq!(provenance.protocol().as_str(), "yellowstone_grpc");
assert_eq!(provenance.acquisition_method().as_str(), "transactions");
assert_eq!(provenance.origin(), crate::RawAcquisitionOrigin::Live);
assert_eq!(provenance.observed_at(), std::option::Option::Some(observed_at));
assert_eq!(provenance.received_at(), received_at);
assert_eq!(provenance.source_payload_size_bytes(), std::option::Option::Some(4_096));
let reversed_provider = match code("provider") {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let reversed_protocol = match code("solana_websocket") {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let reversed_method = match code("transactionSubscribe") {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let reversed_received = match timestamp(1_000) {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let reversed_observed = match timestamp(2_000) {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let reversed =
crate::RawAcquisitionProvenance::new(reversed_provider, reversed_protocol, reversed_method, crate::RawAcquisitionOrigin::Live, reversed_received)
.try_with_observed_at(reversed_observed);
assert!(reversed.is_err());
let oversized_provider = match code("provider") {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let oversized_protocol = match code("solana_http") {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let oversized_method = match code("getTransaction") {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let oversized_received = match timestamp(2_000) {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let oversized_source = crate::RawAcquisitionProvenance::new(
oversized_provider,
oversized_protocol,
oversized_method,
crate::RawAcquisitionOrigin::Backfill,
oversized_received,
)
.try_with_source_payload_size_bytes(crate::MAX_RAW_SOURCE_PAYLOAD_BYTES + 1);
assert!(oversized_source.is_err());
return;
}

View File

@@ -0,0 +1,85 @@
// file: crates/ksp-store-api/unit_tests/model/raw_transaction.rs
// version: 1
fn network() -> std::option::Option<crate::RawNetworkId> {
return match crate::RawNetworkId::new("mainnet-beta".to_owned()) {
std::result::Result::Ok(value) => std::option::Option::Some(value),
std::result::Result::Err(_) => std::option::Option::None,
};
}
fn payload() -> std::option::Option<crate::RawPayload> {
let format = match crate::RawFormatId::new("ksp.solana.raw_transaction".to_owned()) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return std::option::Option::None,
};
return match crate::RawPayload::try_new(
format,
1,
b"canonical transaction including logs".to_vec().into_boxed_slice(),
crate::RawContentHash::new([5_u8; 32]),
) {
std::result::Result::Ok(value) => std::option::Option::Some(value),
std::result::Result::Err(_) => std::option::Option::None,
};
}
fn provenance() -> std::option::Option<crate::RawAcquisitionProvenance> {
let provider = match crate::RawProvenanceCode::new("publicnode".to_owned()) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return std::option::Option::None,
};
let protocol = match crate::RawProvenanceCode::new("yellowstone_grpc".to_owned()) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return std::option::Option::None,
};
let method = match crate::RawProvenanceCode::new("transactions".to_owned()) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return std::option::Option::None,
};
let received_at = match crate::RawTimestamp::from_unix_millis(1_000) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return std::option::Option::None,
};
return std::option::Option::Some(crate::RawAcquisitionProvenance::new(provider, protocol, method, crate::RawAcquisitionOrigin::Backfill, received_at));
}
#[test]
fn raw_transaction_identity_is_network_plus_signature_and_payload_remains_whole() {
let network = match network() {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let payload = match payload() {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let signature = crate::RawTransactionSignature::new([9_u8; 64]);
let reference = crate::RawTransactionReference::new(network, signature);
let transaction = crate::RawTransaction::new(reference, 42, std::option::Option::None, payload);
assert_eq!(transaction.reference().network().as_str(), "mainnet-beta");
assert_eq!(transaction.reference().signature(), signature);
assert_eq!(transaction.slot(), 42);
assert!(transaction.block_time().is_none());
assert_eq!(transaction.payload().bytes(), b"canonical transaction including logs");
return;
}
#[test]
fn transaction_observation_is_separate_from_canonical_raw_payload() {
let network = match network() {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let provenance = match provenance() {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let signature = crate::RawTransactionSignature::new([11_u8; 64]);
let reference = crate::RawTransactionReference::new(network, signature);
let observation = crate::RawTransactionObservation::new(crate::RawObservationKey::new([12_u8; 32]), reference, provenance);
assert_eq!(observation.transaction().signature(), signature);
assert_eq!(observation.observation_key().as_bytes(), &[12_u8; 32]);
assert_eq!(observation.provenance().provider().as_str(), "publicnode");
return;
}