rust: Fix usage of `WalletRead::get_target_and_anchor_heights`
The previous code was using the "target" height instead of the "anchor" height, which meant the provided value of `min_confirmations` was ignored.
This commit is contained in:
parent
e5df95c9e5
commit
727918680e
|
@ -674,13 +674,20 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_getBalance(
|
||||||
let db_data = wallet_db(&env, network, db_data)?;
|
let db_data = wallet_db(&env, network, db_data)?;
|
||||||
let account = AccountId::from(u32::try_from(accountj)?);
|
let account = AccountId::from(u32::try_from(accountj)?);
|
||||||
|
|
||||||
|
// We query the unverified balance including unmined transactions. Shielded notes
|
||||||
|
// in unmined transactions are never spendable, but this ensures that the balance
|
||||||
|
// reported to users does not drop temporarily in a way that they don't expect.
|
||||||
|
// `getVerifiedBalance` requires `ANCHOR_OFFSET` confirmations, which means it
|
||||||
|
// always shows a spendable balance.
|
||||||
|
let min_confirmations = 0;
|
||||||
|
|
||||||
(&db_data)
|
(&db_data)
|
||||||
.get_target_and_anchor_heights(ANCHOR_OFFSET)
|
.get_target_and_anchor_heights(min_confirmations)
|
||||||
.map_err(|e| format_err!("Error while fetching anchor height: {}", e))
|
.map_err(|e| format_err!("Error while fetching anchor height: {}", e))
|
||||||
.and_then(|opt_anchor| {
|
.and_then(|opt_anchor| {
|
||||||
opt_anchor
|
opt_anchor
|
||||||
.map(|(h, _)| h)
|
.map(|(_, a)| a)
|
||||||
.ok_or(format_err!("height not available; scan required."))
|
.ok_or(format_err!("Anchor height not available; scan required."))
|
||||||
})
|
})
|
||||||
.and_then(|anchor| {
|
.and_then(|anchor| {
|
||||||
(&db_data)
|
(&db_data)
|
||||||
|
@ -711,12 +718,12 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_getVerified
|
||||||
.map_err(|e| format_err!("Error while fetching anchor height: {}", e))
|
.map_err(|e| format_err!("Error while fetching anchor height: {}", e))
|
||||||
.and_then(|opt_anchor| {
|
.and_then(|opt_anchor| {
|
||||||
opt_anchor
|
opt_anchor
|
||||||
.map(|(h, _)| h)
|
.map(|(_, a)| a)
|
||||||
.ok_or(format_err!("height not available; scan required."))
|
.ok_or(format_err!("Anchor height not available; scan required."))
|
||||||
})
|
})
|
||||||
.and_then(|anchor| {
|
.and_then(|anchor| {
|
||||||
(&db_data)
|
(&db_data)
|
||||||
.get_unspent_transparent_outputs(&taddr, anchor - ANCHOR_OFFSET, &[])
|
.get_unspent_transparent_outputs(&taddr, anchor, &[])
|
||||||
.map_err(|e| format_err!("Error while fetching verified balance: {}", e))
|
.map_err(|e| format_err!("Error while fetching verified balance: {}", e))
|
||||||
})?
|
})?
|
||||||
.iter()
|
.iter()
|
||||||
|
@ -744,13 +751,17 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_getTotalTra
|
||||||
let addr = utils::java_string_to_rust(&env, address);
|
let addr = utils::java_string_to_rust(&env, address);
|
||||||
let taddr = TransparentAddress::decode(&network, &addr).unwrap();
|
let taddr = TransparentAddress::decode(&network, &addr).unwrap();
|
||||||
|
|
||||||
|
// We select all transparent funds including unmined coins, as that is the same
|
||||||
|
// set of UTXOs we shield from.
|
||||||
|
let min_confirmations = 0;
|
||||||
|
|
||||||
let amount = (&db_data)
|
let amount = (&db_data)
|
||||||
.get_target_and_anchor_heights(ANCHOR_OFFSET)
|
.get_target_and_anchor_heights(min_confirmations)
|
||||||
.map_err(|e| format_err!("Error while fetching anchor height: {}", e))
|
.map_err(|e| format_err!("Error while fetching anchor height: {}", e))
|
||||||
.and_then(|opt_anchor| {
|
.and_then(|opt_anchor| {
|
||||||
opt_anchor
|
opt_anchor
|
||||||
.map(|(h, _)| h)
|
.map(|(_, a)| a)
|
||||||
.ok_or(format_err!("height not available; scan required."))
|
.ok_or(format_err!("Anchor height not available; scan required."))
|
||||||
})
|
})
|
||||||
.and_then(|anchor| {
|
.and_then(|anchor| {
|
||||||
(&db_data)
|
(&db_data)
|
||||||
|
@ -1202,8 +1213,8 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_shieldToAdd
|
||||||
.map_err(|e| format_err!("Error while fetching anchor height: {}", e))
|
.map_err(|e| format_err!("Error while fetching anchor height: {}", e))
|
||||||
.and_then(|opt_anchor| {
|
.and_then(|opt_anchor| {
|
||||||
opt_anchor
|
opt_anchor
|
||||||
.map(|(_, h)| h)
|
.map(|(_, a)| a)
|
||||||
.ok_or_else(|| format_err!("height not available; scan required."))
|
.ok_or(format_err!("Anchor height not available; scan required."))
|
||||||
})
|
})
|
||||||
.and_then(|anchor| {
|
.and_then(|anchor| {
|
||||||
db_data
|
db_data
|
||||||
|
|
Loading…
Reference in New Issue