pub struct PublicKey {
pub compressed: bool,
pub inner: PublicKey,
}Expand description
A Bitcoin ECDSA public key
Fields§
§compressed: boolWhether this public key should be serialized as compressed
inner: PublicKeyThe actual ECDSA key
Implementations§
Source§impl PublicKey
impl PublicKey
Sourcepub fn new(key: impl Into<PublicKey>) -> PublicKey
pub fn new(key: impl Into<PublicKey>) -> PublicKey
Constructs compressed ECDSA public key from the provided generic Secp256k1 public key
Sourcepub fn new_uncompressed(key: impl Into<PublicKey>) -> PublicKey
pub fn new_uncompressed(key: impl Into<PublicKey>) -> PublicKey
Constructs uncompressed (legacy) ECDSA public key from the provided generic Secp256k1 public key
Sourcepub fn pubkey_hash(&self) -> PubkeyHash
pub fn pubkey_hash(&self) -> PubkeyHash
Returns bitcoin 160-bit hash of the public key
Sourcepub fn wpubkey_hash(&self) -> Result<WPubkeyHash, UncompressedPublicKeyError>
pub fn wpubkey_hash(&self) -> Result<WPubkeyHash, UncompressedPublicKeyError>
Returns bitcoin 160-bit hash of the public key for witness program
Sourcepub fn p2wpkh_script_code(
&self,
) -> Result<ScriptBuf, UncompressedPublicKeyError>
pub fn p2wpkh_script_code( &self, ) -> Result<ScriptBuf, UncompressedPublicKeyError>
Returns the script code used to spend a P2WPKH input.
Sourcepub fn write_into<W>(&self, writer: &mut W) -> Result<(), Error>
pub fn write_into<W>(&self, writer: &mut W) -> Result<(), Error>
Write the public key into a writer
Sourcepub fn read_from<R>(reader: &mut R) -> Result<PublicKey, Error>
pub fn read_from<R>(reader: &mut R) -> Result<PublicKey, Error>
Read the public key from a reader
This internally reads the first byte before reading the rest, so
use of a BufReader is recommended.
Sourcepub fn to_sort_key(self) -> SortKey
pub fn to_sort_key(self) -> SortKey
Serialize the public key into a SortKey.
SortKey is not too useful by itself, but it can be used to sort a
[PublicKey] slice using sort_unstable_by_key, sort_by_cached_key,
sort_by_key, or any of the other *_by_key methods on slice.
Pass the method into the sort method directly. (ie. PublicKey::to_sort_key)
This method of sorting is in line with Bitcoin Core’s implementation of
sorting keys for output descriptors such as sortedmulti().
If every PublicKey in the slice is compressed == true then this will sort
the keys in a
BIP67
compliant way.
§Example: Using with sort_unstable_by_key
use std::str::FromStr;
use bitcoin::PublicKey;
let pk = |s| PublicKey::from_str(s).unwrap();
let mut unsorted = [
pk("04c4b0bbb339aa236bff38dbe6a451e111972a7909a126bc424013cba2ec33bc38e98ac269ffe028345c31ac8d0a365f29c8f7e7cfccac72f84e1acd02bc554f35"),
pk("038f47dcd43ba6d97fc9ed2e3bba09b175a45fac55f0683e8cf771e8ced4572354"),
pk("028bde91b10013e08949a318018fedbd896534a549a278e220169ee2a36517c7aa"),
pk("04c4b0bbb339aa236bff38dbe6a451e111972a7909a126bc424013cba2ec33bc3816753d96001fd7cba3ce5372f5c9a0d63708183033538d07b1e532fc43aaacfa"),
pk("032b8324c93575034047a52e9bca05a46d8347046b91a032eff07d5de8d3f2730b"),
pk("045d753414fa292ea5b8f56e39cfb6a0287b2546231a5cb05c4b14ab4b463d171f5128148985b23eccb1e2905374873b1f09b9487f47afa6b1f2b0083ac8b4f7e8"),
pk("0234dd69c56c36a41230d573d68adeae0030c9bc0bf26f24d3e1b64c604d293c68"),
];
let sorted = [
// These first 4 keys are in a BIP67 compatible sorted order
// (since they are compressed)
pk("0234dd69c56c36a41230d573d68adeae0030c9bc0bf26f24d3e1b64c604d293c68"),
pk("028bde91b10013e08949a318018fedbd896534a549a278e220169ee2a36517c7aa"),
pk("032b8324c93575034047a52e9bca05a46d8347046b91a032eff07d5de8d3f2730b"),
pk("038f47dcd43ba6d97fc9ed2e3bba09b175a45fac55f0683e8cf771e8ced4572354"),
// Uncompressed keys are not BIP67 compliant, but are sorted
// after compressed keys in Bitcoin Core using `sortedmulti()`
pk("045d753414fa292ea5b8f56e39cfb6a0287b2546231a5cb05c4b14ab4b463d171f5128148985b23eccb1e2905374873b1f09b9487f47afa6b1f2b0083ac8b4f7e8"),
pk("04c4b0bbb339aa236bff38dbe6a451e111972a7909a126bc424013cba2ec33bc3816753d96001fd7cba3ce5372f5c9a0d63708183033538d07b1e532fc43aaacfa"),
pk("04c4b0bbb339aa236bff38dbe6a451e111972a7909a126bc424013cba2ec33bc38e98ac269ffe028345c31ac8d0a365f29c8f7e7cfccac72f84e1acd02bc554f35"),
];
unsorted.sort_unstable_by_key(|k| PublicKey::to_sort_key(*k));
assert_eq!(unsorted, sorted);Sourcepub fn from_slice(data: &[u8]) -> Result<PublicKey, FromSliceError>
pub fn from_slice(data: &[u8]) -> Result<PublicKey, FromSliceError>
Deserialize a public key from a slice
Sourcepub fn from_private_key<C>(secp: &Secp256k1<C>, sk: &PrivateKey) -> PublicKeywhere
C: Signing,
pub fn from_private_key<C>(secp: &Secp256k1<C>, sk: &PrivateKey) -> PublicKeywhere
C: Signing,
Computes the public key as supposed to be used with this secret
Trait Implementations§
Source§impl<'de> Deserialize<'de> for PublicKey
Available on crate feature serde only.
impl<'de> Deserialize<'de> for PublicKey
serde only.Source§fn deserialize<D>(d: D) -> Result<PublicKey, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(d: D) -> Result<PublicKey, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
Source§impl From<&PublicKey> for PubkeyHash
impl From<&PublicKey> for PubkeyHash
Source§fn from(key: &PublicKey) -> PubkeyHash
fn from(key: &PublicKey) -> PubkeyHash
Source§impl From<CompressedPublicKey> for PublicKey
impl From<CompressedPublicKey> for PublicKey
Source§fn from(value: CompressedPublicKey) -> PublicKey
fn from(value: CompressedPublicKey) -> PublicKey
Source§impl From<PublicKey> for DescriptorPublicKey
impl From<PublicKey> for DescriptorPublicKey
Source§fn from(key: PublicKey) -> DescriptorPublicKey
fn from(key: PublicKey) -> DescriptorPublicKey
Source§impl From<PublicKey> for PubkeyHash
impl From<PublicKey> for PubkeyHash
Source§fn from(key: PublicKey) -> PubkeyHash
fn from(key: PublicKey) -> PubkeyHash
Source§impl From<PublicKey> for XOnlyPublicKey
impl From<PublicKey> for XOnlyPublicKey
Source§fn from(pk: PublicKey) -> XOnlyPublicKey
fn from(pk: PublicKey) -> XOnlyPublicKey
Source§impl<Ctx> IntoDescriptorKey<Ctx> for PublicKeywhere
Ctx: ScriptContext,
impl<Ctx> IntoDescriptorKey<Ctx> for PublicKeywhere
Ctx: ScriptContext,
Source§fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError>
fn into_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError>
DescriptorKey within the requested ScriptContextSource§impl MiniscriptKey for PublicKey
impl MiniscriptKey for PublicKey
Source§fn is_uncompressed(&self) -> bool
fn is_uncompressed(&self) -> bool
Returns the compressed-ness of the underlying secp256k1 key.
Source§type Sha256 = Hash
type Sha256 = Hash
bitcoin::hashes::sha256::Hash for this MiniscriptKey, used in the
sha256 fragment.Source§type Hash256 = Hash
type Hash256 = Hash
miniscript::hash256::Hash for this MiniscriptKey, used in the
hash256 fragment.Source§type Ripemd160 = Hash
type Ripemd160 = Hash
bitcoin::hashes::ripemd160::Hash for this MiniscriptKey type, used
in the ripemd160 fragment.Source§type Hash160 = Hash
type Hash160 = Hash
bitcoin::hashes::hash160::Hash for this MiniscriptKey type, used in
the hash160 fragment.Source§fn is_x_only_key(&self) -> bool
fn is_x_only_key(&self) -> bool
false.Source§fn num_der_paths(&self) -> usize
fn num_der_paths(&self) -> usize
Source§impl Ord for PublicKey
impl Ord for PublicKey
Source§impl ParseableKey for PublicKey
impl ParseableKey for PublicKey
Source§fn from_slice(sl: &[u8]) -> Result<PublicKey, KeyParseError>
fn from_slice(sl: &[u8]) -> Result<PublicKey, KeyParseError>
Source§impl PartialOrd for PublicKey
impl PartialOrd for PublicKey
Source§impl Serialize for PublicKey
Available on crate feature serde only.
impl Serialize for PublicKey
serde only.Source§fn serialize<S>(
&self,
s: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>(
&self,
s: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
Source§impl ToPublicKey for PublicKey
impl ToPublicKey for PublicKey
Source§fn to_public_key(&self) -> PublicKey
fn to_public_key(&self) -> PublicKey
Source§fn to_sha256(hash: &Hash) -> Hash
fn to_sha256(hash: &Hash) -> Hash
MiniscriptKey::Sha256 to sha256::HashSource§fn to_hash256(hash: &Hash) -> Hash
fn to_hash256(hash: &Hash) -> Hash
MiniscriptKey::Hash256 to hash256::HashSource§fn to_ripemd160(hash: &Hash) -> Hash
fn to_ripemd160(hash: &Hash) -> Hash
MiniscriptKey::Ripemd160 to ripemd160::HashSource§fn to_hash160(hash: &Hash) -> Hash
fn to_hash160(hash: &Hash) -> Hash
MiniscriptKey::Hash160 to hash160::HashSource§fn to_x_only_pubkey(&self) -> XOnlyPublicKey
fn to_x_only_pubkey(&self) -> XOnlyPublicKey
Source§fn to_pubkeyhash(&self, sig_type: SigType) -> Hash
fn to_pubkeyhash(&self, sig_type: SigType) -> Hash
Source§impl TryFrom<PublicKey> for CompressedPublicKey
impl TryFrom<PublicKey> for CompressedPublicKey
Source§type Error = UncompressedPublicKeyError
type Error = UncompressedPublicKeyError
Source§fn try_from(
value: PublicKey,
) -> Result<CompressedPublicKey, <CompressedPublicKey as TryFrom<PublicKey>>::Error>
fn try_from( value: PublicKey, ) -> Result<CompressedPublicKey, <CompressedPublicKey as TryFrom<PublicKey>>::Error>
impl Copy for PublicKey
impl Eq for PublicKey
impl StructuralPartialEq for PublicKey
Auto Trait Implementations§
impl Freeze for PublicKey
impl RefUnwindSafe for PublicKey
impl Send for PublicKey
impl Sync for PublicKey
impl Unpin for PublicKey
impl UnwindSafe for PublicKey
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,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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.