From b9ad093d06fc11f1dba8d30d5986a4aa8dd93cbe Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Thu, 20 Jul 2017 13:15:16 +0300 Subject: [PATCH] moved parsing to KeyServerSet --- secret_store/src/key_server_set.rs | 22 ++++++++++++++-------- secret_store/src/lib.rs | 4 +--- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/secret_store/src/key_server_set.rs b/secret_store/src/key_server_set.rs index 6b58e54de..302f76196 100644 --- a/secret_store/src/key_server_set.rs +++ b/secret_store/src/key_server_set.rs @@ -23,7 +23,7 @@ use ethcore::filter::Filter; use ethcore::client::{Client, BlockChainClient, BlockId, ChainNotify}; use native_contracts::KeyServerSet as KeyServerSetContract; use util::{H256, Address, Bytes, Hashable}; -use types::all::Public; +use types::all::{Error, Public, NodeAddress}; const KEY_SERVER_SET_CONTRACT_REGISTRY_NAME: &'static str = "secretstore_server_set"; @@ -60,8 +60,8 @@ struct CachedContract { } impl OnChainKeyServerSet { - pub fn new(client: &Arc, key_servers: BTreeMap) -> Arc { - let mut cached_contract = CachedContract::new(client, key_servers); + pub fn new(client: &Arc, key_servers: BTreeMap) -> Result, Error> { + let mut cached_contract = CachedContract::new(client, key_servers)?; let key_server_contract_address = client.registry_address(KEY_SERVER_SET_CONTRACT_REGISTRY_NAME.to_owned()); // only initialize from contract if it is installed. otherwise - use default nodes // once the contract is installed, all default nodes are lost (if not in the contract' set) @@ -73,7 +73,7 @@ impl OnChainKeyServerSet { contract: Mutex::new(cached_contract), }); client.add_notify(key_server_set.clone()); - key_server_set + Ok(key_server_set) } } @@ -90,12 +90,18 @@ impl ChainNotify for OnChainKeyServerSet { } impl CachedContract { - pub fn new(client: &Arc, key_servers: BTreeMap) -> Self { - CachedContract { + pub fn new(client: &Arc, key_servers: BTreeMap) -> Result { + Ok(CachedContract { client: Arc::downgrade(client), contract_addr: None, - key_servers: key_servers, - } + key_servers: key_servers.into_iter() + .map(|(p, addr)| { + let addr = format!("{}:{}", addr.address, addr.port).parse() + .map_err(|err| Error::Internal(format!("error parsing node address: {}", err)))?; + Ok((p, addr)) + }) + .collect::, Error>>()?, + }) } pub fn update(&mut self, enacted: Vec, retracted: Vec) { diff --git a/secret_store/src/lib.rs b/secret_store/src/lib.rs index 235d0edd9..9750f7223 100644 --- a/secret_store/src/lib.rs +++ b/secret_store/src/lib.rs @@ -72,9 +72,7 @@ pub fn start(client: Arc, config: ServiceConfiguration) -> Result