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§
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: Write + ?Sized>(&self, writer: &mut W) -> Result<(), Error>
pub fn write_into<W: Write + ?Sized>(&self, writer: &mut W) -> Result<(), Error>
Write the public key into a writer
Sourcepub fn read_from<R: Read + ?Sized>(reader: &mut R) -> Result<Self, Error>
pub fn read_from<R: Read + ?Sized>(reader: &mut R) -> Result<Self, 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: Signing>(
secp: &Secp256k1<C>,
sk: &PrivateKey,
) -> PublicKey
pub fn from_private_key<C: Signing>( secp: &Secp256k1<C>, sk: &PrivateKey, ) -> PublicKey
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.