diff --git a/client-cli/src/command/address_command.rs b/client-cli/src/command/address_command.rs index c64eded79..531bdf2c8 100644 --- a/client-cli/src/command/address_command.rs +++ b/client-cli/src/command/address_command.rs @@ -139,7 +139,10 @@ impl AddressCommand { let pub_keys = match address_type { AddressType::Staking => wallet_client.staking_keys(name, &enckey)?, - AddressType::Transfer => wallet_client.public_keys(name, &enckey)?, + AddressType::Transfer => wallet_client + .public_keys(name, &enckey)? + .into_iter() + .collect(), }; for pubkey in pub_keys.iter() { println!("{}", pubkey); diff --git a/client-core/src/service/wallet_service.rs b/client-core/src/service/wallet_service.rs index be31feebf..74784dae5 100644 --- a/client-core/src/service/wallet_service.rs +++ b/client-core/src/service/wallet_service.rs @@ -22,9 +22,9 @@ pub struct Wallet { /// public keys to construct transfer addresses pub public_keys: BTreeSet, /// public keys of staking addresses - pub staking_keys: BTreeSet, + pub staking_keys: Vec, /// root hashes of multi-sig transfer addresses - pub root_hashes: BTreeSet, + pub root_hashes: Vec, } impl Wallet { @@ -39,7 +39,7 @@ impl Wallet { } /// Returns all staking addresses stored in a wallet - pub fn staking_addresses(&self) -> BTreeSet { + pub fn staking_addresses(&self) -> Vec { self.staking_keys .iter() .map(|public_key| StakedStateAddress::BasicRedeem(RedeemAddress::from(public_key))) @@ -47,7 +47,7 @@ impl Wallet { } /// Returns all tree addresses stored in a wallet - pub fn transfer_addresses(&self) -> BTreeSet { + pub fn transfer_addresses(&self) -> Vec { self.root_hashes .iter() .cloned() @@ -170,20 +170,17 @@ where /// Returns all public keys stored in a wallet pub fn public_keys(&self, name: &str, enckey: &SecKey) -> Result> { - let wallet = self.get_wallet(name, enckey)?; - Ok(wallet.public_keys) + Ok(self.get_wallet(name, enckey)?.public_keys) } /// Returns all public keys corresponding to staking addresses stored in a wallet - pub fn staking_keys(&self, name: &str, enckey: &SecKey) -> Result> { - let wallet = self.get_wallet(name, enckey)?; - Ok(wallet.staking_keys) + pub fn staking_keys(&self, name: &str, enckey: &SecKey) -> Result> { + Ok(self.get_wallet(name, enckey)?.staking_keys) } /// Returns all multi-sig addresses stored in a wallet - pub fn root_hashes(&self, name: &str, enckey: &SecKey) -> Result> { - let wallet = self.get_wallet(name, enckey)?; - Ok(wallet.root_hashes) + pub fn root_hashes(&self, name: &str, enckey: &SecKey) -> Result> { + Ok(self.get_wallet(name, enckey)?.root_hashes) } /// Returns all staking addresses stored in a wallet @@ -191,16 +188,12 @@ where &self, name: &str, enckey: &SecKey, - ) -> Result> { + ) -> Result> { Ok(self.get_wallet(name, enckey)?.staking_addresses()) } /// Returns all tree addresses stored in a wallet - pub fn transfer_addresses( - &self, - name: &str, - enckey: &SecKey, - ) -> Result> { + pub fn transfer_addresses(&self, name: &str, enckey: &SecKey) -> Result> { Ok(self.get_wallet(name, enckey)?.transfer_addresses()) } @@ -224,7 +217,7 @@ where staking_key: &PublicKey, ) -> Result<()> { self.modify_wallet(name, enckey, move |wallet| { - wallet.staking_keys.insert(staking_key.clone()); + wallet.staking_keys.push(staking_key.clone()); }) } @@ -255,7 +248,7 @@ where /// Adds a multi-sig address to given wallet pub fn add_root_hash(&self, name: &str, enckey: &SecKey, root_hash: H256) -> Result<()> { self.modify_wallet(name, enckey, move |wallet| { - wallet.root_hashes.insert(root_hash); + wallet.root_hashes.push(root_hash); }) } diff --git a/client-core/src/wallet.rs b/client-core/src/wallet.rs index ab0a8523f..886124ab0 100644 --- a/client-core/src/wallet.rs +++ b/client-core/src/wallet.rs @@ -73,20 +73,16 @@ pub trait WalletClient: Send + Sync { fn public_keys(&self, name: &str, enckey: &SecKey) -> Result>; /// Retrieves all public keys corresponding to staking addresses stored in given wallet - fn staking_keys(&self, name: &str, enckey: &SecKey) -> Result>; + fn staking_keys(&self, name: &str, enckey: &SecKey) -> Result>; /// Retrieves all root hashes corresponding to given wallet - fn root_hashes(&self, name: &str, enckey: &SecKey) -> Result>; + fn root_hashes(&self, name: &str, enckey: &SecKey) -> Result>; /// Returns all staking addresses in current wallet - fn staking_addresses( - &self, - name: &str, - enckey: &SecKey, - ) -> Result>; + fn staking_addresses(&self, name: &str, enckey: &SecKey) -> Result>; /// Returns all the multi-sig transfer addresses in current wallet - fn transfer_addresses(&self, name: &str, enckey: &SecKey) -> Result>; + fn transfer_addresses(&self, name: &str, enckey: &SecKey) -> Result>; /// Finds staking key corresponding to given redeem address fn find_staking_key( diff --git a/client-core/src/wallet/default_wallet_client.rs b/client-core/src/wallet/default_wallet_client.rs index 375e70b51..2e5691614 100644 --- a/client-core/src/wallet/default_wallet_client.rs +++ b/client-core/src/wallet/default_wallet_client.rs @@ -247,26 +247,22 @@ where } #[inline] - fn staking_keys(&self, name: &str, enckey: &SecKey) -> Result> { + fn staking_keys(&self, name: &str, enckey: &SecKey) -> Result> { self.wallet_service.staking_keys(name, enckey) } #[inline] - fn root_hashes(&self, name: &str, enckey: &SecKey) -> Result> { + fn root_hashes(&self, name: &str, enckey: &SecKey) -> Result> { self.wallet_service.root_hashes(name, enckey) } #[inline] - fn staking_addresses( - &self, - name: &str, - enckey: &SecKey, - ) -> Result> { + fn staking_addresses(&self, name: &str, enckey: &SecKey) -> Result> { self.wallet_service.staking_addresses(name, enckey) } #[inline] - fn transfer_addresses(&self, name: &str, enckey: &SecKey) -> Result> { + fn transfer_addresses(&self, name: &str, enckey: &SecKey) -> Result> { self.wallet_service.transfer_addresses(name, enckey) } diff --git a/client-core/src/wallet/syncer.rs b/client-core/src/wallet/syncer.rs index 7943b8ba9..b079b2aa4 100644 --- a/client-core/src/wallet/syncer.rs +++ b/client-core/src/wallet/syncer.rs @@ -1,7 +1,6 @@ #![allow(missing_docs)] use itertools::{izip, Itertools}; use non_empty_vec::NonEmpty; -use std::collections::BTreeSet; use std::sync::mpsc::Sender; use chain_core::common::H256; @@ -531,7 +530,7 @@ impl FilteredBlock { fn filter_staking_transactions( block_results: &BlockResults, - staking_addresses: &BTreeSet, + staking_addresses: &[StakedStateAddress], block: &Block, ) -> Result> { for staking_address in staking_addresses { diff --git a/client-rpc/src/rpc/wallet_rpc.rs b/client-rpc/src/rpc/wallet_rpc.rs index 9107ee05c..760808927 100644 --- a/client-rpc/src/rpc/wallet_rpc.rs +++ b/client-rpc/src/rpc/wallet_rpc.rs @@ -74,10 +74,10 @@ pub trait WalletRpc: Send + Sync { fn list_public_keys(&self, request: WalletRequest) -> Result>; #[rpc(name = "wallet_listStakingAddresses")] - fn list_staking_addresses(&self, request: WalletRequest) -> Result>; + fn list_staking_addresses(&self, request: WalletRequest) -> Result>; #[rpc(name = "wallet_listTransferAddresses")] - fn list_transfer_addresses(&self, request: WalletRequest) -> Result>; + fn list_transfer_addresses(&self, request: WalletRequest) -> Result>; #[rpc(name = "wallet_listUTxO")] fn list_utxo(&self, request: WalletRequest) -> Result; @@ -275,14 +275,14 @@ where .map_err(to_rpc_error) } - fn list_staking_addresses(&self, request: WalletRequest) -> Result> { + fn list_staking_addresses(&self, request: WalletRequest) -> Result> { self.client .staking_addresses(&request.name, &request.enckey) .map(|addresses| addresses.iter().map(ToString::to_string).collect()) .map_err(to_rpc_error) } - fn list_transfer_addresses(&self, request: WalletRequest) -> Result> { + fn list_transfer_addresses(&self, request: WalletRequest) -> Result> { self.client .transfer_addresses(&request.name, &request.enckey) .map(|addresses| addresses.iter().map(ToString::to_string).collect())