From ea7746e3cd2e71e399da13faa663de670503ba9d Mon Sep 17 00:00:00 2001 From: ghassmo Date: Wed, 5 Jan 2022 01:21:08 +0400 Subject: [PATCH] darkfid: implement get_keys rpc function to return all saved addresses --- src/bin/darkfid.rs | 28 +++++++++++++++++++++++----- src/bin/drk.rs | 8 ++++++-- src/client.rs | 4 ++++ 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/bin/darkfid.rs b/src/bin/darkfid.rs index 1869bc6b6..3e22d211c 100644 --- a/src/bin/darkfid.rs +++ b/src/bin/darkfid.rs @@ -170,12 +170,30 @@ impl Darkfid { // --> {"method": "get_keys", "params": []} // <-- {"result": "[vdNS7oBj7KvsMWWmo9r96SV4SqATLrGsH2a3PGpCfJC, ... ]"} + // Note: the first address in the returned vector is the default address async fn get_keys(&self, id: Value, _params: Value) -> JsonResult { - match self.client.lock().await.get_keypairs().await { - Ok(_) => { - // TODO - JsonResult::Resp(jsonresp(json!(vec!["ADDRESS", "ADDRESS"]), id)) - } + let result: Result> = async { + let keypairs = self.client.lock().await.get_keypairs().await?; + let default_keypair = self.client.lock().await.get_default_keypair().await?; + + let mut addresses: Vec = keypairs + .iter() + .filter_map(|k| { + if *k == default_keypair { + return None + } + Some(Address::from(k.public).to_string()) + }) + .collect(); + + addresses.insert(0, Address::from(default_keypair.public).to_string()); + + Ok(addresses) + } + .await; + + match result { + Ok(addresses) => JsonResult::Resp(jsonresp(json!(addresses), id)), Err(err) => JsonResult::Err(jsonerr(ServerError(-32003), Some(err.to_string()), id)), } } diff --git a/src/bin/drk.rs b/src/bin/drk.rs index f8c26d843..4e3665687 100644 --- a/src/bin/drk.rs +++ b/src/bin/drk.rs @@ -232,8 +232,12 @@ async fn start(config: &DrkConfig, options: CliDrk) -> Result<()> { let reply = client.get_keys().await?; println!("Wallet addresses: "); if reply.as_array().is_some() { - for address in reply.as_array().unwrap() { - println!("- {}", address); + for (i, address) in reply.as_array().unwrap().iter().enumerate() { + if i == 0 { + println!("- [X] {}", address); + } else { + println!("- [ ] {}", address); + } } } else { println!("Empty!!",); diff --git a/src/client.rs b/src/client.rs index d7854ec6a..6d8a5369e 100644 --- a/src/client.rs +++ b/src/client.rs @@ -384,6 +384,10 @@ impl Client { self.wallet.get_keypairs().await } + pub async fn get_default_keypair(&self) -> Result { + self.wallet.get_default_keypair().await + } + pub async fn key_gen(&self) -> Result<()> { self.wallet.key_gen().await }