Added ability to start a Synchronizer with just a viewing key.
This was a long awaited request from wallet partners who already have keys available when the wallet launches.
This commit is contained in:
parent
3e6355b0c7
commit
94c8a18be7
|
@ -61,8 +61,8 @@ class RustBackend : RustBackendWelding {
|
|||
|
||||
override fun initDataDb() = initDataDb(pathDataDb)
|
||||
|
||||
// override fun initAccountsTable(extfvks: Array<String>) =
|
||||
// initAccountsTableWithKeys(dbDataPath, extfvks)
|
||||
override fun initAccountsTable(vararg extfvks: String) =
|
||||
initAccountsTableWithKeys(pathDataDb, extfvks)
|
||||
|
||||
override fun initAccountsTable(
|
||||
seed: ByteArray,
|
||||
|
@ -207,10 +207,10 @@ class RustBackend : RustBackendWelding {
|
|||
accounts: Int
|
||||
): Array<String>
|
||||
|
||||
// @JvmStatic private external fun initAccountsTableWithKeys(
|
||||
// dbDataPath: String,
|
||||
// extfvk: Array<String>
|
||||
// )
|
||||
@JvmStatic private external fun initAccountsTableWithKeys(
|
||||
dbDataPath: String,
|
||||
extfvk: Array<out String>
|
||||
): Boolean
|
||||
|
||||
@JvmStatic private external fun initBlocksTable(
|
||||
dbDataPath: String,
|
||||
|
|
|
@ -35,7 +35,7 @@ interface RustBackendWelding {
|
|||
|
||||
fun initAccountsTable(seed: ByteArray, numberOfAccounts: Int): Array<String>
|
||||
|
||||
// fun initAccountsTable(extfvks: Array<ByteArray>, numberOfAccounts: Int)
|
||||
fun initAccountsTable(vararg extfvks: String): Boolean
|
||||
|
||||
fun initBlocksTable(height: Int, hash: String, time: Long, saplingTree: String): Boolean
|
||||
|
||||
|
|
|
@ -172,6 +172,29 @@ pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_initAccount
|
|||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_deriveExtendedSpendingKeys(
|
||||
pub unsafe extern "C" fn Java_cash_z_ecc_android_sdk_jni_RustBackend_initAccountsTableWithKeys(
|
||||
env: JNIEnv<'_>,
|
||||
_: JClass<'_>,
|
||||
db_data: JString<'_>,
|
||||
extfvks_arr: jobjectArray,
|
||||
) -> jboolean {
|
||||
let res = panic::catch_unwind(|| {
|
||||
let db_data = utils::java_string_to_rust(&env, db_data);
|
||||
// TODO: avoid all this unwrapping and also surface erros, better
|
||||
let count = env.get_array_length(extfvks_arr).unwrap();
|
||||
let extfvks = (0..count)
|
||||
.map(|i| env.get_object_array_element(extfvks_arr, i))
|
||||
.map(|jstr| utils::java_string_to_rust(&env, jstr.unwrap().into()))
|
||||
.map(|vkstr| decode_extended_full_viewing_key(HRP_SAPLING_EXTENDED_FULL_VIEWING_KEY, &vkstr).unwrap().unwrap())
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
match init_accounts_table(&db_data, &extfvks) {
|
||||
Ok(()) => Ok(JNI_TRUE),
|
||||
Err(e) => Err(format_err!("Error while initializing accounts: {}", e)),
|
||||
}
|
||||
});
|
||||
unwrap_exc_or(&env, res, JNI_FALSE)
|
||||
}
|
||||
env: JNIEnv<'_>,
|
||||
_: JClass<'_>,
|
||||
seed: jbyteArray,
|
||||
|
|
Loading…
Reference in New Issue