diff --git a/backend/internal/data/shutter_explorer.sql.go b/backend/internal/data/shutter_explorer.sql.go index 9338ca6..fa948e5 100644 --- a/backend/internal/data/shutter_explorer.sql.go +++ b/backend/internal/data/shutter_explorer.sql.go @@ -511,16 +511,28 @@ func (q *Queries) QueryTotalTXsForEachTXStatusLast30Days(ctx context.Context, tx } const queryTransactionDetailsByTxHash = `-- name: QueryTransactionDetailsByTxHash :one -SELECT - tse.event_tx_hash, tse.sender, FLOOR(EXTRACT(EPOCH FROM tse.created_at)) as created_at_unix, tse.created_at, - dt.tx_hash AS user_tx_hash, dt.tx_status, dt.slot, - COALESCE(FLOOR(EXTRACT(EPOCH FROM dt.created_at)), 0)::BIGINT AS decrypted_tx_created_at_unix, - COALESCE(FLOOR(EXTRACT(EPOCH FROM dt.updated_at)), 0)::BIGINT AS decrypted_tx_updated_at_unix, - bk.block_number as block_number -FROM transaction_submitted_event tse -LEFT JOIN decrypted_tx dt ON tse.id = dt.transaction_submitted_event_id -LEFT JOIN block bk ON dt.slot = bk.slot -WHERE tse.event_tx_hash = $1 OR dt.tx_hash = $1 +WITH prioritized_tx AS ( + SELECT + tse.event_tx_hash, tse.sender, + FLOOR(EXTRACT(EPOCH FROM tse.created_at)) AS created_at_unix, + tse.created_at, + dt.tx_hash AS user_tx_hash, dt.tx_status, dt.slot, + COALESCE(FLOOR(EXTRACT(EPOCH FROM dt.created_at)), 0)::BIGINT AS decrypted_tx_created_at_unix, + COALESCE(FLOOR(EXTRACT(EPOCH FROM dt.updated_at)), 0)::BIGINT AS decrypted_tx_updated_at_unix, + bk.block_number AS block_number, + CASE + WHEN dt.tx_status = 'shielded inclusion' THEN 1 + WHEN dt.tx_status = 'unshielded inclusion' THEN 2 + ELSE 3 + END AS priority + FROM transaction_submitted_event tse + LEFT JOIN decrypted_tx dt ON tse.id = dt.transaction_submitted_event_id + LEFT JOIN block bk ON dt.slot = bk.slot + WHERE tse.event_tx_hash = $1 OR dt.tx_hash = $1 +) +SELECT event_tx_hash, sender, created_at_unix, created_at, user_tx_hash, tx_status, slot, decrypted_tx_created_at_unix, decrypted_tx_updated_at_unix, block_number, priority +FROM prioritized_tx +ORDER BY priority LIMIT 1 ` @@ -535,6 +547,7 @@ type QueryTransactionDetailsByTxHashRow struct { DecryptedTxCreatedAtUnix int64 DecryptedTxUpdatedAtUnix int64 BlockNumber pgtype.Int8 + Priority int32 } func (q *Queries) QueryTransactionDetailsByTxHash(ctx context.Context, eventTxHash []byte) (QueryTransactionDetailsByTxHashRow, error) { @@ -551,6 +564,7 @@ func (q *Queries) QueryTransactionDetailsByTxHash(ctx context.Context, eventTxHa &i.DecryptedTxCreatedAtUnix, &i.DecryptedTxUpdatedAtUnix, &i.BlockNumber, + &i.Priority, ) return i, err } diff --git a/backend/internal/data/sql/queries/shutter_explorer.sql b/backend/internal/data/sql/queries/shutter_explorer.sql index 69cd285..2d72c40 100644 --- a/backend/internal/data/sql/queries/shutter_explorer.sql +++ b/backend/internal/data/sql/queries/shutter_explorer.sql @@ -147,18 +147,31 @@ ORDER BY submission_time DESC LIMIT 1; -- name: QueryTransactionDetailsByTxHash :one -SELECT - tse.event_tx_hash, tse.sender, FLOOR(EXTRACT(EPOCH FROM tse.created_at)) as created_at_unix, tse.created_at, - dt.tx_hash AS user_tx_hash, dt.tx_status, dt.slot, - COALESCE(FLOOR(EXTRACT(EPOCH FROM dt.created_at)), 0)::BIGINT AS decrypted_tx_created_at_unix, - COALESCE(FLOOR(EXTRACT(EPOCH FROM dt.updated_at)), 0)::BIGINT AS decrypted_tx_updated_at_unix, - bk.block_number as block_number -FROM transaction_submitted_event tse -LEFT JOIN decrypted_tx dt ON tse.id = dt.transaction_submitted_event_id -LEFT JOIN block bk ON dt.slot = bk.slot -WHERE tse.event_tx_hash = $1 OR dt.tx_hash = $1 +WITH prioritized_tx AS ( + SELECT + tse.event_tx_hash, tse.sender, + FLOOR(EXTRACT(EPOCH FROM tse.created_at)) AS created_at_unix, + tse.created_at, + dt.tx_hash AS user_tx_hash, dt.tx_status, dt.slot, + COALESCE(FLOOR(EXTRACT(EPOCH FROM dt.created_at)), 0)::BIGINT AS decrypted_tx_created_at_unix, + COALESCE(FLOOR(EXTRACT(EPOCH FROM dt.updated_at)), 0)::BIGINT AS decrypted_tx_updated_at_unix, + bk.block_number AS block_number, + CASE + WHEN dt.tx_status = 'shielded inclusion' THEN 1 + WHEN dt.tx_status = 'unshielded inclusion' THEN 2 + ELSE 3 + END AS priority + FROM transaction_submitted_event tse + LEFT JOIN decrypted_tx dt ON tse.id = dt.transaction_submitted_event_id + LEFT JOIN block bk ON dt.slot = bk.slot + WHERE tse.event_tx_hash = $1 OR dt.tx_hash = $1 +) +SELECT * +FROM prioritized_tx +ORDER BY priority LIMIT 1; + -- name: QueryLatestSequencerTransactions :many SELECT ('0x' || encode(event_tx_hash, 'hex'))::TEXT AS sequencer_tx_hash, FLOOR(EXTRACT(EPOCH FROM created_at)) as created_at_unix FROM transaction_submitted_event