pub struct UnifiedFullViewingKey { /* private fields */ }Expand description
A ZIP 316 unified full viewing key.
Implementations§
Source§impl UnifiedFullViewingKey
impl UnifiedFullViewingKey
Sourcepub fn new(
transparent: Option<AccountPubKey>,
sapling: Option<DiversifiableFullViewingKey>,
orchard: Option<FullViewingKey>,
) -> Result<UnifiedFullViewingKey, DerivationError>
Available on crate features test-dependencies only.
pub fn new( transparent: Option<AccountPubKey>, sapling: Option<DiversifiableFullViewingKey>, orchard: Option<FullViewingKey>, ) -> Result<UnifiedFullViewingKey, DerivationError>
test-dependencies only.Construct a new unified full viewing key.
This method is only available when the test-dependencies feature is enabled,
as derivation from the USK or deserialization from the serialized form should
be used instead.
pub fn from_orchard_fvk( orchard: FullViewingKey, ) -> Result<UnifiedFullViewingKey, DerivationError>
unstable-frost only.pub fn from_sapling_extended_full_viewing_key( sapling: ExtendedFullViewingKey, ) -> Result<UnifiedFullViewingKey, DerivationError>
sapling and unstable only.Sourcepub fn from_p2sh(
p2sh: P2shFullViewingKey,
) -> Result<UnifiedFullViewingKey, DerivationError>
Available on crate feature transparent-inputs only.
pub fn from_p2sh( p2sh: P2shFullViewingKey, ) -> Result<UnifiedFullViewingKey, DerivationError>
transparent-inputs only.Constructs a unified full viewing key for a transparent-only account defined by a ZIP 316 Revision 2 P2SH viewing key item.
This is the one unified full viewing key that cannot be derived. Every other kind
is reached through UnifiedSpendingKey::to_unified_full_viewing_key, because a
seed determines it; a P2SH account is instead defined by a set of cosigners’
keys, so it has no spending key to derive from and must be assembled.
The resulting key has no shielded components, so it encodes with the tu HRP and
derives transparent-only unified addresses.
Sourcepub fn decode<P>(
params: &P,
encoding: &str,
) -> Result<UnifiedFullViewingKey, UnifiedDecodingError>where
P: Parameters,
pub fn decode<P>(
params: &P,
encoding: &str,
) -> Result<UnifiedFullViewingKey, UnifiedDecodingError>where
P: Parameters,
Parses a UnifiedFullViewingKey from its ZIP 316 string encoding at any
revision.
§Errors
UnifiedDecodingError::Parseif the string is not a valid UFVK.UnifiedDecodingError::NetworkMismatchif the key is for a network other than that ofparams.UnifiedDecodingError::InvalidItemif an item’s data is not a valid key of its type.
Sourcepub fn parse(ufvk: &Ufvk) -> Result<UnifiedFullViewingKey, DecodingError>
pub fn parse(ufvk: &Ufvk) -> Result<UnifiedFullViewingKey, DecodingError>
Constructs a UnifiedFullViewingKey from a parsed ZIP 316 unified container.
Returns DecodingError::KeyDataInvalid if an item’s data is not a valid key of
its type.
Sourcepub fn encode_revision<P>(
&self,
params: &P,
revision: Revision,
) -> Result<String, UnifiedEncodingError>where
P: Parameters,
pub fn encode_revision<P>(
&self,
params: &P,
revision: Revision,
) -> Result<String, UnifiedEncodingError>where
P: Parameters,
Returns the ZIP 316 string encoding of this UnifiedFullViewingKey for the given
network at the given revision.
Returns UnifiedEncodingError::NotRepresentable if this key has no encoding at
revision: Revision::R0 cannot encode expiry metadata, a P2SH viewing key
item, or a key whose only data items are transparent.
Sourcepub fn encode<P>(&self, params: &P) -> Result<String, UnifiedEncodingError>where
P: Parameters,
pub fn encode<P>(&self, params: &P) -> Result<String, UnifiedEncodingError>where
P: Parameters,
Returns the ZIP 316 string encoding of this UnifiedFullViewingKey for the given
network at the most widely supported revision that can represent it:
Revision::R0 if possible, and Revision::R2 otherwise. Use
encode_revision to encode at a specific revision.
Returns UnifiedEncodingError::NotRepresentable if this key has no encoding at
either revision.
Sourcepub fn to_unified_incoming_viewing_key(&self) -> UnifiedIncomingViewingKey
pub fn to_unified_incoming_viewing_key(&self) -> UnifiedIncomingViewingKey
Derives a Unified Incoming Viewing Key from this Unified Full Viewing Key.
Sourcepub fn transparent(&self) -> Option<&AccountPubKey>
👎Deprecated: Use UnifiedFullViewingKey::p2pkh instead.
Available on crate feature transparent-inputs only.
pub fn transparent(&self) -> Option<&AccountPubKey>
Use UnifiedFullViewingKey::p2pkh instead.
transparent-inputs only.Returns the P2PKH component of the unified key at the
BIP44 path m/44'/<coin_type>'/<account>', if present.
Sourcepub fn p2pkh(&self) -> Option<&AccountPubKey>
Available on crate feature transparent-inputs only.
pub fn p2pkh(&self) -> Option<&AccountPubKey>
transparent-inputs only.Returns the P2PKH component of the unified key at the
BIP44 path m/44'/<coin_type>'/<account>', if present.
Returns None if the key has no transparent component, or carries a P2SH viewing
key item instead; the two are mutually exclusive.
Sourcepub fn p2sh(&self) -> Option<&P2shFullViewingKey>
Available on crate feature transparent-inputs only.
pub fn p2sh(&self) -> Option<&P2shFullViewingKey>
transparent-inputs only.Returns the P2SH viewing key item of this unified key, if present.
Returns None if the key has no transparent component, or carries a P2PKH
viewing key instead; the two are mutually exclusive.
Sourcepub fn sapling(&self) -> Option<&DiversifiableFullViewingKey>
Available on crate feature sapling only.
pub fn sapling(&self) -> Option<&DiversifiableFullViewingKey>
sapling only.Returns the Sapling diversifiable full viewing key component of this unified key.
Sourcepub fn orchard(&self) -> Option<&FullViewingKey>
Available on crate feature orchard only.
pub fn orchard(&self) -> Option<&FullViewingKey>
orchard only.Returns the Orchard full viewing key component of this unified key.
Sourcepub fn has_sapling(&self) -> bool
pub fn has_sapling(&self) -> bool
Returns whether this key has a Sapling component.
Sourcepub fn has_orchard(&self) -> bool
pub fn has_orchard(&self) -> bool
Returns whether this key has an Orchard component.
Sourcepub fn expiry_height(&self) -> Option<BlockHeight>
pub fn expiry_height(&self) -> Option<BlockHeight>
Returns the expiry height metadata for this key, if present.
Sourcepub fn expiry_time(&self) -> Option<u64>
pub fn expiry_time(&self) -> Option<u64>
Returns the expiry time metadata for this key, if present.
Sourcepub fn subsumes_uivk(&self, other: &UnifiedIncomingViewingKey) -> bool
pub fn subsumes_uivk(&self, other: &UnifiedIncomingViewingKey) -> bool
Returns true if this UFVK subsumes the given UIVK: every IVK item present in
other has a matching item derivable from self. The UFVK may have additional
items representing capabilities not present in the UIVK.
Sourcepub fn subsumes_ufvk(&self, other: &UnifiedFullViewingKey) -> bool
pub fn subsumes_ufvk(&self, other: &UnifiedFullViewingKey) -> bool
Returns true if this UFVK subsumes other: every FVK item in other has a
matching item in self, including both incoming and outgoing viewing capability.
For unknown items, exact equality of (typecode, data) is required.
Sourcepub fn is_equivalent_to(&self, other: &UnifiedFullViewingKey) -> bool
pub fn is_equivalent_to(&self, other: &UnifiedFullViewingKey) -> bool
Returns true if this UFVK and other carry the same viewing capability: each
subsumes the other. Metadata items are not compared.
Sourcepub fn address(
&self,
j: DiversifierIndex,
request: UnifiedAddressRequest,
) -> Result<UnifiedAddress, AddressGenerationError>
pub fn address( &self, j: DiversifierIndex, request: UnifiedAddressRequest, ) -> Result<UnifiedAddress, AddressGenerationError>
Attempts to derive the Unified Address for the given diversifier index and receiver types.
Returns None if the specified index does not produce a valid diversifier.
Sourcepub fn find_address(
&self,
j: DiversifierIndex,
request: UnifiedAddressRequest,
) -> Result<(UnifiedAddress, DiversifierIndex), AddressGenerationError>
pub fn find_address( &self, j: DiversifierIndex, request: UnifiedAddressRequest, ) -> Result<(UnifiedAddress, DiversifierIndex), AddressGenerationError>
Searches the diversifier space starting at diversifier index j for one which will produce
a valid diversifier, and return the Unified Address constructed using that diversifier
along with the index at which the valid diversifier was found.
Returns an Err(AddressGenerationError) if no valid diversifier exists or if the features
required to satisfy the unified address request are not properly enabled.
Sourcepub fn default_address(
&self,
request: UnifiedAddressRequest,
) -> Result<(UnifiedAddress, DiversifierIndex), AddressGenerationError>
pub fn default_address( &self, request: UnifiedAddressRequest, ) -> Result<(UnifiedAddress, DiversifierIndex), AddressGenerationError>
Find the Unified Address corresponding to the smallest valid diversifier index, along with that index.
Returns an Err(AddressGenerationError) if no valid diversifier exists or if the features
required to satisfy the unified address request are not properly enabled.
Sourcepub fn default_transparent_address(
&self,
) -> Option<(TransparentAddress, NonHardenedChildIndex)>
Available on crate feature transparent-inputs and (crate features test-dependencies) only.
pub fn default_transparent_address( &self, ) -> Option<(TransparentAddress, NonHardenedChildIndex)>
transparent-inputs and (crate features test-dependencies) only.Returns the default external transparent address using the transparent account pubkey.
See ExternalIvk::default_address for more information.
Sourcepub fn select_ovk(
&self,
scope: Scope,
input_sources: &NonEmpty<PoolType>,
) -> Option<OutgoingViewingKey>
pub fn select_ovk( &self, scope: Scope, input_sources: &NonEmpty<PoolType>, ) -> Option<OutgoingViewingKey>
Selects an outgoing viewing key for a transaction’s outputs based upon the type(s) of inputs spent in the transaction.
This method selects the OVK of the highest-preference item in [ZIP 316] preference order
from among the item types represented by the provided input types. It will return None in
the case that this FVK does not contain any items corresponding to the provided input
sources; this should ordinarily never occur because in order to spend an input, a spending
key of the appropriate type must be available and that spending key should be represented
among this UFVK’s items.
Trait Implementations§
Source§impl Clone for UnifiedFullViewingKey
impl Clone for UnifiedFullViewingKey
Source§fn clone(&self) -> UnifiedFullViewingKey
fn clone(&self) -> UnifiedFullViewingKey
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for UnifiedFullViewingKey
impl RefUnwindSafe for UnifiedFullViewingKey
impl Send for UnifiedFullViewingKey
impl Sync for UnifiedFullViewingKey
impl Unpin for UnifiedFullViewingKey
impl UnsafeUnpin for UnifiedFullViewingKey
impl UnwindSafe for UnifiedFullViewingKey
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PossiblyOption<T> for T
impl<T> PossiblyOption<T> for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.