Skip to content

Commit 6ac1280

Browse files
committed
Merge #254: Implement importaddress method and test
859ec74 Implement importaddress method and test (GideonBature) Pull request description: The JSON-RPC method `importaddress` does return null. We want to test this to catch any changes in behavior in future Core versions. This PR adds a client function that errors if the return value is anything other than `null`, along with an integration test that calls this function. Ref: [#116](#116) ACKs for top commit: jamillambert: ACK 859ec74 tcharding: ACK 859ec74 Tree-SHA512: 1a4c4eceba4f7e7adb2928b50ea7ce42116388522874df2eb4179b7330370376f8f9db0b91b6f71633258a0ea5a95292221a0f2d6e162b2a44dd14fff72b9b10
2 parents b518425 + 859ec74 commit 6ac1280

File tree

15 files changed

+53
-0
lines changed

15 files changed

+53
-0
lines changed

client/src/client_sync/v17/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ crate::impl_client_v17__get_received_by_address!();
127127
crate::impl_client_v17__get_transaction!();
128128
crate::impl_client_v17__get_unconfirmed_balance!();
129129
crate::impl_client_v17__get_wallet_info!();
130+
crate::impl_client_v17__import_address!();
130131
crate::impl_client_v17__import_privkey!();
131132
crate::impl_client_v17__list_address_groupings!();
132133
crate::impl_client_v17__list_labels!();

client/src/client_sync/v17/wallet.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,22 @@ macro_rules! impl_client_v17__get_wallet_info {
282282
};
283283
}
284284

285+
/// Implements Bitcoin Core JSON-RPC API method `importaddress`.
286+
#[macro_export]
287+
macro_rules! impl_client_v17__import_address {
288+
() => {
289+
impl Client {
290+
pub fn import_address(&self, address: &Address) -> Result<()> {
291+
match self.call("importaddress", &[into_json(address)?]) {
292+
Ok(serde_json::Value::Null) => Ok(()),
293+
Ok(res) => Err(Error::Returned(res.to_string())),
294+
Err(err) => Err(err.into()),
295+
}
296+
}
297+
}
298+
};
299+
}
300+
285301
/// Implements Bitcoin Core JSON-RPC API method `importprivkey`.
286302
#[macro_export]
287303
macro_rules! impl_client_v17__import_privkey {

client/src/client_sync/v18/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ crate::impl_client_v18__get_received_by_label!();
142142
crate::impl_client_v17__get_transaction!();
143143
crate::impl_client_v17__get_unconfirmed_balance!();
144144
crate::impl_client_v17__get_wallet_info!();
145+
crate::impl_client_v17__import_address!();
145146
crate::impl_client_v17__import_privkey!();
146147
crate::impl_client_v17__list_address_groupings!();
147148
crate::impl_client_v17__list_labels!();

client/src/client_sync/v19/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ crate::impl_client_v17__get_received_by_address!();
138138
crate::impl_client_v17__get_transaction!();
139139
crate::impl_client_v17__get_unconfirmed_balance!();
140140
crate::impl_client_v17__get_wallet_info!();
141+
crate::impl_client_v17__import_address!();
141142
crate::impl_client_v17__import_privkey!();
142143
crate::impl_client_v17__list_address_groupings!();
143144
crate::impl_client_v18__list_received_by_label!();

client/src/client_sync/v20/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ crate::impl_client_v17__get_received_by_address!();
135135
crate::impl_client_v17__get_transaction!();
136136
crate::impl_client_v17__get_unconfirmed_balance!();
137137
crate::impl_client_v17__get_wallet_info!();
138+
crate::impl_client_v17__import_address!();
138139
crate::impl_client_v17__import_privkey!();
139140
crate::impl_client_v17__list_address_groupings!();
140141
crate::impl_client_v17__list_labels!();

client/src/client_sync/v21/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ crate::impl_client_v17__get_received_by_address!();
137137
crate::impl_client_v17__get_transaction!();
138138
crate::impl_client_v17__get_unconfirmed_balance!();
139139
crate::impl_client_v17__get_wallet_info!();
140+
crate::impl_client_v17__import_address!();
140141
crate::impl_client_v17__import_privkey!();
141142
crate::impl_client_v17__list_address_groupings!();
142143
crate::impl_client_v17__list_labels!();

client/src/client_sync/v22/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ crate::impl_client_v17__get_received_by_address!();
137137
crate::impl_client_v17__get_transaction!();
138138
crate::impl_client_v17__get_unconfirmed_balance!();
139139
crate::impl_client_v17__get_wallet_info!();
140+
crate::impl_client_v17__import_address!();
140141
crate::impl_client_v17__import_privkey!();
141142
crate::impl_client_v17__list_address_groupings!();
142143
crate::impl_client_v18__list_received_by_label!();

client/src/client_sync/v23/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ crate::impl_client_v17__get_received_by_address!();
139139
crate::impl_client_v17__get_transaction!();
140140
crate::impl_client_v17__get_unconfirmed_balance!();
141141
crate::impl_client_v17__get_wallet_info!();
142+
crate::impl_client_v17__import_address!();
142143
crate::impl_client_v17__import_privkey!();
143144
crate::impl_client_v17__list_address_groupings!();
144145
crate::impl_client_v18__list_received_by_label!();

client/src/client_sync/v24/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ crate::impl_client_v17__get_received_by_address!();
136136
crate::impl_client_v17__get_transaction!();
137137
crate::impl_client_v17__get_unconfirmed_balance!();
138138
crate::impl_client_v17__get_wallet_info!();
139+
crate::impl_client_v17__import_address!();
139140
crate::impl_client_v17__import_privkey!();
140141
crate::impl_client_v17__list_address_groupings!();
141142
crate::impl_client_v18__list_received_by_label!();

client/src/client_sync/v25/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ crate::impl_client_v17__get_received_by_address!();
136136
crate::impl_client_v17__get_transaction!();
137137
crate::impl_client_v17__get_unconfirmed_balance!();
138138
crate::impl_client_v17__get_wallet_info!();
139+
crate::impl_client_v17__import_address!();
139140
crate::impl_client_v17__import_privkey!();
140141
crate::impl_client_v17__list_address_groupings!();
141142
crate::impl_client_v18__list_received_by_label!();

client/src/client_sync/v26/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ crate::impl_client_v17__get_received_by_address!();
142142
crate::impl_client_v17__get_transaction!();
143143
crate::impl_client_v17__get_unconfirmed_balance!();
144144
crate::impl_client_v17__get_wallet_info!();
145+
crate::impl_client_v17__import_address!();
145146
crate::impl_client_v17__import_privkey!();
146147
crate::impl_client_v17__list_address_groupings!();
147148
crate::impl_client_v17__list_labels!();

client/src/client_sync/v27/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ crate::impl_client_v17__get_received_by_address!();
138138
crate::impl_client_v17__get_transaction!();
139139
crate::impl_client_v17__get_unconfirmed_balance!();
140140
crate::impl_client_v17__get_wallet_info!();
141+
crate::impl_client_v17__import_address!();
141142
crate::impl_client_v17__import_privkey!();
142143
crate::impl_client_v17__list_address_groupings!();
143144
crate::impl_client_v18__list_received_by_label!();

client/src/client_sync/v28/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ crate::impl_client_v17__get_received_by_address!();
140140
crate::impl_client_v17__get_transaction!();
141141
crate::impl_client_v17__get_unconfirmed_balance!();
142142
crate::impl_client_v17__get_wallet_info!();
143+
crate::impl_client_v17__import_address!();
143144
crate::impl_client_v17__import_privkey!();
144145
crate::impl_client_v17__list_address_groupings!();
145146
crate::impl_client_v18__list_received_by_label!();

client/src/client_sync/v29/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ crate::impl_client_v17__get_received_by_address!();
140140
crate::impl_client_v17__get_transaction!();
141141
crate::impl_client_v17__get_unconfirmed_balance!();
142142
crate::impl_client_v17__get_wallet_info!();
143+
crate::impl_client_v17__import_address!();
143144
crate::impl_client_v17__import_privkey!();
144145
crate::impl_client_v17__list_address_groupings!();
145146
crate::impl_client_v18__list_received_by_label!();

integration_test/tests/wallet.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,30 @@ fn wallet__get_transaction__modelled() {
286286
model.unwrap();
287287
}
288288

289+
#[test]
290+
fn wallet__import_address() {
291+
let node = match () {
292+
#[cfg(feature = "v22_and_below")]
293+
() => Node::with_wallet(Wallet::Default, &[]),
294+
#[cfg(not(feature = "v22_and_below"))]
295+
() => {
296+
let node = Node::with_wallet(Wallet::None, &["-deprecatedrpc=create_bdb"]);
297+
node.client.create_legacy_wallet("wallet_name").expect("createlegacywallet");
298+
node
299+
}
300+
};
301+
302+
let privkey =
303+
PrivateKey::from_wif("cVt4o7BGAig1UXywgGSmARhxMdzP5qvQsxKkSsc1XEkw3tDTQFpy").unwrap();
304+
305+
// Derive the address from the private key
306+
let secp = bitcoin::secp256k1::Secp256k1::new();
307+
let pubkey = privkey.public_key(&secp);
308+
let addr = bitcoin::Address::p2pkh(&pubkey, privkey.network);
309+
310+
node.client.import_address(&addr).expect("importaddress");
311+
}
312+
289313
#[cfg(not(feature = "v17"))]
290314
#[test]
291315
fn wallet__list_received_by_label__modelled() {

0 commit comments

Comments
 (0)