Merge pull request #725 from nuttycom/fix/empty_wallet_t_balance
Fix transparent balance error when the wallet is empty.
This commit is contained in:
commit
d0297bff0c
|
@ -1026,7 +1026,8 @@ pub(crate) fn get_transparent_balances<P: consensus::Parameters>(
|
||||||
ON tx.id_tx = u.spent_in_tx
|
ON tx.id_tx = u.spent_in_tx
|
||||||
WHERE u.received_by_account = ?
|
WHERE u.received_by_account = ?
|
||||||
AND u.height <= ?
|
AND u.height <= ?
|
||||||
AND tx.block IS NULL",
|
AND tx.block IS NULL
|
||||||
|
GROUP BY u.address",
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut res = HashMap::new();
|
let mut res = HashMap::new();
|
||||||
|
@ -1371,6 +1372,11 @@ mod tests {
|
||||||
let uaddr = db_data.get_current_address(account_id).unwrap().unwrap();
|
let uaddr = db_data.get_current_address(account_id).unwrap().unwrap();
|
||||||
let taddr = uaddr.transparent().unwrap();
|
let taddr = uaddr.transparent().unwrap();
|
||||||
|
|
||||||
|
let bal_absent = db_data
|
||||||
|
.get_transparent_balances(account_id, BlockHeight::from_u32(12345))
|
||||||
|
.unwrap();
|
||||||
|
assert!(bal_absent.is_empty());
|
||||||
|
|
||||||
let utxo = WalletTransparentOutput::from_parts(
|
let utxo = WalletTransparentOutput::from_parts(
|
||||||
OutPoint::new([1u8; 32], 1),
|
OutPoint::new([1u8; 32], 1),
|
||||||
TxOut {
|
TxOut {
|
||||||
|
@ -1382,7 +1388,7 @@ mod tests {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let res0 = super::put_received_transparent_utxo(&mut ops, &utxo);
|
let res0 = super::put_received_transparent_utxo(&mut ops, &utxo);
|
||||||
assert!(matches!(res0, Ok(_)));
|
assert_matches!(res0, Ok(_));
|
||||||
|
|
||||||
// Change the mined height of the UTXO and upsert; we should get back
|
// Change the mined height of the UTXO and upsert; we should get back
|
||||||
// the same utxoid
|
// the same utxoid
|
||||||
|
@ -1396,9 +1402,9 @@ mod tests {
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let res1 = super::put_received_transparent_utxo(&mut ops, &utxo2);
|
let res1 = super::put_received_transparent_utxo(&mut ops, &utxo2);
|
||||||
assert!(matches!(res1, Ok(id) if id == res0.unwrap()));
|
assert_matches!(res1, Ok(id) if id == res0.unwrap());
|
||||||
|
|
||||||
assert!(matches!(
|
assert_matches!(
|
||||||
super::get_unspent_transparent_outputs(
|
super::get_unspent_transparent_outputs(
|
||||||
&db_data,
|
&db_data,
|
||||||
taddr,
|
taddr,
|
||||||
|
@ -1406,9 +1412,9 @@ mod tests {
|
||||||
&[]
|
&[]
|
||||||
),
|
),
|
||||||
Ok(utxos) if utxos.is_empty()
|
Ok(utxos) if utxos.is_empty()
|
||||||
));
|
);
|
||||||
|
|
||||||
assert!(matches!(
|
assert_matches!(
|
||||||
super::get_unspent_transparent_outputs(
|
super::get_unspent_transparent_outputs(
|
||||||
&db_data,
|
&db_data,
|
||||||
taddr,
|
taddr,
|
||||||
|
@ -1419,7 +1425,12 @@ mod tests {
|
||||||
utxos.len() == 1 &&
|
utxos.len() == 1 &&
|
||||||
utxos.iter().any(|rutxo| rutxo.height() == utxo2.height())
|
utxos.iter().any(|rutxo| rutxo.height() == utxo2.height())
|
||||||
}
|
}
|
||||||
));
|
);
|
||||||
|
|
||||||
|
assert_matches!(
|
||||||
|
db_data.get_transparent_balances(account_id, BlockHeight::from_u32(34567)),
|
||||||
|
Ok(h) if h.get(taddr) == Amount::from_u64(100000).ok().as_ref()
|
||||||
|
);
|
||||||
|
|
||||||
// Artificially delete the address from the addresses table so that
|
// Artificially delete the address from the addresses table so that
|
||||||
// we can ensure the update fails if the join doesn't work.
|
// we can ensure the update fails if the join doesn't work.
|
||||||
|
@ -1432,6 +1443,6 @@ mod tests {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let res2 = super::put_received_transparent_utxo(&mut ops, &utxo2);
|
let res2 = super::put_received_transparent_utxo(&mut ops, &utxo2);
|
||||||
assert!(matches!(res2, Err(_)));
|
assert_matches!(res2, Err(_));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1070,10 +1070,10 @@ mod tests {
|
||||||
};
|
};
|
||||||
|
|
||||||
// should fail if we have a gap
|
// should fail if we have a gap
|
||||||
assert!(matches!(
|
assert_matches!(
|
||||||
init_accounts_table(&db_data, &ufvks(&[0, 2])),
|
init_accounts_table(&db_data, &ufvks(&[0, 2])),
|
||||||
Err(SqliteClientError::AccountIdDiscontinuity)
|
Err(SqliteClientError::AccountIdDiscontinuity)
|
||||||
));
|
);
|
||||||
|
|
||||||
// should succeed if there are no gaps
|
// should succeed if there are no gaps
|
||||||
assert!(init_accounts_table(&db_data, &ufvks(&[0, 1, 2])).is_ok());
|
assert!(init_accounts_table(&db_data, &ufvks(&[0, 1, 2])).is_ok());
|
||||||
|
|
|
@ -769,7 +769,7 @@ mod tests {
|
||||||
);
|
);
|
||||||
|
|
||||||
let to = TransparentAddress::PublicKey([7; 20]).into();
|
let to = TransparentAddress::PublicKey([7; 20]).into();
|
||||||
assert!(matches!(
|
assert_matches!(
|
||||||
create_spend_to_address(
|
create_spend_to_address(
|
||||||
&mut db_write,
|
&mut db_write,
|
||||||
&tests::network(),
|
&tests::network(),
|
||||||
|
@ -782,7 +782,7 @@ mod tests {
|
||||||
10,
|
10,
|
||||||
),
|
),
|
||||||
Ok(_)
|
Ok(_)
|
||||||
));
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
@ -88,6 +88,7 @@ features = ["pre-zip-212"]
|
||||||
chacha20poly1305 = "0.10"
|
chacha20poly1305 = "0.10"
|
||||||
criterion = "0.3"
|
criterion = "0.3"
|
||||||
proptest = "1.0.0"
|
proptest = "1.0.0"
|
||||||
|
assert_matches = "1.3.0"
|
||||||
rand_xorshift = "0.3"
|
rand_xorshift = "0.3"
|
||||||
orchard = { version = "0.3", features = ["test-dependencies"] }
|
orchard = { version = "0.3", features = ["test-dependencies"] }
|
||||||
|
|
||||||
|
|
|
@ -158,6 +158,7 @@ memuse::impl_no_dynamic_usage!(Scope);
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::DiversifierIndex;
|
use super::DiversifierIndex;
|
||||||
|
use assert_matches::assert_matches;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn diversifier_index_to_u32() {
|
fn diversifier_index_to_u32() {
|
||||||
|
@ -174,6 +175,6 @@ mod tests {
|
||||||
let too_big = DiversifierIndex([
|
let too_big = DiversifierIndex([
|
||||||
0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
]);
|
]);
|
||||||
assert!(matches!(u32::try_from(too_big), Err(_)));
|
assert_matches!(u32::try_from(too_big), Err(_));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue