mirror of
https://github.com/Qortal/pirate-librustzcash.git
synced 2025-01-30 23:42:13 +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 pairing::bls12_381::Bls12;
|
||||||
use std::io::{self, Write};
|
use std::io::{self, Write};
|
||||||
use zcash_primitives::{
|
use zcash_primitives::{
|
||||||
primitives::{PaymentAddress},
|
primitives::PaymentAddress,
|
||||||
zip32::{ExtendedFullViewingKey, ExtendedSpendingKey},
|
zip32::{ExtendedFullViewingKey, ExtendedSpendingKey},
|
||||||
JUBJUB,
|
JUBJUB,
|
||||||
|
legacy::TransparentAddress,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn bech32_encode<F>(hrp: &str, write: F) -> String
|
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)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use pairing::bls12_381::Bls12;
|
use pairing::bls12_381::Bls12;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//! Generated code for handling light client protobuf structs.
|
//! Generated code for handling light client protobuf structs.
|
||||||
|
|
||||||
use ff::{PrimeField};
|
use ff::PrimeField;
|
||||||
use pairing::bls12_381::{Bls12, Fr, FrRepr};
|
use pairing::bls12_381::{Bls12, Fr, FrRepr};
|
||||||
use zcash_primitives::{
|
use zcash_primitives::{
|
||||||
block::{BlockHash, BlockHeader},
|
block::{BlockHash, BlockHeader},
|
||||||
|
Loading…
Reference in New Issue
Block a user