mirror of
https://github.com/Qortal/pirate-librustzcash.git
synced 2025-01-30 15:32:14 +00:00
Add transparent address decode
This commit is contained in:
parent
a0384d4fac
commit
4f129e6a83
@ -9,9 +9,10 @@ use bech32::{self, Error, FromBase32, ToBase32};
|
||||
use pairing::bls12_381::Bls12;
|
||||
use std::io::{self, Write};
|
||||
use zcash_primitives::{
|
||||
primitives::{PaymentAddress},
|
||||
primitives::PaymentAddress,
|
||||
zip32::{ExtendedFullViewingKey, ExtendedSpendingKey},
|
||||
JUBJUB,
|
||||
legacy::TransparentAddress,
|
||||
};
|
||||
|
||||
fn bech32_encode<F>(hrp: &str, write: F) -> String
|
||||
@ -176,6 +177,63 @@ pub fn decode_payment_address(hrp: &str, s: &str) -> Result<Option<PaymentAddres
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/// Decodes a [`TransparentAddress`] from a Base58Check-encoded string.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use zcash_client_backend::{
|
||||
/// constants::testnet::{B58_PUBKEY_ADDRESS_PREFIX, B58_SCRIPT_ADDRESS_PREFIX},
|
||||
/// encoding::decode_transparent_address,
|
||||
/// };
|
||||
/// use zcash_primitives::legacy::TransparentAddress;
|
||||
///
|
||||
/// assert_eq!(
|
||||
/// decode_transparent_address(
|
||||
/// &B58_PUBKEY_ADDRESS_PREFIX,
|
||||
/// &B58_SCRIPT_ADDRESS_PREFIX,
|
||||
/// "tm9iMLAuYMzJ6jtFLcA7rzUmfreGuKvr7Ma",
|
||||
/// ),
|
||||
/// Ok(Some(TransparentAddress::PublicKey([0; 20]))),
|
||||
/// );
|
||||
///
|
||||
/// assert_eq!(
|
||||
/// decode_transparent_address(
|
||||
/// &B58_PUBKEY_ADDRESS_PREFIX,
|
||||
/// &B58_SCRIPT_ADDRESS_PREFIX,
|
||||
/// "t26YoyZ1iPgiMEWL4zGUm74eVWfhyDMXzY2",
|
||||
/// ),
|
||||
/// Ok(Some(TransparentAddress::Script([0; 20]))),
|
||||
/// );
|
||||
/// ```
|
||||
pub fn decode_transparent_address(
|
||||
pubkey_version: &[u8],
|
||||
script_version: &[u8],
|
||||
s: &str,
|
||||
) -> Result<Option<TransparentAddress>, bs58::decode::Error> {
|
||||
let decoded = bs58::decode(s).with_check(None).into_vec()?;
|
||||
if &decoded[..pubkey_version.len()] == pubkey_version {
|
||||
if decoded.len() == pubkey_version.len() + 20 {
|
||||
let mut data = [0; 20];
|
||||
data.copy_from_slice(&decoded[pubkey_version.len()..]);
|
||||
Ok(Some(TransparentAddress::PublicKey(data)))
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
} else if &decoded[..script_version.len()] == script_version {
|
||||
if decoded.len() == script_version.len() + 20 {
|
||||
let mut data = [0; 20];
|
||||
data.copy_from_slice(&decoded[script_version.len()..]);
|
||||
Ok(Some(TransparentAddress::Script(data)))
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use pairing::bls12_381::Bls12;
|
||||
|
@ -1,6 +1,6 @@
|
||||
//! Generated code for handling light client protobuf structs.
|
||||
|
||||
use ff::{PrimeField};
|
||||
use ff::PrimeField;
|
||||
use pairing::bls12_381::{Bls12, Fr, FrRepr};
|
||||
use zcash_primitives::{
|
||||
block::{BlockHash, BlockHeader},
|
||||
|
Loading…
Reference in New Issue
Block a user