Remove seed argument from JniConverter.getAddress(), add account arg

This commit is contained in:
Jack Grigg 2019-01-30 02:20:53 +00:00
parent b608b026ed
commit 62b4d43341
No known key found for this signature in database
GPG Key ID: 1B8D649257DB0829
2 changed files with 38 additions and 20 deletions

View File

@ -15,7 +15,7 @@ class JniConverter {
time: Long,
saplingTree: ByteArray): Boolean
external fun getAddress(seed: ByteArray): String
external fun getAddress(dbData: String, account: Int): String
external fun getBalance(dbData: String, account: Int): Long

View File

@ -37,25 +37,12 @@ use zcash_primitives::{
transaction::components::Amount,
JUBJUB,
};
use zip32::{ChildIndex, ExtendedFullViewingKey, ExtendedSpendingKey};
use zip32::{ExtendedFullViewingKey, ExtendedSpendingKey};
const SAPLING_CONSENSUS_BRANCH_ID: u32 = 0x76b8_09bb;
const ANCHOR_OFFSET: u32 = 10;
fn extfvk_from_seed(seed: &[u8]) -> ExtendedFullViewingKey {
let master = ExtendedSpendingKey::master(seed);
let extsk = ExtendedSpendingKey::from_path(
&master,
&[
ChildIndex::Hardened(32),
ChildIndex::Hardened(1),
ChildIndex::Hardened(0),
],
);
ExtendedFullViewingKey::from(&extsk)
}
fn address_from_extfvk(extfvk: &ExtendedFullViewingKey) -> String {
let addr = extfvk.default_address().unwrap().1;
encode_payment_address(HRP_SAPLING_PAYMENT_ADDRESS_TEST, &addr)
@ -202,6 +189,19 @@ struct WitnessRow {
witness: IncrementalWitness,
}
fn get_address(db_data: &str, account: u32) -> Result<String, Error> {
let data = Connection::open(db_data)?;
let addr = data.query_row(
"SELECT address FROM accounts
WHERE account = ?",
&[account],
|row| row.get(0),
)?;
Ok(addr)
}
fn get_balance(db_data: &str, account: u32) -> Result<Amount, Error> {
let data = Connection::open(db_data)?;
@ -664,8 +664,8 @@ pub mod android {
use self::jni::JNIEnv;
use super::{
address_from_extfvk, extfvk_from_seed, get_balance, init_accounts_table, init_blocks_table,
init_data_database, scan_cached_blocks, send_to_address, SAPLING_CONSENSUS_BRANCH_ID,
get_address, get_balance, init_accounts_table, init_blocks_table, init_data_database,
scan_cached_blocks, send_to_address, SAPLING_CONSENSUS_BRANCH_ID,
};
#[no_mangle]
@ -804,11 +804,29 @@ pub mod android {
pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_JniConverter_getAddress(
env: JNIEnv,
_: JClass,
seed: jbyteArray,
db_data: JString,
account: jint,
) -> jstring {
let seed = env.convert_byte_array(seed).unwrap();
let db_data: String = env
.get_string(db_data)
.expect("Couldn't get Java string!")
.into();
let addr = address_from_extfvk(&extfvk_from_seed(&seed));
let addr = match account {
acc if acc >= 0 => match get_address(&db_data, acc as u32) {
Ok(addr) => addr,
Err(e) => {
error!("Error while fetching address: {}", e);
// Return an empty string to indicate an error
String::default()
}
},
_ => {
error!("account argument must be positive");
// Return an empty string to indicate an error
String::default()
}
};
let output = env.new_string(addr).expect("Couldn't create Java string!");
output.into_inner()