Merge branch 'master' into make_txbuilder_take_ref_to_wallet
This commit is contained in:
commit
6689384c8a
10
.github/workflows/cont_integration.yml
vendored
10
.github/workflows/cont_integration.yml
vendored
@ -41,6 +41,8 @@ jobs:
|
|||||||
run: rustup set profile minimal
|
run: rustup set profile minimal
|
||||||
- name: Add clippy
|
- name: Add clippy
|
||||||
run: rustup component add clippy
|
run: rustup component add clippy
|
||||||
|
- name: Update toolchain
|
||||||
|
run: rustup update
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cargo build --features ${{ matrix.features }} --no-default-features
|
run: cargo build --features ${{ matrix.features }} --no-default-features
|
||||||
- name: Clippy
|
- name: Clippy
|
||||||
@ -66,6 +68,8 @@ jobs:
|
|||||||
run: rustup default nightly
|
run: rustup default nightly
|
||||||
- name: Set profile
|
- name: Set profile
|
||||||
run: rustup set profile minimal
|
run: rustup set profile minimal
|
||||||
|
- name: Update toolchain
|
||||||
|
run: rustup update
|
||||||
- name: Test
|
- name: Test
|
||||||
run: cargo test --features test-md-docs --no-default-features -- doctest::ReadmeDoctests
|
run: cargo test --features test-md-docs --no-default-features -- doctest::ReadmeDoctests
|
||||||
|
|
||||||
@ -96,6 +100,8 @@ jobs:
|
|||||||
run: $HOME/.cargo/bin/rustup default stable
|
run: $HOME/.cargo/bin/rustup default stable
|
||||||
- name: Set profile
|
- name: Set profile
|
||||||
run: $HOME/.cargo/bin/rustup set profile minimal
|
run: $HOME/.cargo/bin/rustup set profile minimal
|
||||||
|
- name: Update toolchain
|
||||||
|
run: $HOME/.cargo/bin/rustup update
|
||||||
- name: Start core
|
- name: Start core
|
||||||
run: ./ci/start-core.sh
|
run: ./ci/start-core.sh
|
||||||
- name: Test
|
- name: Test
|
||||||
@ -129,6 +135,8 @@ jobs:
|
|||||||
run: rustup set profile minimal
|
run: rustup set profile minimal
|
||||||
- name: Add target wasm32
|
- name: Add target wasm32
|
||||||
run: rustup target add wasm32-unknown-unknown
|
run: rustup target add wasm32-unknown-unknown
|
||||||
|
- name: Update toolchain
|
||||||
|
run: rustup update
|
||||||
- name: Check
|
- name: Check
|
||||||
run: cargo check --target wasm32-unknown-unknown --features esplora --no-default-features
|
run: cargo check --target wasm32-unknown-unknown --features esplora --no-default-features
|
||||||
|
|
||||||
@ -144,5 +152,7 @@ jobs:
|
|||||||
run: rustup set profile minimal
|
run: rustup set profile minimal
|
||||||
- name: Add clippy
|
- name: Add clippy
|
||||||
run: rustup component add rustfmt
|
run: rustup component add rustfmt
|
||||||
|
- name: Update toolchain
|
||||||
|
run: rustup update
|
||||||
- name: Check fmt
|
- name: Check fmt
|
||||||
run: cargo fmt --all -- --check
|
run: cargo fmt --all -- --check
|
||||||
|
@ -6,6 +6,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Misc
|
||||||
|
#### Added
|
||||||
|
- Added a function to get the version of BDK at runtime
|
||||||
|
|
||||||
|
### Wallet
|
||||||
|
#### Changed
|
||||||
|
- Removed the explicit `id` argument from `Wallet::add_signer()` since that's now part of `Signer` itself
|
||||||
|
|
||||||
## [v0.3.0] - [v0.2.0]
|
## [v0.3.0] - [v0.2.0]
|
||||||
|
|
||||||
### Descriptor
|
### Descriptor
|
||||||
|
@ -32,13 +32,14 @@ Pre-`v1.0.0` our "major" releases only affect the "minor" semver value. Accordin
|
|||||||
- If it's a minor issue you can just fix it in the release branch, since it will be merged back to `master` eventually
|
- If it's a minor issue you can just fix it in the release branch, since it will be merged back to `master` eventually
|
||||||
- For bigger issues you can fix them on `master` and then *cherry-pick* the commit to the release branch
|
- For bigger issues you can fix them on `master` and then *cherry-pick* the commit to the release branch
|
||||||
6. Update the changelog with the new release version.
|
6. Update the changelog with the new release version.
|
||||||
7. On release day, make a commit on the release branch to bump the version to `x.y.z`. The message should be "Bump version to x.y.z".
|
7. Update `src/lib.rs` with the new version (line ~59)
|
||||||
8. Add a tag to this commit. The tag name should be `vx.y.z` (for example `v0.5.0`), and the message "Release x.y.z". Make sure the tag is signed, for extra safety use the explicit `--sign` flag.
|
8. On release day, make a commit on the release branch to bump the version to `x.y.z`. The message should be "Bump version to x.y.z".
|
||||||
9. Push the new commits to the upstream release branch, wait for the CI to finish one last time.
|
9. Add a tag to this commit. The tag name should be `vx.y.z` (for example `v0.5.0`), and the message "Release x.y.z". Make sure the tag is signed, for extra safety use the explicit `--sign` flag.
|
||||||
10. Publish **all** the updated crates to crates.io.
|
10. Push the new commits to the upstream release branch, wait for the CI to finish one last time.
|
||||||
11. Make a new commit to bump the version value to `x.y.(z+1)-dev`. The message should be "Bump version to x.y.(z+1)-dev".
|
11. Publish **all** the updated crates to crates.io.
|
||||||
12. Merge the release branch back into `master`.
|
12. Make a new commit to bump the version value to `x.y.(z+1)-dev`. The message should be "Bump version to x.y.(z+1)-dev".
|
||||||
13. Create the release on GitHub: go to "tags", click on the dots on the right and select "Create Release". Then set the title to `vx.y.z` and write down some brief release notes.
|
13. Merge the release branch back into `master`.
|
||||||
14. Make sure the new release shows up on crates.io and that the docs are built correctly on docs.rs.
|
14. Create the release on GitHub: go to "tags", click on the dots on the right and select "Create Release". Then set the title to `vx.y.z` and write down some brief release notes.
|
||||||
15. Announce the release on Twitter, Discord and Telegram.
|
15. Make sure the new release shows up on crates.io and that the docs are built correctly on docs.rs.
|
||||||
16. Celebrate :tada:
|
16. Announce the release on Twitter, Discord and Telegram.
|
||||||
|
17. Celebrate :tada:
|
||||||
|
@ -56,7 +56,7 @@
|
|||||||
//! interact with the bitcoin P2P network.
|
//! interact with the bitcoin P2P network.
|
||||||
//!
|
//!
|
||||||
//! ```toml
|
//! ```toml
|
||||||
//! bdk = "0.2.0"
|
//! bdk = "0.3.0"
|
||||||
//! ```
|
//! ```
|
||||||
//!
|
//!
|
||||||
//! ## Sync the balance of a descriptor
|
//! ## Sync the balance of a descriptor
|
||||||
@ -265,3 +265,8 @@ pub use wallet::address_validator;
|
|||||||
pub use wallet::signer;
|
pub use wallet::signer;
|
||||||
pub use wallet::tx_builder::TxBuilder;
|
pub use wallet::tx_builder::TxBuilder;
|
||||||
pub use wallet::Wallet;
|
pub use wallet::Wallet;
|
||||||
|
|
||||||
|
/// Get the version of BDK at runtime
|
||||||
|
pub fn version() -> &'static str {
|
||||||
|
env!("CARGO_PKG_VERSION", "unknown")
|
||||||
|
}
|
||||||
|
@ -58,7 +58,7 @@ pub use utils::IsDust;
|
|||||||
|
|
||||||
use address_validator::AddressValidator;
|
use address_validator::AddressValidator;
|
||||||
use coin_selection::DefaultCoinSelectionAlgorithm;
|
use coin_selection::DefaultCoinSelectionAlgorithm;
|
||||||
use signer::{Signer, SignerId, SignerOrdering, SignersContainer};
|
use signer::{Signer, SignerOrdering, SignersContainer};
|
||||||
use tx_builder::{BumpFee, CreateTx, FeePolicy, TxBuilder, TxParams};
|
use tx_builder::{BumpFee, CreateTx, FeePolicy, TxBuilder, TxParams};
|
||||||
use utils::{
|
use utils::{
|
||||||
check_nlocktime, check_nsequence_rbf, descriptor_to_pk_ctx, After, Older, SecpCtx,
|
check_nlocktime, check_nsequence_rbf, descriptor_to_pk_ctx, After, Older, SecpCtx,
|
||||||
@ -236,7 +236,6 @@ where
|
|||||||
pub fn add_signer(
|
pub fn add_signer(
|
||||||
&mut self,
|
&mut self,
|
||||||
keychain: KeychainKind,
|
keychain: KeychainKind,
|
||||||
id: SignerId,
|
|
||||||
ordering: SignerOrdering,
|
ordering: SignerOrdering,
|
||||||
signer: Arc<dyn Signer>,
|
signer: Arc<dyn Signer>,
|
||||||
) {
|
) {
|
||||||
@ -245,7 +244,7 @@ where
|
|||||||
KeychainKind::Internal => Arc::make_mut(&mut self.change_signers),
|
KeychainKind::Internal => Arc::make_mut(&mut self.change_signers),
|
||||||
};
|
};
|
||||||
|
|
||||||
signers.add_external(id, ordering, signer);
|
signers.add_external(signer.id(&self.secp), ordering, signer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Add an address validator
|
/// Add an address validator
|
||||||
|
@ -33,7 +33,6 @@
|
|||||||
//! # use bitcoin::secp256k1::{Secp256k1, All};
|
//! # use bitcoin::secp256k1::{Secp256k1, All};
|
||||||
//! # use bitcoin::*;
|
//! # use bitcoin::*;
|
||||||
//! # use bitcoin::util::psbt;
|
//! # use bitcoin::util::psbt;
|
||||||
//! # use bitcoin::util::bip32::Fingerprint;
|
|
||||||
//! # use bdk::signer::*;
|
//! # use bdk::signer::*;
|
||||||
//! # use bdk::database::*;
|
//! # use bdk::database::*;
|
||||||
//! # use bdk::*;
|
//! # use bdk::*;
|
||||||
@ -46,6 +45,9 @@
|
|||||||
//! # fn connect() -> Self {
|
//! # fn connect() -> Self {
|
||||||
//! # CustomHSM
|
//! # CustomHSM
|
||||||
//! # }
|
//! # }
|
||||||
|
//! # fn get_id(&self) -> SignerId {
|
||||||
|
//! # SignerId::Dummy(0)
|
||||||
|
//! # }
|
||||||
//! # }
|
//! # }
|
||||||
//! #[derive(Debug)]
|
//! #[derive(Debug)]
|
||||||
//! struct CustomSigner {
|
//! struct CustomSigner {
|
||||||
@ -71,6 +73,10 @@
|
|||||||
//! Ok(())
|
//! Ok(())
|
||||||
//! }
|
//! }
|
||||||
//!
|
//!
|
||||||
|
//! fn id(&self, _secp: &Secp256k1<All>) -> SignerId {
|
||||||
|
//! self.device.get_id()
|
||||||
|
//! }
|
||||||
|
//!
|
||||||
//! fn sign_whole_tx(&self) -> bool {
|
//! fn sign_whole_tx(&self) -> bool {
|
||||||
//! false
|
//! false
|
||||||
//! }
|
//! }
|
||||||
@ -82,7 +88,6 @@
|
|||||||
//! let mut wallet = Wallet::new_offline(descriptor, None, Network::Testnet, MemoryDatabase::default())?;
|
//! let mut wallet = Wallet::new_offline(descriptor, None, Network::Testnet, MemoryDatabase::default())?;
|
||||||
//! wallet.add_signer(
|
//! wallet.add_signer(
|
||||||
//! KeychainKind::External,
|
//! KeychainKind::External,
|
||||||
//! Fingerprint::from_str("e30f11b8").unwrap().into(),
|
|
||||||
//! SignerOrdering(200),
|
//! SignerOrdering(200),
|
||||||
//! Arc::new(custom_signer)
|
//! Arc::new(custom_signer)
|
||||||
//! );
|
//! );
|
||||||
@ -118,6 +123,8 @@ pub enum SignerId {
|
|||||||
PkHash(hash160::Hash),
|
PkHash(hash160::Hash),
|
||||||
/// The fingerprint of a BIP32 extended key
|
/// The fingerprint of a BIP32 extended key
|
||||||
Fingerprint(Fingerprint),
|
Fingerprint(Fingerprint),
|
||||||
|
/// Dummy identifier
|
||||||
|
Dummy(u64),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<hash160::Hash> for SignerId {
|
impl From<hash160::Hash> for SignerId {
|
||||||
@ -184,6 +191,12 @@ pub trait Signer: fmt::Debug + Send + Sync {
|
|||||||
/// input individually
|
/// input individually
|
||||||
fn sign_whole_tx(&self) -> bool;
|
fn sign_whole_tx(&self) -> bool;
|
||||||
|
|
||||||
|
/// Return the [`SignerId`] for this signer
|
||||||
|
///
|
||||||
|
/// The [`SignerId`] can be used to lookup a signer in the [`Wallet`](crate::Wallet)'s signers map or to
|
||||||
|
/// compare two signers.
|
||||||
|
fn id(&self, secp: &SecpCtx) -> SignerId;
|
||||||
|
|
||||||
/// Return the secret key for the signer
|
/// Return the secret key for the signer
|
||||||
///
|
///
|
||||||
/// This is used internally to reconstruct the original descriptor that may contain secrets.
|
/// This is used internally to reconstruct the original descriptor that may contain secrets.
|
||||||
@ -234,6 +247,10 @@ impl Signer for DescriptorXKey<ExtendedPrivKey> {
|
|||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn id(&self, secp: &SecpCtx) -> SignerId {
|
||||||
|
SignerId::from(self.root_fingerprint(&secp))
|
||||||
|
}
|
||||||
|
|
||||||
fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> {
|
fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> {
|
||||||
Some(DescriptorSecretKey::XPrv(self.clone()))
|
Some(DescriptorSecretKey::XPrv(self.clone()))
|
||||||
}
|
}
|
||||||
@ -285,6 +302,10 @@ impl Signer for PrivateKey {
|
|||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn id(&self, secp: &SecpCtx) -> SignerId {
|
||||||
|
SignerId::from(self.public_key(secp).to_pubkeyhash())
|
||||||
|
}
|
||||||
|
|
||||||
fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> {
|
fn descriptor_secret_key(&self) -> Option<DescriptorSecretKey> {
|
||||||
Some(DescriptorSecretKey::SinglePriv(DescriptorSinglePriv {
|
Some(DescriptorSecretKey::SinglePriv(DescriptorSinglePriv {
|
||||||
key: *self,
|
key: *self,
|
||||||
@ -345,12 +366,7 @@ impl From<KeyMap> for SignersContainer {
|
|||||||
for (_, secret) in keymap {
|
for (_, secret) in keymap {
|
||||||
match secret {
|
match secret {
|
||||||
DescriptorSecretKey::SinglePriv(private_key) => container.add_external(
|
DescriptorSecretKey::SinglePriv(private_key) => container.add_external(
|
||||||
SignerId::from(
|
SignerId::from(private_key.key.public_key(&secp).to_pubkeyhash()),
|
||||||
private_key
|
|
||||||
.key
|
|
||||||
.public_key(&Secp256k1::signing_only())
|
|
||||||
.to_pubkeyhash(),
|
|
||||||
),
|
|
||||||
SignerOrdering::default(),
|
SignerOrdering::default(),
|
||||||
Arc::new(private_key.key),
|
Arc::new(private_key.key),
|
||||||
),
|
),
|
||||||
@ -650,6 +666,10 @@ mod signers_container_tests {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn id(&self, _secp: &SecpCtx) -> SignerId {
|
||||||
|
SignerId::Dummy(42)
|
||||||
|
}
|
||||||
|
|
||||||
fn sign_whole_tx(&self) -> bool {
|
fn sign_whole_tx(&self) -> bool {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user