| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- # This file is part of DarkFi (https://dark.fi)
- #
- # Copyright (C) 2020-2026 Dyne.org foundation
- #
- # This program is free software: you can redistribute it and/or modify
- # it under the terms of the GNU Affero General Public License as
- # published by the Free Software Foundation, either version 3 of the
- # License, or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU Affero General Public License for more details.
- #
- # You should have received a copy of the GNU Affero General Public License
- # along with this program. If not, see <https://www.gnu.org/licenses/>.
- """
- Blueprint: explorer_bp
- This module defines a Flask blueprint (`explore_bp`) for managing the general functionality of the explorer application.
- It serves as the primary location for Flask routes related to the home page, search functionality, and other general features.
- """
- from flask import Blueprint, render_template, request
- import rpc
- # Create explore blueprint
- explore_bp = Blueprint("explore", __name__)
- @explore_bp.route('/', methods=["GET"])
- async def index():
- """
- Fetches and displays the explorer home page content using multiple RPC calls to the
- explorer daemon, retrieving the last 10 blocks, basic statistics, metric statistics,
- and DarkFi native contracts.
- Upon success, it returns a rendered template with recent blocks, basic statistics,
- latest metric statistics (if available), and native contracts.
- """
- # Fetch the latest 10 blocks
- blocks = await rpc.get_last_n_blocks(10)
- # Retrieve basic statistics summarizing the overall chain data
- basic_stats = await rpc.get_basic_statistics()
- # Fetch the metric statistics
- metric_stats = await rpc.get_metric_statistics()
- # Determine if metrics exist
- has_metrics = metric_stats and isinstance(metric_stats, list)
- # Get the latest metric statistics or return empty metrics
- latest_metric_stats = metric_stats[-1] if has_metrics else [0] * 15
- # Retrieve the native contracts
- native_contracts = await rpc.get_native_contracts()
- # Render the explorer home page
- return render_template(
- 'index.html',
- blocks=blocks,
- basic_stats=basic_stats,
- metric_stats=latest_metric_stats,
- native_contracts=native_contracts,
- )
- @explore_bp.route('/search', methods=['GET', 'POST'])
- async def search():
- """
- Searches for a block or transaction based on the provided hash using RPC calls to the
- explorer daemon. It retrieves relevant data using the search hash from provided query parameter,
- returning a rendered template that displays either block details with associated transactions
- or transaction details, depending on the search result.
- Query Params:
- search_hash (str): The hash of the block or transaction to search for.
- """
- # Get the search hash
- search_hash = request.args.get('search_hash', '')
- # Fetch the block corresponding to the search hash
- block = await rpc.get_block(search_hash)
- # Fetch transactions associated with the block
- transactions = await rpc.get_block_transactions(search_hash)
- if transactions:
- # Render block details with associated transactions if found
- return render_template('block.html', block=block, transactions=transactions)
- else:
- # Fetch transaction details if no transactions are found for the block
- transaction = await rpc.get_transaction(search_hash)
- return render_template('transaction.html', transaction=transaction)
|