Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 19 additions & 12 deletions storage/blockchain/src/ops/output.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,23 @@

//---------------------------------------------------------------------------------------------------- Import
use curve25519_dalek::edwards::CompressedEdwardsY;
use monero_serai::transaction::{Timelock, Transaction};
use monero_serai::transaction::Timelock;

use cuprate_database::{
DbResult, RuntimeError, {DatabaseRo, DatabaseRw},
};
use cuprate_helper::{cast::u32_to_usize, crypto::compute_zero_commitment};
use cuprate_helper::{cast::u64_to_usize, map::u64_to_timelock};
use cuprate_helper::{
cast::{u32_to_usize, u64_to_usize},
crypto::compute_zero_commitment,
map::u64_to_timelock,
};
use cuprate_types::OutputOnChain;

use crate::{
ops::macros::{doc_add_block_inner_invariant, doc_error},
ops::{
macros::{doc_add_block_inner_invariant, doc_error},
tx::get_tx_from_id,
},
tables::{
BlockInfos, BlockTxsHashes, Outputs, RctOutputs, Tables, TablesMut, TxBlobs, TxUnlockTime,
},
Expand Down Expand Up @@ -175,14 +181,16 @@ pub fn output_to_output_on_chain(

let txid = if get_txid {
let height = u32_to_usize(output.height);
let tx_idx = u64_to_usize(output.tx_idx);
let txid = if let Some(hash) = table_block_txs_hashes.get(&height)?.get(tx_idx) {
*hash

let miner_tx_id = table_block_infos.get(&height)?.mining_tx_index;

let txid = if miner_tx_id == output.tx_idx {
get_tx_from_id(&miner_tx_id, table_tx_blobs)?.hash()
} else {
let miner_tx_id = table_block_infos.get(&height)?.mining_tx_index;
let tx_blob = table_tx_blobs.get(&miner_tx_id)?;
Transaction::read(&mut tx_blob.0.as_slice())?.hash()
let idx = u64_to_usize(output.tx_idx - miner_tx_id - 1);
table_block_txs_hashes.get(&height)?[idx]
};

Some(txid)
} else {
None
Expand Down Expand Up @@ -234,8 +242,7 @@ pub fn rct_output_to_output_on_chain(
let miner_tx_id = table_block_infos.get(&height)?.mining_tx_index;

let txid = if miner_tx_id == rct_output.tx_idx {
let tx_blob = table_tx_blobs.get(&miner_tx_id)?;
Transaction::read(&mut tx_blob.0.as_slice())?.hash()
get_tx_from_id(&miner_tx_id, table_tx_blobs)?.hash()
} else {
let idx = u64_to_usize(rct_output.tx_idx - miner_tx_id - 1);
table_block_txs_hashes.get(&height)?[idx]
Expand Down