cargo fmt
This commit is contained in:
parent
289530fd12
commit
41c188109a
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue