Retrieve nullifiers for all unconfirmed notes.

Previously we were retrieving nullifiers for notes that were not
marked spent, but not checking against whether the spending
transaction had been included in a block.
This commit is contained in:
Kris Nuttycombe 2021-03-24 16:18:54 -06:00
parent ebadc8c44c
commit 309d83af57
1 changed files with 9 additions and 1 deletions

View File

@ -470,13 +470,21 @@ pub fn get_witnesses<P>(
Ok(res)
}
/// Retrieve the nullifiers for notes that the wallet is tracking
/// that have not yet been confirmed as a consequence of the spending
/// transaction being included in a block.
pub fn get_nullifiers<P>(
wdb: &WalletDB<P>,
) -> Result<Vec<(AccountId, Nullifier)>, SqliteClientError> {
// Get the nullifiers for the notes we are tracking
let mut stmt_fetch_nullifiers = wdb
.conn
.prepare("SELECT id_note, account, nf FROM received_notes WHERE spent IS NULL")?;
.prepare(
"SELECT rn.id_note, rn.account, rn.nf, tx.block as block
FROM received_notes rn
LEFT OUTER JOIN transactions tx
ON tx.id_tx = rn.spent
WHERE block IS NULL")?;
let nullifiers = stmt_fetch_nullifiers.query_map(NO_PARAMS, |row| {
let account = AccountId(row.get(1)?);
let nf_bytes: Vec<u8> = row.get(2)?;