Struct PublicKey
pub struct PublicKey {
pub compressed: bool,
pub inner: PublicKey,
}
Expand description
A Bitcoin ECDSA public key
Fields§
§compressed: bool
Whether this public key should be serialized as compressed
inner: PublicKey
The actual ECDSA key
Implementations§
§impl PublicKey
impl PublicKey
pub fn new(key: PublicKey) -> PublicKey
pub fn new(key: PublicKey) -> PublicKey
Constructs compressed ECDSA public key from the provided generic Secp256k1 public key
pub fn new_uncompressed(key: PublicKey) -> PublicKey
pub fn new_uncompressed(key: PublicKey) -> PublicKey
Constructs uncompressed (legacy) ECDSA public key from the provided generic Secp256k1 public key
pub fn pubkey_hash(&self) -> PubkeyHash
pub fn pubkey_hash(&self) -> PubkeyHash
Returns bitcoin 160-bit hash of the public key
pub fn wpubkey_hash(&self) -> Option<WPubkeyHash>
pub fn wpubkey_hash(&self) -> Option<WPubkeyHash>
Returns bitcoin 160-bit hash of the public key for witness program
pub fn write_into<W>(&self, writer: W) -> Result<(), Error>where
W: Write,
pub fn write_into<W>(&self, writer: W) -> Result<(), Error>where
W: Write,
Write the public key into a writer
pub fn read_from<R>(reader: R) -> Result<PublicKey, Error>where
R: Read,
pub fn read_from<R>(reader: R) -> Result<PublicKey, Error>where
R: Read,
Read the public key from a reader
This internally reads the first byte before reading the rest, so
use of a BufReader
is recommended.
pub 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);
pub fn from_slice(data: &[u8]) -> Result<PublicKey, Error>
pub fn from_slice(data: &[u8]) -> Result<PublicKey, Error>
Deserialize a public key from a slice
pub 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§
§impl Deserialize for PublicKey
impl Deserialize for PublicKey
§impl Ord for PublicKey
impl Ord for PublicKey
§impl PartialOrd for PublicKey
impl PartialOrd for PublicKey
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§
§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,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§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§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§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
§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.§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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request