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: impl Into<PublicKey>) -> PublicKey
pub fn new(key: impl Into<PublicKey>) -> PublicKey
Constructs compressed ECDSA public key from the provided generic Secp256k1 public key
pub 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
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) -> Result<WPubkeyHash, UncompressedPublicKeyError>
pub fn wpubkey_hash(&self) -> Result<WPubkeyHash, UncompressedPublicKeyError>
Returns bitcoin 160-bit hash of the public key for witness program
pub 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.
pub 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
pub 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.
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, FromSliceError>
pub fn from_slice(data: &[u8]) -> Result<PublicKey, FromSliceError>
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<'de> Deserialize<'de> for PublicKey
impl<'de> Deserialize<'de> for PublicKey
§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>,
§impl From<&PublicKey> for PubkeyHash
impl From<&PublicKey> for PubkeyHash
§fn from(key: &PublicKey) -> PubkeyHash
fn from(key: &PublicKey) -> PubkeyHash
§impl From<CompressedPublicKey> for PublicKey
impl From<CompressedPublicKey> for PublicKey
§fn from(value: CompressedPublicKey) -> PublicKey
fn from(value: CompressedPublicKey) -> PublicKey
§impl From<PublicKey> for PubkeyHash
impl From<PublicKey> for PubkeyHash
§fn from(key: PublicKey) -> PubkeyHash
fn from(key: PublicKey) -> PubkeyHash
§impl From<PublicKey> for XOnlyPublicKey
impl From<PublicKey> for XOnlyPublicKey
§fn from(pk: PublicKey) -> XOnlyPublicKey
fn from(pk: PublicKey) -> XOnlyPublicKey
§impl FromStr for PublicKey
impl FromStr for PublicKey
§type Err = ParsePublicKeyError
type Err = ParsePublicKeyError
§impl MiniscriptKey for PublicKey
impl MiniscriptKey for PublicKey
§fn is_uncompressed(&self) -> bool
fn is_uncompressed(&self) -> bool
Returns the compressed-ness of the underlying secp256k1 key.
§type Sha256 = Hash
type Sha256 = Hash
bitcoin::hashes::sha256::Hash
for this [MiniscriptKey
], used in the
sha256 fragment.§type Hash256 = Hash
type Hash256 = Hash
miniscript::hash256::Hash
] for this [MiniscriptKey
], used in the
hash256 fragment.§type Ripemd160 = Hash
type Ripemd160 = Hash
bitcoin::hashes::ripemd160::Hash
for this [MiniscriptKey
] type, used
in the ripemd160 fragment.§type Hash160 = Hash
type Hash160 = Hash
bitcoin::hashes::hash160::Hash
for this [MiniscriptKey
] type, used in
the hash160 fragment.§fn is_x_only_key(&self) -> bool
fn is_x_only_key(&self) -> bool
false
.§fn num_der_paths(&self) -> usize
fn num_der_paths(&self) -> usize
§impl Ord for PublicKey
impl Ord for PublicKey
§impl ParseableKey for PublicKey
impl ParseableKey for PublicKey
§fn from_slice(sl: &[u8]) -> Result<PublicKey, KeyParseError>
fn from_slice(sl: &[u8]) -> Result<PublicKey, KeyParseError>
§impl PartialOrd for PublicKey
impl PartialOrd for PublicKey
§impl Serialize for PublicKey
impl Serialize for PublicKey
§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,
§impl ToPublicKey for PublicKey
impl ToPublicKey for PublicKey
§fn to_public_key(&self) -> PublicKey
fn to_public_key(&self) -> PublicKey
§fn to_sha256(hash: &Hash) -> Hash
fn to_sha256(hash: &Hash) -> Hash
MiniscriptKey::Sha256
] to sha256::Hash
§fn to_hash256(hash: &Hash) -> Hash
fn to_hash256(hash: &Hash) -> Hash
MiniscriptKey::Hash256
] to [hash256::Hash
]§fn to_ripemd160(hash: &Hash) -> Hash
fn to_ripemd160(hash: &Hash) -> Hash
MiniscriptKey::Ripemd160
] to ripemd160::Hash
§fn to_hash160(hash: &Hash) -> Hash
fn to_hash160(hash: &Hash) -> Hash
MiniscriptKey::Hash160
] to hash160::Hash