pub enum PlatformAddress {
P2pkh([u8; 20]),
P2sh([u8; 20]),
}Variants§
P2pkh([u8; 20])
Pay to pubkey hash
- bech32m encoding type byte: 0xb0
- storage key type byte: 0x00
P2sh([u8; 20])
Pay to script hash
- bech32m encoding type byte: 0x80
- storage key type byte: 0x01
Implementations§
Source§impl PlatformAddress
impl PlatformAddress
Sourcepub const P2PKH_TYPE: u8 = 0xb0
pub const P2PKH_TYPE: u8 = 0xb0
Type byte for P2PKH addresses in bech32m encoding (user-facing)
Sourcepub fn hrp_for_network(network: Network) -> &'static str
pub fn hrp_for_network(network: Network) -> &'static str
Returns the appropriate HRP (Human-Readable Part) for the given network.
Per DIP-0018:
- Mainnet: “dash”
- Testnet/Devnet/Regtest: “tdash”
Sourcepub fn to_bech32m_string(&self, network: Network) -> String
pub fn to_bech32m_string(&self, network: Network) -> String
Encodes the PlatformAddress as a bech32m string for the specified network.
The encoding follows DIP-0018:
- Format:
<HRP>1<data-part> - Data: type_byte (0xb0 for P2PKH, 0x80 for P2SH) || 20-byte hash
- Checksum: bech32m (BIP-350)
NOTE: This uses bech32m type bytes (0xb0/0x80) for user-facing addresses, NOT the storage type bytes (0x00/0x01) used in GroveDB keys.
§Example
let address = PlatformAddress::P2pkh([0xf7, 0xda, ...]);
let encoded = address.to_bech32m_string(Network::Mainnet);
// Returns something like "dash1k..."Sourcepub fn from_bech32m_string(s: &str) -> Result<(Self, Network), ProtocolError>
pub fn from_bech32m_string(s: &str) -> Result<(Self, Network), ProtocolError>
Decodes a bech32m-encoded Platform address string per DIP-0018.
NOTE: This expects bech32m type bytes (0xb0/0x80) in the encoded string, NOT the storage type bytes (0x00/0x01) used in GroveDB keys.
§Returns
Ok((PlatformAddress, Network))- The decoded address and its networkErr(ProtocolError)- If the address is invalid
Sourcepub fn to_address_with_network(&self, network: Network) -> Address
pub fn to_address_with_network(&self, network: Network) -> Address
Converts the PlatformAddress to a dashcore Address with the specified network.
Sourcepub fn to_bytes(&self) -> Vec<u8> ⓘ
pub fn to_bytes(&self) -> Vec<u8> ⓘ
Converts the PlatformAddress to bytes for storage keys. Format: [variant_index (1 byte)] + [hash (20 bytes)]
Uses bincode serialization which produces: 0x00 for P2pkh, 0x01 for P2sh. These bytes are used as keys in GroveDB.
Sourcepub fn base64_string_with_nonce(&self, nonce: AddressNonce) -> String
pub fn base64_string_with_nonce(&self, nonce: AddressNonce) -> String
Gets a base64 string of the PlatformAddress concatenated with the nonce. This creates a unique identifier for address-based state transition inputs.
Sourcepub fn from_bytes(bytes: &[u8]) -> Result<Self, ProtocolError>
pub fn from_bytes(bytes: &[u8]) -> Result<Self, ProtocolError>
Creates a PlatformAddress from storage bytes. Format: [variant_index (1 byte)] + [hash (20 bytes)]
Uses bincode deserialization which expects: 0x00 for P2pkh, 0x01 for P2sh.
Sourcepub fn verify_bytes_against_witness(
&self,
witness: &AddressWitness,
signable_bytes: &[u8],
) -> Result<AddressWitnessVerificationOperations, ProtocolError>
pub fn verify_bytes_against_witness( &self, witness: &AddressWitness, signable_bytes: &[u8], ) -> Result<AddressWitnessVerificationOperations, ProtocolError>
Verifies that the provided witness matches this address and that signatures are valid.
For P2PKH addresses:
- The witness must be
AddressWitness::P2pkh - The public key must hash to this address
- The signature must be valid for the signable bytes
For P2SH addresses:
- The witness must be
AddressWitness::P2sh - The redeem script must hash to this address
- For multisig scripts: M valid signatures must be provided for the signable bytes
§Arguments
witness- The witness containing signature(s) and either a public key (P2PKH) or redeem script (P2SH)signable_bytes- The data that was signed (will be double-SHA256 hashed internally)
§Returns
Ok(AddressWitnessVerificationOperations)- Operations performed if verification succeedsErr(ProtocolError)if verification fails
Trait Implementations§
Source§impl<'__de, __Context> BorrowDecode<'__de, __Context> for PlatformAddress
impl<'__de, __Context> BorrowDecode<'__de, __Context> for PlatformAddress
Source§fn borrow_decode<__D: BorrowDecoder<'__de, Context = __Context>>(
decoder: &mut __D,
) -> Result<Self, DecodeError>
fn borrow_decode<__D: BorrowDecoder<'__de, Context = __Context>>( decoder: &mut __D, ) -> Result<Self, DecodeError>
Source§impl Clone for PlatformAddress
impl Clone for PlatformAddress
Source§fn clone(&self) -> PlatformAddress
fn clone(&self) -> PlatformAddress
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PlatformAddress
impl Debug for PlatformAddress
Source§impl<__Context> Decode<__Context> for PlatformAddress
impl<__Context> Decode<__Context> for PlatformAddress
Source§impl Default for PlatformAddress
impl Default for PlatformAddress
Source§impl<'de> Deserialize<'de> for PlatformAddress
impl<'de> Deserialize<'de> for PlatformAddress
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Display for PlatformAddress
impl Display for PlatformAddress
Source§impl Encode for PlatformAddress
impl Encode for PlatformAddress
Source§impl From<&PrivateKey> for PlatformAddress
impl From<&PrivateKey> for PlatformAddress
Source§impl FromStr for PlatformAddress
impl FromStr for PlatformAddress
Source§impl Hash for PlatformAddress
impl Hash for PlatformAddress
Source§impl Ord for PlatformAddress
impl Ord for PlatformAddress
Source§fn cmp(&self, other: &PlatformAddress) -> Ordering
fn cmp(&self, other: &PlatformAddress) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for PlatformAddress
impl PartialEq for PlatformAddress
Source§impl PartialOrd for PlatformAddress
impl PartialOrd for PlatformAddress
Source§impl PlatformDeserializable for PlatformAddress
impl PlatformDeserializable for PlatformAddress
fn deserialize_from_bytes(data: &[u8]) -> Result<Self, ProtocolError>where
Self: Sized,
fn deserialize_from_bytes_no_limit(data: &[u8]) -> Result<Self, ProtocolError>where
Self: Sized,
Source§impl PlatformVersionEncode for PlatformAddress
impl PlatformVersionEncode for PlatformAddress
Source§fn platform_encode<__E: Encoder>(
&self,
encoder: &mut __E,
platform_version: &PlatformVersion,
) -> Result<(), EncodeError>
fn platform_encode<__E: Encoder>( &self, encoder: &mut __E, platform_version: &PlatformVersion, ) -> Result<(), EncodeError>
Source§impl<'__de> PlatformVersionedBorrowDecode<'__de> for PlatformAddress
impl<'__de> PlatformVersionedBorrowDecode<'__de> for PlatformAddress
Source§fn platform_versioned_borrow_decode<__D: BorrowDecoder<'__de, Context = BincodeContext>>(
decoder: &mut __D,
platform_version: &PlatformVersion,
) -> Result<Self, DecodeError>
fn platform_versioned_borrow_decode<__D: BorrowDecoder<'__de, Context = BincodeContext>>( decoder: &mut __D, platform_version: &PlatformVersion, ) -> Result<Self, DecodeError>
Source§impl PlatformVersionedDecode for PlatformAddress
impl PlatformVersionedDecode for PlatformAddress
Source§fn platform_versioned_decode<__D: Decoder<Context = BincodeContext>>(
decoder: &mut __D,
platform_version: &PlatformVersion,
) -> Result<Self, DecodeError>
fn platform_versioned_decode<__D: Decoder<Context = BincodeContext>>( decoder: &mut __D, platform_version: &PlatformVersion, ) -> Result<Self, DecodeError>
Source§impl Serialize for PlatformAddress
impl Serialize for PlatformAddress
Source§impl TryFrom<Address> for PlatformAddress
impl TryFrom<Address> for PlatformAddress
impl Copy for PlatformAddress
impl Eq for PlatformAddress
impl JsonSafeFields for PlatformAddress
impl StructuralPartialEq for PlatformAddress
Auto Trait Implementations§
impl Freeze for PlatformAddress
impl RefUnwindSafe for PlatformAddress
impl Send for PlatformAddress
impl Sync for PlatformAddress
impl Unpin for PlatformAddress
impl UnwindSafe for PlatformAddress
Blanket Implementations§
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<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> CostsExt for T
impl<T> CostsExt for T
§fn wrap_with_cost(self, cost: OperationCost) -> CostContext<Self>where
Self: Sized,
fn wrap_with_cost(self, cost: OperationCost) -> CostContext<Self>where
Self: Sized,
CostContext object with provided costs.§fn wrap_fn_cost(
self,
f: impl FnOnce(&Self) -> OperationCost,
) -> CostContext<Self>where
Self: Sized,
fn wrap_fn_cost(
self,
f: impl FnOnce(&Self) -> OperationCost,
) -> CostContext<Self>where
Self: Sized,
CostContext object with costs computed using the
value getting wrapped.§impl<'de, T> DefaultBorrowDecode<'de> for Twhere
T: BorrowDecode<'de, ()>,
impl<'de, T> DefaultBorrowDecode<'de> for Twhere
T: BorrowDecode<'de, ()>,
fn borrow_decode<D>(decoder: &mut D) -> Result<Self, DecodeError>
§impl<T> DefaultDecode for T
impl<T> DefaultDecode for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§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>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> 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, U> IntoOnNetwork<U> for Twhere
U: FromOnNetwork<T>,
impl<T, U> IntoOnNetwork<U> for Twhere
U: FromOnNetwork<T>,
§fn into_on_network(self, network: Network) -> U
fn into_on_network(self, network: Network) -> U
Calls U::from_on_network(self).
§impl<T, U> IntoPlatformVersioned<U> for Twhere
U: FromPlatformVersioned<T>,
impl<T, U> IntoPlatformVersioned<U> for Twhere
U: FromPlatformVersioned<T>,
§fn into_platform_versioned(self, platform_version: &PlatformVersion) -> U
fn into_platform_versioned(self, platform_version: &PlatformVersion) -> U
§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> 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.