Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 25 additions & 3 deletions Cargo-recent.lock
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f"
dependencies = [
"bitcoin-internals 0.3.0",
"bitcoin_hashes",
"bitcoin_hashes 0.14.0",
]

[[package]]
Expand Down Expand Up @@ -69,13 +69,22 @@ dependencies = [
"bitcoin-internals 0.3.0",
"bitcoin-io",
"bitcoin-units",
"bitcoin_hashes",
"bitcoin_hashes 0.14.0",
"hex-conservative 0.2.1",
"hex_lit",
"secp256k1",
"serde",
]

[[package]]
name = "bitcoin-consensus-encoding"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2d6094e2a1ba3c93b5a596fe5a10d1a10c3c6e06785cde89f693a044c01aa40"
dependencies = [
"bitcoin-internals 0.5.0",
]

[[package]]
name = "bitcoin-internals"
version = "0.3.0"
Expand Down Expand Up @@ -124,6 +133,18 @@ dependencies = [
"serde",
]

[[package]]
name = "bitcoin_hashes"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f70c29ac06e7effa19682e91318deae86bdb46c4fd1bbd0f12fd196ff427ab0"
dependencies = [
"bitcoin-consensus-encoding",
"bitcoin-internals 0.5.0",
"hex-conservative 1.1.0",
"serde",
]

[[package]]
name = "bitcoincore-rpc"
version = "0.19.0"
Expand Down Expand Up @@ -210,6 +231,7 @@ dependencies = [
"bincode",
"bitcoin",
"bitcoin-internals 0.5.0",
"bitcoin_hashes 1.0.0",
"getrandom 0.2.16",
"hex-conservative 1.1.0",
"rand",
Expand Down Expand Up @@ -490,7 +512,7 @@ version = "0.29.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113"
dependencies = [
"bitcoin_hashes",
"bitcoin_hashes 0.14.0",
"rand",
"secp256k1-sys",
"serde",
Expand Down
3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,15 @@ json-contract = ["serde_json"]
"dep:serde",
"bitcoin/serde",
"bitcoin/serde",
"hashes/serde",
"secp256k1-zkp/serde",
]
base64 = ["bitcoin/base64"]

[dependencies]
bech32 = "0.11.0"
bitcoin = "0.32.2"
hashes = { package = "bitcoin_hashes", version = "1.0", features = [ "hex" ] }
internals = { package = "bitcoin-internals", version = "0.5" }
secp256k1-zkp = { version = "0.11.0", features = ["global-context", "hashes"] }

Expand Down Expand Up @@ -189,6 +191,7 @@ zero_sized_map_values = "warn"

[package.metadata.rbmt.lint]
allowed_duplicates = [
"bitcoin_hashes",
"bitcoin-internals",
"hex-conservative",
]
Expand Down
1 change: 1 addition & 0 deletions clippy.toml
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
avoid-breaking-exported-api = true
large-error-threshold = 192 # default 128 complains about two public keys in RangeProofMessageError
1 change: 1 addition & 0 deletions elementsd-tests/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ rand = "0.8"
[package.metadata.rbmt.lint]
# FIXME the bulk of these are because elementsd/bitcoind is much older than rust-bitcoin.
allowed_duplicates = [
"bitcoin_hashes",
"bitcoin-internals",
"hex-conservative",
"base64",
Expand Down
1 change: 0 additions & 1 deletion elementsd-tests/src/pset.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ use crate::{setup, Call};

use bitcoin::{self, Address, Amount};
use elements::encode::serialize;
use elements::hashes::Hash;
use elements::hex::DisplayHex as _;
use elements::pset::PartiallySignedTransaction;
use elements::{AssetId, ContractHash};
Expand Down
5 changes: 2 additions & 3 deletions elementsd-tests/src/taproot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ use bitcoin::Amount;
use elements::hex;
use elements::confidential::{AssetBlindingFactor, ValueBlindingFactor};
use elements::encode::{deserialize, serialize_hex};
use elements::hashes::Hash;
use elements::script::Builder;
use elements::secp256k1_zkp;
use elements::sighash::{self, SighashCache};
Expand Down Expand Up @@ -215,7 +214,7 @@ fn taproot_spend_test(
);
let tweak = secp256k1_zkp::Scalar::from_be_bytes(tweak.to_byte_array()).expect("hash value greater than curve order");
let sig = secp.sign_schnorr(
&secp256k1_zkp::Message::from_digest_slice(&sighash_msg[..]).unwrap(),
&secp256k1_zkp::Message::from_digest(sighash_msg.to_byte_array()),
&output_keypair.add_xonly_tweak(secp, &tweak).unwrap(),
);

Expand All @@ -239,7 +238,7 @@ fn taproot_spend_test(
.unwrap();

let sig = secp.sign_schnorr(
&secp256k1_zkp::Message::from_digest_slice(&sighash_msg[..]).unwrap(),
&secp256k1_zkp::Message::from_digest(sighash_msg.to_byte_array()),
&test_data.leaf1_keypair,
);

Expand Down
1 change: 1 addition & 0 deletions fuzz/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ use_self = "warn"

[package.metadata.rbmt.lint]
allowed_duplicates = [
"bitcoin_hashes",
"bitcoin-internals",
"hex-conservative",
"getrandom",
Expand Down
26 changes: 13 additions & 13 deletions src/address.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,16 @@
//! # Addresses
//!

use std::convert::TryFrom as _;
use std::convert::{TryFrom as _, TryInto as _};
use std::error;
use std::fmt;
use std::fmt::Write as _;
use std::str::FromStr;

use bech32::{Bech32, Bech32m, ByteIterExt, Fe32, Fe32IterExt, Hrp};
use crate::blech32::{Blech32, Blech32m};
use crate::hashes::Hash;
use bitcoin::base58;
use bitcoin::hashes::Hash as _;
use bitcoin::PublicKey;
use internals::array::ArrayExt as _;
use internals::slice::SliceExt;
Expand Down Expand Up @@ -329,12 +329,12 @@ impl Address {
) -> Address {
let ws = script::Builder::new()
.push_int(0)
.push_slice(&WScriptHash::hash(&script[..])[..])
.push_slice(WScriptHash::hash_script(script).as_ref())
.into_script();

Address {
params,
payload: Payload::ScriptHash(ScriptHash::hash(&ws[..])),
payload: Payload::ScriptHash(ScriptHash::hash_script(&ws)),
blinding_pubkey: blinder,
}
}
Expand Down Expand Up @@ -386,9 +386,9 @@ impl Address {
) -> Option<Address> {
Some(Address {
payload: if script.is_p2pkh() {
Payload::PubkeyHash(Hash::from_slice(&script.as_bytes()[3..23]).unwrap())
Payload::PubkeyHash(PubkeyHash::from_byte_array(script.as_bytes()[3..23].try_into().unwrap()))
} else if script.is_p2sh() {
Payload::ScriptHash(Hash::from_slice(&script.as_bytes()[2..22]).unwrap())
Payload::ScriptHash(ScriptHash::from_byte_array(script.as_bytes()[2..22].try_into().unwrap()))
} else if script.is_v0_p2wpkh() {
Payload::WitnessProgram {
version: Fe32::Q,
Expand Down Expand Up @@ -418,12 +418,12 @@ impl Address {
Payload::PubkeyHash(ref hash) => script::Builder::new()
.push_opcode(opcodes::all::OP_DUP)
.push_opcode(opcodes::all::OP_HASH160)
.push_slice(&hash[..])
.push_slice(hash.as_ref())
.push_opcode(opcodes::all::OP_EQUALVERIFY)
.push_opcode(opcodes::all::OP_CHECKSIG),
Payload::ScriptHash(ref hash) => script::Builder::new()
.push_opcode(opcodes::all::OP_HASH160)
.push_slice(&hash[..])
.push_slice(hash.as_byte_array())
.push_opcode(opcodes::all::OP_EQUAL),
Payload::WitnessProgram {
version: witver,
Expand Down Expand Up @@ -566,12 +566,12 @@ impl fmt::Display for Address {
prefixed[0] = self.params.blinded_prefix;
prefixed[1] = self.params.p2pkh_prefix;
prefixed[2..35].copy_from_slice(&blinder.serialize());
prefixed[35..].copy_from_slice(&hash[..]);
prefixed[35..].copy_from_slice(hash.as_ref());
base58::encode_check_to_fmt(fmt, &prefixed[..])
} else {
let mut prefixed = [0; 21];
prefixed[0] = self.params.p2pkh_prefix;
prefixed[1..].copy_from_slice(&hash[..]);
prefixed[1..].copy_from_slice(hash.as_ref());
base58::encode_check_to_fmt(fmt, &prefixed[..])
}
}
Expand All @@ -581,12 +581,12 @@ impl fmt::Display for Address {
prefixed[0] = self.params.blinded_prefix;
prefixed[1] = self.params.p2sh_prefix;
prefixed[2..35].copy_from_slice(&blinder.serialize());
prefixed[35..].copy_from_slice(&hash[..]);
prefixed[35..].copy_from_slice(hash.as_byte_array());
base58::encode_check_to_fmt(fmt, &prefixed[..])
} else {
let mut prefixed = [0; 21];
prefixed[0] = self.params.p2sh_prefix;
prefixed[1..].copy_from_slice(&hash[..]);
prefixed[1..].copy_from_slice(hash.as_byte_array());
base58::encode_check_to_fmt(fmt, &prefixed[..])
}
}
Expand Down Expand Up @@ -937,7 +937,7 @@ mod test {
"93c7378d96518a75448821c4f7c8f4bae7ce60f804d03d1f0628dd5dd0f5de51",
)
.unwrap();
let tap_node_hash = TapNodeHash::all_zeros();
let tap_node_hash = TapNodeHash::from_byte_array([0; 32]);

let mut expected = IntoIterator::into_iter([
"2dszRCFv8Ub4ytKo1Q1vXXGgSx7mekNDwSJ",
Expand Down
Loading
Loading