0.7.28 - final

This commit is contained in:
2026-05-12 15:04:04 +02:00
parent 7f130dba6b
commit 4f6a4806e2
34 changed files with 4020 additions and 199 deletions

View File

@@ -115,12 +115,15 @@ impl DexDetectService {
crate::dex_detection_route::DexDetectionRoute::MeteoraDbcPool => {
self.detect_meteora_dbc_pool(&transaction, decoded_event).await
},
crate::dex_detection_route::DexDetectionRoute::MeteoraDammV2Pool => {
self.detect_meteora_damm_v2_pool(&transaction, decoded_event).await
crate::dex_detection_route::DexDetectionRoute::MeteoraDlmmPool => {
self.detect_meteora_dlmm_pool(&transaction, decoded_event).await
},
crate::dex_detection_route::DexDetectionRoute::MeteoraDammV1Pool => {
self.detect_meteora_damm_v1_pool(&transaction, decoded_event).await
},
crate::dex_detection_route::DexDetectionRoute::MeteoraDammV2Pool => {
self.detect_meteora_damm_v2_pool(&transaction, decoded_event).await
},
crate::dex_detection_route::DexDetectionRoute::OrcaWhirlpoolsPool => {
self.detect_orca_whirlpools_pool(&transaction, decoded_event).await
},
@@ -380,21 +383,58 @@ impl DexDetectService {
.await;
}
async fn detect_meteora_damm_v2_pool(
async fn detect_meteora_dlmm_pool(
&self,
transaction: &crate::ChainTransactionDto,
decoded_event: &crate::DexDecodedEventDto,
) -> Result<crate::DexPoolDetectionResult, crate::Error> {
return self
.detect_materialized_pool_from_decoded_event(
transaction,
let dex_id_result =
crate::dex_catalog::ensure_known_dex(self.database.as_ref(), "meteora_dlmm").await;
let dex_id = match dex_id_result {
Ok(dex_id) => dex_id,
Err(error) => return Err(error),
};
let payload_value_result = parse_payload_json(decoded_event.payload_json.as_str());
let payload_value = match payload_value_result {
Ok(payload_value) => payload_value,
Err(error) => return Err(error),
};
let reserve_x_account = extract_payload_string_field(&payload_value, "reserveXAccount");
let reserve_y_account = extract_payload_string_field(&payload_value, "reserveYAccount");
let input_result =
crate::dex_pool_materialization::DexPoolMaterializationInput::from_decoded_event(
decoded_event,
"meteora_damm_v2",
crate::PoolKind::Amm,
dex_id,
crate::PoolKind::Clmm,
crate::PoolStatus::Active,
"signal.dex.meteora_damm_v2",
crate::dex_pool_materialization::DexPoolTokenOrder::ChooseBaseQuoteFromTokenAB,
reserve_x_account,
reserve_y_account,
transaction.source_endpoint_name.clone(),
);
let input = match input_result {
Ok(input) => input,
Err(error) => return Err(error),
};
let detection_result =
crate::dex_pool_materialization::materialize_dex_pool(self.database.as_ref(), &input)
.await;
let detection_result = match detection_result {
Ok(detection_result) => detection_result,
Err(error) => return Err(error),
};
let signal_result = self
.record_pool_detection_signals(
transaction,
"signal.dex.meteora_dlmm",
&detection_result,
payload_value,
)
.await;
if let Err(error) = signal_result {
return Err(error);
}
return Ok(detection_result);
}
async fn detect_meteora_damm_v1_pool(
@@ -414,6 +454,23 @@ impl DexDetectService {
.await;
}
async fn detect_meteora_damm_v2_pool(
&self,
transaction: &crate::ChainTransactionDto,
decoded_event: &crate::DexDecodedEventDto,
) -> Result<crate::DexPoolDetectionResult, crate::Error> {
return self
.detect_materialized_pool_from_decoded_event(
transaction,
decoded_event,
"meteora_damm_v2",
crate::PoolKind::Amm,
crate::PoolStatus::Active,
"signal.dex.meteora_damm_v2",
)
.await;
}
async fn detect_orca_whirlpools_pool(
&self,
transaction: &crate::ChainTransactionDto,