moved parsing to KeyServerSet
This commit is contained in:
parent
a35db9f454
commit
b9ad093d06
@ -23,7 +23,7 @@ use ethcore::filter::Filter;
|
|||||||
use ethcore::client::{Client, BlockChainClient, BlockId, ChainNotify};
|
use ethcore::client::{Client, BlockChainClient, BlockId, ChainNotify};
|
||||||
use native_contracts::KeyServerSet as KeyServerSetContract;
|
use native_contracts::KeyServerSet as KeyServerSetContract;
|
||||||
use util::{H256, Address, Bytes, Hashable};
|
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";
|
const KEY_SERVER_SET_CONTRACT_REGISTRY_NAME: &'static str = "secretstore_server_set";
|
||||||
|
|
||||||
@ -60,8 +60,8 @@ struct CachedContract {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl OnChainKeyServerSet {
|
impl OnChainKeyServerSet {
|
||||||
pub fn new(client: &Arc<Client>, key_servers: BTreeMap<Public, SocketAddr>) -> Arc<Self> {
|
pub fn new(client: &Arc<Client>, key_servers: BTreeMap<Public, NodeAddress>) -> Result<Arc<Self>, Error> {
|
||||||
let mut cached_contract = CachedContract::new(client, key_servers);
|
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());
|
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
|
// 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)
|
// 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),
|
contract: Mutex::new(cached_contract),
|
||||||
});
|
});
|
||||||
client.add_notify(key_server_set.clone());
|
client.add_notify(key_server_set.clone());
|
||||||
key_server_set
|
Ok(key_server_set)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,12 +90,18 @@ impl ChainNotify for OnChainKeyServerSet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl CachedContract {
|
impl CachedContract {
|
||||||
pub fn new(client: &Arc<Client>, key_servers: BTreeMap<Public, SocketAddr>) -> Self {
|
pub fn new(client: &Arc<Client>, key_servers: BTreeMap<Public, NodeAddress>) -> Result<Self, Error> {
|
||||||
CachedContract {
|
Ok(CachedContract {
|
||||||
client: Arc::downgrade(client),
|
client: Arc::downgrade(client),
|
||||||
contract_addr: None,
|
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::<Result<BTreeMap<_, _>, Error>>()?,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn update(&mut self, enacted: Vec<H256>, retracted: Vec<H256>) {
|
pub fn update(&mut self, enacted: Vec<H256>, retracted: Vec<H256>) {
|
||||||
|
@ -72,9 +72,7 @@ pub fn start(client: Arc<Client>, config: ServiceConfiguration) -> Result<Box<Ke
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
let acl_storage = acl_storage::OnChainAclStorage::new(&client);
|
let acl_storage = acl_storage::OnChainAclStorage::new(&client);
|
||||||
let key_server_set = key_server_set::OnChainKeyServerSet::new(&client, config.cluster_config.nodes.clone()
|
let key_server_set = key_server_set::OnChainKeyServerSet::new(&client, config.cluster_config.nodes.clone())?;
|
||||||
.into_iter()
|
|
||||||
.map(|a| (a.0, format!("{}:{}", a.1.address, a.1.port).parse().unwrap())).collect()); // TODO: remove after switching to enode:///
|
|
||||||
let key_storage = Arc::new(key_storage::PersistentKeyStorage::new(&config)?);
|
let key_storage = Arc::new(key_storage::PersistentKeyStorage::new(&config)?);
|
||||||
let key_server = key_server::KeyServerImpl::new(&config.cluster_config, key_server_set, acl_storage, key_storage)?;
|
let key_server = key_server::KeyServerImpl::new(&config.cluster_config, key_server_set, acl_storage, key_storage)?;
|
||||||
let listener = http_listener::KeyServerHttpListener::start(&config.listener_address, key_server)?;
|
let listener = http_listener::KeyServerHttpListener::start(&config.listener_address, key_server)?;
|
||||||
|
Loading…
Reference in New Issue
Block a user