From 1d435cc1f81dc01ed9adec2914c9e78f77321654 Mon Sep 17 00:00:00 2001
From: "hinto.janai" <hinto.janai@protonmail.com>
Date: Mon, 14 Oct 2024 20:01:14 -0400
Subject: [PATCH] get_coinbase_tx_sum

---
 binaries/cuprated/src/rpc/json.rs | 28 ++++++++++++++++++++--------
 types/src/types.rs                |  2 --
 2 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/binaries/cuprated/src/rpc/json.rs b/binaries/cuprated/src/rpc/json.rs
index 883a8334..c97fa932 100644
--- a/binaries/cuprated/src/rpc/json.rs
+++ b/binaries/cuprated/src/rpc/json.rs
@@ -14,7 +14,7 @@ use cuprate_constants::{
     build::RELEASE,
     rpc::{RESTRICTED_BLOCK_COUNT, RESTRICTED_BLOCK_HEADER_RANGE},
 };
-use cuprate_helper::cast::u64_to_usize;
+use cuprate_helper::{cast::u64_to_usize, map::split_u128_into_low_high_bits};
 use cuprate_rpc_interface::RpcHandler;
 use cuprate_rpc_types::{
     base::{AccessResponseBase, ResponseBase},
@@ -542,17 +542,29 @@ async fn get_output_histogram(
 
 /// <https://github.com/monero-project/monero/blob/cc73fe71162d564ffda8e549b79a350bca53c454/src/rpc/core_rpc_server.cpp#L2998-L3013>
 async fn get_coinbase_tx_sum(
-    state: CupratedRpcHandler,
+    mut state: CupratedRpcHandler,
     request: GetCoinbaseTxSumRequest,
 ) -> Result<GetCoinbaseTxSumResponse, Error> {
+    let sum =
+        blockchain::coinbase_tx_sum(&mut state.blockchain_read, request.height, request.count)
+            .await?;
+
+    // Formats `u128` as hexadecimal strings.
+    let wide_emission_amount = format!("{:#x}", sum.fee_amount);
+    let wide_fee_amount = format!("{:#x}", sum.emission_amount);
+
+    let (emission_amount, emission_amount_top64) =
+        split_u128_into_low_high_bits(sum.emission_amount);
+    let (fee_amount, fee_amount_top64) = split_u128_into_low_high_bits(sum.fee_amount);
+
     Ok(GetCoinbaseTxSumResponse {
         base: AccessResponseBase::ok(),
-        emission_amount: todo!(),
-        emission_amount_top64: todo!(),
-        fee_amount: todo!(),
-        fee_amount_top64: todo!(),
-        wide_emission_amount: todo!(),
-        wide_fee_amount: todo!(),
+        emission_amount,
+        emission_amount_top64,
+        fee_amount,
+        fee_amount_top64,
+        wide_emission_amount,
+        wide_fee_amount,
     })
 }
 
diff --git a/types/src/types.rs b/types/src/types.rs
index 7d5c377f..669ec5da 100644
--- a/types/src/types.rs
+++ b/types/src/types.rs
@@ -177,8 +177,6 @@ pub struct OutputHistogramEntry {
 pub struct CoinbaseTxSum {
     pub emission_amount: u128,
     pub fee_amount: u128,
-    pub wide_emission_amount: u128,
-    pub wide_fee_amount: u128,
 }
 
 /// Data to create a custom block template.