RustBackend.isValid[Shielded|Transparent]Address()

This commit is contained in:
Jack Grigg 2019-06-04 15:15:19 +01:00
parent 54dbf8e0ff
commit 1acf472d33
No known key found for this signature in database
GPG Key ID: 9E8255172BBF9898
3 changed files with 58 additions and 0 deletions

View File

@ -25,6 +25,10 @@ class RustBackend : RustBackendWelding {
external override fun getAddress(dbData: String, account: Int): String
external override fun isValidShieldedAddress(addr: String): Boolean
external override fun isValidTransparentAddress(addr: String): Boolean
external override fun getBalance(dbData: String, account: Int): Long
external override fun getVerifiedBalance(dbData: String, account: Int): Long

View File

@ -22,6 +22,10 @@ interface RustBackendWelding {
fun getAddress(dbData: String, account: Int): String
fun isValidShieldedAddress(addr: String): Boolean
fun isValidTransparentAddress(addr: String): Boolean
fun getBalance(dbData: String, account: Int): Long
fun getVerifiedBalance(dbData: String, account: Int): Long

View File

@ -174,6 +174,56 @@ pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_RustBackend_getAddress(
unwrap_exc_or(&env, res, ptr::null_mut())
}
#[no_mangle]
pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_RustBackend_isValidShieldedAddress(
env: JNIEnv<'_>,
_: JClass<'_>,
addr: JString<'_>,
) -> jboolean {
let res = panic::catch_unwind(|| {
let addr = utils::java_string_to_rust(&env, addr);
match RecipientAddress::from_str(&addr) {
Ok(Some(addr)) => match addr {
RecipientAddress::Shielded(_) => Ok(JNI_TRUE),
RecipientAddress::Transparent(_) => Ok(JNI_FALSE),
}
Ok(None) => {
Err(format_err!("Address is for the wrong network"))
}
Err(e) => {
Err(format_err!("Invalid address: {}", e))
}
}
});
unwrap_exc_or(&env, res, JNI_FALSE)
}
#[no_mangle]
pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_RustBackend_isValidTransparentAddress(
env: JNIEnv<'_>,
_: JClass<'_>,
addr: JString<'_>,
) -> jboolean {
let res = panic::catch_unwind(|| {
let addr = utils::java_string_to_rust(&env, addr);
match RecipientAddress::from_str(&addr) {
Ok(Some(addr)) => match addr {
RecipientAddress::Shielded(_) => Ok(JNI_FALSE),
RecipientAddress::Transparent(_) => Ok(JNI_TRUE),
}
Ok(None) => {
Err(format_err!("Address is for the wrong network"))
}
Err(e) => {
Err(format_err!("Invalid address: {}", e))
}
}
});
unwrap_exc_or(&env, res, JNI_FALSE)
}
#[no_mangle]
pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_RustBackend_getBalance(
env: JNIEnv<'_>,