232 lines
8.5 KiB
SQL
232 lines
8.5 KiB
SQL
-- file: SQL_VALIDATION_RAYDIUM_CPMM_0_7_48.sql
|
|
|
|
-- 1. Coverage rows must exist after diagnostics/validation/backfill refresh.
|
|
SELECT *
|
|
FROM k_sol_dex_event_coverage_entries
|
|
WHERE decoder_code = 'raydium_cpmm'
|
|
ORDER BY entry_kind, entry_name, discriminator_hex;
|
|
|
|
-- 2. Aggregated coverage summary for Raydium CPMM.
|
|
SELECT
|
|
decoder_code,
|
|
listed_entry_count,
|
|
decoded_entry_count,
|
|
observed_entry_count,
|
|
materialized_entry_count,
|
|
total_observed_count,
|
|
total_materialized_count,
|
|
trade_count,
|
|
audit_only_entry_count,
|
|
upstream_git_mapped_unverified_entry_count,
|
|
upstream_git_local_corpus_observed_entry_count,
|
|
upstream_git_local_corpus_materialized_entry_count
|
|
FROM (
|
|
SELECT
|
|
decoder_code,
|
|
COUNT(*) AS listed_entry_count,
|
|
SUM(CASE WHEN local_event_kind IS NOT NULL AND local_event_kind <> '' THEN 1 ELSE 0 END) AS decoded_entry_count,
|
|
SUM(CASE WHEN observed_count > 0 THEN 1 ELSE 0 END) AS observed_entry_count,
|
|
SUM(CASE WHEN materialized_count > 0 THEN 1 ELSE 0 END) AS materialized_entry_count,
|
|
COALESCE(SUM(observed_count), 0) AS total_observed_count,
|
|
COALESCE(SUM(materialized_count), 0) AS total_materialized_count,
|
|
COALESCE(SUM(trade_count), 0) AS trade_count,
|
|
SUM(CASE WHEN expected_db_target = 'k_sol_dex_decoded_events_only' THEN 1 ELSE 0 END) AS audit_only_entry_count,
|
|
SUM(CASE WHEN proof_status = 'upstream_git_mapped_unverified' THEN 1 ELSE 0 END) AS upstream_git_mapped_unverified_entry_count,
|
|
SUM(CASE WHEN proof_status = 'upstream_git_local_corpus_observed' THEN 1 ELSE 0 END) AS upstream_git_local_corpus_observed_entry_count,
|
|
SUM(CASE WHEN proof_status = 'upstream_git_local_corpus_materialized' THEN 1 ELSE 0 END) AS upstream_git_local_corpus_materialized_entry_count
|
|
FROM k_sol_dex_event_coverage_entries
|
|
GROUP BY decoder_code
|
|
)
|
|
WHERE decoder_code = 'raydium_cpmm';
|
|
|
|
-- 3. Decoded event distribution.
|
|
SELECT
|
|
de.protocol_name,
|
|
de.event_kind,
|
|
COUNT(*) AS decoded_count,
|
|
COUNT(DISTINCT de.transaction_id) AS transaction_count
|
|
FROM k_sol_dex_decoded_events de
|
|
WHERE de.protocol_name = 'raydium_cpmm'
|
|
GROUP BY de.protocol_name, de.event_kind
|
|
ORDER BY decoded_count DESC, de.event_kind;
|
|
|
|
-- 4. Audit/non-trade safety: no audit/non-trade CPMM event may produce trades.
|
|
SELECT
|
|
de.protocol_name,
|
|
de.event_kind,
|
|
COUNT(te.id) AS trade_count
|
|
FROM k_sol_dex_decoded_events de
|
|
LEFT JOIN k_sol_trade_events te
|
|
ON te.decoded_event_id = de.id
|
|
WHERE de.protocol_name = 'raydium_cpmm'
|
|
AND (
|
|
de.event_kind LIKE '%audit%'
|
|
OR de.event_kind IN (
|
|
'raydium_cpmm.lp_change_event',
|
|
'raydium_cpmm.swap_event',
|
|
'raydium_cpmm.collect_creator_fee',
|
|
'raydium_cpmm.collect_fund_fee',
|
|
'raydium_cpmm.collect_protocol_fee',
|
|
'raydium_cpmm.create_amm_config',
|
|
'raydium_cpmm.update_amm_config',
|
|
'raydium_cpmm.update_pool_status',
|
|
'raydium_cpmm.create_permission_pda',
|
|
'raydium_cpmm.close_permission_pda'
|
|
)
|
|
OR json_extract(de.payload_json, '$.eventActionability') IN ('non_trade_useful', 'informational', 'non_actionable_trade')
|
|
)
|
|
GROUP BY de.protocol_name, de.event_kind
|
|
ORDER BY trade_count DESC, de.event_kind;
|
|
|
|
-- 5. Failed transactions must not materialize trades.
|
|
SELECT
|
|
de.event_kind,
|
|
COUNT(*) AS decoded_count,
|
|
COUNT(te.id) AS trade_count
|
|
FROM k_sol_dex_decoded_events de
|
|
JOIN k_sol_chain_transactions tx
|
|
ON tx.id = de.transaction_id
|
|
LEFT JOIN k_sol_trade_events te
|
|
ON te.decoded_event_id = de.id
|
|
WHERE de.protocol_name = 'raydium_cpmm'
|
|
AND tx.err_json IS NOT NULL
|
|
AND tx.err_json <> ''
|
|
GROUP BY de.event_kind
|
|
ORDER BY trade_count DESC, decoded_count DESC;
|
|
|
|
-- 6. Local specialized decoder must replace upstream fallback for CPMM entries.
|
|
SELECT
|
|
json_extract(payload_json, '$.upstreamDecoderCode') AS upstream_decoder_code,
|
|
json_extract(payload_json, '$.entryName') AS entry_name,
|
|
json_extract(payload_json, '$.discriminatorHex') AS discriminator_hex,
|
|
COUNT(*) AS fallback_count
|
|
FROM k_sol_dex_decoded_events
|
|
WHERE protocol_name = 'upstream_git'
|
|
AND event_kind = 'upstream_git.instruction_match'
|
|
AND json_extract(payload_json, '$.upstreamDecoderCode') = 'raydium_cpmm'
|
|
GROUP BY upstream_decoder_code, entry_name, discriminator_hex
|
|
ORDER BY fallback_count DESC, entry_name;
|
|
|
|
-- 7. Program data events are decoded but must remain non-trade/non-candle candidates.
|
|
SELECT
|
|
event_kind,
|
|
COUNT(*) AS decoded_count,
|
|
SUM(CASE WHEN json_extract(payload_json, '$.tradeCandidate') = 1 THEN 1 ELSE 0 END) AS trade_candidate_count,
|
|
SUM(CASE WHEN json_extract(payload_json, '$.candleCandidate') = 1 THEN 1 ELSE 0 END) AS candle_candidate_count,
|
|
SUM(CASE WHEN json_extract(payload_json, '$.eventActionability') IN ('non_trade_useful', 'non_actionable_trade') THEN 1 ELSE 0 END) AS safe_actionability_count
|
|
FROM k_sol_dex_decoded_events
|
|
WHERE protocol_name = 'raydium_cpmm'
|
|
AND event_kind IN ('raydium_cpmm.lp_change_event', 'raydium_cpmm.swap_event')
|
|
GROUP BY event_kind
|
|
ORDER BY event_kind;
|
|
|
|
-- 8. Liquidity materialization for lp_change_event, if pool/pair exists in local corpus.
|
|
SELECT
|
|
de.event_kind,
|
|
json_extract(de.payload_json, '$.changeType') AS change_type,
|
|
COUNT(de.id) AS decoded_count,
|
|
COUNT(le.id) AS liquidity_materialized_count,
|
|
COUNT(te.id) AS trade_count
|
|
FROM k_sol_dex_decoded_events de
|
|
LEFT JOIN k_sol_liquidity_events le
|
|
ON le.decoded_event_id = de.id
|
|
LEFT JOIN k_sol_trade_events te
|
|
ON te.decoded_event_id = de.id
|
|
WHERE de.protocol_name = 'raydium_cpmm'
|
|
AND de.event_kind = 'raydium_cpmm.lp_change_event'
|
|
GROUP BY de.event_kind, change_type
|
|
ORDER BY change_type;
|
|
|
|
|
|
-- 9. Replay coverage hook check: capture this value before and after local replay.
|
|
SELECT MAX(updated_at) AS latest_coverage_refresh_at
|
|
FROM k_sol_dex_event_coverage_entries
|
|
WHERE decoder_code = 'raydium_cpmm';
|
|
|
|
-- 10. lp_change_event is a bidirectional liquidity event in coverage.
|
|
SELECT
|
|
entry_name,
|
|
event_family,
|
|
expected_db_target,
|
|
proof_status,
|
|
observed_count,
|
|
materialized_count,
|
|
trade_count
|
|
FROM k_sol_dex_event_coverage_entries
|
|
WHERE decoder_code = 'raydium_cpmm'
|
|
AND entry_name = 'lp_change_event';
|
|
|
|
-- 0.7.48 final — materialization safety summary.
|
|
SELECT
|
|
de.event_kind,
|
|
COUNT(*) AS decoded_count,
|
|
COUNT(le.id) AS liquidity_count,
|
|
COUNT(fe.id) AS fee_count,
|
|
COUNT(pa.id) AS admin_count,
|
|
COUNT(ple.id) AS lifecycle_count,
|
|
COUNT(te.id) AS trade_count
|
|
FROM k_sol_dex_decoded_events de
|
|
LEFT JOIN k_sol_liquidity_events le
|
|
ON le.decoded_event_id = de.id
|
|
LEFT JOIN k_sol_fee_events fe
|
|
ON fe.decoded_event_id = de.id
|
|
LEFT JOIN k_sol_pool_admin_events pa
|
|
ON pa.decoded_event_id = de.id
|
|
LEFT JOIN k_sol_pool_lifecycle_events ple
|
|
ON ple.decoded_event_id = de.id
|
|
LEFT JOIN k_sol_trade_events te
|
|
ON te.decoded_event_id = de.id
|
|
WHERE de.protocol_name = 'raydium_cpmm'
|
|
GROUP BY de.event_kind
|
|
ORDER BY de.event_kind;
|
|
|
|
-- 0.7.48 final — lp_change_event add/remove split.
|
|
SELECT
|
|
de.event_kind,
|
|
json_extract(de.payload_json, '$.changeType') AS change_type,
|
|
COUNT(*) AS decoded_count,
|
|
COUNT(le.id) AS liquidity_count,
|
|
COUNT(te.id) AS trade_count
|
|
FROM k_sol_dex_decoded_events de
|
|
LEFT JOIN k_sol_liquidity_events le
|
|
ON le.decoded_event_id = de.id
|
|
LEFT JOIN k_sol_trade_events te
|
|
ON te.decoded_event_id = de.id
|
|
WHERE de.protocol_name = 'raydium_cpmm'
|
|
AND de.event_kind = 'raydium_cpmm.lp_change_event'
|
|
GROUP BY de.event_kind, change_type
|
|
ORDER BY change_type;
|
|
|
|
-- 0.7.48 final — initialize_with_permission must remain lifecycle-only.
|
|
SELECT
|
|
de.event_kind,
|
|
COUNT(DISTINCT de.id) AS decoded_count,
|
|
COUNT(DISTINCT ple.id) AS lifecycle_count,
|
|
COUNT(DISTINCT pa.id) AS admin_count,
|
|
COUNT(DISTINCT te.id) AS trade_count
|
|
FROM k_sol_dex_decoded_events de
|
|
LEFT JOIN k_sol_pool_lifecycle_events ple
|
|
ON ple.decoded_event_id = de.id
|
|
LEFT JOIN k_sol_pool_admin_events pa
|
|
ON pa.decoded_event_id = de.id
|
|
LEFT JOIN k_sol_trade_events te
|
|
ON te.decoded_event_id = de.id
|
|
WHERE de.protocol_name = 'raydium_cpmm'
|
|
AND de.event_kind IN (
|
|
'raydium_cpmm.initialize',
|
|
'raydium_cpmm.initialize_with_permission'
|
|
)
|
|
GROUP BY de.event_kind
|
|
ORDER BY de.event_kind;
|
|
|
|
-- 0.7.48 final — instruction observation index.
|
|
SELECT
|
|
instruction_name,
|
|
discriminator_hex,
|
|
COUNT(*) AS observed_count,
|
|
COUNT(DISTINCT signature) AS tx_count
|
|
FROM k_sol_instruction_observations
|
|
WHERE decoder_code = 'raydium_cpmm'
|
|
GROUP BY instruction_name, discriminator_hex
|
|
ORDER BY observed_count DESC;
|