This commit is contained in:
2026-06-17 16:06:09 +02:00
parent be12f5810b
commit 319be14aa6
37 changed files with 7129 additions and 363 deletions

View File

@@ -114,6 +114,24 @@ impl TradeAggregationService {
continue;
},
};
let payload_base_vault_address =
crate::trade_aggregation::extract_payload_string_by_candidate_keys(
&payload,
&["baseVault", "base_vault", "baseVaultAddress", "base_vault_address"],
);
let payload_quote_vault_address =
crate::trade_aggregation::extract_payload_string_by_candidate_keys(
&payload,
&["quoteVault", "quote_vault", "quoteVaultAddress", "quote_vault_address"],
);
let effective_base_vault_address = match base_vault_address.as_deref() {
Some(base_vault_address) => Some(base_vault_address),
None => payload_base_vault_address.as_deref(),
};
let effective_quote_vault_address = match quote_vault_address.as_deref() {
Some(quote_vault_address) => Some(quote_vault_address),
None => payload_quote_vault_address.as_deref(),
};
if !crate::is_decoded_event_trade_candidate(decoded_event.event_kind.as_str(), &payload)
{
tracing::debug!(
@@ -150,8 +168,8 @@ impl TradeAggregationService {
quote_token_mint: quote_token_mint.as_deref(),
base_token_decimals,
quote_token_decimals,
base_vault_address: base_vault_address.as_deref(),
quote_vault_address: quote_vault_address.as_deref(),
base_vault_address: effective_base_vault_address,
quote_vault_address: effective_quote_vault_address,
};
let amount_resolution =
crate::trade_amount_resolution::resolve_trade_amounts(&amount_input).await;
@@ -212,6 +230,29 @@ impl TradeAggregationService {
}
}
fn extract_payload_string_by_candidate_keys(
payload: &serde_json::Value,
keys: &[&str],
) -> std::option::Option<std::string::String> {
let object = match payload.as_object() {
Some(object) => object,
None => return None,
};
for key in keys {
let value = object.get(*key);
let value = match value {
Some(value) => value,
None => continue,
};
if let Some(text) = value.as_str() {
if !text.trim().is_empty() {
return Some(text.to_string());
}
}
}
return None;
}
fn should_skip_pump_fun_duplicate_trade_event(
decoded_event: &crate::DexDecodedEventDto,
decoded_events: &[crate::DexDecodedEventDto],