cargo fmt

This commit is contained in:
Jack Grigg 2022-05-18 20:41:50 +00:00 committed by Carter Jernigan
parent 289530fd12
commit 41c188109a
2 changed files with 91 additions and 85 deletions

View File

@ -10,12 +10,13 @@ use std::str::FromStr;
use android_logger::Config;
use failure::format_err;
use jni::{
JNIEnv,
objects::{JClass, JString},
sys::{jboolean, jbyteArray, jint, jlong, JNI_FALSE, JNI_TRUE, jobjectArray, jstring},
sys::{jboolean, jbyteArray, jint, jlong, jobjectArray, jstring, JNI_FALSE, JNI_TRUE},
JNIEnv,
};
use log::Level;
use secp256k1::key::{PublicKey, SecretKey};
use zcash_client_backend::data_api::wallet::{shield_funds, ANCHOR_OFFSET};
use zcash_client_backend::{
address::RecipientAddress,
data_api::{
@ -25,9 +26,9 @@ use zcash_client_backend::{
WalletRead,
},
encoding::{
AddressCodec, decode_extended_full_viewing_key,
decode_extended_spending_key, encode_extended_full_viewing_key, encode_extended_spending_key,
encode_payment_address,
decode_extended_full_viewing_key, decode_extended_spending_key,
encode_extended_full_viewing_key, encode_extended_spending_key, encode_payment_address,
AddressCodec,
},
keys::{
derive_public_key_from_seed, derive_secret_key_from_seed,
@ -36,29 +37,26 @@ use zcash_client_backend::{
},
wallet::{AccountId, OvkPolicy, WalletTransparentOutput},
};
use zcash_client_backend::data_api::wallet::{ANCHOR_OFFSET, shield_funds};
use zcash_client_sqlite::{
BlockDb,
error::SqliteClientError,
NoteId,
wallet::{delete_utxos_above, put_received_transparent_utxo, rewind_to_height, get_rewind_height},
wallet::init::{init_accounts_table, init_blocks_table, init_wallet_db},
WalletDb,
wallet::{
delete_utxos_above, get_rewind_height, put_received_transparent_utxo, rewind_to_height,
},
BlockDb, NoteId, WalletDb,
};
use zcash_primitives::consensus::Network::{MainNetwork, TestNetwork};
use zcash_primitives::{
block::BlockHash,
consensus::{BlockHeight, BranchId, Network, Parameters},
legacy::TransparentAddress,
memo::{
Memo, MemoBytes
},
memo::{Memo, MemoBytes},
transaction::{
components::{Amount, OutPoint},
Transaction
Transaction,
},
zip32::ExtendedFullViewingKey
zip32::ExtendedFullViewingKey,
};
use zcash_primitives::consensus::Network::{MainNetwork, TestNetwork};
use zcash_proofs::prover::LocalTxProver;
use crate::utils::exception::unwrap_exc_or;
@ -75,7 +73,11 @@ fn print_debug_state() {
debug!("Release enabled (congrats, this is NOT a debug build).");
}
fn wallet_db<P: Parameters>(env: &JNIEnv<'_>, params: P, db_data: JString<'_>) -> Result<WalletDb<P>, failure::Error> {
fn wallet_db<P: Parameters>(
env: &JNIEnv<'_>,
params: P,
db_data: JString<'_>,
) -> Result<WalletDb<P>, failure::Error> {
WalletDb::for_path(utils::java_string_to_rust(&env, db_data), params)
.map_err(|e| format_err!("Error opening wallet database connection: {}", e))
}
@ -155,7 +157,7 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_initAccount
})
.collect::<Result<Vec<_>, _>>()?;
let taddrs:Vec<_> = (0..count)
let taddrs: Vec<_> = (0..count)
.map(|i| env.get_object_array_element(extpubs_arr, i))
.map(|jstr| utils::java_string_to_rust(&env, jstr.unwrap().into()))
.map(|extpub_str| PublicKey::from_str(&extpub_str).unwrap())
@ -228,14 +230,19 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_tool_DerivationTool_deriveU
.map(|account| {
encode_extended_full_viewing_key(
network.hrp_sapling_extended_full_viewing_key(),
&ExtendedFullViewingKey::from(&spending_key(&seed, network.coin_type(), AccountId(account)))
&ExtendedFullViewingKey::from(&spending_key(
&seed,
network.coin_type(),
AccountId(account),
)),
)
})
.collect();
let extpubs: Vec<_> = (0..accounts)
.map(|account| {
let pk = derive_public_key_from_seed(&network, &seed, AccountId(account), 0).unwrap();
let pk =
derive_public_key_from_seed(&network, &seed, AccountId(account), 0).unwrap();
hex::encode(&pk.serialize())
})
.collect();
@ -244,9 +251,7 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_tool_DerivationTool_deriveU
&env,
extfvks,
extpubs,
|env, extfvkstr| {
env.new_string(extfvkstr)
},
|env, extfvkstr| env.new_string(extfvkstr),
|env| env.new_string(""),
))
});
@ -621,12 +626,10 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_getReceived
let memo = (&db_data)
.get_memo(NoteId::ReceivedNoteId(id_note))
.map_err(|e| format_err!("An error occurred retrieving the memo, {}", e))
.and_then(|memo| {
match memo {
Memo::Empty => Ok("".to_string()),
Memo::Text(memo) => Ok(memo.into()),
_ => Err(format_err!("This memo does not contain UTF-8 text")),
}
.and_then(|memo| match memo {
Memo::Empty => Ok("".to_string()),
Memo::Text(memo) => Ok(memo.into()),
_ => Err(format_err!("This memo does not contain UTF-8 text")),
})?;
let output = env.new_string(memo).expect("Couldn't create Java string!");
@ -650,12 +653,10 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_getSentMemo
let memo = (&db_data)
.get_memo(NoteId::SentNoteId(id_note))
.map_err(|e| format_err!("An error occurred retrieving the memo, {}", e))
.and_then(|memo| {
match memo {
Memo::Empty => Ok("".to_string()),
Memo::Text(memo) => Ok(memo.into()),
_ => Err(format_err!("This memo does not contain UTF-8 text")),
}
.and_then(|memo| match memo {
Memo::Empty => Ok("".to_string()),
Memo::Text(memo) => Ok(memo.into()),
_ => Err(format_err!("This memo does not contain UTF-8 text")),
})?;
let output = env.new_string(memo).expect("Couldn't create Java string!");
@ -701,7 +702,6 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_validateCom
unwrap_exc_or(&env, res, 0)
}
#[no_mangle]
pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_getNearestRewindHeight(
env: JNIEnv<'_>,
@ -719,12 +719,17 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_getNearestR
match get_rewind_height(&db_data) {
Ok(Some(best_height)) => {
let first_unspent_note_height = u32::from(best_height);
Ok(std::cmp::min(first_unspent_note_height as i32, height as i32))
},
Ok(None) => {
Ok(height as i32)
},
Err(e) => Err(format_err!("Error while getting nearest rewind height for {}: {}", height, e)),
Ok(std::cmp::min(
first_unspent_note_height as i32,
height as i32,
))
}
Ok(None) => Ok(height as i32),
Err(e) => Err(format_err!(
"Error while getting nearest rewind height for {}: {}",
height,
e
)),
}
}
});
@ -732,7 +737,6 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_getNearestR
unwrap_exc_or(&env, res, -1)
}
#[no_mangle]
pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_rewindToHeight(
env: JNIEnv<'_>,
@ -749,7 +753,7 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_rewindToHei
rewind_to_height(&db_data, height)
.map(|_| 1)
.map_err(|e| format_err!("Error while rewinding data DB to height {}: {}", height, e))
});
});
unwrap_exc_or(&env, res, JNI_FALSE)
}
@ -811,7 +815,7 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_putUtxo(
height: BlockHeight::from(height as u32),
};
debug!("Storing UTXO in db_data");
debug!("Storing UTXO in db_data");
match put_received_transparent_utxo(&mut db_data, &output) {
Ok(_) => Ok(JNI_TRUE),
Err(e) => Err(format_err!("Error while inserting UTXO: {}", e)),
@ -820,7 +824,6 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_putUtxo(
unwrap_exc_or(&env, res, JNI_FALSE)
}
#[no_mangle]
pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_clearUtxos(
env: JNIEnv<'_>,
@ -838,11 +841,14 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_clearUtxos(
let taddress = TransparentAddress::decode(&network, &addr).unwrap();
let height = BlockHeight::from(above_height as u32);
debug!("clearing UTXOs that were found above height: {}", above_height);
match delete_utxos_above(&mut db_data, &taddress, height) {
Ok(rows) => Ok(rows as i32),
Err(e) => Err(format_err!("Error while clearing UTXOs: {}", e)),
}
debug!(
"clearing UTXOs that were found above height: {}",
above_height
);
match delete_utxos_above(&mut db_data, &taddress, height) {
Ok(rows) => Ok(rows as i32),
Err(e) => Err(format_err!("Error while clearing UTXOs: {}", e)),
}
});
unwrap_exc_or(&env, res, -1)
}
@ -926,8 +932,7 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_tool_DerivationTool_deriveT
return Err(format_err!("index argument must be positive"));
};
let sk = derive_secret_key_from_seed(&network, &seed, AccountId(account), index);
let taddr = derive_transparent_address_from_secret_key(&sk.unwrap())
.encode(&network);
let taddr = derive_transparent_address_from_secret_key(&sk.unwrap()).encode(&network);
let output = env
.new_string(taddr)
@ -947,21 +952,16 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_tool_DerivationTool_deriveT
let res = panic::catch_unwind(|| {
let network = parse_network(network_id as u32)?;
let tsk_wif = utils::java_string_to_rust(&env, secret_key);
let sk:SecretKey = (&Wif(tsk_wif)).try_into().expect("invalid private key WIF");
let taddr =
derive_transparent_address_from_secret_key(&sk)
.encode(&network);
let sk: SecretKey = (&Wif(tsk_wif)).try_into().expect("invalid private key WIF");
let taddr = derive_transparent_address_from_secret_key(&sk).encode(&network);
let output = env
.new_string(taddr)
.expect("Couldn't create Java string!");
let output = env.new_string(taddr).expect("Couldn't create Java string!");
Ok(output.into_inner())
});
unwrap_exc_or(&env, res, ptr::null_mut())
}
#[no_mangle]
pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_tool_DerivationTool_deriveTransparentAddressFromPubKey(
env: JNIEnv<'_>,
@ -973,13 +973,9 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_tool_DerivationTool_deriveT
let network = parse_network(network_id as u32)?;
let public_key_str = utils::java_string_to_rust(&env, public_key);
let pk = PublicKey::from_str(&public_key_str)?;
let taddr =
derive_transparent_address_from_public_key(&pk)
.encode(&network);
let taddr = derive_transparent_address_from_public_key(&pk).encode(&network);
let output = env
.new_string(taddr)
.expect("Couldn't create Java string!");
let output = env.new_string(taddr).expect("Couldn't create Java string!");
Ok(output.into_inner())
});
@ -996,7 +992,7 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_decryptAndS
) -> jboolean {
let res = panic::catch_unwind(|| {
let network = parse_network(network_id as u32)?;
let db_data = wallet_db(&env, network, db_data)?;
let db_data = wallet_db(&env, network, db_data)?;
let mut db_data = db_data.get_update_ops()?;
let tx_bytes = env.convert_byte_array(tx).unwrap();
let tx = Transaction::read(&tx_bytes[..])?;
@ -1027,7 +1023,7 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_createToAdd
) -> jlong {
let res = panic::catch_unwind(|| {
let network = parse_network(network_id as u32)?;
let db_data = wallet_db(&env, network, db_data)?;
let db_data = wallet_db(&env, network, db_data)?;
let mut db_data = db_data.get_update_ops()?;
let account = if account >= 0 {
account as u32
@ -1067,10 +1063,11 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_createToAdd
// TODO: consider warning in this case somehow, rather than swallowing this error
let memo = match to {
RecipientAddress::Shielded(_) => {
let memo_value = Memo::from_bytes(&memo_bytes).map_err(|_| format_err!("Invalid memo"))?;
let memo_value =
Memo::from_bytes(&memo_bytes).map_err(|_| format_err!("Invalid memo"))?;
Some(MemoBytes::from(&memo_value))
},
RecipientAddress::Transparent(_) => None
}
RecipientAddress::Transparent(_) => None,
};
let prover = LocalTxProver::new(Path::new(&spend_params), Path::new(&output_params));
@ -1107,7 +1104,7 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_shieldToAdd
) -> jlong {
let res = panic::catch_unwind(|| {
let network = parse_network(network_id as u32)?;
let db_data = wallet_db(&env, network, db_data)?;
let db_data = wallet_db(&env, network, db_data)?;
let mut db_data = db_data.get_update_ops()?;
let account = if account == 0 {
account as u32
@ -1131,7 +1128,7 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_shieldToAdd
}
};
let sk:SecretKey = (&Wif(tsk_wif)).try_into().expect("invalid private key WIF");
let sk: SecretKey = (&Wif(tsk_wif)).try_into().expect("invalid private key WIF");
let memo = Memo::from_bytes(&memo_bytes).unwrap();
@ -1145,9 +1142,9 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_shieldToAdd
&sk,
&extsk,
&MemoBytes::from(&memo),
0
0,
)
.map_err(|e| format_err!("Error while shielding transaction: {}", e))
.map_err(|e| format_err!("Error while shielding transaction: {}", e))
});
unwrap_exc_or(&env, res, -1)
}
@ -1163,13 +1160,15 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_branchIdFor
let network = parse_network(network_id as u32)?;
let branch: BranchId = BranchId::for_height(&network, BlockHeight::from(height as u32));
let branch_id: u32 = u32::from(branch);
debug!("For height {} found consensus branch {:?} with id {}", height, branch, branch_id);
debug!(
"For height {} found consensus branch {:?} with id {}",
height, branch, branch_id
);
Ok(branch_id.into())
});
unwrap_exc_or(&env, res, -1)
}
//
// Utility functions
//
@ -1181,5 +1180,3 @@ fn parse_network(value: u32) -> Result<Network, failure::Error> {
_ => Err(format_err!("Invalid network type: {}. Expected either 0 or 1 for Testnet or Mainnet, respectively.", value))
}
}

View File

@ -55,16 +55,25 @@ where
{
let jempty = empty_element(env).expect("Couldn't create Java string!");
let outer = env
.new_object_array(data1.len() as jsize, "[Ljava/lang/String;", *jni::objects::JObject::null())
.new_object_array(
data1.len() as jsize,
"[Ljava/lang/String;",
*jni::objects::JObject::null(),
)
.expect("Couldn't create Java array of string arrays!");
for (i, (elem1, elem2)) in data1.into_iter().zip(data2.into_iter()).enumerate() {
let inner = env.new_object_array(2 as jsize, "java/lang/String", *jempty).expect("Couldn't create Java array!");
let inner = env
.new_object_array(2 as jsize, "java/lang/String", *jempty)
.expect("Couldn't create Java array!");
let jelem1 = element_map(env, elem1).expect("Couldn't map element to Java!");
let jelem2 = element_map(env, elem2).expect("Couldn't map element to Java!");
env.set_object_array_element(inner, 0 as jsize, *jelem1).expect("Couldn't set Java array element!");
env.set_object_array_element(inner, 1 as jsize, *jelem2).expect("Couldn't set Java array element!");
env.set_object_array_element(outer, i as jsize, inner).expect("Couldn't set Java array element!");
env.set_object_array_element(inner, 0 as jsize, *jelem1)
.expect("Couldn't set Java array element!");
env.set_object_array_element(inner, 1 as jsize, *jelem2)
.expect("Couldn't set Java array element!");
env.set_object_array_element(outer, i as jsize, inner)
.expect("Couldn't set Java array element!");
}
outer
}