Skip to content

Commit 901bf21

Browse files
committed
Implement scantxoutset method and test
1 parent 1aabd27 commit 901bf21

File tree

31 files changed

+454
-38
lines changed

31 files changed

+454
-38
lines changed

client/src/client_sync/v17/blockchain.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,30 @@ macro_rules! impl_client_v17__savemempool {
318318
};
319319
}
320320

321+
/// Implements Bitcoin Core JSON-RPC API method `scantxoutset`
322+
#[macro_export]
323+
macro_rules! impl_client_v17__scantxoutset {
324+
() => {
325+
impl Client {
326+
pub fn scan_tx_out_set(
327+
&self,
328+
action: ScanAction,
329+
scan_objects: &[ScanObject],
330+
) -> Result<ScanTxOutSet> {
331+
let params = match action {
332+
ScanAction::Start => {
333+
vec![into_json(action)?, into_json(scan_objects)?]
334+
}
335+
ScanAction::Abort | ScanAction::Status => {
336+
vec![into_json(action)?]
337+
}
338+
};
339+
self.call("scantxoutset", &params)
340+
}
341+
}
342+
};
343+
}
344+
321345
/// Implements Bitcoin Core JSON-RPC API method `verifychain`
322346
#[macro_export]
323347
macro_rules! impl_client_v17__verifychain {

client/src/client_sync/v17/mod.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ crate::impl_client_v17__gettxoutsetinfo!();
4848
crate::impl_client_v17__preciousblock!();
4949
crate::impl_client_v17__pruneblockchain!();
5050
crate::impl_client_v17__savemempool!();
51+
crate::impl_client_v17__scantxoutset!();
5152
crate::impl_client_v17__verifychain!();
5253
crate::impl_client_v17__verifytxoutproof!();
5354

@@ -214,3 +215,24 @@ pub struct WalletCreateFundedPsbtInput {
214215
txid: Txid,
215216
vout: u32,
216217
}
218+
219+
/// Args for the `scantxoutset`
220+
///
221+
/// Represents the action for the `scantxoutset` RPC call.
222+
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
223+
#[serde(rename_all = "lowercase")]
224+
pub enum ScanAction {
225+
Start,
226+
Abort,
227+
Status,
228+
}
229+
230+
/// Represents a scan object for scantxoutset (descriptor string or object).
231+
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
232+
#[serde(untagged)]
233+
pub enum ScanObject {
234+
/// Plain descriptor string
235+
Descriptor(String),
236+
/// Object containing descriptor and optional range
237+
WithDesc { desc: String },
238+
}

client/src/client_sync/v18/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ use crate::types::v18::*;
1919

2020
#[rustfmt::skip] // Keep public re-exports separate.
2121
pub use crate::client_sync::{
22-
v17::{AddressType, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
22+
v17::{
23+
AddressType, Input, Output, ScanAction, ScanObject, TemplateRequest,
24+
TemplateRules, WalletCreateFundedPsbtInput
25+
},
2326
};
2427

2528
// This publicly re-exports `Client`.
@@ -48,6 +51,7 @@ crate::impl_client_v17__gettxoutsetinfo!();
4851
crate::impl_client_v17__preciousblock!();
4952
crate::impl_client_v17__pruneblockchain!();
5053
crate::impl_client_v17__savemempool!();
54+
crate::impl_client_v17__scantxoutset!();
5155
crate::impl_client_v17__verifychain!();
5256
crate::impl_client_v17__verifytxoutproof!();
5357

client/src/client_sync/v19/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ use crate::types::v19::*;
1818

1919
#[rustfmt::skip] // Keep public re-exports separate.
2020
pub use crate::client_sync::{
21-
v17::{AddressType, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
21+
v17::{
22+
AddressType, Input, Output, ScanAction, ScanObject, TemplateRequest,
23+
TemplateRules, WalletCreateFundedPsbtInput
24+
},
2225
};
2326

2427
crate::define_jsonrpc_minreq_client!("v19");
@@ -47,6 +50,7 @@ crate::impl_client_v17__gettxoutsetinfo!();
4750
crate::impl_client_v17__preciousblock!();
4851
crate::impl_client_v17__pruneblockchain!();
4952
crate::impl_client_v17__savemempool!();
53+
crate::impl_client_v17__scantxoutset!();
5054
crate::impl_client_v17__verifychain!();
5155
crate::impl_client_v17__verifytxoutproof!();
5256

client/src/client_sync/v20.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ use crate::types::v20::*;
1515

1616
#[rustfmt::skip] // Keep public re-exports separate.
1717
pub use crate::client_sync::{
18-
v17::{AddressType, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
18+
v17::{
19+
AddressType, Input, Output, ScanAction, ScanObject, TemplateRequest,
20+
TemplateRules, WalletCreateFundedPsbtInput
21+
},
1922
};
2023

2124
crate::define_jsonrpc_minreq_client!("v20");
@@ -44,6 +47,7 @@ crate::impl_client_v17__gettxoutsetinfo!();
4447
crate::impl_client_v17__preciousblock!();
4548
crate::impl_client_v17__pruneblockchain!();
4649
crate::impl_client_v17__savemempool!();
50+
crate::impl_client_v17__scantxoutset!();
4751
crate::impl_client_v17__verifychain!();
4852
crate::impl_client_v17__verifytxoutproof!();
4953

client/src/client_sync/v21/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ use crate::types::v21::*;
1717

1818
#[rustfmt::skip] // Keep public re-exports separate.
1919
pub use crate::client_sync::{
20-
v17::{AddressType, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
20+
v17::{
21+
AddressType, Input, Output, ScanAction, ScanObject, TemplateRequest,
22+
TemplateRules, WalletCreateFundedPsbtInput
23+
},
2124
};
2225

2326
crate::define_jsonrpc_minreq_client!("v21");
@@ -46,6 +49,7 @@ crate::impl_client_v17__gettxoutsetinfo!();
4649
crate::impl_client_v17__preciousblock!();
4750
crate::impl_client_v17__pruneblockchain!();
4851
crate::impl_client_v17__savemempool!();
52+
crate::impl_client_v17__scantxoutset!();
4953
crate::impl_client_v17__verifychain!();
5054
crate::impl_client_v17__verifytxoutproof!();
5155

client/src/client_sync/v22/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ use crate::types::v22::*;
1717

1818
#[rustfmt::skip] // Keep public re-exports separate.
1919
pub use crate::client_sync::{
20-
v17::{AddressType, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
20+
v17::{
21+
AddressType, Input, Output, ScanAction, ScanObject, TemplateRequest,
22+
TemplateRules, WalletCreateFundedPsbtInput
23+
},
2124
};
2225

2326
crate::define_jsonrpc_minreq_client!("v22");
@@ -46,6 +49,7 @@ crate::impl_client_v17__gettxoutsetinfo!();
4649
crate::impl_client_v17__preciousblock!();
4750
crate::impl_client_v17__pruneblockchain!();
4851
crate::impl_client_v17__savemempool!();
52+
crate::impl_client_v17__scantxoutset!();
4953
crate::impl_client_v17__verifychain!();
5054
crate::impl_client_v17__verifytxoutproof!();
5155

client/src/client_sync/v23/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ use crate::types::v23::*;
1919

2020
#[rustfmt::skip] // Keep public re-exports separate.
2121
pub use crate::client_sync::{
22-
v17::{Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
22+
v17::{
23+
Input, Output, ScanAction, ScanObject, TemplateRequest,
24+
TemplateRules, WalletCreateFundedPsbtInput
25+
},
2326
};
2427

2528
crate::define_jsonrpc_minreq_client!("v23");
@@ -48,6 +51,7 @@ crate::impl_client_v17__gettxoutsetinfo!();
4851
crate::impl_client_v17__preciousblock!();
4952
crate::impl_client_v17__pruneblockchain!();
5053
crate::impl_client_v23__savemempool!();
54+
crate::impl_client_v17__scantxoutset!();
5155
crate::impl_client_v17__verifychain!();
5256
crate::impl_client_v17__verifytxoutproof!();
5357

client/src/client_sync/v24.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ use crate::types::v24::*;
1515

1616
#[rustfmt::skip] // Keep public re-exports separate.
1717
pub use crate::client_sync::{
18-
v17::{Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
18+
v17::{
19+
Input, Output, ScanAction, ScanObject, TemplateRequest, TemplateRules,
20+
WalletCreateFundedPsbtInput
21+
},
1922
v23::AddressType,
2023
};
2124

@@ -45,6 +48,7 @@ crate::impl_client_v17__gettxoutsetinfo!();
4548
crate::impl_client_v17__preciousblock!();
4649
crate::impl_client_v17__pruneblockchain!();
4750
crate::impl_client_v23__savemempool!();
51+
crate::impl_client_v17__scantxoutset!();
4852
crate::impl_client_v17__verifychain!();
4953
crate::impl_client_v17__verifytxoutproof!();
5054

client/src/client_sync/v25.rs renamed to client/src/client_sync/v25/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ use crate::types::v25::*;
1515

1616
#[rustfmt::skip] // Keep public re-exports separate.
1717
pub use crate::client_sync::{
18-
v17::{Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
18+
v17::{
19+
Input, Output, ScanAction, ScanObject, TemplateRequest, TemplateRules,
20+
WalletCreateFundedPsbtInput
21+
},
1922
v23::AddressType,
2023
};
2124

@@ -45,6 +48,7 @@ crate::impl_client_v17__gettxoutsetinfo!();
4548
crate::impl_client_v17__preciousblock!();
4649
crate::impl_client_v17__pruneblockchain!();
4750
crate::impl_client_v23__savemempool!();
51+
crate::impl_client_v17__scantxoutset!();
4852
crate::impl_client_v17__verifychain!();
4953
crate::impl_client_v17__verifytxoutproof!();
5054

0 commit comments

Comments
 (0)