2024-09-25 11:56:55 +02:00
|
|
|
// Copyright (C) 2024 Riften Labs AS
|
|
|
|
|
//
|
|
|
|
|
// This software is licensed under the GNU Affero General Public License (AGPL), version 3.0 or later.
|
|
|
|
|
// A copy of the license can be found in the LICENSE file or at https://www.gnu.org/licenses/agpl-3.0.html
|
|
|
|
|
|
|
|
|
|
use bitcoin_hashes::hex::FromHex;
|
|
|
|
|
use bitcoincash::TokenID;
|
2026-01-21 08:27:57 +01:00
|
|
|
use rocket::{get, serde::json::Json, State};
|
2024-09-25 11:56:55 +02:00
|
|
|
use serde_json::json;
|
|
|
|
|
use serde_json::Value;
|
|
|
|
|
|
|
|
|
|
use crate::db::DB;
|
2026-01-21 08:27:57 +01:00
|
|
|
use crate::rpc::err::{bad_request, db_error, ApiErrorCode, ApiResult};
|
2024-09-25 11:56:55 +02:00
|
|
|
|
|
|
|
|
#[get("/tx/latest?<limit>&<offset>&<token>")]
|
|
|
|
|
pub fn tx_latest(
|
|
|
|
|
limit: Option<usize>,
|
|
|
|
|
offset: Option<usize>,
|
|
|
|
|
token: Option<&str>,
|
|
|
|
|
conn: &State<DB>,
|
2026-01-21 08:27:57 +01:00
|
|
|
) -> ApiResult<Value> {
|
|
|
|
|
let db = conn.cauldron_r.get().map_err(db_error)?;
|
2024-09-25 11:56:55 +02:00
|
|
|
|
|
|
|
|
let limit = limit.unwrap_or(100).min(10000);
|
|
|
|
|
let offset = offset.unwrap_or(0);
|
|
|
|
|
|
|
|
|
|
let token = match token {
|
|
|
|
|
None => None,
|
|
|
|
|
Some(tokenhex) => match TokenID::from_hex(tokenhex) {
|
|
|
|
|
Ok(token) => Some(token),
|
2026-01-21 08:27:57 +01:00
|
|
|
Err(_) => {
|
|
|
|
|
return Err(bad_request(
|
|
|
|
|
ApiErrorCode::InvalidTokenId,
|
|
|
|
|
"Invalid token ID",
|
|
|
|
|
))
|
|
|
|
|
}
|
2024-09-25 11:56:55 +02:00
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
2026-01-21 08:27:57 +01:00
|
|
|
let txs = crate::db::cauldron::tx::latest(&db, limit, offset, token).map_err(db_error)?;
|
2024-09-25 11:56:55 +02:00
|
|
|
|
|
|
|
|
let txs_json: Vec<Value> = txs
|
|
|
|
|
.into_iter()
|
|
|
|
|
.map(|tx| {
|
|
|
|
|
json!({
|
|
|
|
|
"txid": tx.0.to_string(),
|
|
|
|
|
"blockhash": tx.1.map(|blockhex| blockhex.to_string()),
|
|
|
|
|
"timestamp_guess": tx.2
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
.collect();
|
|
|
|
|
|
|
|
|
|
Ok(Json(json!(txs_json)))
|
|
|
|
|
}
|