add minimal tx list query and template

This commit is contained in:
GroovieGermanikus 2023-12-21 21:14:50 +01:00
parent dfd954aca6
commit b8c6fcd900
No known key found for this signature in database
GPG Key ID: 5B6EB831A5CD2015
3 changed files with 80 additions and 17 deletions

View File

@ -0,0 +1,47 @@
<table id="txlist" class="table table-sm table-nowrap card-table">
<thead>
<tr>
<th class="text-muted c-pointer">#</th>
<th class="text-muted">In block</th>
<th class="text-muted">Transaction Signature</th>
<th class="text-muted text-end table-cell-width-number">CU requested</th>
<th class="text-muted text-end table-cell-width-number">Prio Fees</th>
</tr>
</thead>
<tbody class="list">
{% if limit_exceeded %}
<tr>
<td colspan="7" class="text-warning">Result was truncated</td>
</tr>
{% endif %}
{% for tx in transactions %}
<tr>
<td>{{ tx.pos }}</td>
{% if tx.was_included_in_block %}
<td><span class="badge bg-success-soft">Included</span></td>
{% else %}
<td><span class="badge bg-warning-soft">Excluded</span></td>
{% endif %}
<td>
<div class="d-flex align-items-center font-monospace" style="width:20em">
<div class="text-truncate">
<a href="/transaction/{{tx.signature}}">{{ tx.signature }}</a>
</div>
</div>
</td>
<td class="text-end font-monospace">
<div class="font-monospace text-primary">
{{ tx.cu_requested | lamports }}
</div>
</td>
<td class="text-end font-monospace">
<div class="font-monospace text-primary">
{{ tx.prioritization_fees | lamports }}
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@ -120,7 +120,7 @@
<div class="card-header align-items-center"><h3 class="card-header-title">Transactions requesting locks</h3></div>
{% include "_txlist.html" %}
{% include "_txlistmini.html" %}
</div>

View File

@ -2,7 +2,7 @@ import postgres_connection
import json
def run_query(transaction_row_limit=50, filter_txsig=None, filter_account_address=None):
def run_query(transaction_row_limit=50, filter_txsig=None):
maprows = postgres_connection.query(
"""
SELECT * FROM (
@ -24,19 +24,12 @@ def run_query(transaction_row_limit=50, filter_txsig=None, filter_account_addres
LEFT JOIN banking_stage_results_2.transaction_infos txi ON txi.transaction_id=tx_slot.transaction_id
WHERE true
AND (%s or signature = %s)
AND (%s or txi.transaction_id in (
SELECT transaction_id
FROM banking_stage_results_2.accounts_map_transaction amt
INNER JOIN banking_stage_results_2.accounts acc ON acc.acc_id=amt.acc_id
WHERE account_key = %s
))
) AS data
-- transaction_id is required as tie breaker
ORDER BY utc_timestamp DESC, transaction_id DESC
LIMIT %s
""", [
filter_txsig is None, filter_txsig,
filter_account_address is None, filter_account_address,
transaction_row_limit,
])
@ -47,6 +40,35 @@ def run_query(transaction_row_limit=50, filter_txsig=None, filter_account_addres
return maprows
def query_transactions_by_address(account_key: str, transaction_row_limit=100):
maprows = postgres_connection.query(
"""
SELECT * FROM (
SELECT
amt.transaction_id,
signature,
( txi is not null ) AS was_included_in_block,
txi.cu_requested,
txi.prioritization_fees
FROM banking_stage_results_2.accounts_map_transaction amt
INNER JOIN banking_stage_results_2.accounts acc ON acc.acc_id=amt.acc_id
INNER JOIN banking_stage_results_2.transactions txs ON txs.transaction_id=amt.transaction_id
LEFT JOIN banking_stage_results_2.transaction_infos txi ON txi.transaction_id=amt.transaction_id
WHERE account_key = %s
) AS data
ORDER BY transaction_id DESC
LIMIT %s
""", [
account_key,
transaction_row_limit,
])
for index, row in enumerate(maprows):
row['pos'] = index + 1
return maprows
# may return multiple rows
def search_transaction_by_sig(tx_sig: str):
maprows = run_query(transaction_row_limit=10, filter_txsig=tx_sig)
@ -54,17 +76,11 @@ def search_transaction_by_sig(tx_sig: str):
return maprows
def query_transactions_by_address(account_key: str, transaction_row_limit=100):
maprows = run_query(transaction_row_limit=transaction_row_limit, filter_account_address=account_key)
return maprows
# return (rows, is_limit_exceeded)
def search_transactions_by_address(account_key: str) -> (list, bool):
maprows = run_query(transaction_row_limit=100, filter_account_address=account_key)
maprows = query_transactions_by_address(transaction_row_limit=101, account_key=account_key)
if len(maprows) == 100:
if len(maprows) == 101:
print("limit exceeded while searching for transactions by address")
return maprows, True