Adding ability to check for unconfirmed kernels

This commit is contained in:
aglkm
2024-05-25 16:17:40 +03:00
parent 2995b4f143
commit f315d31b58
4 changed files with 43 additions and 13 deletions

View File

@@ -118,6 +118,7 @@ pub struct Kernel {
pub excess: String,
pub ker_type: String,
pub fee: String,
pub status: String,
pub raw_data: String,
}
@@ -128,6 +129,7 @@ impl Kernel {
excess: String::new(),
ker_type: String::new(),
fee: String::new(),
status: String::new(),
raw_data: String::new(),
}
}

View File

@@ -126,7 +126,7 @@ async fn kernel(excess: &str) -> Template {
let _ = requests::get_kernel(&excess, &mut kernel).await;
if kernel.height.is_empty() == false {
if kernel.excess.is_empty() == false {
return Template::render("kernel", context! {
route: "kernel",
kernel,

View File

@@ -404,11 +404,31 @@ pub async fn get_block_header(hash: &str, height: &mut String)
// Get kernel.
pub async fn get_kernel(excess: &str, kernel: &mut Kernel)
-> Result<(), anyhow::Error> {
pub async fn get_kernel(excess: &str, kernel: &mut Kernel) -> Result<(), anyhow::Error> {
// First check whether kernel is broadcasted but not confirmed yet (in mempool)
let mut resp = call("get_unconfirmed_transactions", "[]", "1", "foreign").await?;
if resp["result"]["Ok"].is_null() == false {
for tx in resp["result"]["Ok"].as_array().unwrap() {
for ker in tx["tx"]["body"]["kernels"].as_array().unwrap() {
if ker["excess"].as_str().unwrap() == excess {
// Only Plain kernels in the mempool
kernel.ker_type = "Plain".to_string();
kernel.excess = ker["excess"].as_str().unwrap().to_string();
kernel.status = "Unconfirmed".to_string();
kernel.fee = format!("{}",
ker["features"]["Plain"]["fee"]
.to_string().parse::<f64>().unwrap() / 1000000000.0);
// Found it, no need to continue
return Ok(());
}
}
}
}
let params = &format!("[\"{}\", null, null]", excess)[..];
let resp = call("get_kernel", params, "1", "foreign").await?;
resp = call("get_kernel", params, "1", "foreign").await?;
if resp["result"]["Ok"].is_null() == false {
kernel.height = resp["result"]["Ok"]["height"].to_string();